ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDhmYWE2YzAuLjVkNTZhM2YgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMjgsNiArMjgsNyBAQAogKi5negogKi5iejIKICoubHptYQorKi54egogKi5sem8KICoucGF0Y2gKICouZ2NubwpkaWZmIC0tZ2l0IGEvLm1haWxtYXAgYi8ubWFpbG1hcAppbmRleCA1ODFmZDM5Li4xZWJhMjhhIDEwMDY0NAotLS0gYS8ubWFpbG1hcAorKysgYi8ubWFpbG1hcApAQCAtMjMsNiArMjMsNyBAQAogQXJuYXVkIFBhdGFyZCA8YXJuYXVkLnBhdGFyZEBydHAtbmV0Lm9yZz4KIEFybmQgQmVyZ21hbm4gPGFybmRAYXJuZGIuZGU+CiBBeGVsIER5a3MgPHhsQHhsc2lnbmVkLm5ldD4KK0F4ZWwgTGluIDxheGVsLmxpbkBnbWFpbC5jb20+CiBCZW4gR2FyZG5lciA8YmdhcmRuZXJAd2FidGVjLmNvbT4KIEJlbiBNIENhaGlsbCA8YmVuLm0uY2FoaWxsQGludGVsLmNvbT4KIEJqw7ZybiBTdGVpbmJyaW5rIDxCLlN0ZWluYnJpbmtAZ214LmRlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1hdDkxIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1hdDkxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzZhODYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWF0OTEKQEAgLTAsMCArMSwyNSBAQAorV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hdDkxX2Nhbi9uZXQvPGlmYWNlPi9tYjBfaWQKK0RhdGU6CQlKYW51YXJ5IDIwMTEKK0tlcm5lbFZlcnNpb246CTIuNi4zOAorQ29udGFjdDoJTWFyYyBLbGVpbmUtQnVkZGUgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KK0Rlc2NyaXB0aW9uOgorCQlWYWx1ZSByZXByZXNlbnRpbmcgdGhlIGNhbl9pZCBvZiBtYWlsYm94IDAuCisKKwkJRGVmYXVsdDogMHg3ZmYgKHN0YW5kYXJkIGZyYW1lKQorCisJCUR1ZSB0byBhIGNoaXAgYnVnIChlcnJhdGEgNTAuMi42LjMgJiA1MC4zLjUuMyBpbgorCQkiQVQ5MVNBTTkyNjMgUHJlbGltaW5hcnkgNjI0OUgtQVRBUk0tMjctSnVsLTA5IikgdGhlCisJCWNvbnRlbnRzIG9mIG1haWxib3ggMCBtYXkgYmUgc2VuZCB1bmRlciBjZXJ0YWluCisJCWNvbmRpdGlvbnMgKGV2ZW4gaWYgZGlzYWJsZWQgb3IgaW4gcnggbW9kZSkuCisKKwkJVGhlIHdvcmthcm91bmQgaW4gdGhlIGVycmF0YSBzdWdnZXN0cyBub3QgdG8gdXNlIHRoZQorCQltYWlsYm94IGFuZCBsb2FkIGl0IHdpdGggYW4gdW51c2VkIGlkZW50aWZpZXIuCisKKwkJSW4gb3JkZXIgdG8gdXNlIGFuIGV4dGVuZGVkIGNhbl9pZCBhZGQgdGhlCisJCUNBTl9FRkZfRkxBRyAoMHg4MDAwMDAwMFUpIHRvIHRoZSBjYW5faWQuIEV4YW1wbGU6CisKKwkJLSBzdGFuZGFyZCBpZCAweDdmZjoKKwkJZWNobyAweDdmZiAgICAgID4gL3N5cy9jbGFzcy9uZXQvY2FuMC9tYjBfaWQKKworCQktIGV4dGVuZGVkIGlkIDB4MWZmZmZmZmY6CisJCWVjaG8gMHg5ZmZmZmZmZiA+IC9zeXMvY2xhc3MvbmV0L2NhbjAvbWIwX2lkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2UtZHJpdmVycy50bXBsCmluZGV4IDM1NDQ3ZTAuLjM2ZjYzZDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2UtZHJpdmVycy50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2UtZHJpdmVycy50bXBsCkBAIC0yMTcsOCArMjE3LDggQEAKICAgPGNoYXB0ZXIgaWQ9InVhcnQxNng1MCI+CiAgICAgIDx0aXRsZT4xNng1MCBVQVJUIERyaXZlcjwvdGl0bGU+CiAhSWluY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAotIUVkcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCi0hRWRyaXZlcnMvc2VyaWFsLzgyNTAuYworIUVkcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2NvcmUuYworIUVkcml2ZXJzL3R0eS9zZXJpYWwvODI1MC5jCiAgIDwvY2hhcHRlcj4KIAogICA8Y2hhcHRlciBpZD0iZmJkZXYiPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RybS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RybS50bXBsCmluZGV4IDI4NjEwNTUuLmMyNzkxNTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kcm0udG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwKQEAgLTczLDggKzczLDggQEAKICAgICAgIHNlcnZpY2VzLgogICAgIDwvcGFyYT4KICAgICA8cGFyYT4KLSAgICAgIFRoZSBjb3JlIG9mIGV2ZXJ5IERSTSBkcml2ZXIgaXMgc3RydWN0IGRybV9kZXZpY2UuICBEcml2ZXJzCi0gICAgICB3aWxsIHR5cGljYWxseSBzdGF0aWNhbGx5IGluaXRpYWxpemUgYSBkcm1fZGV2aWNlIHN0cnVjdHVyZSwKKyAgICAgIFRoZSBjb3JlIG9mIGV2ZXJ5IERSTSBkcml2ZXIgaXMgc3RydWN0IGRybV9kcml2ZXIuICBEcml2ZXJzCisgICAgICB3aWxsIHR5cGljYWxseSBzdGF0aWNhbGx5IGluaXRpYWxpemUgYSBkcm1fZHJpdmVyIHN0cnVjdHVyZSwKICAgICAgIHRoZW4gcGFzcyBpdCB0byBkcm1faW5pdCgpIGF0IGxvYWQgdGltZS4KICAgICA8L3BhcmE+CiAKQEAgLTg0LDcgKzg0LDcgQEAKICAgICA8dGl0bGU+RHJpdmVyIGluaXRpYWxpemF0aW9uPC90aXRsZT4KICAgICA8cGFyYT4KICAgICAgIEJlZm9yZSBjYWxsaW5nIHRoZSBEUk0gaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIHRoZSBkcml2ZXIgbXVzdAotICAgICAgZmlyc3QgY3JlYXRlIGFuZCBmaWxsIG91dCBhIHN0cnVjdCBkcm1fZGV2aWNlIHN0cnVjdHVyZS4KKyAgICAgIGZpcnN0IGNyZWF0ZSBhbmQgZmlsbCBvdXQgYSBzdHJ1Y3QgZHJtX2RyaXZlciBzdHJ1Y3R1cmUuCiAgICAgPC9wYXJhPgogICAgIDxwcm9ncmFtbGlzdGluZz4KICAgICAgIHN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2R2YmFwaS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2R2YmFwaS54bWwKaW5kZXggZTNhOTdmZC4uYWQ4Njc4ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJhcGkueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvZHZiYXBpLnhtbApAQCAtMjgsNyArMjgsNyBAQAogCTxob2xkZXI+Q29udmVyZ2VuY2UgR21iSDwvaG9sZGVyPgogPC9jb3B5cmlnaHQ+CiA8Y29weXJpZ2h0PgotCTx5ZWFyPjIwMDktMjAxMDwveWVhcj4KKwk8eWVhcj4yMDA5LTIwMTE8L3llYXI+CiAJPGhvbGRlcj5NYXVybyBDYXJ2YWxobyBDaGVoYWI8L2hvbGRlcj4KIDwvY29weXJpZ2h0PgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZmlsZXN5c3RlbXMudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9maWxlc3lzdGVtcy50bXBsCmluZGV4IDVlODdhZDUuLmY1MWYyODUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9maWxlc3lzdGVtcy50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9maWxlc3lzdGVtcy50bXBsCkBAIC04Miw2ICs4MiwxMSBAQAogICAgICA8L3NlY3QxPgogICA8L2NoYXB0ZXI+CiAKKyAgPGNoYXB0ZXIgaWQ9ImZzX2V2ZW50cyI+CisgICAgIDx0aXRsZT5FdmVudHMgYmFzZWQgb24gZmlsZSBkZXNjcmlwdG9yczwvdGl0bGU+CishRWZzL2V2ZW50ZmQuYworICA8L2NoYXB0ZXI+CisKICAgPGNoYXB0ZXIgaWQ9InN5c2ZzIj4KICAgICAgPHRpdGxlPlRoZSBGaWxlc3lzdGVtIGZvciBFeHBvcnRpbmcgS2VybmVsIE9iamVjdHM8L3RpdGxlPgogIUVmcy9zeXNmcy9maWxlLmMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLnRtcGwKaW5kZXggZjExMDQ4ZC4uYTk5MDg4YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLnRtcGwKQEAgLTI4LDcgKzI4LDcgQEAKIDx0aXRsZT5MSU5VWCBNRURJQSBJTkZSQVNUUlVDVFVSRSBBUEk8L3RpdGxlPgogCiA8Y29weXJpZ2h0PgotCTx5ZWFyPjIwMDktMjAxMDwveWVhcj4KKwk8eWVhcj4yMDA5LTIwMTE8L3llYXI+CiAJPGhvbGRlcj5MaW51eFRWIERldmVsb3BlcnM8L2hvbGRlcj4KIDwvY29weXJpZ2h0PgogCkBAIC04Niw3ICs4Niw3IEBACiA8L2F1dGhvcj4KIDwvYXV0aG9yZ3JvdXA+CiA8Y29weXJpZ2h0PgotCTx5ZWFyPjIwMDktMjAxMDwveWVhcj4KKwk8eWVhcj4yMDA5LTIwMTE8L3llYXI+CiAJPGhvbGRlcj5NYXVybyBDYXJ2YWxobyBDaGVoYWI8L2hvbGRlcj4KIDwvY29weXJpZ2h0PgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1yZHMueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtcmRzLnhtbAppbmRleCAzNjBkMjczLi4yNDI3ZjU0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1yZHMueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LXJkcy54bWwKQEAgLTc1LDYgKzc1LDcgQEAKICAgPC9zZWN0aW9uPgogCiAgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5SRFMgZGF0YXN0cnVjdHVyZXM8L3RpdGxlPgogICAgIDx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0idjRsMi1yZHMtZGF0YSI+CiAgICAgICA8dGl0bGU+c3RydWN0CiA8c3RydWN0bmFtZT52NGwyX3Jkc19kYXRhPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CkBAIC0xMjksMTAgKzEzMCwxMSBAQAogCiAgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLXJkcy1ibG9jay1jb2RlcyI+CiAgICAgICA8dGl0bGU+QmxvY2sgZGVmaW5lczwvdGl0bGU+Ci0gICAgICA8dGdyb3VwIGNvbHM9IjMiPgorICAgICAgPHRncm91cCBjb2xzPSI0Ij4KIAk8Y29sc3BlYyBjb2xuYW1lPSJjMSIgY29sd2lkdGg9IjEqIiAvPgogCTxjb2xzcGVjIGNvbG5hbWU9ImMyIiBjb2x3aWR0aD0iMSoiIC8+Ci0JPGNvbHNwZWMgY29sbmFtZT0iYzMiIGNvbHdpZHRoPSI1KiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMyIgY29sd2lkdGg9IjEqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImM0IiBjb2x3aWR0aD0iNSoiIC8+CiAJPHRib2R5IHZhbGlnbj0idG9wIj4KIAkgIDxyb3c+CiAJICAgIDxlbnRyeT5WNEwyX1JEU19CTE9DS19NU0s8L2VudHJ5PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92NGwyLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdjRsMi54bWwKaW5kZXggODM5ZTkzZS4uOTI4OGFmOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92NGwyLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3Y0bDIueG1sCkBAIC0xMDAsNiArMTAwLDcgQEAKICAgICAgIDx5ZWFyPjIwMDg8L3llYXI+CiAgICAgICA8eWVhcj4yMDA5PC95ZWFyPgogICAgICAgPHllYXI+MjAxMDwveWVhcj4KKyAgICAgIDx5ZWFyPjIwMTE8L3llYXI+CiAgICAgICA8aG9sZGVyPkJpbGwgRGlya3MsIE1pY2hhZWwgSC4gU2NoaW1laywgSGFucyBWZXJrdWlsLCBNYXJ0aW4KIFJ1YmxpLCBBbmR5IFdhbGxzLCBNdXJhbGlkaGFyYW4gS2FyaWNoZXJpLCBNYXVybyBDYXJ2YWxobyBDaGVoYWI8L2hvbGRlcj4KICAgICA8L2NvcHlyaWdodD4KQEAgLTM4MSw3ICszODIsNyBAQAogPC9wYXJ0aW5mbz4KIAogPHRpdGxlPlZpZGVvIGZvciBMaW51eCBUd28gQVBJIFNwZWNpZmljYXRpb248L3RpdGxlPgotIDxzdWJ0aXRsZT5SZXZpc2lvbiAyLjYuMzM8L3N1YnRpdGxlPgorIDxzdWJ0aXRsZT5SZXZpc2lvbiAyLjYuMzg8L3N1YnRpdGxlPgogCiAgIDxjaGFwdGVyIGlkPSJjb21tb24iPgogICAgICZzdWItY29tbW9uOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc2F0YS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXRhL2ZzbC1zYXRhLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc2F0YS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hdGEvZnNsLXNhdGEudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2VlcHJvbS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZWVwcm9tLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9lZXByb20udHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZWVwcm9tLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvOHh4eF9ncGlvLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvLzh4eHhfZ3Bpby50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsLzh4eHhfZ3Bpby50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvLzh4eHhfZ3Bpby50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZ3Bpby9ncGlvLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL2dwaW8udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2dwaW8vZ3Bpby50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL2dwaW8udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2dwaW8vbGVkLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL2xlZC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZ3Bpby9sZWQudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9sZWQudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9pMmMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy9mc2wtaTJjLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvaTJjLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy9mc2wtaTJjLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9tYXJ2ZWxsLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tYXJ2ZWxsLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9tYXJ2ZWxsLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21hcnZlbGwudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9lc2RoYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL2ZzbC1lc2RoYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2VzZGhjLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9mc2wtZXNkaGMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL21tYy1zcGktc2xvdC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1zcGktc2xvdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbW1jLXNwaS1zbG90LnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9tbWMtc3BpLXNsb3QudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC91cG0tbmFuZC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL2ZzbC11cG0tbmFuZC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3VwbS1uYW5kLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9mc2wtdXBtLW5hbmQudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL210ZC1waHlzbWFwLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvbXRkLXBoeXNtYXAudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL210ZC1waHlzbWFwLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9tdGQtcGh5c21hcC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2Nhbi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Nhbi9tcGM1eHh4LW1zY2FuLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY2FuLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9jYW4vbXBjNXh4eC1tc2Nhbi50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvY2FuL3NqYTEwMDAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9jYW4vc2phMTAwMC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvY2FuL3NqYTEwMDAudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Nhbi9zamExMDAwLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdHNlYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2ZzbC10c2VjLXBoeS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3RzZWMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2ZzbC10c2VjLXBoeS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZ3Bpby9tZGlvLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbWRpby1ncGlvLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9ncGlvL21kaW8udHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21kaW8tZ3Bpby50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvcGh5LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGh5LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9waHkudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BoeS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsLzgzeHgtNTEyeC1wY2kudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BjaS84M3h4LTUxMngtcGNpLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvODN4eC01MTJ4LXBjaS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wY2kvODN4eC01MTJ4LXBjaS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvNHh4L2NwbS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy80eHgvY3BtLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy80eHgvY3BtLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvNHh4L2NwbS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvNHh4L2VtYWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvNHh4L2VtYWMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzLzR4eC9lbWFjLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvNHh4L2VtYWMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzLzR4eC9uZGZjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjLzR4eC9uZGZjLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy80eHgvbmRmYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjLzR4eC9uZGZjLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy80eHgvcHBjNDQwc3BlLWFkbWEudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvNHh4L3BwYzQ0MHNwZS1hZG1hLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy80eHgvcHBjNDQwc3BlLWFkbWEudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy80eHgvcHBjNDQwc3BlLWFkbWEudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzLzR4eC9yZWJvb3QudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvNHh4L3JlYm9vdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvNHh4L3JlYm9vdC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjLzR4eC9yZWJvb3QudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9ib2FyZC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvYm9hcmQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9ib2FyZC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9ib2FyZC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9jcG0udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9jcG0udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvY3BtLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9jcG0udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvY3BtL2JyZy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL2NwbS9icmcudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvY3BtL2JyZy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvY3BtL2JyZy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9jcG0vaTJjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvY3BtL2kyYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9jcG0vaTJjLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9jcG0vaTJjLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL2NwbS9waWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9jcG0vcGljLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL2NwbS9waWMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL2NwbS9waWMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvY3BtL3VzYi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL2NwbS91c2IudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvY3BtL3VzYi50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvY3BtL3VzYi50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9ncGlvLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvZ3Bpby50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9ncGlvLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9ncGlvLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL25ldHdvcmsudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9uZXR3b3JrLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL25ldHdvcmsudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL25ldHdvcmsudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvcWUudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9xZS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvcWUudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvcWUvZmlybXdhcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9xZS9maXJtd2FyZS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS9maXJtd2FyZS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvcWUvZmlybXdhcmUudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvcWUvcGFyX2lvLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvcWUvcGFyX2lvLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL3Bhcl9pby50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvcWUvcGFyX2lvLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL3BpbmNmZy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL3FlL3BpbmNmZy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS9waW5jZmcudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL3FlL3BpbmNmZy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS91Y2MudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9xZS91Y2MudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvcWUvdWNjLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9xZS91Y2MudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvcWUvdXNiLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvcWUvdXNiLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL3VzYi50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvcWUvdXNiLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3NlcmlhbC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL3NlcmlhbC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9zZXJpYWwudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL3NlcmlhbC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2RpdS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvZGl1LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZGl1LnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2RpdS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2RtYS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvZG1hLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZG1hLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2RtYS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZWNtLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9lY20udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2VjbS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9lY20udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9ndG0udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2d0bS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2d0bS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9ndG0udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9ndXRzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9ndXRzLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZ3V0cy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9ndXRzLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbGJjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9sYmMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9sYmMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbGJjLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbWNtLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tY20udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tY20udHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbWNtLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbWN1LW1wYzgzNDllbWl0eC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbWN1LW1wYzgzNDllbWl0eC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21jdS1tcGM4MzQ5ZW1pdHgudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbWN1LW1wYzgzNDllbWl0eC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21wYzUxMjEtcHNjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tcGM1MTIxLXBzYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21wYzUxMjEtcHNjLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21wYzUxMjEtcHNjLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBjNTIwMC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXBjNTIwMC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21wYzUyMDAudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXBjNTIwMC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21waWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21waWMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGljLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21waWMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tc2ktcGljLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tc2ktcGljLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXNpLXBpYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tc2ktcGljLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvcG1jLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9wbWMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9wbWMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvcG1jLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc2VjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9zZWMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zZWMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvc2VjLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3NpLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9zc2kudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zc2kudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvc3NpLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9uaW50ZW5kby9nYW1lY3ViZS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9uaW50ZW5kby9nYW1lY3ViZS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbmludGVuZG8vZ2FtZWN1YmUudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9uaW50ZW5kby9nYW1lY3ViZS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbmludGVuZG8vd2lpLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL25pbnRlbmRvL3dpaS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbmludGVuZG8vd2lpLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvbmludGVuZG8vd2lpLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3BpLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvZnNsLXNwaS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NwaS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvZnNsLXNwaS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3Mvc3BpLWJ1cy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc3BpL3NwaS1idXMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL3NwaS1idXMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc3BpL3NwaS1idXMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC91c2IudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi9mc2wtdXNiLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdXNiLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi9mc2wtdXNiLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy91c2ItZWhjaS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL3VzYi1laGNpLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy91c2ItZWhjaS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvdXNiLWVoY2kudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL3hpbGlueC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MveGlsaW54LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy94aWxpbngudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MveGlsaW54LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYm9vdGluZy13aXRob3V0LW9mLnR4dApzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKaW5kZXggNzQwMGQ3NS4uMjhiMWM5ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKQEAgLTEzLDcgKzEzLDYgQEAKIAogICBJIC0gSW50cm9kdWN0aW9uCiAgICAgMSkgRW50cnkgcG9pbnQgZm9yIGFyY2gvcG93ZXJwYwotICAgIDIpIEJvYXJkIHN1cHBvcnQKIAogICBJSSAtIFRoZSBEVCBibG9jayBmb3JtYXQKICAgICAxKSBIZWFkZXIKQEAgLTQxLDEzICs0MCw2IEBACiAgIFZJIC0gU3lzdGVtLW9uLWEtY2hpcCBkZXZpY2VzIGFuZCBub2RlcwogICAgIDEpIERlZmluaW5nIGNoaWxkIG5vZGVzIG9mIGFuIFNPQwogICAgIDIpIFJlcHJlc2VudGluZyBkZXZpY2VzIHdpdGhvdXQgYSBjdXJyZW50IE9GIHNwZWNpZmljYXRpb24KLSAgICAgIGEpIFBIWSBub2RlcwotICAgICAgYikgSW50ZXJydXB0IGNvbnRyb2xsZXJzCi0gICAgICBjKSA0eHgvQXhvbiBFTUFDIGV0aGVybmV0IG5vZGVzCi0gICAgICBkKSBYaWxpbnggSVAgY29yZXMKLSAgICAgIGUpIFVTQiBFSENJIGNvbnRyb2xsZXJzCi0gICAgICBmKSBNRElPIG9uIEdQSU9zCi0gICAgICBnKSBTUEkgYnVzc2VzCiAKICAgVklJIC0gU3BlY2lmeWluZyBpbnRlcnJ1cHQgaW5mb3JtYXRpb24gZm9yIGRldmljZXMKICAgICAxKSBpbnRlcnJ1cHRzIHByb3BlcnR5CkBAIC0xMjMsNyArMTE1LDcgQEAKIEkgLSBJbnRyb2R1Y3Rpb24KID09PT09PT09PT09PT09PT0KIAotRHVyaW5nIHRoZSByZWNlbnQgZGV2ZWxvcG1lbnQgb2YgdGhlIExpbnV4L3BwYzY0IGtlcm5lbCwgYW5kIG1vcmUKK0R1cmluZyB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIExpbnV4L3BwYzY0IGtlcm5lbCwgYW5kIG1vcmUKIHNwZWNpZmljYWxseSwgdGhlIGFkZGl0aW9uIG9mIG5ldyBwbGF0Zm9ybSB0eXBlcyBvdXRzaWRlIG9mIHRoZSBvbGQKIElCTSBwU2VyaWVzL2lTZXJpZXMgcGFpciwgaXQgd2FzIGRlY2lkZWQgdG8gZW5mb3JjZSBzb21lIHN0cmljdCBydWxlcwogcmVnYXJkaW5nIHRoZSBrZXJuZWwgZW50cnkgYW5kIGJvb3Rsb2FkZXIgPC0+IGtlcm5lbCBpbnRlcmZhY2VzLCBpbgpAQCAtMTQ2LDcgKzEzOCw3IEBACiBjcmVhdGUgYSBub2RlIGZvciBldmVyeSBQQ0kgZGV2aWNlIGluIHRoZSBzeXN0ZW0uIEl0IGlzIGEgcmVxdWlyZW1lbnQKIHRvIGhhdmUgYSBub2RlIGZvciBQQ0kgaG9zdCBicmlkZ2VzIGluIG9yZGVyIHRvIHByb3ZpZGUgaW50ZXJydXB0CiByb3V0aW5nIGluZm9ybWF0aW9ucyBhbmQgbWVtb3J5L0lPIHJhbmdlcywgYW1vbmcgb3RoZXJzLiBJdCBpcyBhbHNvCi1yZWNvbW1lbmRlZCB0byBkZWZpbmUgbm9kZXMgZm9yIG9uIGNoaXAgZGV2aWNlcyBhbmQgb3RoZXIgYnVzc2VzIHRoYXQKK3JlY29tbWVuZGVkIHRvIGRlZmluZSBub2RlcyBmb3Igb24gY2hpcCBkZXZpY2VzIGFuZCBvdGhlciBidXNlcyB0aGF0CiBkb24ndCBzcGVjaWZpY2FsbHkgZml0IGluIGFuIGV4aXN0aW5nIE9GIHNwZWNpZmljYXRpb24uIFRoaXMgY3JlYXRlcyBhCiBncmVhdCBmbGV4aWJpbGl0eSBpbiB0aGUgd2F5IHRoZSBrZXJuZWwgY2FuIHRoZW4gcHJvYmUgdGhvc2UgYW5kIG1hdGNoCiBkcml2ZXJzIHRvIGRldmljZSwgd2l0aG91dCBoYXZpbmcgdG8gaGFyZCBjb2RlIGFsbCBzb3J0cyBvZiB0YWJsZXMuIEl0CkBAIC0xNTgsNyArMTUwLDcgQEAKIDEpIEVudHJ5IHBvaW50IGZvciBhcmNoL3Bvd2VycGMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgVGhlcmUgaXMgb25lIGFuZCBvbmUgc2luZ2xlIGVudHJ5IHBvaW50IHRvIHRoZSBrZXJuZWwsIGF0IHRoZSBzdGFydAorICAgVGhlcmUgaXMgb25lIHNpbmdsZSBlbnRyeSBwb2ludCB0byB0aGUga2VybmVsLCBhdCB0aGUgc3RhcnQKICAgIG9mIHRoZSBrZXJuZWwgaW1hZ2UuIFRoYXQgZW50cnkgcG9pbnQgc3VwcG9ydHMgdHdvIGNhbGxpbmcKICAgIGNvbnZlbnRpb25zOgogCkBAIC0yMTAsMTIgKzIwMiw2IEBACiAgICAgICAgIHdpdGggYWxsIENQVXMuIFRoZSB3YXkgdG8gZG8gdGhhdCB3aXRoIG1ldGhvZCBiKSB3aWxsIGJlCiAgICAgICAgIGRlc2NyaWJlZCBpbiBhIGxhdGVyIHJldmlzaW9uIG9mIHRoaXMgZG9jdW1lbnQuCiAKLQotMikgQm9hcmQgc3VwcG9ydAotLS0tLS0tLS0tLS0tLS0tLQotCi02NC1iaXQga2VybmVsczoKLQogICAgQm9hcmQgc3VwcG9ydHMgKHBsYXRmb3JtcykgYXJlIG5vdCBleGNsdXNpdmUgY29uZmlnIG9wdGlvbnMuIEFuCiAgICBhcmJpdHJhcnkgc2V0IG9mIGJvYXJkIHN1cHBvcnRzIGNhbiBiZSBidWlsdCBpbiBhIHNpbmdsZSBrZXJuZWwKICAgIGltYWdlLiBUaGUga2VybmVsIHdpbGwgImtub3ciIHdoYXQgc2V0IG9mIGZ1bmN0aW9ucyB0byB1c2UgZm9yIGEKQEAgLTIzNCw0OCArMjIwLDExIEBACiAgICAgICAgIGNvbnRhaW5pbmcgdGhlIHZhcmlvdXMgY2FsbGJhY2tzIHRoYXQgdGhlIGdlbmVyaWMgY29kZSB3aWxsCiAgICAgICAgIHVzZSB0byBnZXQgdG8geW91ciBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlCiAKLSAgICAgICAgYykgQWRkIGEgcmVmZXJlbmNlIHRvIHlvdXIgInBwY19tZCIgc3RydWN0dXJlIGluIHRoZQotICAgICAgICAibWFjaGluZXMiIHRhYmxlIGluIGFyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYyBpZiB5b3UgYXJlCi0gICAgICAgIGEgNjQtYml0IHBsYXRmb3JtLgotCi0gICAgICAgIGQpIHJlcXVlc3QgYW5kIGdldCBhc3NpZ25lZCBhIHBsYXRmb3JtIG51bWJlciAoc2VlIFBMQVRGT1JNXyoKLSAgICAgICAgY29uc3RhbnRzIGluIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAotCi0zMi1iaXQgZW1iZWRkZWQga2VybmVsczoKLQotICBDdXJyZW50bHksIGJvYXJkIHN1cHBvcnQgaXMgZXNzZW50aWFsbHkgYW4gZXhjbHVzaXZlIGNvbmZpZyBvcHRpb24uCi0gIFRoZSBrZXJuZWwgaXMgY29uZmlndXJlZCBmb3IgYSBzaW5nbGUgcGxhdGZvcm0uICBQYXJ0IG9mIHRoZSByZWFzb24KLSAgZm9yIHRoaXMgaXMgdG8ga2VlcCBrZXJuZWxzIG9uIGVtYmVkZGVkIHN5c3RlbXMgc21hbGwgYW5kIGVmZmljaWVudDsKLSAgcGFydCBvZiB0aGlzIGlzIGR1ZSB0byB0aGUgZmFjdCB0aGUgY29kZSBpcyBhbHJlYWR5IHRoYXQgd2F5LiBJbiB0aGUKLSAgZnV0dXJlLCBhIGtlcm5lbCBtYXkgc3VwcG9ydCBtdWx0aXBsZSBwbGF0Zm9ybXMsIGJ1dCBvbmx5IGlmIHRoZQorICBBIGtlcm5lbCBpbWFnZSBtYXkgc3VwcG9ydCBtdWx0aXBsZSBwbGF0Zm9ybXMsIGJ1dCBvbmx5IGlmIHRoZQogICBwbGF0Zm9ybXMgZmVhdHVyZSB0aGUgc2FtZSBjb3JlIGFyY2hpdGVjdHVyZS4gIEEgc2luZ2xlIGtlcm5lbCBidWlsZAogICBjYW5ub3Qgc3VwcG9ydCBib3RoIGNvbmZpZ3VyYXRpb25zIHdpdGggQm9vayBFIGFuZCBjb25maWd1cmF0aW9ucwogICB3aXRoIGNsYXNzaWMgUG93ZXJwYyBhcmNoaXRlY3R1cmVzLgogCi0gIDMyLWJpdCBlbWJlZGRlZCBwbGF0Zm9ybXMgdGhhdCBhcmUgbW92ZWQgaW50byBhcmNoL3Bvd2VycGMgdXNpbmcgYQotICBmbGF0dGVuZWQgZGV2aWNlIHRyZWUgc2hvdWxkIGFkb3B0IHRoZSBtZXJnZWQgdHJlZSBwcmFjdGljZSBvZgotICBzZXR0aW5nIHBwY19tZCB1cCBkeW5hbWljYWxseSwgZXZlbiB0aG91Z2ggdGhlIGtlcm5lbCBpcyBjdXJyZW50bHkKLSAgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciBvbmx5IGEgc2luZ2xlIHBsYXRmb3JtIGF0IGEgdGltZS4gIFRoaXMgYWxsb3dzCi0gIHVuaWZpY2F0aW9uIG9mIHRoZSBzZXR1cCBjb2RlLCBhbmQgd2lsbCBtYWtlIGl0IGVhc2llciB0byBnbyB0byBhCi0gIG11bHRpcGxlLXBsYXRmb3JtLXN1cHBvcnQgbW9kZWwgaW4gdGhlIGZ1dHVyZS4KLQotTk9URTogSSBiZWxpZXZlIHRoZSBhYm92ZSB3aWxsIGJlIHRydWUgb25jZSBCZW4ncyBkb25lIHdpdGggdGhlIG1lcmdlCi1vZiB0aGUgYm9vdCBzZXF1ZW5jZXMuLi4uIHNvbWVvbmUgc3BlYWsgdXAgaWYgdGhpcyBpcyB3cm9uZyEKLQotICBUbyBhZGQgYSAzMi1iaXQgZW1iZWRkZWQgcGxhdGZvcm0gc3VwcG9ydCwgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMKLSAgZm9yIDY0LWJpdCBwbGF0Zm9ybXMgYWJvdmUsIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IHRoZSBLY29uZmlnCi0gIG9wdGlvbiBzaG91bGQgYmUgc2V0IHVwIHN1Y2ggdGhhdCB0aGUga2VybmVsIGJ1aWxkcyBleGNsdXNpdmVseSBmb3IKLSAgdGhlIHBsYXRmb3JtIHNlbGVjdGVkLiAgVGhlIHByb2Nlc3NvciB0eXBlIGZvciB0aGUgcGxhdGZvcm0gc2hvdWxkCi0gIGVuYWJsZSBhbm90aGVyIGNvbmZpZyBvcHRpb24gdG8gc2VsZWN0IHRoZSBzcGVjaWZpYyBib2FyZAotICBzdXBwb3J0ZWQuCi0KLU5PVEU6IElmIEJlbiBkb2Vzbid0IG1lcmdlIHRoZSBzZXR1cCBmaWxlcywgbWF5IG5lZWQgdG8gY2hhbmdlIHRoaXMgdG8KLXBvaW50IHRvIHNldHVwXzMyLmMKLQotCi0gICBJIHdpbGwgZGVzY3JpYmUgbGF0ZXIgdGhlIGJvb3QgcHJvY2VzcyBhbmQgdmFyaW91cyBjYWxsYmFja3MgdGhhdAotICAgeW91ciBwbGF0Zm9ybSBzaG91bGQgaW1wbGVtZW50LgotCiAKIElJIC0gVGhlIERUIGJsb2NrIGZvcm1hdAogPT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zMDAsOCArMjQ5LDggQEAKIDEpIEhlYWRlcgogLS0tLS0tLS0tCiAKLSAgIFRoZSBrZXJuZWwgaXMgZW50ZXJlZCB3aXRoIHIzIHBvaW50aW5nIHRvIGFuIGFyZWEgb2YgbWVtb3J5IHRoYXQgaXMKLSAgIHJvdWdobHkgZGVzY3JpYmVkIGluIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9tLmggYnkgdGhlIHN0cnVjdHVyZQorICAgVGhlIGtlcm5lbCBpcyBwYXNzZWQgdGhlIHBoeXNpY2FsIGFkZHJlc3MgcG9pbnRpbmcgdG8gYW4gYXJlYSBvZiBtZW1vcnkKKyAgIHRoYXQgaXMgcm91Z2hseSBkZXNjcmliZWQgaW4gaW5jbHVkZS9saW51eC9vZl9mZHQuaCBieSB0aGUgc3RydWN0dXJlCiAgICBib290X3BhcmFtX2hlYWRlcjoKIAogc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyIHsKQEAgLTMzOSw3ICsyODgsNyBAQAogICAgQWxsIHZhbHVlcyBpbiB0aGlzIGhlYWRlciBhcmUgaW4gYmlnIGVuZGlhbiBmb3JtYXQsIHRoZSB2YXJpb3VzCiAgICBmaWVsZHMgaW4gdGhpcyBoZWFkZXIgYXJlIGRlZmluZWQgbW9yZSBwcmVjaXNlbHkgYmVsb3cuIEFsbAogICAgIm9mZnNldCIgdmFsdWVzIGFyZSBpbiBieXRlcyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgaGVhZGVyOyB0aGF0IGlzCi0gICBmcm9tIHRoZSB2YWx1ZSBvZiByMy4KKyAgIGZyb20gdGhlIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIHRyZWUgYmxvY2suCiAKICAgIC0gbWFnaWMKIApAQCAtNDM3LDcgKzM4Niw3IEBACiAKIAogICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgIHIzIC0+IHwgIHN0cnVjdCBib290X3BhcmFtX2hlYWRlciAgfAorICAgICBiYXNlIC0+IHwgIHN0cnVjdCBib290X3BhcmFtX2hlYWRlciAgfAogICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgIHwgICAgICAoYWxpZ25tZW50IGdhcCkgKCopICAgfAogICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDU3LDcgKzQwNiw3IEBACiAgICAgICAtLS0tLT4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICB8CiAgICAgICB8Ci0gICAgICAtLS0gKHIzICsgdG90YWxzaXplKQorICAgICAgLS0tIChiYXNlICsgdG90YWxzaXplKQogCiAgICgqKSBUaGUgYWxpZ25tZW50IGdhcHMgYXJlIG5vdCBuZWNlc3NhcmlseSBwcmVzZW50OyB0aGVpciBwcmVzZW5jZQogICAgICAgYW5kIHNpemUgYXJlIGRlcGVuZGVudCBvbiB0aGUgdmFyaW91cyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIG9mCkBAIC01MDAsNyArNDQ5LDcgQEAKIHRoZSBkZXZpY2UtdHJlZS4gTW9yZSBkZXRhaWxzIGFib3V0IHRoZSBhY3R1YWwgZm9ybWF0IG9mIHRoZXNlIHdpbGwgYmUKIGJlbG93LgogCi1UaGUga2VybmVsIHBvd2VycGMgZ2VuZXJpYyBjb2RlIGRvZXMgbm90IG1ha2UgYW55IGZvcm1hbCB1c2Ugb2YgdGhlCitUaGUga2VybmVsIGdlbmVyaWMgY29kZSBkb2VzIG5vdCBtYWtlIGFueSBmb3JtYWwgdXNlIG9mIHRoZQogdW5pdCBhZGRyZXNzICh0aG91Z2ggc29tZSBib2FyZCBzdXBwb3J0IGNvZGUgbWF5IGRvKSBzbyB0aGUgb25seSByZWFsCiByZXF1aXJlbWVudCBoZXJlIGZvciB0aGUgdW5pdCBhZGRyZXNzIGlzIHRvIGVuc3VyZSB1bmlxdWVuZXNzIG9mCiB0aGUgbm9kZSB1bml0IG5hbWUgYXQgYSBnaXZlbiBsZXZlbCBvZiB0aGUgdHJlZS4gTm9kZXMgd2l0aCBubyBub3Rpb24KQEAgLTUxOCwyMCArNDY3LDIxIEBACiAKIEV2ZXJ5IG5vZGUgd2hpY2ggYWN0dWFsbHkgcmVwcmVzZW50cyBhbiBhY3R1YWwgZGV2aWNlICh0aGF0IGlzLCBhIG5vZGUKIHdoaWNoIGlzbid0IG9ubHkgYSB2aXJ0dWFsICJjb250YWluZXIiIGZvciBtb3JlIG5vZGVzLCBsaWtlICIvY3B1cyIKLWlzKSBpcyBhbHNvIHJlcXVpcmVkIHRvIGhhdmUgYSAiZGV2aWNlX3R5cGUiIHByb3BlcnR5IGluZGljYXRpbmcgdGhlCi10eXBlIG9mIG5vZGUgLgoraXMpIGlzIGFsc28gcmVxdWlyZWQgdG8gaGF2ZSBhICJjb21wYXRpYmxlIiBwcm9wZXJ0eSBpbmRpY2F0aW5nIHRoZQorc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGFuIG9wdGlvbmFsIGxpc3Qgb2YgZGV2aWNlcyBpdCBpcyBmdWxseQorYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aC4KIAogRmluYWxseSwgZXZlcnkgbm9kZSB0aGF0IGNhbiBiZSByZWZlcmVuY2VkIGZyb20gYSBwcm9wZXJ0eSBpbiBhbm90aGVyCi1ub2RlIGlzIHJlcXVpcmVkIHRvIGhhdmUgYSAibGludXgscGhhbmRsZSIgcHJvcGVydHkuIFJlYWwgb3BlbgotZmlybXdhcmUgaW1wbGVtZW50YXRpb25zIHByb3ZpZGUgYSB1bmlxdWUgInBoYW5kbGUiIHZhbHVlIGZvciBldmVyeQotbm9kZSB0aGF0IHRoZSAicHJvbV9pbml0KCkiIHRyYW1wb2xpbmUgY29kZSB0dXJucyBpbnRvCi0ibGludXgscGhhbmRsZSIgcHJvcGVydGllcy4gSG93ZXZlciwgdGhpcyBpcyBtYWRlIG9wdGlvbmFsIGlmIHRoZQotZmxhdHRlbmVkIGRldmljZSB0cmVlIGlzIHVzZWQgZGlyZWN0bHkuIEFuIGV4YW1wbGUgb2YgYSBub2RlCitub2RlIGlzIHJlcXVpcmVkIHRvIGhhdmUgZWl0aGVyIGEgInBoYW5kbGUiIG9yIGEgImxpbnV4LHBoYW5kbGUiCitwcm9wZXJ0eS4gUmVhbCBPcGVuIEZpcm13YXJlIGltcGxlbWVudGF0aW9ucyBwcm92aWRlIGEgdW5pcXVlCisicGhhbmRsZSIgdmFsdWUgZm9yIGV2ZXJ5IG5vZGUgdGhhdCB0aGUgInByb21faW5pdCgpIiB0cmFtcG9saW5lIGNvZGUKK3R1cm5zIGludG8gImxpbnV4LHBoYW5kbGUiIHByb3BlcnRpZXMuIEhvd2V2ZXIsIHRoaXMgaXMgbWFkZSBvcHRpb25hbAoraWYgdGhlIGZsYXR0ZW5lZCBkZXZpY2UgdHJlZSBpcyB1c2VkIGRpcmVjdGx5LiBBbiBleGFtcGxlIG9mIGEgbm9kZQogcmVmZXJlbmNpbmcgYW5vdGhlciBub2RlIHZpYSAicGhhbmRsZSIgaXMgd2hlbiBsYXlpbmcgb3V0IHRoZQogaW50ZXJydXB0IHRyZWUgd2hpY2ggd2lsbCBiZSBkZXNjcmliZWQgaW4gYSBmdXJ0aGVyIHZlcnNpb24gb2YgdGhpcwogZG9jdW1lbnQuCiAKLVRoaXMgImxpbnV4LCBwaGFuZGxlIiBwcm9wZXJ0eSBpcyBhIDMyLWJpdCB2YWx1ZSB0aGF0IHVuaXF1ZWx5CitUaGUgInBoYW5kbGUiIHByb3BlcnR5IGlzIGEgMzItYml0IHZhbHVlIHRoYXQgdW5pcXVlbHkKIGlkZW50aWZpZXMgYSBub2RlLiBZb3UgYXJlIGZyZWUgdG8gdXNlIHdoYXRldmVyIHZhbHVlcyBvciBzeXN0ZW0gb2YKIHZhbHVlcywgaW50ZXJuYWwgcG9pbnRlcnMsIG9yIHdoYXRldmVyIHRvIGdlbmVyYXRlIHRoZXNlLCB0aGUgb25seQogcmVxdWlyZW1lbnQgaXMgdGhhdCBldmVyeSBub2RlIGZvciB3aGljaCB5b3UgcHJvdmlkZSB0aGF0IHByb3BlcnR5IGhhcwpAQCAtNjk0LDcgKzY0NCw3IEBACiB3aGlsZSB0aGUgdG9wIGNlbGwgY29udGFpbnMgYWRkcmVzcyBzcGFjZSBpbmRpY2F0aW9uLCBmbGFncywgYW5kIHBjaQogYnVzICYgZGV2aWNlIG51bWJlcnMuCiAKLUZvciBidXNzZXMgdGhhdCBzdXBwb3J0IGR5bmFtaWMgYWxsb2NhdGlvbiwgaXQncyB0aGUgYWNjZXB0ZWQgcHJhY3RpY2UKK0ZvciBidXNlcyB0aGF0IHN1cHBvcnQgZHluYW1pYyBhbGxvY2F0aW9uLCBpdCdzIHRoZSBhY2NlcHRlZCBwcmFjdGljZQogdG8gdGhlbiBub3QgcHJvdmlkZSB0aGUgYWRkcmVzcyBpbiAicmVnIiAoa2VlcCBpdCAwKSB0aG91Z2ggd2hpbGUKIHByb3ZpZGluZyBhIGZsYWcgaW5kaWNhdGluZyB0aGUgYWRkcmVzcyBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIGFuZAogdGhlbiwgdG8gcHJvdmlkZSBhIHNlcGFyYXRlICJhc3NpZ25lZC1hZGRyZXNzZXMiIHByb3BlcnR5IHRoYXQKQEAgLTcxMSw3ICs2NjEsNyBAQAogVGhlICJyZWciIHByb3BlcnR5IG9ubHkgZGVmaW5lcyBhZGRyZXNzZXMgYW5kIHNpemVzIChpZiAjc2l6ZS1jZWxscyBpcwogbm9uLTApIHdpdGhpbiBhIGdpdmVuIGJ1cy4gSW4gb3JkZXIgdG8gdHJhbnNsYXRlIGFkZHJlc3NlcyB1cHdhcmQKICh0aGF0IGlzIGludG8gcGFyZW50IGJ1cyBhZGRyZXNzZXMsIGFuZCBwb3NzaWJseSBpbnRvIENQVSBwaHlzaWNhbAotYWRkcmVzc2VzKSwgYWxsIGJ1c3NlcyBtdXN0IGNvbnRhaW4gYSAicmFuZ2VzIiBwcm9wZXJ0eS4gSWYgdGhlCithZGRyZXNzZXMpLCBhbGwgYnVzZXMgbXVzdCBjb250YWluIGEgInJhbmdlcyIgcHJvcGVydHkuIElmIHRoZQogInJhbmdlcyIgcHJvcGVydHkgaXMgbWlzc2luZyBhdCBhIGdpdmVuIGxldmVsLCBpdCdzIGFzc3VtZWQgdGhhdAogdHJhbnNsYXRpb24gaXNuJ3QgcG9zc2libGUsIGkuZS4sIHRoZSByZWdpc3RlcnMgYXJlIG5vdCB2aXNpYmxlIG9uIHRoZQogcGFyZW50IGJ1cy4gIFRoZSBmb3JtYXQgb2YgdGhlICJyYW5nZXMiIHByb3BlcnR5IGZvciBhIGJ1cyBpcyBhIGxpc3QKQEAgLTcyNyw5ICs2NzcsOSBAQAogUENJPC0+SVNBIGJyaWRnZSwgdGhhdCB3b3VsZCBiZSBhIFBDSSBhZGRyZXNzLiBJdCBkZWZpbmVzIHRoZSBiYXNlCiBhZGRyZXNzIGluIHRoZSBwYXJlbnQgYnVzIHdoZXJlIHRoZSBiZWdpbm5pbmcgb2YgdGhhdCByYW5nZSBpcyBtYXBwZWQuCiAKLUZvciBhIG5ldyA2NC1iaXQgcG93ZXJwYyBib2FyZCwgSSByZWNvbW1lbmQgZWl0aGVyIHRoZSAyLzIgZm9ybWF0IG9yCitGb3IgbmV3IDY0LWJpdCBib2FyZCBzdXBwb3J0LCBJIHJlY29tbWVuZCBlaXRoZXIgdGhlIDIvMiBmb3JtYXQgb3IKIEFwcGxlJ3MgMi8xIGZvcm1hdCB3aGljaCBpcyBzbGlnaHRseSBtb3JlIGNvbXBhY3Qgc2luY2Ugc2l6ZXMgdXN1YWxseQotZml0IGluIGEgc2luZ2xlIDMyLWJpdCB3b3JkLiAgIE5ldyAzMi1iaXQgcG93ZXJwYyBib2FyZHMgc2hvdWxkIHVzZSBhCitmaXQgaW4gYSBzaW5nbGUgMzItYml0IHdvcmQuICAgTmV3IDMyLWJpdCBib2FyZCBzdXBwb3J0IHNob3VsZCB1c2UgYQogMS8xIGZvcm1hdCwgdW5sZXNzIHRoZSBwcm9jZXNzb3Igc3VwcG9ydHMgcGh5c2ljYWwgYWRkcmVzc2VzIGdyZWF0ZXIKIHRoYW4gMzItYml0cywgaW4gd2hpY2ggY2FzZSBhIDIvMSBmb3JtYXQgaXMgcmVjb21tZW5kZWQuCiAKQEAgLTc1NCw3ICs3MDQsNyBAQAogV2hpbGUgZWFybGllciB1c2VycyBvZiBPcGVuIEZpcm13YXJlIGxpa2UgT2xkV29ybGQgbWFjaW50b3NoZXMgdGVuZGVkCiB0byB1c2UgdGhlIGFjdHVhbCBkZXZpY2UgbmFtZSBmb3IgdGhlICJuYW1lIiBwcm9wZXJ0eSwgaXQncyBub3dhZGF5cwogY29uc2lkZXJlZCBhIGdvb2QgcHJhY3RpY2UgdG8gdXNlIGEgbmFtZSB0aGF0IGlzIGNsb3NlciB0byB0aGUgZGV2aWNlCi1jbGFzcyAob2Z0ZW4gZXF1YWwgdG8gZGV2aWNlX3R5cGUpLiBGb3IgZXhhbXBsZSwgbm93YWRheXMsIGV0aGVybmV0CitjbGFzcyAob2Z0ZW4gZXF1YWwgdG8gZGV2aWNlX3R5cGUpLiBGb3IgZXhhbXBsZSwgbm93YWRheXMsIEV0aGVybmV0CiBjb250cm9sbGVycyBhcmUgbmFtZWQgImV0aGVybmV0IiwgYW4gYWRkaXRpb25hbCAibW9kZWwiIHByb3BlcnR5CiBkZWZpbmluZyBwcmVjaXNlbHkgdGhlIGNoaXAgdHlwZS9tb2RlbCwgYW5kICJjb21wYXRpYmxlIiBwcm9wZXJ0eQogZGVmaW5pbmcgdGhlIGZhbWlseSBpbiBjYXNlIGEgc2luZ2xlIGRyaXZlciBjYW4gZHJpdmVyIG1vcmUgdGhhbiBvbmUKQEAgLTc3Miw3ICs3MjIsNyBAQAogNCkgTm90ZSBhYm91dCBub2RlIGFuZCBwcm9wZXJ0eSBuYW1lcyBhbmQgY2hhcmFjdGVyIHNldAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGlsZSBvcGVuIGZpcm13YXJlIHByb3ZpZGVzIG1vcmUgZmxleGlibGUgdXNhZ2Ugb2YgODg1OS0xLCB0aGlzCitXaGlsZSBPcGVuIEZpcm13YXJlIHByb3ZpZGVzIG1vcmUgZmxleGlibGUgdXNhZ2Ugb2YgODg1OS0xLCB0aGlzCiBzcGVjaWZpY2F0aW9uIGVuZm9yY2VzIG1vcmUgc3RyaWN0IHJ1bGVzLiBOb2RlcyBhbmQgcHJvcGVydGllcyBzaG91bGQKIGJlIGNvbXByaXNlZCBvbmx5IG9mIEFTQ0lJIGNoYXJhY3RlcnMgJ2EnIHRvICd6JywgJzAnIHRvCiAnOScsICcsJywgJy4nLCAnXycsICcrJywgJyMnLCAnPycsIGFuZCAnLScuIE5vZGUgbmFtZXMgYWRkaXRpb25hbGx5CkBAIC03OTIsNyArNzQyLDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFRoZXNlIGFyZSBhbGwgdGhhdCBhcmUgY3VycmVudGx5IHJlcXVpcmVkLiBIb3dldmVyLCBpdCBpcyBzdHJvbmdseQogICByZWNvbW1lbmRlZCB0aGF0IHlvdSBleHBvc2UgUENJIGhvc3QgYnJpZGdlcyBhcyBkb2N1bWVudGVkIGluIHRoZQotICBQQ0kgYmluZGluZyB0byBvcGVuIGZpcm13YXJlLCBhbmQgeW91ciBpbnRlcnJ1cHQgdHJlZSBhcyBkb2N1bWVudGVkCisgIFBDSSBiaW5kaW5nIHRvIE9wZW4gRmlybXdhcmUsIGFuZCB5b3VyIGludGVycnVwdCB0cmVlIGFzIGRvY3VtZW50ZWQKICAgaW4gT0YgaW50ZXJydXB0IHRyZWUgc3BlY2lmaWNhdGlvbi4KIAogICBhKSBUaGUgcm9vdCBub2RlCkBAIC04MDIsMjAgKzc1MiwxMiBAQAogICAgIC0gbW9kZWwgOiB0aGlzIGlzIHlvdXIgYm9hcmQgbmFtZS9tb2RlbAogICAgIC0gI2FkZHJlc3MtY2VsbHMgOiBhZGRyZXNzIHJlcHJlc2VudGF0aW9uIGZvciAicm9vdCIgZGV2aWNlcwogICAgIC0gI3NpemUtY2VsbHM6IHRoZSBzaXplIHJlcHJlc2VudGF0aW9uIGZvciAicm9vdCIgZGV2aWNlcwotICAgIC0gZGV2aWNlX3R5cGUgOiBUaGlzIHByb3BlcnR5IHNob3VsZG4ndCBiZSBuZWNlc3NhcnkuIEhvd2V2ZXIsIGlmCi0gICAgICB5b3UgZGVjaWRlIHRvIGNyZWF0ZSBhIGRldmljZV90eXBlIGZvciB5b3VyIHJvb3Qgbm9kZSwgbWFrZSBzdXJlIGl0Ci0gICAgICBpcyBfbm90XyAiY2hycCIgdW5sZXNzIHlvdXIgcGxhdGZvcm0gaXMgYSBwU2VyaWVzIG9yIFBBUFIgY29tcGxpYW50Ci0gICAgICBvbmUgZm9yIDY0LWJpdCwgb3IgYSBDSFJQLXR5cGUgbWFjaGluZSBmb3IgMzItYml0IGFzIHRoaXMgd2lsbAotICAgICAgbWF0Y2hlZCBieSB0aGUga2VybmVsIHRoaXMgd2F5LgotCi0gIEFkZGl0aW9uYWxseSwgc29tZSByZWNvbW1lbmRlZCBwcm9wZXJ0aWVzIGFyZToKLQogICAgIC0gY29tcGF0aWJsZSA6IHRoZSBib2FyZCAiZmFtaWx5IiBnZW5lcmFsbHkgZmluZHMgaXRzIHdheSBoZXJlLAogICAgICAgZm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIDIgYm9hcmQgbW9kZWxzIHdpdGggYSBzaW1pbGFyIGxheW91dCwKICAgICAgIHRoYXQgdHlwaWNhbGx5IGdldCBkcml2ZW4gYnkgdGhlIHNhbWUgcGxhdGZvcm0gY29kZSBpbiB0aGUKLSAgICAgIGtlcm5lbCwgeW91IHdvdWxkIHVzZSBhIGRpZmZlcmVudCAibW9kZWwiIHByb3BlcnR5IGJ1dCBwdXQgYQotICAgICAgdmFsdWUgaW4gImNvbXBhdGlibGUiLiBUaGUga2VybmVsIGRvZXNuJ3QgZGlyZWN0bHkgdXNlIHRoYXQKLSAgICAgIHZhbHVlIGJ1dCBpdCBpcyBnZW5lcmFsbHkgdXNlZnVsLgorICAgICAga2VybmVsLCB5b3Ugd291bGQgc3BlY2lmeSB0aGUgZXhhY3QgYm9hcmQgbW9kZWwgaW4gdGhlCisgICAgICBjb21wYXRpYmxlIHByb3BlcnR5IGZvbGxvd2VkIGJ5IGFuIGVudHJ5IHRoYXQgcmVwcmVzZW50cyB0aGUgU29DCisgICAgICBtb2RlbC4KIAogICBUaGUgcm9vdCBub2RlIGlzIGFsc28gZ2VuZXJhbGx5IHdoZXJlIHlvdSBhZGQgYWRkaXRpb25hbCBwcm9wZXJ0aWVzCiAgIHNwZWNpZmljIHRvIHlvdXIgYm9hcmQgbGlrZSB0aGUgc2VyaWFsIG51bWJlciBpZiBhbnksIHRoYXQgc29ydCBvZgpAQCAtODQxLDggKzc4MywxMSBAQAogCiAgIFNvIHVuZGVyIC9jcHVzLCB5b3UgYXJlIHN1cHBvc2VkIHRvIGNyZWF0ZSBhIG5vZGUgZm9yIGV2ZXJ5IENQVSBvbgogICB0aGUgbWFjaGluZS4gVGhlcmUgaXMgbm8gc3BlY2lmaWMgcmVzdHJpY3Rpb24gb24gdGhlIG5hbWUgb2YgdGhlCi0gIENQVSwgdGhvdWdoIEl0J3MgY29tbW9uIHByYWN0aWNlIHRvIGNhbGwgaXQgUG93ZXJQQyw8bmFtZT4uIEZvcgorICBDUFUsIHRob3VnaCBpdCdzIGNvbW1vbiB0byBjYWxsIGl0IDxhcmNoaXRlY3R1cmU+LDxjb3JlPi4gRm9yCiAgIGV4YW1wbGUsIEFwcGxlIHVzZXMgUG93ZXJQQyxHNSB3aGlsZSBJQk0gdXNlcyBQb3dlclBDLDk3MEZYLgorICBIb3dldmVyLCB0aGUgR2VuZXJpYyBOYW1lcyBjb252ZW50aW9uIHN1Z2dlc3RzIHRoYXQgaXQgd291bGQgYmUKKyAgYmV0dGVyIHRvIHNpbXBseSB1c2UgJ2NwdScgZm9yIGVhY2ggY3B1IG5vZGUgYW5kIHVzZSB0aGUgY29tcGF0aWJsZQorICBwcm9wZXJ0eSB0byBpZGVudGlmeSB0aGUgc3BlY2lmaWMgY3B1IGNvcmUuCiAKICAgUmVxdWlyZWQgcHJvcGVydGllczoKIApAQCAtOTIzLDcgKzg2OCw3IEBACiAKICAgZSkgVGhlIC9jaG9zZW4gbm9kZQogCi0gIFRoaXMgbm9kZSBpcyBhIGJpdCAic3BlY2lhbCIuIE5vcm1hbGx5LCB0aGF0J3Mgd2hlcmUgb3BlbiBmaXJtd2FyZQorICBUaGlzIG5vZGUgaXMgYSBiaXQgInNwZWNpYWwiLiBOb3JtYWxseSwgdGhhdCdzIHdoZXJlIE9wZW4gRmlybXdhcmUKICAgcHV0cyBzb21lIHZhcmlhYmxlIGVudmlyb25tZW50IGluZm9ybWF0aW9uLCBsaWtlIHRoZSBhcmd1bWVudHMsIG9yCiAgIHRoZSBkZWZhdWx0IGlucHV0L291dHB1dCBkZXZpY2VzLgogCkBAIC05NDAsMTEgKzg4NSw3IEBACiAgICAgICBjb25zb2xlIGRldmljZSBpZiBhbnkuIFR5cGljYWxseSwgaWYgeW91IGhhdmUgc2VyaWFsIGRldmljZXMgb24KICAgICAgIHlvdXIgYm9hcmQsIHlvdSBtYXkgd2FudCB0byBwdXQgdGhlIGZ1bGwgcGF0aCB0byB0aGUgb25lIHNldCBhcwogICAgICAgdGhlIGRlZmF1bHQgY29uc29sZSBpbiB0aGUgZmlybXdhcmUgaGVyZSwgZm9yIHRoZSBrZXJuZWwgdG8gcGljawotICAgICAgaXQgdXAgYXMgaXRzIG93biBkZWZhdWx0IGNvbnNvbGUuIElmIHlvdSBsb29rIGF0IHRoZSBmdW5jdGlvbgotICAgICAgc2V0X3ByZWZlcnJlZF9jb25zb2xlKCkgaW4gYXJjaC9wcGM2NC9rZXJuZWwvc2V0dXAuYywgeW91J2xsIHNlZQotICAgICAgdGhhdCB0aGUga2VybmVsIHRyaWVzIHRvIGZpbmQgb3V0IHRoZSBkZWZhdWx0IGNvbnNvbGUgYW5kIGhhcwotICAgICAga25vd2xlZGdlIG9mIHZhcmlvdXMgdHlwZXMgbGlrZSA4MjUwIHNlcmlhbCBwb3J0cy4gWW91IG1heSB3YW50Ci0gICAgICB0byBleHRlbmQgdGhpcyBmdW5jdGlvbiB0byBhZGQgeW91ciBvd24uCisgICAgICBpdCB1cCBhcyBpdHMgb3duIGRlZmF1bHQgY29uc29sZS4KIAogICBOb3RlIHRoYXQgdS1ib290IGNyZWF0ZXMgYW5kIGZpbGxzIGluIHRoZSBjaG9zZW4gbm9kZSBmb3IgcGxhdGZvcm1zCiAgIHRoYXQgdXNlIGl0LgpAQCAtOTU1LDIzICs4OTYsMjMgQEAKIAogICBmKSB0aGUgL3NvYzxTT0NuYW1lPiBub2RlCiAKLSAgVGhpcyBub2RlIGlzIHVzZWQgdG8gcmVwcmVzZW50IGEgc3lzdGVtLW9uLWEtY2hpcCAoU09DKSBhbmQgbXVzdCBiZQotICBwcmVzZW50IGlmIHRoZSBwcm9jZXNzb3IgaXMgYSBTT0MuIFRoZSB0b3AtbGV2ZWwgc29jIG5vZGUgY29udGFpbnMKLSAgaW5mb3JtYXRpb24gdGhhdCBpcyBnbG9iYWwgdG8gYWxsIGRldmljZXMgb24gdGhlIFNPQy4gVGhlIG5vZGUgbmFtZQotICBzaG91bGQgY29udGFpbiBhIHVuaXQgYWRkcmVzcyBmb3IgdGhlIFNPQywgd2hpY2ggaXMgdGhlIGJhc2UgYWRkcmVzcwotICBvZiB0aGUgbWVtb3J5LW1hcHBlZCByZWdpc3RlciBzZXQgZm9yIHRoZSBTT0MuIFRoZSBuYW1lIG9mIGFuIHNvYworICBUaGlzIG5vZGUgaXMgdXNlZCB0byByZXByZXNlbnQgYSBzeXN0ZW0tb24tYS1jaGlwIChTb0MpIGFuZCBtdXN0IGJlCisgIHByZXNlbnQgaWYgdGhlIHByb2Nlc3NvciBpcyBhIFNvQy4gVGhlIHRvcC1sZXZlbCBzb2Mgbm9kZSBjb250YWlucworICBpbmZvcm1hdGlvbiB0aGF0IGlzIGdsb2JhbCB0byBhbGwgZGV2aWNlcyBvbiB0aGUgU29DLiBUaGUgbm9kZSBuYW1lCisgIHNob3VsZCBjb250YWluIGEgdW5pdCBhZGRyZXNzIGZvciB0aGUgU29DLCB3aGljaCBpcyB0aGUgYmFzZSBhZGRyZXNzCisgIG9mIHRoZSBtZW1vcnktbWFwcGVkIHJlZ2lzdGVyIHNldCBmb3IgdGhlIFNvQy4gVGhlIG5hbWUgb2YgYW4gU29DCiAgIG5vZGUgc2hvdWxkIHN0YXJ0IHdpdGggInNvYyIsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoZSBuYW1lIHNob3VsZAogICByZXByZXNlbnQgdGhlIHBhcnQgbnVtYmVyIGZvciB0aGUgc29jLiAgRm9yIGV4YW1wbGUsIHRoZSBNUEM4NTQwJ3MKICAgc29jIG5vZGUgd291bGQgYmUgY2FsbGVkICJzb2M4NTQwIi4KIAogICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgogCi0gICAgLSBkZXZpY2VfdHlwZSA6IFNob3VsZCBiZSAic29jIgogICAgIC0gcmFuZ2VzIDogU2hvdWxkIGJlIGRlZmluZWQgYXMgc3BlY2lmaWVkIGluIDEpIHRvIGRlc2NyaWJlIHRoZQotICAgICAgdHJhbnNsYXRpb24gb2YgU09DIGFkZHJlc3NlcyBmb3IgbWVtb3J5IG1hcHBlZCBTT0MgcmVnaXN0ZXJzLgotICAgIC0gYnVzLWZyZXF1ZW5jeTogQ29udGFpbnMgdGhlIGJ1cyBmcmVxdWVuY3kgZm9yIHRoZSBTT0Mgbm9kZS4KKyAgICAgIHRyYW5zbGF0aW9uIG9mIFNvQyBhZGRyZXNzZXMgZm9yIG1lbW9yeSBtYXBwZWQgU29DIHJlZ2lzdGVycy4KKyAgICAtIGJ1cy1mcmVxdWVuY3k6IENvbnRhaW5zIHRoZSBidXMgZnJlcXVlbmN5IGZvciB0aGUgU29DIG5vZGUuCiAgICAgICBUeXBpY2FsbHksIHRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGlzIGZpbGxlZCBpbiBieSB0aGUgYm9vdAogICAgICAgbG9hZGVyLgorICAgIC0gY29tcGF0aWJsZSA6IEV4YWN0IG1vZGVsIG9mIHRoZSBTb0MKIAogCiAgIFJlY29tbWVuZGVkIHByb3BlcnRpZXM6CkBAIC0xMTU1LDEyICsxMDk2LDEzIEBACiAKICAgLSBBbiBleGFtcGxlIG9mIGNvZGUgZm9yIGl0ZXJhdGluZyBub2RlcyAmIHJldHJpZXZpbmcgcHJvcGVydGllcwogICAgIGRpcmVjdGx5IGZyb20gdGhlIGZsYXR0ZW5lZCB0cmVlIGZvcm1hdCBjYW4gYmUgZm91bmQgaW4gdGhlIGtlcm5lbAotICAgIGZpbGUgYXJjaC9wcGM2NC9rZXJuZWwvcHJvbS5jLCBsb29rIGF0IHNjYW5fZmxhdF9kdCgpIGZ1bmN0aW9uLAorICAgIGZpbGUgZHJpdmVycy9vZi9mZHQuYy4gIExvb2sgYXQgdGhlIG9mX3NjYW5fZmxhdF9kdCgpIGZ1bmN0aW9uLAogICAgIGl0cyB1c2FnZSBpbiBlYXJseV9pbml0X2RldnRyZWUoKSwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHZhcmlvdXMKICAgICBlYXJseV9pbml0X2R0X3NjYW5fKigpIGNhbGxiYWNrcy4gVGhhdCBjb2RlIGNhbiBiZSByZS11c2VkIGluIGEKICAgICBHUEwgYm9vdGxvYWRlciwgYW5kIGFzIHRoZSBhdXRob3Igb2YgdGhhdCBjb2RlLCBJIHdvdWxkIGJlIGhhcHB5CiAgICAgdG8gZGlzY3VzcyBwb3NzaWJsZSBmcmVlIGxpY2Vuc2luZyB0byBhbnkgdmVuZG9yIHdobyB3aXNoZXMgdG8KICAgICBpbnRlZ3JhdGUgYWxsIG9yIHBhcnQgb2YgdGhpcyBjb2RlIGludG8gYSBub24tR1BMIGJvb3Rsb2FkZXIuCisgICAgKHJlZmVyZW5jZSBuZWVkZWQ7IHdobyBpcyAnSScgaGVyZT8gLS0tZ2NsIEphbiAzMSwgMjAxMSkKIAogCiAKQEAgLTEyMDMsMTggKzExNDUsMTkgQEAKIDIpIFJlcHJlc2VudGluZyBkZXZpY2VzIHdpdGhvdXQgYSBjdXJyZW50IE9GIHNwZWNpZmljYXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ3VycmVudGx5LCB0aGVyZSBhcmUgbWFueSBkZXZpY2VzIG9uIFNPQ3MgdGhhdCBkbyBub3QgaGF2ZSBhIHN0YW5kYXJkCi1yZXByZXNlbnRhdGlvbiBwcmUtZGVmaW5lZCBhcyBwYXJ0IG9mIHRoZSBvcGVuIGZpcm13YXJlCi1zcGVjaWZpY2F0aW9ucywgbWFpbmx5IGJlY2F1c2UgdGhlIGJvYXJkcyB0aGF0IGNvbnRhaW4gdGhlc2UgU09DcyBhcmUKLW5vdCBjdXJyZW50bHkgYm9vdGVkIHVzaW5nIG9wZW4gZmlybXdhcmUuICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zCi1kZXNjcmlwdGlvbnMgZm9yIHRoZSBTT0MgZGV2aWNlcyBmb3Igd2hpY2ggbmV3IG5vZGVzIGhhdmUgYmVlbgotZGVmaW5lZDsgdGhpcyBsaXN0IHdpbGwgZXhwYW5kIGFzIG1vcmUgYW5kIG1vcmUgU09DLWNvbnRhaW5pbmcKLXBsYXRmb3JtcyBhcmUgbW92ZWQgb3ZlciB0byB1c2UgdGhlIGZsYXR0ZW5lZC1kZXZpY2UtdHJlZSBtb2RlbC4KK0N1cnJlbnRseSwgdGhlcmUgYXJlIG1hbnkgZGV2aWNlcyBvbiBTb0NzIHRoYXQgZG8gbm90IGhhdmUgYSBzdGFuZGFyZAorcmVwcmVzZW50YXRpb24gZGVmaW5lZCBhcyBwYXJ0IG9mIHRoZSBPcGVuIEZpcm13YXJlIHNwZWNpZmljYXRpb25zLAorbWFpbmx5IGJlY2F1c2UgdGhlIGJvYXJkcyB0aGF0IGNvbnRhaW4gdGhlc2UgU29DcyBhcmUgbm90IGN1cnJlbnRseQorYm9vdGVkIHVzaW5nIE9wZW4gRmlybXdhcmUuICBCaW5kaW5nIGRvY3VtZW50YXRpb24gZm9yIG5ldyBkZXZpY2VzCitzaG91bGQgYmUgYWRkZWQgdG8gdGhlIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncyBkaXJlY3RvcnkuCitUaGF0IGRpcmVjdG9yeSB3aWxsIGV4cGFuZCBhcyBkZXZpY2UgdHJlZSBzdXBwb3J0IGlzIGFkZGVkIHRvIG1vcmUgYW5kCittb3JlIFNvQ3MuCisKIAogVklJIC0gU3BlY2lmeWluZyBpbnRlcnJ1cHQgaW5mb3JtYXRpb24gZm9yIGRldmljZXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUgZGV2aWNlIHRyZWUgcmVwcmVzZW50cyB0aGUgYnVzc2VzIGFuZCBkZXZpY2VzIG9mIGEgaGFyZHdhcmUKK1RoZSBkZXZpY2UgdHJlZSByZXByZXNlbnRzIHRoZSBidXNlcyBhbmQgZGV2aWNlcyBvZiBhIGhhcmR3YXJlCiBzeXN0ZW0gaW4gYSBmb3JtIHNpbWlsYXIgdG8gdGhlIHBoeXNpY2FsIGJ1cyB0b3BvbG9neSBvZiB0aGUKIGhhcmR3YXJlLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggOGM1OTRjNC4uYjNmMzVlNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtMzU3LDE0ICszNTcsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglfX2RvX0lSUSBhbGwgaW4gb25lIGZpdHMgbm90aGluZyBpbnRlcnJ1cHQgaGFuZGxlcgotV2hlbjoJMi42LjMyCi1XaHk6CV9fZG9fSVJRIHdhcyBrZXB0IGZvciBlYXN5IG1pZ3JhdGlvbiB0byB0aGUgdHlwZSBmbG93IGhhbmRsZXJzLgotCU1vcmUgdGhhbiB0d28geWVhcnMgb2YgbWlncmF0aW9uIHRpbWUgaXMgZW5vdWdoLgotV2hvOglUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJZmFrZXBocCBhbmQgYXNzb2NpYXRlZCBzeXNmcyBmaWxlcyBpbiAvc3lzL2J1cy9wY2kvc2xvdHMvCiBXaGVuOgkyMDExCiBXaHk6CUluIDIuNi4yNywgdGhlIHNlbWFudGljcyBvZiAvc3lzL2J1cy9wY2kvc2xvdHMgd2FzIHJlZGVmaW5lZCB0bwpAQCAtNjExLDMgKzYwMywxOSBAQAogV2hvOglKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0Oglub3N3YXBhY2NvdW50IGtlcm5lbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVyCitXaGVuOgkyLjYuNDAKK1doeToJVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIG9mIG1lbXN3IGZlYXR1cmUgZW5hYmxlZCBieQorCUNPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSX1NXQVAgY291bGQgYmUgZGlzYWJsZWQgYnkgdGhlIG5vc3dhcGFjY291bnQKKwlrZXJuZWwgcGFyYW1ldGVyIChpbnRyb2R1Y2VkIGluIDIuNi4yOS1yYzEpLiBMYXRlciBvbiwgdGhpcyBkZWNpc2lvbgorCXR1cm5lZCBvdXQgdG8gYmUgbm90IGlkZWFsIGJlY2F1c2Ugd2UgY2Fubm90IGhhdmUgdGhlIGZlYXR1cmUgY29tcGlsZWQKKwlpbiBhbmQgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgbGV0IG9ubHkgaW50ZXJlc3RlZCB0byBlbmFibGUgaXQKKwkoZS5nLiBnZW5lcmFsIGRpc3RyaWJ1dGlvbiBrZXJuZWxzIG1pZ2h0IG5lZWQgaXQpLiBUaGVyZWZvcmUgd2UgaGF2ZQorCWFkZGVkIHN3YXBhY2NvdW50Wz0wfDFdIHBhcmFtZXRlciAoaW50cm9kdWNlZCBpbiAyLjYuMzcpIHdoaWNoIHByb3ZpZGVzCisJdGhlIGJvdGggcG9zc2liaWxpdGllcy4gSWYgd2UgcmVtb3ZlIG5vc3dhcGFjY291bnQgd2Ugd2lsbCBoYXZlCisJbGVzcyBjb21tYW5kIGxpbmUgcGFyYW1ldGVycyB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYW5kIHdlCisJY2FuIGFsc28gY2xlYW51cCB0aGUgcGFyYW1ldGVyIGhhbmRsaW5nIGEgYml0ICgpLgorV2hvOglNaWNoYWwgSG9ja28gPG1ob2Nrb0BzdXNlLmN6PgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dAppbmRleCA2ZWY4Y2YzLi45MzNiYzY2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQKQEAgLTQ2MCw2ICs0NjAsOCBAQAogMi4xLjMwOgogCS0gRml4IHdyaXRldigpIChpdCBrZXB0IHdyaXRpbmcgdGhlIGZpcnN0IHNlZ21lbnQgb3ZlciBhbmQgb3ZlciBhZ2FpbgogCSAgaW5zdGVhZCBvZiBtb3Zpbmcgb250byBzdWJzZXF1ZW50IHNlZ21lbnRzKS4KKwktIEZpeCBjcmFzaCBpbiBudGZzX21mdF9yZWNvcmRfYWxsb2MoKSB3aGVuIG1hcHBpbmcgdGhlIG5ldyBleHRlbnQgbWZ0CisJICByZWNvcmQgZmFpbGVkLgogMi4xLjI5OgogCS0gRml4IGEgZGVhZGxvY2sgd2hlbiBtb3VudGluZyByZWFkLXdyaXRlLgogMi4xLjI4OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9qYzQyIGIvRG9jdW1lbnRhdGlvbi9od21vbi9qYzQyCmluZGV4IDBlNzZlZjEuLmEyMmVjZjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vamM0MgorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2pjNDIKQEAgLTUxLDcgKzUxLDggQEAKICAgKiBKRURFQyBKQyA0Mi40IGNvbXBsaWFudCB0ZW1wZXJhdHVyZSBzZW5zb3IgY2hpcHMKICAgICBQcmVmaXg6ICdqYzQyJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgxOCAtIDB4MWYKLSAgICBEYXRhc2hlZXQ6IC0KKyAgICBEYXRhc2hlZXQ6CisJaHR0cDovL3d3dy5qZWRlYy5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9kb2NzLzRfMDFfMDRSMTkucGRmCiAKIEF1dGhvcjoKIAlHdWVudGVyIFJvZWNrIDxndWVudGVyLnJvZWNrQGVyaWNzc29uLmNvbT4KQEAgLTYwLDcgKzYxLDExIEBACiBEZXNjcmlwdGlvbgogLS0tLS0tLS0tLS0KIAotVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBKRURFQyBKQyA0Mi40IGNvbXBsaWFudCB0ZW1wZXJhdHVyZSBzZW5zb3JzLgorVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBKRURFQyBKQyA0Mi40IGNvbXBsaWFudCB0ZW1wZXJhdHVyZSBzZW5zb3JzLAord2hpY2ggYXJlIHVzZWQgb24gbWFueSBERFIzIG1lbW9yeSBtb2R1bGVzIGZvciBtb2JpbGUgZGV2aWNlcyBhbmQgc2VydmVycy4gU29tZQorc3lzdGVtcyB1c2UgdGhlIHNlbnNvciB0byBwcmV2ZW50IG1lbW9yeSBvdmVyaGVhdGluZyBieSBhdXRvbWF0aWNhbGx5IHRocm90dGxpbmcKK3RoZSBtZW1vcnkgY29udHJvbGxlci4KKwogVGhlIGRyaXZlciBhdXRvLWRldGVjdHMgdGhlIGNoaXBzIGxpc3RlZCBhYm92ZSwgYnV0IGNhbiBiZSBtYW51YWxseSBpbnN0YW50aWF0ZWQKIHRvIHN1cHBvcnQgb3RoZXIgSkMgNDIuNCBjb21wbGlhbnQgY2hpcHMuCiAKQEAgLTgxLDE1ICs4NiwxOSBAQAogd2hpY2ggYXBwbGllcyB0byBhbGwgbGltaXRzLiBUaGlzIHJlZ2lzdGVyIGNhbiBiZSB3cml0dGVuIGJ5IHdyaXRpbmcgaW50bwogdGVtcDFfY3JpdF9oeXN0LiBPdGhlciBoeXN0ZXJlc2lzIGF0dHJpYnV0ZXMgYXJlIHJlYWQtb25seS4KIAorSWYgdGhlIEJJT1MgaGFzIGNvbmZpZ3VyZWQgdGhlIHNlbnNvciBmb3IgYXV0b21hdGljIHRlbXBlcmF0dXJlIG1hbmFnZW1lbnQsIGl0CitpcyBsaWtlbHkgdGhhdCBpdCBoYXMgbG9ja2VkIHRoZSByZWdpc3RlcnMsIGkuZS4sIHRoYXQgdGhlIHRlbXBlcmF0dXJlIGxpbWl0cworY2Fubm90IGJlIGNoYW5nZWQuCisKIFN5c2ZzIGVudHJpZXMKIC0tLS0tLS0tLS0tLS0KIAogdGVtcDFfaW5wdXQJCVRlbXBlcmF0dXJlIChSTykKLXRlbXAxX21pbgkJTWluaW11bSB0ZW1wZXJhdHVyZSAoUlcpCi10ZW1wMV9tYXgJCU1heGltdW0gdGVtcGVyYXR1cmUgKFJXKQotdGVtcDFfY3JpdAkJQ3JpdGljYWwgaGlnaCB0ZW1wZXJhdHVyZSAoUlcpCit0ZW1wMV9taW4JCU1pbmltdW0gdGVtcGVyYXR1cmUgKFJPIG9yIFJXKQordGVtcDFfbWF4CQlNYXhpbXVtIHRlbXBlcmF0dXJlIChSTyBvciBSVykKK3RlbXAxX2NyaXQJCUNyaXRpY2FsIGhpZ2ggdGVtcGVyYXR1cmUgKFJPIG9yIFJXKQogCi10ZW1wMV9jcml0X2h5c3QJCUNyaXRpY2FsIGh5c3RlcmVzaXMgdGVtcGVyYXR1cmUgKFJXKQordGVtcDFfY3JpdF9oeXN0CQlDcml0aWNhbCBoeXN0ZXJlc2lzIHRlbXBlcmF0dXJlIChSTyBvciBSVykKIHRlbXAxX21heF9oeXN0CQlNYXhpbXVtIGh5c3RlcmVzaXMgdGVtcGVyYXR1cmUgKFJPKQogCiB0ZW1wMV9taW5fYWxhcm0JCVRlbXBlcmF0dXJlIGxvdyBhbGFybQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9rMTB0ZW1wIGIvRG9jdW1lbnRhdGlvbi9od21vbi9rMTB0ZW1wCmluZGV4IDY1MjZlZWUuLmQyYjU2YTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vazEwdGVtcAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2sxMHRlbXAKQEAgLTksNiArOSw4IEBACiAgIFNvY2tldCBTMUczOiBBdGhsb24gSUksIFNlbXByb24sIFR1cmlvbiBJSQogKiBBTUQgRmFtaWx5IDExaCBwcm9jZXNzb3JzOgogICBTb2NrZXQgUzFHMjogQXRobG9uIChYMiksIFNlbXByb24gKFgyKSwgVHVyaW9uIFgyIChVbHRyYSkKKyogQU1EIEZhbWlseSAxMmggcHJvY2Vzc29yczogIkxsYW5vIgorKiBBTUQgRmFtaWx5IDE0aCBwcm9jZXNzb3JzOiAiQnJhem9zIiAoQy9FL0ctU2VyaWVzKQogCiAgIFByZWZpeDogJ2sxMHRlbXAnCiAgIEFkZHJlc3NlcyBzY2FubmVkOiBQQ0kgc3BhY2UKQEAgLTE3LDEwICsxOSwxNCBAQAogICAgIGh0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvUHJvY2Vzc29yX1RlY2hEb2NzLzMxMTE2LnBkZgogICBCSU9TIGFuZCBLZXJuZWwgRGV2ZWxvcGVyJ3MgR3VpZGUgKEJLREcpIGZvciBBTUQgRmFtaWx5IDExaCBQcm9jZXNzb3JzOgogICAgIGh0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvUHJvY2Vzc29yX1RlY2hEb2NzLzQxMjU2LnBkZgorICBCSU9TIGFuZCBLZXJuZWwgRGV2ZWxvcGVyJ3MgR3VpZGUgKEJLREcpIGZvciBBTUQgRmFtaWx5IDE0aCBNb2RlbHMgMDBoLTBGaCBQcm9jZXNzb3JzOgorICAgIGh0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvUHJvY2Vzc29yX1RlY2hEb2NzLzQzMTcwLnBkZgogICBSZXZpc2lvbiBHdWlkZSBmb3IgQU1EIEZhbWlseSAxMGggUHJvY2Vzc29yczoKICAgICBodHRwOi8vc3VwcG9ydC5hbWQuY29tL3VzL1Byb2Nlc3Nvcl9UZWNoRG9jcy80MTMyMi5wZGYKICAgUmV2aXNpb24gR3VpZGUgZm9yIEFNRCBGYW1pbHkgMTFoIFByb2Nlc3NvcnM6CiAgICAgaHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9Qcm9jZXNzb3JfVGVjaERvY3MvNDE3ODgucGRmCisgIFJldmlzaW9uIEd1aWRlIGZvciBBTUQgRmFtaWx5IDE0aCBNb2RlbHMgMDBoLTBGaCBQcm9jZXNzb3JzOgorICAgIGh0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvUHJvY2Vzc29yX1RlY2hEb2NzLzQ3NTM0LnBkZgogICBBTUQgRmFtaWx5IDExaCBQcm9jZXNzb3IgUG93ZXIgYW5kIFRoZXJtYWwgRGF0YSBTaGVldCBmb3IgTm90ZWJvb2tzOgogICAgIGh0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvUHJvY2Vzc29yX1RlY2hEb2NzLzQzMzczLnBkZgogICBBTUQgRmFtaWx5IDEwaCBTZXJ2ZXIgYW5kIFdvcmtzdGF0aW9uIFByb2Nlc3NvciBQb3dlciBhbmQgVGhlcm1hbCBEYXRhIFNoZWV0OgpAQCAtMzQsNyArNDAsNyBAQAogLS0tLS0tLS0tLS0KIAogVGhpcyBkcml2ZXIgcGVybWl0cyByZWFkaW5nIG9mIHRoZSBpbnRlcm5hbCB0ZW1wZXJhdHVyZSBzZW5zb3Igb2YgQU1ECi1GYW1pbHkgMTBoIGFuZCAxMWggcHJvY2Vzc29ycy4KK0ZhbWlseSAxMGgvMTFoLzEyaC8xNGggcHJvY2Vzc29ycy4KIAogQWxsIHRoZXNlIHByb2Nlc3NvcnMgaGF2ZSBhIHNlbnNvciwgYnV0IG9uIHRob3NlIGZvciBTb2NrZXQgRiBvciBBTTIrLAogdGhlIHNlbnNvciBtYXkgcmV0dXJuIGluY29uc2lzdGVudCB2YWx1ZXMgKGVycmF0dW0gMzE5KS4gIFRoZSBkcml2ZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggYjcyZTA3MS4uZjRhMDRjMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTQzLDExICs0MywxMSBAQAogCUFWUjMyCUFWUjMyIGFyY2hpdGVjdHVyZSBpcyBlbmFibGVkLgogCUFYMjUJQXBwcm9wcmlhdGUgQVguMjUgc3VwcG9ydCBpcyBlbmFibGVkLgogCUJMQUNLRklOIEJsYWNrZmluIGFyY2hpdGVjdHVyZSBpcyBlbmFibGVkLgorCURSTQlEaXJlY3QgUmVuZGVyaW5nIE1hbmFnZW1lbnQgc3VwcG9ydCBpcyBlbmFibGVkLgorCURZTkFNSUNfREVCVUcgQnVpbGQgaW4gZGVidWcgbWVzc2FnZXMgYW5kIGVuYWJsZSB0aGVtIGF0IHJ1bnRpbWUKIAlFREQJQklPUyBFbmhhbmNlZCBEaXNrIERyaXZlIFNlcnZpY2VzIChFREQpIGlzIGVuYWJsZWQKIAlFRkkJRUZJIFBhcnRpdGlvbmluZyAoR1BUKSBpcyBlbmFibGVkCiAJRUlERQlFSURFL0FUQVBJIHN1cHBvcnQgaXMgZW5hYmxlZC4KLQlEUk0JRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VtZW50IHN1cHBvcnQgaXMgZW5hYmxlZC4KLQlEWU5BTUlDX0RFQlVHIEJ1aWxkIGluIGRlYnVnIG1lc3NhZ2VzIGFuZCBlbmFibGUgdGhlbSBhdCBydW50aW1lCiAJRkIJVGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgaXMgZW5hYmxlZC4KIAlHQ09WCUdDT1YgcHJvZmlsaW5nIGlzIGVuYWJsZWQuCiAJSFcJQXBwcm9wcmlhdGUgaGFyZHdhcmUgaXMgZW5hYmxlZC4KQEAgLTE0NCw2ICsxNDQsMTEgQEAKIGFuZCBpcyBiZXR3ZWVuIDI1NiBhbmQgNDA5NiBjaGFyYWN0ZXJzLiBJdCBpcyBkZWZpbmVkIGluIHRoZSBmaWxlCiAuL2luY2x1ZGUvYXNtL3NldHVwLmggYXMgQ09NTUFORF9MSU5FX1NJWkUuCiAKK0ZpbmFsbHksIHRoZSBbS01HXSBzdWZmaXggaXMgY29tbW9ubHkgZGVzY3JpYmVkIGFmdGVyIGEgbnVtYmVyIG9mIGtlcm5lbAorcGFyYW1ldGVyIHZhbHVlcy4gVGhlc2UgJ0snLCAnTScsIGFuZCAnRycgbGV0dGVycyByZXByZXNlbnQgdGhlIF9iaW5hcnlfCittdWx0aXBsaWVycyAnS2lsbycsICdNZWdhJywgYW5kICdHaWdhJywgZXF1YWxsaW5nIDJeMTAsIDJeMjAsIGFuZCAyXjMwCitieXRlcyByZXNwZWN0aXZlbHkuIFN1Y2ggbGV0dGVyIHN1ZmZpeGVzIGNhbiBhbHNvIGJlIGVudGlyZWx5IG9taXR0ZWQuCisKIAogCWFjcGk9CQlbSFcsQUNQSSxYODZdCiAJCQlBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UKQEAgLTU0NSwxNiArNTUwLDIwIEBACiAJCQlGb3JtYXQ6CiAJCQk8Zmlyc3Rfc2xvdD4sPGxhc3Rfc2xvdD4sPHBvcnQ+LDxlbnVtX2JpdD5bLDxkZWJ1Zz5dCiAKLQljcmFzaGtlcm5lbD1ubltLTUddQHNzW0tNR10KLQkJCVtLTkxdIFJlc2VydmUgYSBjaHVuayBvZiBwaHlzaWNhbCBtZW1vcnkgdG8KLQkJCWhvbGQgYSBrZXJuZWwgdG8gc3dpdGNoIHRvIHdpdGgga2V4ZWMgb24gcGFuaWMuCisJY3Jhc2hrZXJuZWw9c2l6ZVtLTUddW0BvZmZzZXRbS01HXV0KKwkJCVtLTkxdIFVzaW5nIGtleGVjLCBMaW51eCBjYW4gc3dpdGNoIHRvIGEgJ2NyYXNoIGtlcm5lbCcKKwkJCXVwb24gcGFuaWMuIFRoaXMgcGFyYW1ldGVyIHJlc2VydmVzIHRoZSBwaHlzaWNhbAorCQkJbWVtb3J5IHJlZ2lvbiBbb2Zmc2V0LCBvZmZzZXQgKyBzaXplXSBmb3IgdGhhdCBrZXJuZWwKKwkJCWltYWdlLiBJZiAnQG9mZnNldCcgaXMgb21pdHRlZCwgdGhlbiBhIHN1aXRhYmxlIG9mZnNldAorCQkJaXMgc2VsZWN0ZWQgYXV0b21hdGljYWxseS4gQ2hlY2sKKwkJCURvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0IGZvciBmdXJ0aGVyIGRldGFpbHMuCiAKIAljcmFzaGtlcm5lbD1yYW5nZTE6c2l6ZTFbLHJhbmdlMjpzaXplMiwuLi5dW0BvZmZzZXRdCiAJCQlbS05MXSBTYW1lIGFzIGFib3ZlLCBidXQgZGVwZW5kcyBvbiB0aGUgbWVtb3J5CiAJCQlpbiB0aGUgcnVubmluZyBzeXN0ZW0uIFRoZSBzeW50YXggb2YgcmFuZ2UgaXMKIAkJCXN0YXJ0LVtlbmRdIHdoZXJlIHN0YXJ0IGFuZCBlbmQgYXJlIGJvdGgKIAkJCWEgbWVtb3J5IHVuaXQgKGFtb3VudFtLTUddKS4gU2VlIGFsc28KLQkJCURvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0IGZvciBhIGV4YW1wbGUuCisJCQlEb2N1bWVudGF0aW9uL2tkdW1wL2tkdW1wLnR4dCBmb3IgYW4gZXhhbXBsZS4KIAogCWNzODl4MF9kbWE9CVtIVyxORVRdCiAJCQlGb3JtYXQ6IDxkbWE+CkBAIC0xMjYyLDEwICsxMjcxLDkgQEAKIAkJCTYgKEtFUk5fSU5GTykJCWluZm9ybWF0aW9uYWwKIAkJCTcgKEtFUk5fREVCVUcpCQlkZWJ1Zy1sZXZlbCBtZXNzYWdlcwogCi0JbG9nX2J1Zl9sZW49bglTZXRzIHRoZSBzaXplIG9mIHRoZSBwcmludGsgcmluZyBidWZmZXIsIGluIGJ5dGVzLgotCQkJRm9ybWF0OiB7IG4gfCBuayB8IG5NIH0KLQkJCW4gbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4gIFRoZSBkZWZhdWx0IHNpemUKLQkJCWlzIHNldCBpbiB0aGUga2VybmVsIGNvbmZpZyBmaWxlLgorCWxvZ19idWZfbGVuPW5bS01HXQlTZXRzIHRoZSBzaXplIG9mIHRoZSBwcmludGsgcmluZyBidWZmZXIsCisJCQlpbiBieXRlcy4gIG4gbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4gIFRoZSBkZWZhdWx0CisJCQlzaXplIGlzIHNldCBpbiB0aGUga2VybmVsIGNvbmZpZyBmaWxlLgogCiAJbG9nby5ub2xvZ28JW0ZCXSBEaXNhYmxlcyBkaXNwbGF5IG9mIHRoZSBidWlsdC1pbiBMaW51eCBsb2dvLgogCQkJVGhpcyBtYXkgYmUgdXNlZCB0byBwcm92aWRlIG1vcmUgc2NyZWVuIHNwYWNlIGZvcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LmMgYi9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYwppbmRleCBkYzczYmM1NC4uZDlkYTdlMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LmMKKysrIGIvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LmMKQEAgLTM5LDYgKzM5LDkgQEAKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDxzdGRkZWYuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxwd2QuaD4KKyNpbmNsdWRlIDxncnAuaD4KKwogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2Jsay5oPgpAQCAtMjk4LDIwICszMDEsMjcgQEAKIAogCS8qCiAJICogV2UgdXNlIGEgcHJpdmF0ZSBtYXBwaW5nIChpZS4gaWYgd2Ugd3JpdGUgdG8gdGhlIHBhZ2UsIGl0IHdpbGwgYmUKLQkgKiBjb3BpZWQpLgorCSAqIGNvcGllZCkuIFdlIGFsbG9jYXRlIGFuIGV4dHJhIHR3byBwYWdlcyBQUk9UX05PTkUgdG8gYWN0IGFzIGd1YXJkCisJICogcGFnZXMgYWdhaW5zdCByZWFkL3dyaXRlIGF0dGVtcHRzIHRoYXQgZXhjZWVkIGFsbG9jYXRlZCBzcGFjZS4KIAkgKi8KLQlhZGRyID0gbW1hcChOVUxMLCBnZXRwYWdlc2l6ZSgpICogbnVtLAotCQkgICAgUFJPVF9SRUFEfFBST1RfV1JJVEV8UFJPVF9FWEVDLCBNQVBfUFJJVkFURSwgZmQsIDApOworCWFkZHIgPSBtbWFwKE5VTEwsIGdldHBhZ2VzaXplKCkgKiAobnVtKzIpLAorCQkgICAgUFJPVF9OT05FLCBNQVBfUFJJVkFURSwgZmQsIDApOworCiAJaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkKIAkJZXJyKDEsICJNbWFwcGluZyAldSBwYWdlcyBvZiAvZGV2L3plcm8iLCBudW0pOwogCisJaWYgKG1wcm90ZWN0KGFkZHIgKyBnZXRwYWdlc2l6ZSgpLCBnZXRwYWdlc2l6ZSgpICogbnVtLAorCQkgICAgIFBST1RfUkVBRHxQUk9UX1dSSVRFKSA9PSAtMSkKKwkJZXJyKDEsICJtcHJvdGVjdCBydyAldSBwYWdlcyBmYWlsZWQiLCBudW0pOworCiAJLyoKIAkgKiBPbmUgbmVhdCBtbWFwIGZlYXR1cmUgaXMgdGhhdCB5b3UgY2FuIGNsb3NlIHRoZSBmZCwgYW5kIGl0CiAJICogc3RheXMgbWFwcGVkLgogCSAqLwogCWNsb3NlKGZkKTsKIAotCXJldHVybiBhZGRyOworCS8qIFJldHVybiBhZGRyZXNzIGFmdGVyIFBST1RfTk9ORSBwYWdlICovCisJcmV0dXJuIGFkZHIgKyBnZXRwYWdlc2l6ZSgpOwogfQogCiAvKiBHZXQgc29tZSBtb3JlIHBhZ2VzIGZvciBhIGRldmljZS4gKi8KQEAgLTM0Myw3ICszNTMsNyBAQAogCSAqIGRvbmUgdG8gaXQuICBUaGlzIGFsbG93cyB1cyB0byBzaGFyZSB1bnRvdWNoZWQgbWVtb3J5IGJldHdlZW4KIAkgKiBHdWVzdHMuCiAJICovCi0JaWYgKG1tYXAoYWRkciwgbGVuLCBQUk9UX1JFQUR8UFJPVF9XUklURXxQUk9UX0VYRUMsCisJaWYgKG1tYXAoYWRkciwgbGVuLCBQUk9UX1JFQUR8UFJPVF9XUklURSwKIAkJIE1BUF9GSVhFRHxNQVBfUFJJVkFURSwgZmQsIG9mZnNldCkgIT0gTUFQX0ZBSUxFRCkKIAkJcmV0dXJuOwogCkBAIC01NzMsMTAgKzU4MywxMCBAQAogCQkJICAgIHVuc2lnbmVkIGludCBsaW5lKQogewogCS8qCi0JICogV2UgaGF2ZSB0byBzZXBhcmF0ZWx5IGNoZWNrIGFkZHIgYW5kIGFkZHIrc2l6ZSwgYmVjYXVzZSBzaXplIGNvdWxkCi0JICogYmUgaHVnZSBhbmQgYWRkciArIHNpemUgbWlnaHQgd3JhcCBhcm91bmQuCisJICogQ2hlY2sgaWYgdGhlIHJlcXVlc3RlZCBhZGRyZXNzIGFuZCBzaXplIGV4Y2VlZHMgdGhlIGFsbG9jYXRlZCBtZW1vcnksCisJICogb3IgYWRkciArIHNpemUgd3JhcHMgYXJvdW5kLgogCSAqLwotCWlmIChhZGRyID49IGd1ZXN0X2xpbWl0IHx8IGFkZHIgKyBzaXplID49IGd1ZXN0X2xpbWl0KQorCWlmICgoYWRkciArIHNpemUpID4gZ3Vlc3RfbGltaXQgfHwgKGFkZHIgKyBzaXplKSA8IGFkZHIpCiAJCWVycngoMSwgIiVzOiVpOiBJbnZhbGlkIGFkZHJlc3MgJSNseCIsIF9fRklMRV9fLCBsaW5lLCBhZGRyKTsKIAkvKgogCSAqIFdlIHJldHVybiBhIHBvaW50ZXIgZm9yIHRoZSBjYWxsZXIncyBjb252ZW5pZW5jZSwgbm93IHdlIGtub3cgaXQncwpAQCAtMTg3Miw2ICsxODgyLDggQEAKIAl7ICJibG9jayIsIDEsIE5VTEwsICdiJyB9LAogCXsgInJuZyIsIDAsIE5VTEwsICdyJyB9LAogCXsgImluaXRyZCIsIDEsIE5VTEwsICdpJyB9LAorCXsgInVzZXJuYW1lIiwgMSwgTlVMTCwgJ3UnIH0sCisJeyAiY2hyb290IiwgMSwgTlVMTCwgJ2MnIH0sCiAJeyBOVUxMIH0sCiB9Owogc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKQEAgLTE4OTQsNiArMTkwNiwxMiBAQAogCS8qIElmIHRoZXkgc3BlY2lmeSBhbiBpbml0cmQgZmlsZSB0byBsb2FkLiAqLwogCWNvbnN0IGNoYXIgKmluaXRyZF9uYW1lID0gTlVMTDsKIAorCS8qIFBhc3N3b3JkIHN0cnVjdHVyZSBmb3IgaW5pdGdyb3Vwcy9zZXRyZXNbZ3VdaWQgKi8KKwlzdHJ1Y3QgcGFzc3dkICp1c2VyX2RldGFpbHMgPSBOVUxMOworCisJLyogRGlyZWN0b3J5IHRvIGNocm9vdCB0byAqLworCWNoYXIgKmNocm9vdF9wYXRoID0gTlVMTDsKKwogCS8qIFNhdmUgdGhlIGFyZ3M6IHdlICJyZWJvb3QiIGJ5IGV4ZWNpbmcgb3Vyc2VsdmVzIGFnYWluLiAqLwogCW1haW5fYXJncyA9IGFyZ3Y7CiAKQEAgLTE5NTAsNiArMTk2OCwxNCBAQAogCQljYXNlICdpJzoKIAkJCWluaXRyZF9uYW1lID0gb3B0YXJnOwogCQkJYnJlYWs7CisJCWNhc2UgJ3UnOgorCQkJdXNlcl9kZXRhaWxzID0gZ2V0cHduYW0ob3B0YXJnKTsKKwkJCWlmICghdXNlcl9kZXRhaWxzKQorCQkJCWVycigxLCAiZ2V0cHduYW0gZmFpbGVkLCBpbmNvcnJlY3QgdXNlcm5hbWU/Iik7CisJCQlicmVhazsKKwkJY2FzZSAnYyc6CisJCQljaHJvb3RfcGF0aCA9IG9wdGFyZzsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJd2FybngoIlVua25vd24gYXJndW1lbnQgJXMiLCBhcmd2W29wdGluZF0pOwogCQkJdXNhZ2UoKTsKQEAgLTIwMjEsNiArMjA0NywzNyBAQAogCS8qIElmIHdlIGV4aXQgdmlhIGVycigpLCB0aGlzIGtpbGxzIGFsbCB0aGUgdGhyZWFkcywgcmVzdG9yZXMgdHR5LiAqLwogCWF0ZXhpdChjbGVhbnVwX2RldmljZXMpOwogCisJLyogSWYgcmVxdWVzdGVkLCBjaHJvb3QgdG8gYSBkaXJlY3RvcnkgKi8KKwlpZiAoY2hyb290X3BhdGgpIHsKKwkJaWYgKGNocm9vdChjaHJvb3RfcGF0aCkgIT0gMCkKKwkJCWVycigxLCAiY2hyb290KFwiJXNcIikgZmFpbGVkIiwgY2hyb290X3BhdGgpOworCisJCWlmIChjaGRpcigiLyIpICE9IDApCisJCQllcnIoMSwgImNoZGlyKFwiL1wiKSBmYWlsZWQiKTsKKworCQl2ZXJib3NlKCJjaHJvb3QgZG9uZVxuIik7CisJfQorCisJLyogSWYgcmVxdWVzdGVkLCBkcm9wIHByaXZpbGVnZXMgKi8KKwlpZiAodXNlcl9kZXRhaWxzKSB7CisJCXVpZF90IHU7CisJCWdpZF90IGc7CisKKwkJdSA9IHVzZXJfZGV0YWlscy0+cHdfdWlkOworCQlnID0gdXNlcl9kZXRhaWxzLT5wd19naWQ7CisKKwkJaWYgKGluaXRncm91cHModXNlcl9kZXRhaWxzLT5wd19uYW1lLCBnKSAhPSAwKQorCQkJZXJyKDEsICJpbml0Z3JvdXBzIGZhaWxlZCIpOworCisJCWlmIChzZXRyZXNnaWQoZywgZywgZykgIT0gMCkKKwkJCWVycigxLCAic2V0cmVzZ2lkIGZhaWxlZCIpOworCisJCWlmIChzZXRyZXN1aWQodSwgdSwgdSkgIT0gMCkKKwkJCWVycigxLCAic2V0cmVzdWlkIGZhaWxlZCIpOworCisJCXZlcmJvc2UoIkRyb3BwaW5nIHByaXZpbGVnZXMgY29tcGxldGVkXG4iKTsKKwl9CisKIAkvKiBGaW5hbGx5LCBydW4gdGhlIEd1ZXN0LiAgVGhpcyBkb2Vzbid0IHJldHVybi4gKi8KIAlydW5fZ3Vlc3QoKTsKIH0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC50eHQgYi9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QudHh0CmluZGV4IDZjY2FmOGUuLmRhZDk5OTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LnR4dApAQCAtMTE3LDYgKzExNywxMSBAQAogICAgIAogICBmb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2V0IGJyaWRnaW5nIHRvIHdvcmsuCiAKKy0gUmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLiBVc2luZyB0aGUgLS1ybmcgb3B0aW9uIHdpbGwgcHJvdmlkZSBhCisgIC9kZXYvaHdybmcgaW4gdGhlIGd1ZXN0IHRoYXQgd2lsbCByZWFkIGZyb20gdGhlIGhvc3QncyAvZGV2L3JhbmRvbS4KKyAgVXNlIHRoaXMgb3B0aW9uIGluIGNvbmp1bmN0aW9uIHdpdGggcm5nLXRvb2xzIChzZWUgLi4vaHdfcmFuZG9tLnR4dCkKKyAgdG8gcHJvdmlkZSBlbnRyb3B5IHRvIHRoZSBndWVzdCBrZXJuZWwncyAvZGV2L3JhbmRvbS4KKwogVGhlcmUgaXMgYSBoZWxwZnVsIG1haWxpbmcgbGlzdCBhdCBodHRwOi8vb3psYWJzLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xndWVzdAogCiBHb29kIGx1Y2shCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvTWFrZWZpbGUKaW5kZXggNWFiYTdhMy4uMjRjMzA4ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9NYWtlZmlsZQpAQCAtNCw2ICs0LDggQEAKICMgTGlzdCBvZiBwcm9ncmFtcyB0byBidWlsZAogaG9zdHByb2dzLXkgOj0gaWZlbnNsYXZlCiAKK0hPU1RDRkxBR1NfaWZlbnNsYXZlLm8gKz0gLUkkKG9ianRyZWUpL3Vzci9pbmNsdWRlCisKICMgVGVsbCBrYnVpbGQgdG8gYWx3YXlzIGJ1aWxkIHRoZSBwcm9ncmFtcwogYWx3YXlzIDo9ICQoaG9zdHByb2dzLXkpCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dAppbmRleCA1ZGM2Mzg3Li4yNWQyZjQxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CkBAIC00OSw3ICs0OSw4IEBACiAzLjMJQ29uZmlndXJpbmcgQm9uZGluZyBNYW51YWxseSB3aXRoIElmZW5zbGF2ZQogMy4zLjEJCUNvbmZpZ3VyaW5nIE11bHRpcGxlIEJvbmRzIE1hbnVhbGx5CiAzLjQJQ29uZmlndXJpbmcgQm9uZGluZyBNYW51YWxseSB2aWEgU3lzZnMKLTMuNQlPdmVycmlkaW5nIENvbmZpZ3VyYXRpb24gZm9yIFNwZWNpYWwgQ2FzZXMKKzMuNQlDb25maWd1cmF0aW9uIHdpdGggSW50ZXJmYWNlcyBTdXBwb3J0CiszLjYJT3ZlcnJpZGluZyBDb25maWd1cmF0aW9uIGZvciBTcGVjaWFsIENhc2VzCiAKIDQuIFF1ZXJ5aW5nIEJvbmRpbmcgQ29uZmlndXJhdGlvbgogNC4xCUJvbmRpbmcgQ29uZmlndXJhdGlvbgpAQCAtMTYxLDggKzE2Miw4IEBACiBkZWZhdWx0IGtlcm5lbCBzb3VyY2UgaW5jbHVkZSBkaXJlY3RvcnkuCiAKIFNFQ09ORCBJTVBPUlRBTlQgTk9URToKLQlJZiB5b3UgcGxhbiB0byBjb25maWd1cmUgYm9uZGluZyB1c2luZyBzeXNmcywgeW91IGRvIG5vdCBuZWVkCi10byB1c2UgaWZlbnNsYXZlLgorCUlmIHlvdSBwbGFuIHRvIGNvbmZpZ3VyZSBib25kaW5nIHVzaW5nIHN5c2ZzIG9yIHVzaW5nIHRoZQorL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgZmlsZSwgeW91IGRvIG5vdCBuZWVkIHRvIHVzZSBpZmVuc2xhdmUuCiAKIDIuIEJvbmRpbmcgRHJpdmVyIE9wdGlvbnMKID09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTc3OSwyMiArNzgwLDI2IEBACiAKIAlZb3UgY2FuIGNvbmZpZ3VyZSBib25kaW5nIHVzaW5nIGVpdGhlciB5b3VyIGRpc3RybydzIG5ldHdvcmsKIGluaXRpYWxpemF0aW9uIHNjcmlwdHMsIG9yIG1hbnVhbGx5IHVzaW5nIGVpdGhlciBpZmVuc2xhdmUgb3IgdGhlCi1zeXNmcyBpbnRlcmZhY2UuICBEaXN0cm9zIGdlbmVyYWxseSB1c2Ugb25lIG9mIHR3byBwYWNrYWdlcyBmb3IgdGhlCi1uZXR3b3JrIGluaXRpYWxpemF0aW9uIHNjcmlwdHM6IGluaXRzY3JpcHRzIG9yIHN5c2NvbmZpZy4gIFJlY2VudAotdmVyc2lvbnMgb2YgdGhlc2UgcGFja2FnZXMgaGF2ZSBzdXBwb3J0IGZvciBib25kaW5nLCB3aGlsZSBvbGRlcgorc3lzZnMgaW50ZXJmYWNlLiAgRGlzdHJvcyBnZW5lcmFsbHkgdXNlIG9uZSBvZiB0aHJlZSBwYWNrYWdlcyBmb3IgdGhlCituZXR3b3JrIGluaXRpYWxpemF0aW9uIHNjcmlwdHM6IGluaXRzY3JpcHRzLCBzeXNjb25maWcgb3IgaW50ZXJmYWNlcy4KK1JlY2VudCB2ZXJzaW9ucyBvZiB0aGVzZSBwYWNrYWdlcyBoYXZlIHN1cHBvcnQgZm9yIGJvbmRpbmcsIHdoaWxlIG9sZGVyCiB2ZXJzaW9ucyBkbyBub3QuCiAKIAlXZSB3aWxsIGZpcnN0IGRlc2NyaWJlIHRoZSBvcHRpb25zIGZvciBjb25maWd1cmluZyBib25kaW5nIGZvcgotZGlzdHJvcyB1c2luZyB2ZXJzaW9ucyBvZiBpbml0c2NyaXB0cyBhbmQgc3lzY29uZmlnIHdpdGggZnVsbCBvcgotcGFydGlhbCBzdXBwb3J0IGZvciBib25kaW5nLCB0aGVuIHByb3ZpZGUgaW5mb3JtYXRpb24gb24gZW5hYmxpbmcKK2Rpc3Ryb3MgdXNpbmcgdmVyc2lvbnMgb2YgaW5pdHNjcmlwdHMsIHN5c2NvbmZpZyBhbmQgaW50ZXJmYWNlcyB3aXRoIGZ1bGwKK29yIHBhcnRpYWwgc3VwcG9ydCBmb3IgYm9uZGluZywgdGhlbiBwcm92aWRlIGluZm9ybWF0aW9uIG9uIGVuYWJsaW5nCiBib25kaW5nIHdpdGhvdXQgc3VwcG9ydCBmcm9tIHRoZSBuZXR3b3JrIGluaXRpYWxpemF0aW9uIHNjcmlwdHMgKGkuZS4sCiBvbGRlciB2ZXJzaW9ucyBvZiBpbml0c2NyaXB0cyBvciBzeXNjb25maWcpLgogCi0JSWYgeW91J3JlIHVuc3VyZSB3aGV0aGVyIHlvdXIgZGlzdHJvIHVzZXMgc3lzY29uZmlnIG9yCi1pbml0c2NyaXB0cywgb3IgZG9uJ3Qga25vdyBpZiBpdCdzIG5ldyBlbm91Z2gsIGhhdmUgbm8gZmVhci4KKwlJZiB5b3UncmUgdW5zdXJlIHdoZXRoZXIgeW91ciBkaXN0cm8gdXNlcyBzeXNjb25maWcsCitpbml0c2NyaXB0cyBvciBpbnRlcmZhY2VzLCBvciBkb24ndCBrbm93IGlmIGl0J3MgbmV3IGVub3VnaCwgaGF2ZSBubyBmZWFyLgogRGV0ZXJtaW5pbmcgdGhpcyBpcyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLgogCi0JRmlyc3QsIGlzc3VlIHRoZSBjb21tYW5kOgorCUZpcnN0LCBsb29rIGZvciBhIGZpbGUgY2FsbGVkIGludGVyZmFjZXMgaW4gL2V0Yy9uZXR3b3JrIGRpcmVjdG9yeS4KK0lmIHRoaXMgZmlsZSBpcyBwcmVzZW50IGluIHlvdXIgc3lzdGVtLCB0aGVuIHlvdXIgc3lzdGVtIHVzZSBpbnRlcmZhY2VzLiBTZWUKK0NvbmZpZ3VyYXRpb24gd2l0aCBJbnRlcmZhY2VzIFN1cHBvcnQuCisKKwlFbHNlLCBpc3N1ZSB0aGUgY29tbWFuZDoKIAogJCBycG0gLXFmIC9zYmluL2lmdXAKIApAQCAtMTMyNyw4ICsxMzMyLDYyIEBACiBlY2hvICtldGgyID4gL3N5cy9jbGFzcy9uZXQvYm9uZDEvYm9uZGluZy9zbGF2ZXMKIGVjaG8gK2V0aDMgPiAvc3lzL2NsYXNzL25ldC9ib25kMS9ib25kaW5nL3NsYXZlcwogCi0zLjUgT3ZlcnJpZGluZyBDb25maWd1cmF0aW9uIGZvciBTcGVjaWFsIENhc2VzCiszLjUgQ29uZmlndXJhdGlvbiB3aXRoIEludGVyZmFjZXMgU3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBUaGlzIHNlY3Rpb24gYXBwbGllcyB0byBkaXN0cm9zIHdoaWNoIHVzZSAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyBmaWxlCit0byBkZXNjcmliZSBuZXR3b3JrIGludGVyZmFjZSBjb25maWd1cmF0aW9uLCBtb3N0IG5vdGFibHkgRGViaWFuIGFuZCBpdCdzCitkZXJpdmF0aXZlcy4KKworCVRoZSBpZnVwIGFuZCBpZmRvd24gY29tbWFuZHMgb24gRGViaWFuIGRvbid0IHN1cHBvcnQgYm9uZGluZyBvdXQgb2YKK3RoZSBib3guIFRoZSBpZmVuc2xhdmUtMi42IHBhY2thZ2Ugc2hvdWxkIGJlIGluc3RhbGxlZCB0byBwcm92aWRlIGJvbmRpbmcKK3N1cHBvcnQuICBPbmNlIGluc3RhbGxlZCwgdGhpcyBwYWNrYWdlIHdpbGwgcHJvdmlkZSBib25kLSogb3B0aW9ucyB0byBiZSB1c2VkCitpbnRvIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzLgorCisJTm90ZSB0aGF0IGlmZW5zbGF2ZS0yLjYgcGFja2FnZSB3aWxsIGxvYWQgdGhlIGJvbmRpbmcgbW9kdWxlIGFuZCB1c2UKK3RoZSBpZmVuc2xhdmUgY29tbWFuZCB3aGVuIGFwcHJvcHJpYXRlLgorCitFeGFtcGxlIENvbmZpZ3VyYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzLCB0aGUgZm9sbG93aW5nIHN0YW56YSB3aWxsIGNvbmZpZ3VyZSBib25kMCwgaW4KK2FjdGl2ZS1iYWNrdXAgbW9kZSwgd2l0aCBldGgwIGFuZCBldGgxIGFzIHNsYXZlcy4KKworYXV0byBib25kMAoraWZhY2UgYm9uZDAgaW5ldCBkaGNwCisJYm9uZC1zbGF2ZXMgZXRoMCBldGgxCisJYm9uZC1tb2RlIGFjdGl2ZS1iYWNrdXAKKwlib25kLW1paW1vbiAxMDAKKwlib25kLXByaW1hcnkgZXRoMCBldGgxCisKK0lmIHRoZSBhYm92ZSBjb25maWd1cmF0aW9uIGRvZXNuJ3Qgd29yaywgeW91IG1pZ2h0IGhhdmUgYSBzeXN0ZW0gdXNpbmcKK3Vwc3RhcnQgZm9yIHN5c3RlbSBzdGFydHVwLiBUaGlzIGlzIG1vc3Qgbm90YWJseSB0cnVlIGZvciByZWNlbnQKK1VidW50dSB2ZXJzaW9ucy4gVGhlIGZvbGxvd2luZyBzdGFuemEgaW4gL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgd2lsbAorcHJvZHVjZSB0aGUgc2FtZSByZXN1bHQgb24gdGhvc2Ugc3lzdGVtcy4KKworYXV0byBib25kMAoraWZhY2UgYm9uZDAgaW5ldCBkaGNwCisJYm9uZC1zbGF2ZXMgbm9uZQorCWJvbmQtbW9kZSBhY3RpdmUtYmFja3VwCisJYm9uZC1taWltb24gMTAwCisKK2F1dG8gZXRoMAoraWZhY2UgZXRoMCBpbmV0IG1hbnVhbAorCWJvbmQtbWFzdGVyIGJvbmQwCisJYm9uZC1wcmltYXJ5IGV0aDAgZXRoMQorCithdXRvIGV0aDEKK2lmYWNlIGV0aDEgaW5ldCBtYW51YWwKKwlib25kLW1hc3RlciBib25kMAorCWJvbmQtcHJpbWFyeSBldGgwIGV0aDEKKworRm9yIGEgZnVsbCBsaXN0IG9mIGJvbmQtKiBzdXBwb3J0ZWQgb3B0aW9ucyBpbiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyBhbmQgc29tZQorbW9yZSBhZHZhbmNlZCBleGFtcGxlcyB0YWlsb3JlZCB0byB5b3UgcGFydGljdWxhciBkaXN0cm9zLCBzZWUgdGhlIGZpbGVzIGluCisvdXNyL3NoYXJlL2RvYy9pZmVuc2xhdmUtMi42LgorCiszLjYgT3ZlcnJpZGluZyBDb25maWd1cmF0aW9uIGZvciBTcGVjaWFsIENhc2VzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFdoZW4gdXNpbmcgdGhlIGJvbmRpbmcgZHJpdmVyLCB0aGUgcGh5c2ljYWwgcG9ydCB3aGljaCB0cmFuc21pdHMgYSBmcmFtZSBpcwogdHlwaWNhbGx5IHNlbGVjdGVkIGJ5IHRoZSBib25kaW5nIGRyaXZlciwgYW5kIGlzIG5vdCByZWxldmFudCB0byB0aGUgdXNlciBvcgogc3lzdGVtIGFkbWluaXN0cmF0b3IuICBUaGUgb3V0cHV0IHBvcnQgaXMgc2ltcGx5IHNlbGVjdGVkIHVzaW5nIHRoZSBwb2xpY2llcyBvZgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAppbmRleCBkOTk5NDBkLi5hYzNiNGE3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dApAQCAtMTg3LDcgKzE4Nyw3IEBACiB0Y3BfZHNhY2sgLSBCT09MRUFOCiAJQWxsb3dzIFRDUCB0byBzZW5kICJkdXBsaWNhdGUiIFNBQ0tzLgogCi10Y3BfZWNuIC0gQk9PTEVBTgordGNwX2VjbiAtIElOVEVHRVIKIAlFbmFibGUgRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24gKEVDTikgaW4gVENQLiBFQ04gaXMgb25seQogCXVzZWQgd2hlbiBib3RoIGVuZHMgb2YgdGhlIFRDUCBmbG93IHN1cHBvcnQgaXQuIEl0IGlzIHVzZWZ1bCB0bwogCWF2b2lkIGxvc3NlcyBkdWUgdG8gY29uZ2VzdGlvbiAod2hlbiB0aGUgYm90dGxlbmVjayByb3V0ZXIgc3VwcG9ydHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLXN0YXRzLnR4dCBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLXN0YXRzLnR4dAppbmRleCAwMWU2OTQwLi4xY2Q1ZDUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1zdGF0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtc3RhdHMudHh0CkBAIC0xLDMgKzEsNyBAQAorVmVyc2lvbiAxNSBvZiBzY2hlZHN0YXRzIGRyb3BwZWQgY291bnRlcnMgZm9yIHNvbWUgc2NoZWRfeWllbGQ6Cit5bGRfZXhwX2VtcHR5LCB5bGRfYWN0X2VtcHR5IGFuZCB5bGRfYm90aF9lbXB0eS4gT3RoZXJ3aXNlLCBpdCBpcworaWRlbnRpY2FsIHRvIHZlcnNpb24gMTQuCisKIFZlcnNpb24gMTQgb2Ygc2NoZWRzdGF0cyBpbmNsdWRlcyBzdXBwb3J0IGZvciBzY2hlZF9kb21haW5zLCB3aGljaCBoaXQgdGhlCiBtYWlubGluZSBrZXJuZWwgaW4gMi42LjIwIGFsdGhvdWdoIGl0IGlzIGlkZW50aWNhbCB0byB0aGUgc3RhdHMgZnJvbSB2ZXJzaW9uCiAxMiB3aGljaCB3YXMgaW4gdGhlIGtlcm5lbCBmcm9tIDIuNi4xMy0yLjYuMTkgKHZlcnNpb24gMTMgbmV2ZXIgc2F3IGEga2VybmVsCkBAIC0yOCwzMiArMzIsMjUgQEAKIAogQ1BVIHN0YXRpc3RpY3MKIC0tLS0tLS0tLS0tLS0tCi1jcHU8Tj4gMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIKK2NwdTxOPiAxIDIgMyA0IDUgNiA3IDggOQogCi1OT1RFOiBJbiB0aGUgc2NoZWRfeWllbGQoKSBzdGF0aXN0aWNzLCB0aGUgYWN0aXZlIHF1ZXVlIGlzIGNvbnNpZGVyZWQgZW1wdHkKLSAgICBpZiBpdCBoYXMgb25seSBvbmUgcHJvY2VzcyBpbiBpdCwgc2luY2Ugb2J2aW91c2x5IHRoZSBwcm9jZXNzIGNhbGxpbmcKLSAgICBzY2hlZF95aWVsZCgpIGlzIHRoYXQgcHJvY2Vzcy4KLQotRmlyc3QgZm91ciBmaWVsZHMgYXJlIHNjaGVkX3lpZWxkKCkgc3RhdGlzdGljczoKLSAgICAgMSkgIyBvZiB0aW1lcyBib3RoIHRoZSBhY3RpdmUgYW5kIHRoZSBleHBpcmVkIHF1ZXVlIHdlcmUgZW1wdHkKLSAgICAgMikgIyBvZiB0aW1lcyBqdXN0IHRoZSBhY3RpdmUgcXVldWUgd2FzIGVtcHR5Ci0gICAgIDMpICMgb2YgdGltZXMganVzdCB0aGUgZXhwaXJlZCBxdWV1ZSB3YXMgZW1wdHkKLSAgICAgNCkgIyBvZiB0aW1lcyBzY2hlZF95aWVsZCgpIHdhcyBjYWxsZWQKK0ZpcnN0IGZpZWxkIGlzIGEgc2NoZWRfeWllbGQoKSBzdGF0aXN0aWM6CisgICAgIDEpICMgb2YgdGltZXMgc2NoZWRfeWllbGQoKSB3YXMgY2FsbGVkCiAKIE5leHQgdGhyZWUgYXJlIHNjaGVkdWxlKCkgc3RhdGlzdGljczoKLSAgICAgNSkgIyBvZiB0aW1lcyB3ZSBzd2l0Y2hlZCB0byB0aGUgZXhwaXJlZCBxdWV1ZSBhbmQgcmV1c2VkIGl0Ci0gICAgIDYpICMgb2YgdGltZXMgc2NoZWR1bGUoKSB3YXMgY2FsbGVkCi0gICAgIDcpICMgb2YgdGltZXMgc2NoZWR1bGUoKSBsZWZ0IHRoZSBwcm9jZXNzb3IgaWRsZQorICAgICAyKSAjIG9mIHRpbWVzIHdlIHN3aXRjaGVkIHRvIHRoZSBleHBpcmVkIHF1ZXVlIGFuZCByZXVzZWQgaXQKKyAgICAgMykgIyBvZiB0aW1lcyBzY2hlZHVsZSgpIHdhcyBjYWxsZWQKKyAgICAgNCkgIyBvZiB0aW1lcyBzY2hlZHVsZSgpIGxlZnQgdGhlIHByb2Nlc3NvciBpZGxlCiAKIE5leHQgdHdvIGFyZSB0cnlfdG9fd2FrZV91cCgpIHN0YXRpc3RpY3M6Ci0gICAgIDgpICMgb2YgdGltZXMgdHJ5X3RvX3dha2VfdXAoKSB3YXMgY2FsbGVkCi0gICAgIDkpICMgb2YgdGltZXMgdHJ5X3RvX3dha2VfdXAoKSB3YXMgY2FsbGVkIHRvIHdha2UgdXAgdGhlIGxvY2FsIGNwdQorICAgICA1KSAjIG9mIHRpbWVzIHRyeV90b193YWtlX3VwKCkgd2FzIGNhbGxlZAorICAgICA2KSAjIG9mIHRpbWVzIHRyeV90b193YWtlX3VwKCkgd2FzIGNhbGxlZCB0byB3YWtlIHVwIHRoZSBsb2NhbCBjcHUKIAogTmV4dCB0aHJlZSBhcmUgc3RhdGlzdGljcyBkZXNjcmliaW5nIHNjaGVkdWxpbmcgbGF0ZW5jeToKLSAgICAxMCkgc3VtIG9mIGFsbCB0aW1lIHNwZW50IHJ1bm5pbmcgYnkgdGFza3Mgb24gdGhpcyBwcm9jZXNzb3IgKGluIGppZmZpZXMpCi0gICAgMTEpIHN1bSBvZiBhbGwgdGltZSBzcGVudCB3YWl0aW5nIHRvIHJ1biBieSB0YXNrcyBvbiB0aGlzIHByb2Nlc3NvciAoaW4KKyAgICAgNykgc3VtIG9mIGFsbCB0aW1lIHNwZW50IHJ1bm5pbmcgYnkgdGFza3Mgb24gdGhpcyBwcm9jZXNzb3IgKGluIGppZmZpZXMpCisgICAgIDgpIHN1bSBvZiBhbGwgdGltZSBzcGVudCB3YWl0aW5nIHRvIHJ1biBieSB0YXNrcyBvbiB0aGlzIHByb2Nlc3NvciAoaW4KICAgICAgICAgamlmZmllcykKLSAgICAxMikgIyBvZiB0aW1lc2xpY2VzIHJ1biBvbiB0aGlzIGNwdQorICAgICA5KSAjIG9mIHRpbWVzbGljZXMgcnVuIG9uIHRoaXMgY3B1CiAKIAogRG9tYWluIHN0YXRpc3RpY3MKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1jb250cm9scy50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItY29udHJvbHMudHh0CmluZGV4IDg3NzM3NzguLjg4MWU3ZjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1jb250cm9scy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWNvbnRyb2xzLnR4dApAQCAtMjg1LDYgKzI4NSw5IEBACiBUaGUgJ25ldyB2YWx1ZScgdW5pb24gaXMgbm90IHVzZWQgaW4gZ192b2xhdGlsZV9jdHJsLiBJbiBnZW5lcmFsIGNvbnRyb2xzCiB0aGF0IG5lZWQgdG8gaW1wbGVtZW50IGdfdm9sYXRpbGVfY3RybCBhcmUgcmVhZC1vbmx5IGNvbnRyb2xzLgogCitOb3RlIHRoYXQgaWYgb25lIG9yIG1vcmUgY29udHJvbHMgaW4gYSBjb250cm9sIGNsdXN0ZXIgYXJlIG1hcmtlZCBhcyB2b2xhdGlsZSwKK3RoZW4gYWxsIHRoZSBjb250cm9scyBpbiB0aGUgY2x1c3RlciBhcmUgc2VlbiBhcyB2b2xhdGlsZS4KKwogVG8gbWFyayBhIGNvbnRyb2wgYXMgdm9sYXRpbGUgeW91IGhhdmUgdG8gc2V0IHRoZSBpc192b2xhdGlsZSBmbGFnOgogCiAJY3RybCA9IHY0bDJfY3RybF9uZXdfc3RkKCZzZC0+Y3RybF9oYW5kbGVyLCAuLi4pOwpAQCAtNDYyLDYgKzQ2NSwxNSBAQAogT2J2aW91c2x5LCBhbGwgY29udHJvbHMgaW4gdGhlIGNsdXN0ZXIgYXJyYXkgbXVzdCBiZSBpbml0aWFsaXplZCB0byBlaXRoZXIKIGEgdmFsaWQgY29udHJvbCBvciB0byBOVUxMLgogCitJbiByYXJlIGNhc2VzIHlvdSBtaWdodCB3YW50IHRvIGtub3cgd2hpY2ggY29udHJvbHMgb2YgYSBjbHVzdGVyIGFjdHVhbGx5Cit3ZXJlIHNldCBleHBsaWNpdGx5IGJ5IHRoZSB1c2VyLiBGb3IgdGhpcyB5b3UgY2FuIGNoZWNrIHRoZSAnaXNfbmV3JyBmbGFnIG9mCitlYWNoIGNvbnRyb2wuIEZvciBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBhIHZvbHVtZS9tdXRlIGNsdXN0ZXIgdGhlICdpc19uZXcnCitmbGFnIG9mIHRoZSBtdXRlIGNvbnRyb2wgd291bGQgYmUgc2V0IGlmIHRoZSB1c2VyIGNhbGxlZCBWSURJT0NfU19DVFJMIGZvcgorbXV0ZSBvbmx5LiBJZiB0aGUgdXNlciB3b3VsZCBjYWxsIFZJRElPQ19TX0VYVF9DVFJMUyBmb3IgYm90aCBtdXRlIGFuZCB2b2x1bWUKK2NvbnRyb2xzLCB0aGVuIHRoZSAnaXNfbmV3JyBmbGFnIHdvdWxkIGJlIDEgZm9yIGJvdGggY29udHJvbHMuCisKK1RoZSAnaXNfbmV3JyBmbGFnIGlzIGFsd2F5cyAxIHdoZW4gY2FsbGVkIGZyb20gdjRsMl9jdHJsX2hhbmRsZXJfc2V0dXAoKS4KKwogCiBWSURJT0NfTE9HX1NUQVRVUyBTdXBwb3J0CiA9PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3dvcmtxdWV1ZS50eHQgYi9Eb2N1bWVudGF0aW9uL3dvcmtxdWV1ZS50eHQKaW5kZXggOTk2YTI3ZC4uMDFjNTEzZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi93b3JrcXVldWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vd29ya3F1ZXVlLnR4dApAQCAtMTkwLDkgKzE5MCw5IEBACiAJKiBMb25nIHJ1bm5pbmcgQ1BVIGludGVuc2l2ZSB3b3JrbG9hZHMgd2hpY2ggY2FuIGJlIGJldHRlcgogCSAgbWFuYWdlZCBieSB0aGUgc3lzdGVtIHNjaGVkdWxlci4KIAotICBXUV9GUkVFWkVBQkxFCisgIFdRX0ZSRUVaQUJMRQogCi0JQSBmcmVlemVhYmxlIHdxIHBhcnRpY2lwYXRlcyBpbiB0aGUgZnJlZXplIHBoYXNlIG9mIHRoZSBzeXN0ZW0KKwlBIGZyZWV6YWJsZSB3cSBwYXJ0aWNpcGF0ZXMgaW4gdGhlIGZyZWV6ZSBwaGFzZSBvZiB0aGUgc3lzdGVtCiAJc3VzcGVuZCBvcGVyYXRpb25zLiAgV29yayBpdGVtcyBvbiB0aGUgd3EgYXJlIGRyYWluZWQgYW5kIG5vCiAJbmV3IHdvcmsgaXRlbSBzdGFydHMgZXhlY3V0aW9uIHVudGlsIHRoYXdlZC4KIApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAxYWYwMjJlLi44YWZiYTYzIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTYyLDcgKzE2Miw3IEBACiBXOglodHRwOi8vc2VyaWFsLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZAogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9ncmVna2gvdHR5LTIuNi5naXQKLUY6CWRyaXZlcnMvc2VyaWFsLzgyNTAqCitGOglkcml2ZXJzL3R0eS9zZXJpYWwvODI1MCoKIEY6CWluY2x1ZGUvbGludXgvc2VyaWFsXzgyNTAuaAogCiA4MzkwIE5FVFdPUksgRFJJVkVSUyBbV0Q4MHgzL1NNQy1FTElURSwgU01DLVVMVFJBLCBORTIwMDAsIDNDNTAzLCBldGMuXQpAQCAtNjI0LDExICs2MjQsMTUgQEAKIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKLUFSTS9BVE1FTCBBVDkxUk05MjAwIEFSTSBBUkNISVRFQ1RVUkUKK0FSTS9BVE1FTCBBVDkxUk05MjAwIEFORCBBVDkxU0FNIEFSTSBBUkNISVRFQ1RVUkVTCiBNOglBbmRyZXcgVmljdG9yIDxsaW51eEBtYXhpbS5vcmcuemE+CitNOglOaWNvbGFzIEZlcnJlIDxuaWNvbGFzLmZlcnJlQGF0bWVsLmNvbT4KK006CUplYW4tQ2hyaXN0b3BoZSBQbGFnbmlvbC1WaWxsYXJkIDxwbGFnbmlvakBqY3Jvc29mdC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVzoJaHR0cDovL21heGltLm9yZy56YS9hdDkxXzI2Lmh0bWwKLVM6CU1haW50YWluZWQKK1c6CWh0dHA6Ly93d3cubGludXg0c2FtLm9yZworUzoJU3VwcG9ydGVkCitGOglhcmNoL2FybS9tYWNoLWF0OTEvCiAKIEFSTS9CQ01SSU5HIEFSTSBBUkNISVRFQ1RVUkUKIE06CUppYW5kb25nIFpoZW5nIDxqZHpoZW5nQGJyb2FkY29tLmNvbT4KQEAgLTg4MSwxNSArODg1LDE1IEBACiAKIEFSTS9RVUFMQ09NTSBNU00gTUFDSElORSBTVVBQT1JUCiBNOglEYXZpZCBCcm93biA8ZGF2aWRiQGNvZGVhdXJvcmEub3JnPgotTToJRGFuaWVsIFdhbGtlciA8ZHdhbGtlckBjb2RlYXVyb3JhLm9yZz4KK006CURhbmllbCBXYWxrZXIgPGR3YWxrZXJAZmlmbzk5LmNvbT4KIE06CUJyeWFuIEh1bnRzbWFuIDxicnlhbmhAY29kZWF1cm9yYS5vcmc+CiBMOglsaW51eC1hcm0tbXNtQHZnZXIua2VybmVsLm9yZwogRjoJYXJjaC9hcm0vbWFjaC1tc20vCiBGOglkcml2ZXJzL3ZpZGVvL21zbS8KIEY6CWRyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYwogRjoJZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5oCi1GOglkcml2ZXJzL3NlcmlhbC9tc21fc2VyaWFsLmgKLUY6CWRyaXZlcnMvc2VyaWFsL21zbV9zZXJpYWwuYworRjoJZHJpdmVycy90dHkvc2VyaWFsL21zbV9zZXJpYWwuaAorRjoJZHJpdmVycy90dHkvc2VyaWFsL21zbV9zZXJpYWwuYwogVDoJZ2l0IGdpdDovL2NvZGVhdXJvcmEub3JnL3F1aWMva2VybmVsL2RhdmlkYi9saW51eC1tc20uZ2l0CiBTOglNYWludGFpbmVkCiAKQEAgLTk3NCw2ICs5NzgsOCBAQAogRjoJYXJjaC9hcm0vcGxhdC1zYW1zdW5nLwogRjoJYXJjaC9hcm0vcGxhdC1zM2MyNHh4LwogRjoJYXJjaC9hcm0vcGxhdC1zNXAvCitGOglkcml2ZXJzLyovKnMzYzI0MTAqCitGOglkcml2ZXJzLyovKi8qczNjMjQxMCoKIAogQVJNL1MzQzI0MTAgQVJNIEFSQ0hJVEVDVFVSRQogTToJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgpAQCAtMTI1Niw3ICsxMjYyLDcgQEAKIEFUTUVMIEFUOTEgLyBBVDMyIFNFUklBTCBEUklWRVIKIE06CU5pY29sYXMgRmVycmUgPG5pY29sYXMuZmVycmVAYXRtZWwuY29tPgogUzoJU3VwcG9ydGVkCi1GOglkcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYworRjoJZHJpdmVycy90dHkvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCiAKIEFUTUVMIExDREZCIERSSVZFUgogTToJTmljb2xhcyBGZXJyZSA8bmljb2xhcy5mZXJyZUBhdG1lbC5jb20+CkBAIC0xNDEyLDcgKzE0MTgsNyBAQAogTDoJdWNsaW51eC1kaXN0LWRldmVsQGJsYWNrZmluLnVjbGludXgub3JnCiBXOglodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcKIFM6CVN1cHBvcnRlZAotRjoJZHJpdmVycy9zZXJpYWwvYmZpbl81eHguYworRjoJZHJpdmVycy90dHkvc2VyaWFsL2JmaW5fNXh4LmMKIAogQkxBQ0tGSU4gV0FUQ0hET0cgRFJJVkVSCiBNOglNaWtlIEZyeXNpbmdlciA8dmFwaWVyLmFkaUBnbWFpbC5jb20+CkBAIC0xNjg2LDYgKzE2OTIsMTMgQEAKIFM6CVN1cHBvcnRlZAogRjoJc2NyaXB0cy9jaGVja3BhdGNoLnBsCiAKK0NISU5FU0UgRE9DVU1FTlRBVElPTgorTToJSGFycnkgV2VpIDxoYXJyeXhpeW91QGdtYWlsLmNvbT4KK0w6CXhpeW91bGludXhrZXJuZWxncm91cEBnb29nbGVncm91cHMuY29tCitMOglsaW51eC1rZXJuZWxAemgta2VybmVsLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitTOglNYWludGFpbmVkCitGOglEb2N1bWVudGF0aW9uL3poX0NOLworCiBDSVNDTyBWSUMgRVRIRVJORVQgTklDIERSSVZFUgogTToJVmFzYW50aHkgS29sbHVyaSA8dmtvbGx1cmlAY2lzY28uY29tPgogTToJUm9vcGEgUHJhYmh1IDxyb3ByYWJodUBjaXNjby5jb20+CkBAIC0xODc3LDcgKzE4OTAsNyBAQAogVzoJaHR0cDovL2RldmVsb3Blci5heGlzLmNvbQogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9jcmlzLwotRjoJZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC4qCitGOglkcml2ZXJzL3R0eS9zZXJpYWwvY3Jpc3YxMC4qCiAKIENSWVBUTyBBUEkKIE06CUhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KQEAgLTIxMjAsNiArMjEzMyw3IEBACiBGOglmcy9kbG0vCiAKIERNQSBHRU5FUklDIE9GRkxPQUQgRU5HSU5FIFNVQlNZU1RFTQorTToJVmlub2QgS291bCA8dmlub2Qua291bEBpbnRlbC5jb20+CiBNOglEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4KIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9kbWEvCkBAIC0yMjE2LDcgKzIyMzAsNyBAQAogRFogREVDU1RBVElPTiBEWjExIFNFUklBTCBEUklWRVIKIE06CSJNYWNpZWogVy4gUm96eWNraSIgPG1hY3JvQGxpbnV4LW1pcHMub3JnPgogUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9zZXJpYWwvZHouKgorRjoJZHJpdmVycy90dHkvc2VyaWFsL2R6LioKIAogRUFUQS1ETUEgU0NTSSBEUklWRVIKIE06CU1pY2hhZWwgTmV1ZmZlciA8bWlrZUBpLUNvbm5lY3QuTmV0PgpAQCAtMjY0Myw3ICsyNjU3LDcgQEAKIE06CVRpbXVyIFRhYmkgPHRpbXVyQGZyZWVzY2FsZS5jb20+CiBMOglsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZwogUzoJU3VwcG9ydGVkCi1GOglkcml2ZXJzL3NlcmlhbC91Y2NfdWFydC5jCitGOglkcml2ZXJzL3R0eS9zZXJpYWwvdWNjX3VhcnQuYwogCiBGUkVFU0NBTEUgU09DIFNPVU5EIERSSVZFUlMKIE06CVRpbXVyIFRhYmkgPHRpbXVyQGZyZWVzY2FsZS5jb20+CkBAIC0yNzY4LDYgKzI3ODIsMTUgQEAKIEY6CWRyaXZlcnMvaXNkbi9naWdhc2V0LwogRjoJaW5jbHVkZS9saW51eC9naWdhc2V0X2Rldi5oCiAKK0dQSU8gU1VCU1lTVEVNCitNOglHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+CitMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitUOglnaXQgZ2l0Oi8vZ2l0LnNlY3JldGxhYi5jYS9naXQvbGludXgtMi42LmdpdAorRjoJRG9jdW1lbnRhdGlvbi9ncGlvL2dwaW8udHh0CitGOglkcml2ZXJzL2dwaW8vCitGOglpbmNsdWRlL2xpbnV4L2dwaW8qCisKIEdSRVRIIDEwLzEwMC8xRyBFdGhlcm5ldCBNQUMgZGV2aWNlIGRyaXZlcgogTToJS3Jpc3RvZmZlciBHbGVtYm8gPGtyaXN0b2ZmZXJAZ2Fpc2xlci5jb20+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCkBAIC0yODU3LDcgKzI4ODAsNiBAQAogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwogVzoJaHR0cDovL3d3dy5sbS1zZW5zb3JzLm9yZy8KIFQ6CXF1aWx0IGtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvamRlbHZhcmUvbGludXgtMi42L2pkZWx2YXJlLWh3bW9uLwotVDoJcXVpbHQga2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS9ncm9lY2svbGludXgtc3RhZ2luZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZ3JvZWNrL2xpbnV4LXN0YWdpbmcuZ2l0CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2h3bW9uLwpAQCAtMzEzNSw2ICszMTU3LDEyIEBACiBGOgluZXQvaWVlZTgwMjE1NC8KIEY6CWRyaXZlcnMvaWVlZTgwMjE1NC8KIAorSUtBTk9TL0FESSBFQUdMRSBBRFNMIFVTQiBEUklWRVIKK006CU1hdHRoaWV1IENhc3RldCA8Y2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnI+CitNOglTdGFuaXNsYXcgR3J1c3prYSA8c3RmX3hsQHdwLnBsPgorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy91c2IvYXRtL3VlYWdsZS1hdG0uYworCiBJTlRFR1JJVFkgTUVBU1VSRU1FTlQgQVJDSElURUNUVVJFIChJTUEpCiBNOglNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgogUzoJU3VwcG9ydGVkCkBAIC0zMTQ2LDcgKzMxNzQsNyBAQAogRjoJZHJpdmVycy92aWRlby9pbXN0dGZiLmMKIAogSU5GSU5JQkFORCBTVUJTWVNURU0KLU06CVJvbGFuZCBEcmVpZXIgPHJvbGFuZGRAY2lzY28uY29tPgorTToJUm9sYW5kIERyZWllciA8cm9sYW5kQGtlcm5lbC5vcmc+CiBNOglTZWFuIEhlZnR5IDxzZWFuLmhlZnR5QGludGVsLmNvbT4KIE06CUhhbCBSb3NlbnN0b2NrIDxoYWwucm9zZW5zdG9ja0BnbWFpbC5jb20+CiBMOglsaW51eC1yZG1hQHZnZXIua2VybmVsLm9yZwpAQCAtMzMyMyw3ICszMzUxLDYgQEAKIEY6CWluY2x1ZGUvbGludXgvd2ltYXgvaTI0MDBtLmgKIAogSU5URUwgV0lSRUxFU1MgV0lGSSBMSU5LIChpd2x3aWZpKQotTToJUmVpbmV0dGUgQ2hhdHJlIDxyZWluZXR0ZS5jaGF0cmVAaW50ZWwuY29tPgogTToJV2V5LVlpIEd1eSA8d2V5LXlpLncuZ3V5QGludGVsLmNvbT4KIE06CUludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgogTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCkBAIC0zMzUwLDcgKzMzNzcsNyBAQAogTToJUGF0IEdlZnJlIDxwZmdAc2dpLmNvbT4KIEw6CWxpbnV4LXNlcmlhbEB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvc2VyaWFsL2lvYzNfc2VyaWFsLmMKK0Y6CWRyaXZlcnMvdHR5L3NlcmlhbC9pb2MzX3NlcmlhbC5jCiAKIElQIE1BU1FVRVJBRElORwogTToJSnVhbmpvIENpYXJsYW50ZSA8ampjaWFybGFAcmFpei51bmN1LmVkdS5hcj4KQEAgLTM1MjcsNyArMzU1NCw3IEBACiBNOglCcmVubyBMZWl0YW8gPGxlaXRhb0BsaW51eC52bmV0LmlibS5jb20+CiBMOglsaW51eC1zZXJpYWxAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCi1GOglkcml2ZXJzL3NlcmlhbC9qc20vCitGOglkcml2ZXJzL3R0eS9zZXJpYWwvanNtLwogCiBLMTBURU1QIEhBUkRXQVJFIE1PTklUT1JJTkcgRFJJVkVSCiBNOglDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KQEAgLTM2NzAsNiArMzY5NywyOCBAQAogRjoJaW5jbHVkZS9rZXlzLwogRjoJc2VjdXJpdHkva2V5cy8KIAorS0VZUy1UUlVTVEVECitNOglEYXZpZCBTYWZmb3JkIDxzYWZmb3JkQHdhdHNvbi5pYm0uY29tPgorTToJTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KK0w6CWxpbnV4LXNlY3VyaXR5LW1vZHVsZUB2Z2VyLmtlcm5lbC5vcmcKK0w6CWtleXJpbmdzQGxpbnV4LW5mcy5vcmcKK1M6CVN1cHBvcnRlZAorRjoJRG9jdW1lbnRhdGlvbi9rZXlzLXRydXN0ZWQtZW5jcnlwdGVkLnR4dAorRjoJaW5jbHVkZS9rZXlzL3RydXN0ZWQtdHlwZS5oCitGOglzZWN1cml0eS9rZXlzL3RydXN0ZWQuYworRjoJc2VjdXJpdHkva2V5cy90cnVzdGVkLmgKKworS0VZUy1FTkNSWVBURUQKK006CU1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CitNOglEYXZpZCBTYWZmb3JkIDxzYWZmb3JkQHdhdHNvbi5pYm0uY29tPgorTDoJbGludXgtc2VjdXJpdHktbW9kdWxlQHZnZXIua2VybmVsLm9yZworTDoJa2V5cmluZ3NAbGludXgtbmZzLm9yZworUzoJU3VwcG9ydGVkCitGOglEb2N1bWVudGF0aW9uL2tleXMtdHJ1c3RlZC1lbmNyeXB0ZWQudHh0CitGOglpbmNsdWRlL2tleXMvZW5jcnlwdGVkLXR5cGUuaAorRjoJc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQuYworRjoJc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQuaAorCiBLR0RCIC8gS0RCIC9kZWJ1Z19jb3JlCiBNOglKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgogVzoJaHR0cDovL2tnZGIud2lraS5rZXJuZWwub3JnLwpAQCAtMzY3Nyw3ICszNzI2LDcgQEAKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vRG9jQm9vay9rZ2RiLnRtcGwKIEY6CWRyaXZlcnMvbWlzYy9rZ2RidHMuYwotRjoJZHJpdmVycy9zZXJpYWwva2dkYm9jLmMKK0Y6CWRyaXZlcnMvdHR5L3NlcmlhbC9rZ2Rib2MuYwogRjoJaW5jbHVkZS9saW51eC9rZGIuaAogRjoJaW5jbHVkZS9saW51eC9rZ2RiLmgKIEY6CWtlcm5lbC9kZWJ1Zy8KQEAgLTQ1NTgsNyArNDYwNyw3IEBACiAKIE9QRU4gRklSTVdBUkUgQU5EIEZMQVRURU5FRCBERVZJQ0UgVFJFRQogTToJR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgotTDoJZGV2aWNldHJlZS1kaXNjdXNzQGxpc3RzLm96bGFicy5vcmcKK0w6CWRldmljZXRyZWUtZGlzY3Vzc0BsaXN0cy5vemxhYnMub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly9mZHQuc2VjcmV0bGFiLmNhCiBUOglnaXQgZ2l0Oi8vZ2l0LnNlY3JldGxhYi5jYS9naXQvbGludXgtMi42LmdpdAogUzoJTWFpbnRhaW5lZApAQCAtNTIyNCw3ICs1MjczLDcgQEAKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC8KIAogUlRMODE4NyBXSVJFTEVTUyBEUklWRVIKLU06CUhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+CitNOglIZXJ0b24gUm9uYWxkbyBLcnplc2luc2tpIDxoZXJ0b25AY2Fub25pY2FsLmNvbT4KIE06CUhpbi1UYWsgTGV1bmcgPGh0bDEwQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIE06CUxhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwpAQCAtNTUxOCwxMiArNTU2NywxMSBAQAogRjoJZHJpdmVycy9zY3NpL2JlMmlzY3NpLwogCiBTRVJWRVIgRU5HSU5FUyAxMEdicHMgTklDIC0gQmxhZGVFbmdpbmUgMiBEUklWRVIKLU06CVNhdGh5YSBQZXJsYSA8c2F0aHlhcEBzZXJ2ZXJlbmdpbmVzLmNvbT4KLU06CVN1YmJ1IFNlZXRoYXJhbWFuIDxzdWJidXNAc2VydmVyZW5naW5lcy5jb20+Ci1NOglTYXJ2ZXNod2FyIEJhbmRpIDxzYXJ2ZXNod2FyYkBzZXJ2ZXJlbmdpbmVzLmNvbT4KLU06CUFqaXQgS2hhcGFyZGUgPGFqaXRrQHNlcnZlcmVuZ2luZXMuY29tPgorTToJU2F0aHlhIFBlcmxhIDxzYXRoeWEucGVybGFAZW11bGV4LmNvbT4KK006CVN1YmJ1IFNlZXRoYXJhbWFuIDxzdWJidS5zZWV0aGFyYW1hbkBlbXVsZXguY29tPgorTToJQWppdCBLaGFwYXJkZSA8YWppdC5raGFwYXJkZUBlbXVsZXguY29tPgogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwotVzoJaHR0cDovL3d3dy5zZXJ2ZXJlbmdpbmVzLmNvbQorVzoJaHR0cDovL3d3dy5lbXVsZXguY29tCiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvbmV0L2JlbmV0LwogCkBAIC01NTQ1LDcgKzU1OTMsNyBAQAogTDoJbGludXgtaWE2NEB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogRjoJRG9jdW1lbnRhdGlvbi9pYTY0L3NlcmlhbC50eHQKLUY6CWRyaXZlcnMvc2VyaWFsL2lvYz9fc2VyaWFsLmMKK0Y6CWRyaXZlcnMvdHR5L3NlcmlhbC9pb2M/X3NlcmlhbC5jCiBGOglpbmNsdWRlL2xpbnV4L2lvYz8uaAogCiBTR0kgVklTVUFMIFdPUktTVEFUSU9OIDMyMCBBTkQgNTQwCkBAIC01NTY3LDcgKzU2MTUsNyBAQAogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9hcm0vU2hhcnAtTEgvQURDLUxINy1Ub3VjaHNjcmVlbgogRjoJYXJjaC9hcm0vbWFjaC1saDdhNDB4LwotRjoJZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYworRjoJZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKIEY6CWRyaXZlcnMvdXNiL2dhZGdldC9saDdhNDAqCiBGOglkcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwKgogCkBAIC01NTgzLDE4ICs1NjMxLDIwIEBACiAKIFNJTVRFQyBFQjExMEFUWCAoQ2hhbGljZSBDQVRTKQogUDoJQmVuIERvb2tzCi1NOglWaW5jZW50IFNhbmRlcnMgPHN1cHBvcnRAc2ltdGVjLmNvLnVrPgorUDoJVmluY2VudCBTYW5kZXJzIDx2aW5jZUBzaW10ZWMuY28udWs+CitNOglTaW10ZWMgTGludXggVGVhbSA8bGludXhAc2ltdGVjLmNvLnVrPgogVzoJaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvRUIxMTBBVFgvCiBTOglTdXBwb3J0ZWQKIAogU0lNVEVDIEVCMjQxMElUWCAoQkFTVCkKIFA6CUJlbiBEb29rcwotTToJVmluY2VudCBTYW5kZXJzIDxzdXBwb3J0QHNpbXRlYy5jby51az4KK1A6CVZpbmNlbnQgU2FuZGVycyA8dmluY2VAc2ltdGVjLmNvLnVrPgorTToJU2ltdGVjIExpbnV4IFRlYW0gPGxpbnV4QHNpbXRlYy5jby51az4KIFc6CWh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL0VCMjQxMElUWC8KIFM6CVN1cHBvcnRlZAotRjoJYXJjaC9hcm0vbWFjaC1zM2MyNDEwLwotRjoJZHJpdmVycy8qLypzM2MyNDEwKgotRjoJZHJpdmVycy8qLyovKnMzYzI0MTAqCitGOglhcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKK0Y6CWFyY2gvYXJtL21hY2gtczNjMjQxMC9iYXN0LWlkZS5jCitGOglhcmNoL2FybS9tYWNoLXMzYzI0MTAvYmFzdC1pcnEuYwogCiBUSSBEQVZJTkNJIE1BQ0hJTkUgU1VQUE9SVAogTToJS2V2aW4gSGlsbWFuIDxraGlsbWFuQGRlZXByb290c3lzdGVtcy5jb20+CkBAIC01Nzg3LDE0ICs1ODM3LDE0IEBACiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2RhdmVtL3NwYXJjLTIuNi5naXQKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZGF2ZW0vc3BhcmMtbmV4dC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCi1GOglkcml2ZXJzL3NlcmlhbC9zdW5jb3JlLmMKLUY6CWRyaXZlcnMvc2VyaWFsL3N1bmNvcmUuaAotRjoJZHJpdmVycy9zZXJpYWwvc3VuaHYuYwotRjoJZHJpdmVycy9zZXJpYWwvc3Vuc2FiLmMKLUY6CWRyaXZlcnMvc2VyaWFsL3N1bnNhYi5oCi1GOglkcml2ZXJzL3NlcmlhbC9zdW5zdS5jCi1GOglkcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCi1GOglkcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5oCitGOglkcml2ZXJzL3R0eS9zZXJpYWwvc3VuY29yZS5jCitGOglkcml2ZXJzL3R0eS9zZXJpYWwvc3VuY29yZS5oCitGOglkcml2ZXJzL3R0eS9zZXJpYWwvc3VuaHYuYworRjoJZHJpdmVycy90dHkvc2VyaWFsL3N1bnNhYi5jCitGOglkcml2ZXJzL3R0eS9zZXJpYWwvc3Vuc2FiLmgKK0Y6CWRyaXZlcnMvdHR5L3NlcmlhbC9zdW5zdS5jCitGOglkcml2ZXJzL3R0eS9zZXJpYWwvc3Vuemlsb2cuYworRjoJZHJpdmVycy90dHkvc2VyaWFsL3N1bnppbG9nLmgKIAogU1BFQVIgUExBVEZPUk0gU1VQUE9SVAogTToJVmlyZXNoIEt1bWFyIDx2aXJlc2gua3VtYXJAc3QuY29tPgpAQCAtNjA2MSw3ICs2MTExLDcgQEAKIEY6CXNlY3VyaXR5L3RvbW95by8KIAogVE9QU1RBUiBMQVBUT1AgRVhUUkFTIERSSVZFUgotTToJSGVydG9uIFJvbmFsZG8gS3J6ZXNpbnNraSA8aGVydG9uQG1hbmRyaXZhLmNvbS5icj4KK006CUhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBjYW5vbmljYWwuY29tPgogTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L3RvcHN0YXItbGFwdG9wLmMKQEAgLTYxMjQsOCArNjE3NCw4IEBACiBNOglHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgogUzoJTWFpbnRhaW5lZAogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9ncmVna2gvdHR5LTIuNi5naXQKLUY6CWRyaXZlcnMvY2hhci90dHlfKgotRjoJZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYworRjoJZHJpdmVycy90dHkvKgorRjoJZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9jb3JlLmMKIEY6CWluY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAogRjoJaW5jbHVkZS9saW51eC9zZXJpYWwuaAogRjoJaW5jbHVkZS9saW51eC90dHkuaApAQCAtNjU2OSw2ICs2NjE5LDE2IEBACiBGOglkcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwogRjoJaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCiAKK1ZJUlRJTyBDT1JFLCBORVQgQU5EIEJMT0NLIERSSVZFUlMKK006CVJ1c3R5IFJ1c3NlbGwgPHJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdT4KK006CSJNaWNoYWVsIFMuIFRzaXJraW4iIDxtc3RAcmVkaGF0LmNvbT4KK0w6CXZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL3ZpcnRpby8KK0Y6CWRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYworRjoJZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKK0Y6CWluY2x1ZGUvbGludXgvdmlydGlvXyouaAorCiBWSVJUSU8gSE9TVCAoVkhPU1QpCiBNOgkiTWljaGFlbCBTLiBUc2lya2luIiA8bXN0QHJlZGhhdC5jb20+CiBMOglrdm1Admdlci5rZXJuZWwub3JnCkBAIC02NzQyLDEyICs2ODAyLDEyIEBACiBGOglkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvKgogCiBXTDEyNzEgV0lSRUxFU1MgRFJJVkVSCi1NOglMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorTToJTHVjaWFubyBDb2VsaG8gPGNvZWxob0B0aS5jb20+CiBMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnCitXOglodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL3dsMTJ4eAogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9sdWNhL3dsMTJ4eC5naXQKIFM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzEqCitGOglkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvCiBGOglpbmNsdWRlL2xpbnV4L3dsMTJ4eC5oCiAKIFdMMzUwMSBXSVJFTEVTUyBQQ01DSUEgQ0FSRCBEUklWRVIKQEAgLTY4NzAsNyArNjkzMCw3IEBACiBNOglQZXRlciBLb3JzZ2FhcmQgPGphY21ldEBzdW5zaXRlLmRrPgogTDoJbGludXgtc2VyaWFsQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9zZXJpYWwvdWFydGxpdGUuYworRjoJZHJpdmVycy90dHkvc2VyaWFsL3VhcnRsaXRlLmMKIAogWUFNIERSSVZFUiBGT1IgQVguMjUKIE06CUplYW4tUGF1bCBSb3ViZWxhdCA8anByQGY2ZmJiLm9yZz4KQEAgLTY5MTYsNyArNjk3Niw3IEBACiBaUyBERUNTVEFUSU9OIFo4NUMzMCBTRVJJQUwgRFJJVkVSCiBNOgkiTWFjaWVqIFcuIFJvenlja2kiIDxtYWNyb0BsaW51eC1taXBzLm9yZz4KIFM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvc2VyaWFsL3pzLioKK0Y6CWRyaXZlcnMvdHR5L3NlcmlhbC96cy4qCiAKIEdSRSBERU1VTFRJUExFWEVSIERSSVZFUgogTToJRG1pdHJ5IEtvemxvdiA8eGViQG1haWwucnU+CmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGFiYjQ5YmYuLjI2ZDdkODIgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogVkVSU0lPTiA9IDIKIFBBVENITEVWRUwgPSA2CiBTVUJMRVZFTCA9IDM4Ci1FWFRSQVZFUlNJT04gPSAtcmMxCitFWFRSQVZFUlNJT04gPSAtcmM2CiBOQU1FID0gRmxlc2gtRWF0aW5nIEJhdHMgd2l0aCBGYW5ncwogCiAjICpET0NVTUVOVEFUSU9OKgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9LY29uZmlnIGIvYXJjaC9hbHBoYS9LY29uZmlnCmluZGV4IGZjOTVlZTEuLjQ3ZjYzZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvS2NvbmZpZworKysgYi9hcmNoL2FscGhhL0tjb25maWcKQEAgLTgsNiArOCw5IEBACiAJc2VsZWN0IEhBVkVfSVJRX1dPUksKIAlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUwogCXNlbGVjdCBIQVZFX0RNQV9BVFRSUworCXNlbGVjdCBIQVZFX0dFTkVSSUNfSEFSRElSUVMKKwlzZWxlY3QgR0VORVJJQ19JUlFfUFJPQkUKKwlzZWxlY3QgQVVUT19JUlFfQUZGSU5JVFkgaWYgU01QCiAJaGVscAogCSAgVGhlIEFscGhhIGlzIGEgNjQtYml0IGdlbmVyYWwtcHVycG9zZSBwcm9jZXNzb3IgZGVzaWduZWQgYW5kCiAJICBtYXJrZXRlZCBieSB0aGUgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gb2YgYmxlc3NlZCBtZW1vcnksCkBAIC02OCwyMiArNzEsNiBAQAogCWJvb2wKIAlkZWZhdWx0IG4KIAotY29uZmlnIEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQotCWRlZl9ib29sIHkKLQotY29uZmlnIEdFTkVSSUNfSEFSRElSUVMKLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBHRU5FUklDX0lSUV9QUk9CRQotCWJvb2wKLQlkZWZhdWx0IHkKLQotY29uZmlnIEFVVE9fSVJRX0FGRklOSVRZCi0JYm9vbAotCWRlcGVuZHMgb24gU01QCi0JZGVmYXVsdCB5Ci0KIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCA1Y2ZmMTY1Li4xNjZlZmEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTExNzcsNiArMTE3NywzMSBAQAogCSAgdmlzaWJsZSBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2Ugb3IgcG93ZXIgY29uc3VtcHRpb24gb2YgdGhlCiAJICBwcm9jZXNzb3IuCiAKK2NvbmZpZyBBUk1fRVJSQVRBXzc1MTQ3MgorCWJvb2wgIkFSTSBlcnJhdGE6IEludGVycnVwdGVkIElDSUFMTFVJUyBtYXkgcHJldmVudCBjb21wbGV0aW9uIG9mIGJyb2FkY2FzdGVkIG9wZXJhdGlvbiIKKwlkZXBlbmRzIG9uIENQVV9WNyAmJiBTTVAKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSB3b3JrYXJvdW5kIGZvciB0aGUgNzUxNDcyIENvcnRleC1BOSAocHJpb3IKKwkgIHRvIHIzcDApIGVycmF0dW0uIEFuIGludGVycnVwdGVkIElDSUFMTFVJUyBvcGVyYXRpb24gbWF5IHByZXZlbnQgdGhlCisJICBjb21wbGV0aW9uIG9mIGEgZm9sbG93aW5nIGJyb2FkY2FzdGVkIG9wZXJhdGlvbiBpZiB0aGUgc2Vjb25kCisJICBvcGVyYXRpb24gaXMgcmVjZWl2ZWQgYnkgYSBDUFUgYmVmb3JlIHRoZSBJQ0lBTExVSVMgaGFzIGNvbXBsZXRlZCwKKwkgIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gY29ycnVwdGVkIGVudHJpZXMgaW4gdGhlIGNhY2hlIG9yIFRMQi4KKworY29uZmlnIEFSTV9FUlJBVEFfNzUzOTcwCisJYm9vbCAiQVJNIGVycmF0YTogY2FjaGUgc3luYyBvcGVyYXRpb24gbWF5IGJlIGZhdWx0eSIKKwlkZXBlbmRzIG9uIENBQ0hFX1BMMzEwCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgd29ya2Fyb3VuZCBmb3IgdGhlIDc1Mzk3MCBQTDMxMCAocjNwMCkgZXJyYXR1bS4KKworCSAgVW5kZXIgc29tZSBjb25kaXRpb24gdGhlIGVmZmVjdCBvZiBjYWNoZSBzeW5jIG9wZXJhdGlvbiBvbgorCSAgdGhlIHN0b3JlIGJ1ZmZlciBzdGlsbCByZW1haW5zIHdoZW4gdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMuCisJICBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0b3JlIGJ1ZmZlciBpcyBhbHdheXMgYXNrZWQgdG8gZHJhaW4gYW5kCisJICB0aGlzIHByZXZlbnRzIGl0IGZyb20gbWVyZ2luZyBhbnkgZnVydGhlciB3cml0ZXMuIFRoZSB3b3JrYXJvdW5kCisJICBpcyB0byByZXBsYWNlIHRoZSBub3JtYWwgb2Zmc2V0IG9mIGNhY2hlIHN5bmMgb3BlcmF0aW9uICgweDczMCkKKwkgIGJ5IGFub3RoZXIgb2Zmc2V0IHRhcmdldGluZyBhbiB1bm1hcHBlZCBQTDMxMCByZWdpc3RlciAweDc0MC4KKwkgIFRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgY2FjaGUgc3luYyBvcGVyYXRpb246IHN0b3JlIGJ1ZmZlcgorCSAgZHJhaW4gYW5kIHdhaXRpbmcgZm9yIGFsbCBidWZmZXJzIGVtcHR5LgorCiBlbmRtZW51CiAKIHNvdXJjZSAiYXJjaC9hcm0vY29tbW9uL0tjb25maWciCkBAIC0xMzkxLDcgKzE0MTYsNyBAQAogCiBjb25maWcgT0FCSV9DT01QQVQKIAlib29sICJBbGxvdyBvbGQgQUJJIGJpbmFyaWVzIHRvIHJ1biB3aXRoIHRoaXMga2VybmVsIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gQUVBQkkgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBBRUFCSSAmJiBFWFBFUklNRU5UQUwgJiYgIVRIVU1CMl9LRVJORUwKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBwcmVzZXJ2ZXMgdGhlIG9sZCBzeXNjYWxsIGludGVyZmFjZSBhbG9uZyB3aXRoIHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCBjMjJjMWFkLi42ZjdiMjkyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtMTUsNyArMTUsNyBAQAogTERGTEFHU192bWxpbnV4CSs9IC0tYmU4CiBlbmRpZgogCi1PQkpDT1BZRkxBR1MJOj0tTyBiaW5hcnkgLVIgLm5vdGUgLVIgLm5vdGUuZ251LmJ1aWxkLWlkIC1SIC5jb21tZW50IC1TCitPQkpDT1BZRkxBR1MJOj0tTyBiaW5hcnkgLVIgLmNvbW1lbnQgLVMKIEdaRkxBR1MJCTo9LTkKICNLQlVJTERfQ0ZMQUdTCSs9LXBpcGUKICMgRXhwbGljaXRseSBzcGVjaWZpeSAzMi1iaXQgQVJNIElTQSBzaW5jZSB0b29sY2hhaW4gZGVmYXVsdCBjYW4gYmUgLW10aHVtYjoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC8uZ2l0aWdub3JlIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkLy5naXRpZ25vcmUKaW5kZXggYWIyMDRkYi4uYzYwMjg5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkLy5naXRpZ25vcmUKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkLy5naXRpZ25vcmUKQEAgLTEsMyArMSw3IEBACiBmb250LmMKLXBpZ2d5Lmd6CitsaWIxZnVuY3MuUworcGlnZ3kuZ3ppcAorcGlnZ3kubHpvCitwaWdneS5sem1hCit2bWxpbnV4CiB2bWxpbnV4LmxkcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hZzVldm1fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hZzVldm1fZGVmY29uZmlnCmluZGV4IDJiOWNmNTYuLjIxMmVhZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYWc1ZXZtX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2FnNWV2bV9kZWZjb25maWcKQEAgLTEwLDcgKzEwLDcgQEAKICMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hbTIwMGVwZGtpdF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2FtMjAwZXBka2l0X2RlZmNvbmZpZwppbmRleCA1NTM2YzQ4Li5mMGRlYTUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2FtMjAwZXBka2l0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2FtMjAwZXBka2l0X2RlZmNvbmZpZwpAQCAtMyw3ICszLDcgQEAKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDU3MmQ5NDBoZmVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ1NzJkOTQwaGZla19kZWZjb25maWcKaW5kZXggNjk1ZTMyZC4uMWIxMTU4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDU3MmQ5NDBoZmVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0NTcyZDk0MGhmZWtfZGVmY29uZmlnCkBAIC0xNyw3ICsxNyw3IEBACiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX09QUk9GSUxFPW0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYmFkZ2U0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYmFkZ2U0X2RlZmNvbmZpZwppbmRleCAzYTFhZDE1Li41YjU0YWJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2JhZGdlNF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9iYWRnZTRfZGVmY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19BUkNIX1NBMTEwMD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2JjbXJpbmdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9iY21yaW5nX2RlZmNvbmZpZwppbmRleCA3NTk4NGNkLi43OTUzNzRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2JjbXJpbmdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYmNtcmluZ19kZWZjb25maWcKQEAgLTIsNyArMiw3IEBACiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKICMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jbV94Mnh4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY21feDJ4eF9kZWZjb25maWcKaW5kZXggZGNmYmNmMy4uYTkzZmY4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jbV94Mnh4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NtX3gyeHhfZGVmY29uZmlnCkBAIC02LDcgKzYsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX3B4YTI3MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMjcwX2RlZmNvbmZpZwppbmRleCBmNTJjNjRlLi4yZWYyYzVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMjcwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMjcwX2RlZmNvbmZpZwpAQCAtOCw3ICs4LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jb2xsaWVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jb2xsaWVfZGVmY29uZmlnCmluZGV4IDMxMGY5YTYuLjZjNTZhZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY29sbGllX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcKQEAgLTQsNyArNCw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiBDT05GSUdfU0xPQj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NvcmdpX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnCmluZGV4IDRhMWZhODEuLmU1M2M0NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnCkBAIC00LDcgKzQsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX09QUk9GSUxFPW0KIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZGE4eHhfb21hcGxfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9kYTh4eF9vbWFwbF9kZWZjb25maWcKaW5kZXggY2RjNDBjNC4uODhjY2RlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9kYTh4eF9vbWFwbF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9kYTh4eF9vbWFwbF9kZWZjb25maWcKQEAgLTYsNyArNiw3IEBACiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZGF2aW5jaV9hbGxfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9kYXZpbmNpX2FsbF9kZWZjb25maWcKaW5kZXggMjUxOWNjNS4uODg5OTIyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9kYXZpbmNpX2FsbF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9kYXZpbmNpX2FsbF9kZWZjb25maWcKQEAgLTYsNyArNiw3IEBACiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZG92ZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2RvdmVfZGVmY29uZmlnCmluZGV4IDkzNTllMWIuLjU0YmY1ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZG92ZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9kb3ZlX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZWJzYTExMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Vic2ExMTBfZGVmY29uZmlnCmluZGV4IGMzMTk0MTguLjE0NTU5ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZWJzYTExMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lYnNhMTEwX2RlZmNvbmZpZwpAQCAtMiw3ICsyLDcgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfQVJDSF9FQlNBMTEwPXkKIENPTkZJR19QQ0NBUkQ9bQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lZGI3MjExX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZWRiNzIxMV9kZWZjb25maWcKaW5kZXggN2I2MmJlMS4uZDUyZGVkMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZWRiNzIxMV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lZGI3MjExX2RlZmNvbmZpZwpAQCAtMiw3ICsyLDcgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9DTFBTNzExWD15CiBDT05GSUdfQVJDSF9FREI3MjExPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZW1feDI3MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2VtX3gyNzBfZGVmY29uZmlnCmluZGV4IGQ3ZGIzNGYuLjYwYTIxZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZW1feDI3MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lbV94MjcwX2RlZmNvbmZpZwpAQCAtNiw3ICs2LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZXA5M3h4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXA5M3h4X2RlZmNvbmZpZwppbmRleCA2ZDY2ODljLi44ZTk3YjJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2VwOTN4eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnCkBAIC00LDcgKzQsNyBAQAogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZXNlcmllc19weGFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lc2VyaWVzX3B4YV9kZWZjb25maWcKaW5kZXggMTY5MWRlYS4uZDY4YWM2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lc2VyaWVzX3B4YV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lc2VyaWVzX3B4YV9kZWZjb25maWcKQEAgLTIsNyArMiw3IEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2V6eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2V6eF9kZWZjb25maWcKaW5kZXggYzRlZWI2ZC4uMjI3YTQ3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lenhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXp4X2RlZmNvbmZpZwpAQCAtNyw3ICs3LDcgQEAKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfUkRfQlpJUDI9eQogQ09ORklHX1JEX0xaTUE9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15CiBDT05GSUdfTU9EVUxFUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2Zvb3RicmlkZ2VfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9mb290YnJpZGdlX2RlZmNvbmZpZwppbmRleCA0ZjkyNWVhLi4wMzg1MThhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2Zvb3RicmlkZ2VfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZm9vdGJyaWRnZV9kZWZjb25maWcKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX0FSQ0hfRk9PVEJSSURHRT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2ZvcnR1bmV0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZm9ydHVuZXRfZGVmY29uZmlnCmluZGV4IGUxMWM3ZWEuLjg0MGZjZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZm9ydHVuZXRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZm9ydHVuZXRfZGVmY29uZmlnCkBAIC0yLDcgKzIsNyBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0NMUFM3MTFYPXkKIENPTkZJR19BUkNIX0ZPUlRVTkVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaDUwMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9oNTAwMF9kZWZjb25maWcKaW5kZXggYWMzMzZmMS4uMzc5MDNlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9oNTAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9oNTAwMF9kZWZjb25maWcKQEAgLTQsNyArNCw3IEBACiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfVUlEMTYgaXMgbm90IHNldAogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pbW90ZTJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pbW90ZTJfZGVmY29uZmlnCmluZGV4IGFkZTU1YzguLjE3NmVjMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaW1vdGUyX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2ltb3RlMl9kZWZjb25maWcKQEAgLTYsNyArNiw3IEBACiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX1JEX0JaSVAyPXkKIENPTkZJR19SRF9MWk1BPXkKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9peHAyMDAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjAwMF9kZWZjb25maWcKaW5kZXggOTA4MzI0Ni4uODQwNWFkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9peHAyMDAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2l4cDIwMDBfZGVmY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjN4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4cDIzeHhfZGVmY29uZmlnCmluZGV4IDdmYzA1NmEuLjY4ODcxNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjN4eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peHAyM3h4X2RlZmNvbmZpZwpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnCmluZGV4IDVjNTAyMzkuLjA2M2UyYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwNHh4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2l4cDR4eF9kZWZjb25maWcKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xva2lfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9sb2tpX2RlZmNvbmZpZwppbmRleCBlMWVhZmY3Li4xYmE3NTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xva2lfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbG9raV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDBfZGVmY29uZmlnCmluZGV4IDIwY2FhYWIuLjVhNDhmMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDBfZGVmY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwNF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2xwZDdhNDA0X2RlZmNvbmZpZwppbmRleCAxZWZjY2U5Li4yMmQwNjMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xwZDdhNDA0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2xwZDdhNDA0X2RlZmNvbmZpZwpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNgotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL21hZ2ljaWFuX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWFnaWNpYW5fZGVmY29uZmlnCmluZGV4IGFmODA1ZTguLmE4OGU2NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbWFnaWNpYW5fZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWFnaWNpYW5fZGVmY29uZmlnCkBAIC00LDcgKzQsNyBAQAogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15CiBDT05GSUdfTU9EVUxFUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL212Nzh4eDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9tdjc4eHgwX2RlZmNvbmZpZwppbmRleCBiMGQwODI0Li43MzA1ZWJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL212Nzh4eDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXY3OHh4MF9kZWZjb25maWcKQEAgLTIsNyArMiw3IEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiAjIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9teDFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9teDFfZGVmY29uZmlnCmluZGV4IDJmMzhkOTcuLmIzOWI1Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL214MV9kZWZjb25maWcKQEAgLTQsNyArNCw3IEBACiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9teDIxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgyMV9kZWZjb25maWcKaW5kZXggNjQ1NGUxOC4uNDExZjg4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9teDIxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL214MjFfZGVmY29uZmlnCkBAIC00LDcgKzQsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgyN19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL214MjdfZGVmY29uZmlnCmluZGV4IDgxM2NmYjMuLjlhZDRjNjU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL214MjdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgyN19kZWZjb25maWcKQEAgLTQsNyArNCw3IEBACiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgzX2RlZmNvbmZpZwppbmRleCBlNjQ4ZWEzLi43YzRiMzBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL214M19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDNfZGVmY29uZmlnCkBAIC00LDcgKzQsNyBAQAogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXg1MV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL214NTFfZGVmY29uZmlnCmluZGV4IDVjN2E4NzIuLjljYmE2OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXg1MV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDUxX2RlZmNvbmZpZwpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE4CiBDT05GSUdfUkVMQVk9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU0xVQl9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL25oazg4MTVfZGVmY29uZmlnCmluZGV4IDBlMmRjMjYuLjM3MjA3ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZwpAQCAtNyw3ICs3LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfTU9EVUxFUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDFfZGVmY29uZmlnCmluZGV4IGEzNTBjYzYuLjdiNjM0NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDFfZGVmY29uZmlnCkBAIC02LDcgKzYsNyBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZwppbmRleCBjY2VkZGUxLi5hZTg5MGNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAycGx1c19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnCkBAIC02LDcgKzYsNyBAQAogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfU0xBQj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZwppbmRleCA0MzkzMjNiLi5hMjg4ZDcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcKQEAgLTIsNyArMiw3IEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU0xVQl9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19PUFJPRklMRT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3BjbTAyN19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BjbTAyN19kZWZjb25maWcKaW5kZXggNTgzYTA2MS4uMmYxMzZjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9wY20wMjdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGNtMDI3X2RlZmNvbmZpZwpAQCAtNyw3ICs3LDcgQEAKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15CiBDT05GSUdfTU9EVUxFUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3Bjb250cm9sX2cyMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3Bjb250cm9sX2cyMF9kZWZjb25maWcKaW5kZXggYjQyZWU2Mi4uYzc1YzlmYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9wY29udHJvbF9nMjBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGNvbnRyb2xfZzIwX2RlZmNvbmZpZwpAQCAtMTAsNyArMTAsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19OQU1FU1BBQ0VTPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3BsZWJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9wbGViX2RlZmNvbmZpZwppbmRleCBkMWVmYmRjLi5jYjA4Y2M1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BsZWJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGxlYl9kZWZjb25maWcKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9wbng0MDA4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcG54NDAwOF9kZWZjb25maWcKaW5kZXggYmQ0ODFmMC4uMzVhMzFjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9wbng0MDA4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3BueDQwMDhfZGVmY29uZmlnCkBAIC01LDcgKzUsNyBAQAogQ09ORklHX0FVRElUPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zaW1wYWRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zaW1wYWRfZGVmY29uZmlnCmluZGV4IGFmM2IxMmUuLmQzMzU4MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2ltcGFkX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3NpbXBhZF9kZWZjb25maWcKQEAgLTIsNyArMiw3IEBACiBDT05GSUdfTE9DQUxWRVJTSU9OPSJvZTEiCiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfTU9EVUxFUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NwaXR6X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnCmluZGV4IGFlYmQ0YmIuLjcwMTU4MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnCkBAIC00LDcgKzQsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX09QUk9GSUxFPW0KIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3RtcDM3OHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zdG1wMzc4eF9kZWZjb25maWcKaW5kZXggOTRhMmQ5MC4uMTA3OWMyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zdG1wMzc4eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zdG1wMzc4eF9kZWZjb25maWcKQEAgLTUsNyArNSw3IEBACiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zdG1wMzd4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3N0bXAzN3h4X2RlZmNvbmZpZwppbmRleCBkOGVlNThjLi41NjRhNWNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3N0bXAzN3h4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3N0bXAzN3h4X2RlZmNvbmZpZwpAQCAtNSw3ICs1LDcgQEAKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3RjdF9oYW1tZXJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy90Y3RfaGFtbWVyX2RlZmNvbmZpZwppbmRleCBlODljYTE5Li45NWMwZjBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3RjdF9oYW1tZXJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdGN0X2hhbW1lcl9kZWZjb25maWcKQEAgLTUsNyArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0JVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3RyaXplcHM0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdHJpemVwczRfZGVmY29uZmlnCmluZGV4IDM3ZjQ4MzQuLjMxNjIxNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdHJpemVwczRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdHJpemVwczRfZGVmY29uZmlnCkBAIC03LDcgKzcsNyBAQAogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfTU9EVUxFUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3UzMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy91MzAwX2RlZmNvbmZpZwppbmRleCBjMWMyNTJjLi40YTVhMTI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3UzMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcKQEAgLTMsNyArMyw3IEBACiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19BSU8gaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy92aXBlcl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3ZpcGVyX2RlZmNvbmZpZwppbmRleCA5ZDdiZjVlLi44YjBjNzE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3ZpcGVyX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3ZpcGVyX2RlZmNvbmZpZwpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTEzCiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3hjZXBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy94Y2VwX2RlZmNvbmZpZwppbmRleCA3MGQ0N2RiLi41YjU1MDQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3hjZXBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MveGNlcF9kZWZjb25maWcKQEAgLTgsNyArOCw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNgogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1VJRDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaAppbmRleCA1YWVlYzFlLi4xNmJkNDgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oCkBAIC0zNiw2ICszNiw3IEBACiAjZGVmaW5lIEwyWDBfUkFXX0lOVFJfU1RBVAkJMHgyMUMKICNkZWZpbmUgTDJYMF9JTlRSX0NMRUFSCQkJMHgyMjAKICNkZWZpbmUgTDJYMF9DQUNIRV9TWU5DCQkJMHg3MzAKKyNkZWZpbmUgTDJYMF9EVU1NWV9SRUcJCQkweDc0MAogI2RlZmluZSBMMlgwX0lOVl9MSU5FX1BBCQkweDc3MAogI2RlZmluZSBMMlgwX0lOVl9XQVkJCQkweDc3QwogI2RlZmluZSBMMlgwX0NMRUFOX0xJTkVfUEEJCTB4N0IwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9zcDgxMC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvc3A4MTAuaAppbmRleCBhMTAxZjEwLi5lMGQxYzBjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9zcDgxMC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3NwODEwLmgKQEAgLTUwLDggKzUwLDE3IEBACiAjZGVmaW5lIFNDUENFTExJRDIJCTB4RkY4CiAjZGVmaW5lIFNDUENFTExJRDMJCTB4RkZDCiAKKyNkZWZpbmUgU0NDVFJMX1RJTUVSRU4wU0VMX1JFRkNMSwkoMCA8PCAxNSkKKyNkZWZpbmUgU0NDVFJMX1RJTUVSRU4wU0VMX1RJTUNMSwkoMSA8PCAxNSkKKworI2RlZmluZSBTQ0NUUkxfVElNRVJFTjFTRUxfUkVGQ0xLCSgwIDw8IDE3KQorI2RlZmluZSBTQ0NUUkxfVElNRVJFTjFTRUxfVElNQ0xLCSgxIDw8IDE3KQorCiBzdGF0aWMgaW5saW5lIHZvaWQgc3lzY3RsX3NvZnRfcmVzZXQodm9pZCBfX2lvbWVtICpiYXNlKQogeworCS8qIHN3aXRjaCB0byBzbG93IG1vZGUgKi8KKwl3cml0ZWwoMHgyLCBiYXNlICsgU0NDVFJMKTsKKwogCS8qIHdyaXRpbmcgYW55IHZhbHVlIHRvIFNDU1lTU1RBVCByZWcgd2lsbCByZXNldCBzeXN0ZW0gKi8KIAl3cml0ZWwoMCwgYmFzZSArIFNDU1lTU1RBVCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaAppbmRleCAyMGUwZjdjLi5kNjY2MDVkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oCkBAIC05NSw2ICs5NSwxNSBAQAogCXJldHVybiAodm9pZCBfX2lvbWVtICopYWRkcjsKIH0KIAorLyogSU8gYmFycmllcnMgKi8KKyNpZmRlZiBDT05GSUdfQVJNX0RNQV9NRU1fQlVGRkVSQUJMRQorI2RlZmluZSBfX2lvcm1iKCkJCXJtYigpCisjZGVmaW5lIF9faW93bWIoKQkJd21iKCkKKyNlbHNlCisjZGVmaW5lIF9faW9ybWIoKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX2lvd21iKCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCiAvKgogICogTm93LCBwaWNrIHVwIHRoZSBtYWNoaW5lLWRlZmluZWQgSU8gZGVmaW5pdGlvbnMKICAqLwpAQCAtMTI1LDE3ICsxMzQsMTcgQEAKICAqIFRoZSB7aW4sb3V0fVtid2xdIG1hY3JvcyBhcmUgZm9yIGVtdWxhdGluZyB4ODYtc3R5bGUgUENJL0lTQSBJTyBzcGFjZS4KICAqLwogI2lmZGVmIF9faW8KLSNkZWZpbmUgb3V0Yih2LHApCQlfX3Jhd193cml0ZWIodixfX2lvKHApKQotI2RlZmluZSBvdXR3KHYscCkJCV9fcmF3X3dyaXRldygoX19mb3JjZSBfX3UxNikgXAotCQkJCQljcHVfdG9fbGUxNih2KSxfX2lvKHApKQotI2RlZmluZSBvdXRsKHYscCkJCV9fcmF3X3dyaXRlbCgoX19mb3JjZSBfX3UzMikgXAotCQkJCQljcHVfdG9fbGUzMih2KSxfX2lvKHApKQorI2RlZmluZSBvdXRiKHYscCkJKHsgX19pb3dtYigpOyBfX3Jhd193cml0ZWIodixfX2lvKHApKTsgfSkKKyNkZWZpbmUgb3V0dyh2LHApCSh7IF9faW93bWIoKTsgX19yYXdfd3JpdGV3KChfX2ZvcmNlIF9fdTE2KSBcCisJCQkJCWNwdV90b19sZTE2KHYpLF9faW8ocCkpOyB9KQorI2RlZmluZSBvdXRsKHYscCkJKHsgX19pb3dtYigpOyBfX3Jhd193cml0ZWwoKF9fZm9yY2UgX191MzIpIFwKKwkJCQkJY3B1X3RvX2xlMzIodiksX19pbyhwKSk7IH0pCiAKLSNkZWZpbmUgaW5iKHApCSh7IF9fdTggX192ID0gX19yYXdfcmVhZGIoX19pbyhwKSk7IF9fdjsgfSkKKyNkZWZpbmUgaW5iKHApCSh7IF9fdTggX192ID0gX19yYXdfcmVhZGIoX19pbyhwKSk7IF9faW9ybWIoKTsgX192OyB9KQogI2RlZmluZSBpbncocCkJKHsgX191MTYgX192ID0gbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KSBcCi0JCQlfX3Jhd19yZWFkdyhfX2lvKHApKSk7IF9fdjsgfSkKKwkJCV9fcmF3X3JlYWR3KF9faW8ocCkpKTsgX19pb3JtYigpOyBfX3Y7IH0pCiAjZGVmaW5lIGlubChwKQkoeyBfX3UzMiBfX3YgPSBsZTMyX3RvX2NwdSgoX19mb3JjZSBfX2xlMzIpIFwKLQkJCV9fcmF3X3JlYWRsKF9faW8ocCkpKTsgX192OyB9KQorCQkJX19yYXdfcmVhZGwoX19pbyhwKSkpOyBfX2lvcm1iKCk7IF9fdjsgfSkKIAogI2RlZmluZSBvdXRzYihwLGQsbCkJCV9fcmF3X3dyaXRlc2IoX19pbyhwKSxkLGwpCiAjZGVmaW5lIG91dHN3KHAsZCxsKQkJX19yYXdfd3JpdGVzdyhfX2lvKHApLGQsbCkKQEAgLTE5MiwxNCArMjAxLDYgQEAKICNkZWZpbmUgd3JpdGVsX3JlbGF4ZWQodixjKQkoKHZvaWQpX19yYXdfd3JpdGVsKChfX2ZvcmNlIHUzMikgXAogCQkJCQljcHVfdG9fbGUzMih2KSxfX21lbV9wY2koYykpKQogCi0jaWZkZWYgQ09ORklHX0FSTV9ETUFfTUVNX0JVRkZFUkFCTEUKLSNkZWZpbmUgX19pb3JtYigpCQlybWIoKQotI2RlZmluZSBfX2lvd21iKCkJCXdtYigpCi0jZWxzZQotI2RlZmluZSBfX2lvcm1iKCkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgX19pb3dtYigpCQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQogI2RlZmluZSByZWFkYihjKQkJKHsgdTggIF9fdiA9IHJlYWRiX3JlbGF4ZWQoYyk7IF9faW9ybWIoKTsgX192OyB9KQogI2RlZmluZSByZWFkdyhjKQkJKHsgdTE2IF9fdiA9IHJlYWR3X3JlbGF4ZWQoYyk7IF9faW9ybWIoKTsgX192OyB9KQogI2RlZmluZSByZWFkbChjKQkJKHsgdTMyIF9fdiA9IHJlYWRsX3JlbGF4ZWQoYyk7IF9faW9ybWIoKTsgX192OyB9KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaAppbmRleCAyM2MyZThlLi5kMGVlNzRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaApAQCAtMTg4LDcgKzE4OCw3IEBACiAgKiB0cmFuc2xhdGlvbiBmb3IgdHJhbnNsYXRpbmcgRE1BIGFkZHJlc3Nlcy4gIFVzZSB0aGUgZHJpdmVyCiAgKiBETUEgc3VwcG9ydCAtIHNlZSBkbWEtbWFwcGluZy5oLgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvaWQgKngpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKGNvbnN0IHZvbGF0aWxlIHZvaWQgKngpCiB7CiAJcmV0dXJuIF9fdmlydF90b19waHlzKCh1bnNpZ25lZCBsb25nKSh4KSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IGY0MWE2ZjUuLjgyZGZlNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYi5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYi5oCkBAIC0xOCwxNiArMTgsMzQgQEAKICNkZWZpbmUgX19BU01BUk1fVExCX0gKIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKICNpZm5kZWYgQ09ORklHX01NVQogCiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorCisjZGVmaW5lIHRsYl9mbHVzaCh0bGIpCSgodm9pZCkgdGxiKQorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+CiAKICNlbHNlIC8qICFDT05GSUdfTU1VICovCiAKKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKworLyoKKyAqIFdlIG5lZWQgdG8gZGVsYXkgcGFnZSBmcmVlaW5nIGZvciBTTVAgYXMgb3RoZXIgQ1BVcyBjYW4gYWNjZXNzIHBhZ2VzCisgKiB3aGljaCBoYXZlIGJlZW4gcmVtb3ZlZCBidXQgbm90IHlldCBoYWQgdGhlaXIgVExCIGVudHJpZXMgaW52YWxpZGF0ZWQuCisgKiBBbHNvLCBhcyBBUk12NyBzcGVjdWxhdGl2ZSBwcmVmZXRjaCBjYW4gZHJhZyBuZXcgZW50cmllcyBpbnRvIHRoZSBUTEIsCisgKiB3ZSBuZWVkIHRvIGFwcGx5IHRoaXMgc2FtZSBkZWxheWluZyB0YWN0aWMgdG8gZW5zdXJlIGNvcnJlY3Qgb3BlcmF0aW9uLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfMzJ2NykKKyNkZWZpbmUgdGxiX2Zhc3RfbW9kZSh0bGIpCTAKKyNkZWZpbmUgRlJFRV9QVEVfTlIJCTUwMAorI2Vsc2UKKyNkZWZpbmUgdGxiX2Zhc3RfbW9kZSh0bGIpCTEKKyNkZWZpbmUgRlJFRV9QVEVfTlIJCTAKKyNlbmRpZgogCiAvKgogICogVExCIGhhbmRsaW5nLiAgVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIHBhZ2VzIGZyb20gdGhlIHBhZ2UKQEAgLTM2LDEyICs1NCw1OCBAQAogc3RydWN0IG1tdV9nYXRoZXIgewogCXN0cnVjdCBtbV9zdHJ1Y3QJKm1tOwogCXVuc2lnbmVkIGludAkJZnVsbG1tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdAkqdm1hOwogCXVuc2lnbmVkIGxvbmcJCXJhbmdlX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcJCXJhbmdlX2VuZDsKKwl1bnNpZ25lZCBpbnQJCW5yOworCXN0cnVjdCBwYWdlCQkqcGFnZXNbRlJFRV9QVEVfTlJdOwogfTsKIAogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CiAKKy8qCisgKiBUaGlzIGlzIHVubmVjZXNzYXJpbHkgY29tcGxleC4gIFRoZXJlJ3MgdGhyZWUgd2F5cyB0aGUgVExCIHNob290ZG93bgorICogY29kZSBpcyB1c2VkOgorICogIDEuIFVubWFwcGluZyBhIHJhbmdlIG9mIHZtYXMuICBTZWUgemFwX3BhZ2VfcmFuZ2UoKSwgdW5tYXBfcmVnaW9uKCkuCisgKiAgICAgdGxiLT5mdWxsbW0gPSAwLCBhbmQgdGxiX3N0YXJ0X3ZtYS90bGJfZW5kX3ZtYSB3aWxsIGJlIGNhbGxlZC4KKyAqICAgICB0bGItPnZtYSB3aWxsIGJlIG5vbi1OVUxMLgorICogIDIuIFVubWFwcGluZyBhbGwgdm1hcy4gIFNlZSBleGl0X21tYXAoKS4KKyAqICAgICB0bGItPmZ1bGxtbSA9IDEsIGFuZCB0bGJfc3RhcnRfdm1hL3RsYl9lbmRfdm1hIHdpbGwgYmUgY2FsbGVkLgorICogICAgIHRsYi0+dm1hIHdpbGwgYmUgbm9uLU5VTEwuICBBZGRpdGlvbmFsbHksIHBhZ2UgdGFibGVzIHdpbGwgYmUgZnJlZWQuCisgKiAgMy4gVW5tYXBwaW5nIGFyZ3VtZW50IHBhZ2VzLiAgU2VlIHNoaWZ0X2FyZ19wYWdlcygpLgorICogICAgIHRsYi0+ZnVsbG1tID0gMCwgYnV0IHRsYl9zdGFydF92bWEvdGxiX2VuZF92bWEgd2lsbCBub3QgYmUgY2FsbGVkLgorICogICAgIHRsYi0+dm1hIHdpbGwgYmUgTlVMTC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQoreworCWlmICh0bGItPmZ1bGxtbSB8fCAhdGxiLT52bWEpCisJCWZsdXNoX3RsYl9tbSh0bGItPm1tKTsKKwllbHNlIGlmICh0bGItPnJhbmdlX2VuZCA+IDApIHsKKwkJZmx1c2hfdGxiX3JhbmdlKHRsYi0+dm1hLCB0bGItPnJhbmdlX3N0YXJ0LCB0bGItPnJhbmdlX2VuZCk7CisJCXRsYi0+cmFuZ2Vfc3RhcnQgPSBUQVNLX1NJWkU7CisJCXRsYi0+cmFuZ2VfZW5kID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0bGJfYWRkX2ZsdXNoKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpZiAoIXRsYi0+ZnVsbG1tKSB7CisJCWlmIChhZGRyIDwgdGxiLT5yYW5nZV9zdGFydCkKKwkJCXRsYi0+cmFuZ2Vfc3RhcnQgPSBhZGRyOworCQlpZiAoYWRkciArIFBBR0VfU0laRSA+IHRsYi0+cmFuZ2VfZW5kKQorCQkJdGxiLT5yYW5nZV9lbmQgPSBhZGRyICsgUEFHRV9TSVpFOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaF9tbXUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKK3sKKwl0bGJfZmx1c2godGxiKTsKKwlpZiAoIXRsYl9mYXN0X21vZGUodGxiKSkgeworCQlmcmVlX3BhZ2VzX2FuZF9zd2FwX2NhY2hlKHRsYi0+cGFnZXMsIHRsYi0+bnIpOworCQl0bGItPm5yID0gMDsKKwl9Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1tdV9nYXRoZXIgKgogdGxiX2dhdGhlcl9tbXUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBmdWxsX21tX2ZsdXNoKQogewpAQCAtNDksNiArMTEzLDggQEAKIAogCXRsYi0+bW0gPSBtbTsKIAl0bGItPmZ1bGxtbSA9IGZ1bGxfbW1fZmx1c2g7CisJdGxiLT52bWEgPSBOVUxMOworCXRsYi0+bnIgPSAwOwogCiAJcmV0dXJuIHRsYjsKIH0KQEAgLTU2LDggKzEyMiw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIHRsYl9maW5pc2hfbW11KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCWlmICh0bGItPmZ1bGxtbSkKLQkJZmx1c2hfdGxiX21tKHRsYi0+bW0pOworCXRsYl9mbHVzaF9tbXUodGxiKTsKIAogCS8qIGtlZXAgdGhlIHBhZ2UgdGFibGUgY2FjaGUgd2l0aGluIGJvdW5kcyAqLwogCWNoZWNrX3BndF9jYWNoZSgpOwpAQCAtNzEsMTIgKzEzNiw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIHRsYl9yZW1vdmVfdGxiX2VudHJ5KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JaWYgKCF0bGItPmZ1bGxtbSkgewotCQlpZiAoYWRkciA8IHRsYi0+cmFuZ2Vfc3RhcnQpCi0JCQl0bGItPnJhbmdlX3N0YXJ0ID0gYWRkcjsKLQkJaWYgKGFkZHIgKyBQQUdFX1NJWkUgPiB0bGItPnJhbmdlX2VuZCkKLQkJCXRsYi0+cmFuZ2VfZW5kID0gYWRkciArIFBBR0VfU0laRTsKLQl9CisJdGxiX2FkZF9mbHVzaCh0bGIsIGFkZHIpOwogfQogCiAvKgpAQCAtODksNiArMTQ5LDcgQEAKIHsKIAlpZiAoIXRsYi0+ZnVsbG1tKSB7CiAJCWZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpOworCQl0bGItPnZtYSA9IHZtYTsKIAkJdGxiLT5yYW5nZV9zdGFydCA9IFRBU0tfU0laRTsKIAkJdGxiLT5yYW5nZV9lbmQgPSAwOwogCX0KQEAgLTk3LDEyICsxNTgsMzAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogdGxiX2VuZF92bWEoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0JaWYgKCF0bGItPmZ1bGxtbSAmJiB0bGItPnJhbmdlX2VuZCA+IDApCi0JCWZsdXNoX3RsYl9yYW5nZSh2bWEsIHRsYi0+cmFuZ2Vfc3RhcnQsIHRsYi0+cmFuZ2VfZW5kKTsKKwlpZiAoIXRsYi0+ZnVsbG1tKQorCQl0bGJfZmx1c2godGxiKTsKIH0KIAotI2RlZmluZSB0bGJfcmVtb3ZlX3BhZ2UodGxiLHBhZ2UpCWZyZWVfcGFnZV9hbmRfc3dhcF9jYWNoZShwYWdlKQotI2RlZmluZSBwdGVfZnJlZV90bGIodGxiLCBwdGVwLCBhZGRyKQlwdGVfZnJlZSgodGxiKS0+bW0sIHB0ZXApCitzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV9wYWdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmICh0bGJfZmFzdF9tb2RlKHRsYikpIHsKKwkJZnJlZV9wYWdlX2FuZF9zd2FwX2NhY2hlKHBhZ2UpOworCX0gZWxzZSB7CisJCXRsYi0+cGFnZXNbdGxiLT5ucisrXSA9IHBhZ2U7CisJCWlmICh0bGItPm5yID49IEZSRUVfUFRFX05SKQorCQkJdGxiX2ZsdXNoX21tdSh0bGIpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfdCBwdGUsCisJdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXBndGFibGVfcGFnZV9kdG9yKHB0ZSk7CisJdGxiX2FkZF9mbHVzaCh0bGIsIGFkZHIpOworCXRsYl9yZW1vdmVfcGFnZSh0bGIsIHB0ZSk7Cit9CisKKyNkZWZpbmUgcHRlX2ZyZWVfdGxiKHRsYiwgcHRlcCwgYWRkcikJX19wdGVfZnJlZV90bGIodGxiLCBwdGVwLCBhZGRyKQogI2RlZmluZSBwbWRfZnJlZV90bGIodGxiLCBwbWRwLCBhZGRyKQlwbWRfZnJlZSgodGxiKS0+bW0sIHBtZHApCiAKICNkZWZpbmUgdGxiX21pZ3JhdGVfZmluaXNoKG1tKQkJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKaW5kZXggY2U3Mzc4ZS4uZDIwMDVkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC0xMCwxMiArMTAsNyBAQAogI2lmbmRlZiBfQVNNQVJNX1RMQkZMVVNIX0gKICNkZWZpbmUgX0FTTUFSTV9UTEJGTFVTSF9ICiAKLQotI2lmbmRlZiBDT05GSUdfTU1VCi0KLSNkZWZpbmUgdGxiX2ZsdXNoKHRsYikJKCh2b2lkKSB0bGIpCi0KLSNlbHNlIC8qIENPTkZJR19NTVUgKi8KKyNpZmRlZiBDT05GSUdfTU1VCiAKICNpbmNsdWRlIDxhc20vZ2x1ZS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaGVhZC5TIGIvYXJjaC9hcm0va2VybmVsL2hlYWQuUwppbmRleCBmMTdkOWEwLi5mMDZmZjlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKQEAgLTM5MSwyNSArMzkxLDI0IEBACiAKIAogI2lmZGVmIENPTkZJR19TTVBfT05fVVAKKwlfX0lOSVQKIF9fZml4dXBfc21wOgotCW1vdglyNCwgIzB4MDAwNzAwMDAKLQlvcnIJcjMsIHI0LCAjMHhmZjAwMDAwMAlAIG1hc2sgMHhmZjA3MDAwMAotCW9ycglyNCwgcjQsICMweDQxMDAwMDAwCUAgdmFsIDB4NDEwNzAwMDAKLQlhbmQJcjAsIHI5LCByMwotCXRlcQlyMCwgcjQJCQlAIEFSTSBDUFUgYW5kIEFSTXY2L3Y3PworCWFuZAlyMywgcjksICMweDAwMGYwMDAwCUAgYXJjaGl0ZWN0dXJlIHZlcnNpb24KKwl0ZXEJcjMsICMweDAwMGYwMDAwCQlAIENQVSBJRCBzdXBwb3J0ZWQ/CiAJYm5lCV9fZml4dXBfc21wX29uX3VwCUAgbm8sIGFzc3VtZSBVUAogCi0Jb3JyCXIzLCByMywgIzB4MDAwMGZmMDAKLQlvcnIJcjMsIHIzLCAjMHgwMDAwMDBmMAlAIG1hc2sgMHhmZjA3ZmZmMAorCWJpYwlyMywgcjksICMweDAwZmYwMDAwCisJYmljCXIzLCByMywgIzB4MDAwMDAwMGYJQCBtYXNrIDB4ZmYwMGZmZjAKKwltb3YJcjQsICMweDQxMDAwMDAwCiAJb3JyCXI0LCByNCwgIzB4MDAwMGIwMDAKLQlvcnIJcjQsIHI0LCAjMHgwMDAwMDAyMAlAIHZhbCAweDQxMDdiMDIwCi0JYW5kCXIwLCByOSwgcjMKLQl0ZXEJcjAsIHI0CQkJQCBBUk0gMTFNUENvcmU/CisJb3JyCXI0LCByNCwgIzB4MDAwMDAwMjAJQCB2YWwgMHg0MTAwYjAyMAorCXRlcQlyMywgcjQJCQlAIEFSTSAxMU1QQ29yZT8KIAltb3ZlcQlwYywgbHIJCQlAIHllcywgYXNzdW1lIFNNUAogCiAJbXJjCXAxNSwgMCwgcjAsIGMwLCBjMCwgNQlAIHJlYWQgTVBJRFIKLQl0c3QJcjAsICMxIDw8IDMxCi0JbW92bmUJcGMsIGxyCQkJQCBiaXQgMzEgPT4gU01QCisJYW5kCXIwLCByMCwgIzB4YzAwMDAwMDAJQCBtdWx0aXByb2Nlc3NpbmcgZXh0ZW5zaW9ucyBhbmQKKwl0ZXEJcjAsICMweDgwMDAwMDAwCQlAIG5vdCBwYXJ0IG9mIGEgdW5pcHJvY2Vzc29yIHN5c3RlbT8KKwltb3ZlcQlwYywgbHIJCQlAIHllcywgYXNzdW1lIFNNUAogCiBfX2ZpeHVwX3NtcF9vbl91cDoKIAlhZHIJcjAsIDFmCkBAIC00MTcsMTggKzQxNiw3IEBACiAJc3ViCXIzLCByMCwgcjMKIAlhZGQJcjQsIHI0LCByMwogCWFkZAlyNSwgcjUsIHIzCi0yOgljbXAJcjQsIHI1Ci0JbW92aHMJcGMsIGxyCi0JbGRtaWEJcjQhLCB7cjAsIHI2fQotIEFSTSgJc3RyCXI2LCBbcjAsIHIzXQkpCi0gVEhVTUIoCWFkZAlyMCwgcjAsIHIzCSkKLSNpZmRlZiBfX0FSTUVCX18KLSBUSFVNQigJbW92CXI2LCByNiwgcm9yICMxNgkpCUAgQ29udmVydCB3b3JkIG9yZGVyIGZvciBiaWctZW5kaWFuLgotI2VuZGlmCi0gVEhVTUIoCXN0cmgJcjYsIFtyMF0sICMyCSkJQCBGb3IgVGh1bWItMiwgc3RvcmUgYXMgdHdvIGhhbGZ3b3JkcwotIFRIVU1CKAltb3YJcjYsIHI2LCBsc3IgIzE2CSkJQCB0byBiZSByb2J1c3QgYWdhaW5zdCBtaXNhbGlnbmVkIHIzLgotIFRIVU1CKAlzdHJoCXI2LCBbcjBdCSkKLQliCTJiCisJYglfX2RvX2ZpeHVwX3NtcF9vbl91cAogRU5EUFJPQyhfX2ZpeHVwX3NtcCkKIAogCS5hbGlnbgpAQCAtNDQyLDcgKzQzMCwzMSBAQAogCUFMVF9TTVAoLmxvbmcJMSkKIAlBTFRfVVAoLmxvbmcJMCkKIAkucG9wc2VjdGlvbgotCiAjZW5kaWYKIAorCS50ZXh0CitfX2RvX2ZpeHVwX3NtcF9vbl91cDoKKwljbXAJcjQsIHI1CisJbW92aHMJcGMsIGxyCisJbGRtaWEJcjQhLCB7cjAsIHI2fQorIEFSTSgJc3RyCXI2LCBbcjAsIHIzXQkpCisgVEhVTUIoCWFkZAlyMCwgcjAsIHIzCSkKKyNpZmRlZiBfX0FSTUVCX18KKyBUSFVNQigJbW92CXI2LCByNiwgcm9yICMxNgkpCUAgQ29udmVydCB3b3JkIG9yZGVyIGZvciBiaWctZW5kaWFuLgorI2VuZGlmCisgVEhVTUIoCXN0cmgJcjYsIFtyMF0sICMyCSkJQCBGb3IgVGh1bWItMiwgc3RvcmUgYXMgdHdvIGhhbGZ3b3JkcworIFRIVU1CKAltb3YJcjYsIHI2LCBsc3IgIzE2CSkJQCB0byBiZSByb2J1c3QgYWdhaW5zdCBtaXNhbGlnbmVkIHIzLgorIFRIVU1CKAlzdHJoCXI2LCBbcjBdCSkKKwliCV9fZG9fZml4dXBfc21wX29uX3VwCitFTkRQUk9DKF9fZG9fZml4dXBfc21wX29uX3VwKQorCitFTlRSWShmaXh1cF9zbXApCisJc3RtZmQJc3AhLCB7cjQgLSByNiwgbHJ9CisJbW92CXI0LCByMAorCWFkZAlyNSwgcjAsIHIxCisJbW92CXIzLCAjMAorCWJsCV9fZG9fZml4dXBfc21wX29uX3VwCisJbGRtZmQJc3AhLCB7cjQgLSByNiwgcGN9CitFTkRQUk9DKGZpeHVwX3NtcCkKKwogI2luY2x1ZGUgImhlYWQtY29tbW9uLlMiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaHdfYnJlYWtwb2ludC5jIGIvYXJjaC9hcm0va2VybmVsL2h3X2JyZWFrcG9pbnQuYwppbmRleCBjOWYzZjA0Li5kNjAwYmQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9od19icmVha3BvaW50LmMKQEAgLTEzNywxMSArMTM3LDEwIEBACiAJdTMyIGRpZHI7CiAKIAkvKiBEbyB3ZSBpbXBsZW1lbnQgdGhlIGV4dGVuZGVkIENQVUlEIGludGVyZmFjZT8gKi8KLQlpZiAoKChyZWFkX2NwdWlkX2lkKCkgPj4gMTYpICYgMHhmKSAhPSAweGYpIHsKLQkJcHJfd2FybmluZygiQ1BVSUQgZmVhdHVyZSByZWdpc3RlcnMgbm90IHN1cHBvcnRlZC4gIgotCQkJCSJBc3N1bWluZyB2NiBkZWJ1ZyBpcyBwcmVzZW50LlxuIik7CisJaWYgKFdBUk5fT05DRSgoKChyZWFkX2NwdWlkX2lkKCkgPj4gMTYpICYgMHhmKSAhPSAweGYpLAorCSAgICAiQ1BVSUQgZmVhdHVyZSByZWdpc3RlcnMgbm90IHN1cHBvcnRlZC4gIgorCSAgICAiQXNzdW1pbmcgdjYgZGVidWcgaXMgcHJlc2VudC5cbiIpKQogCQlyZXR1cm4gQVJNX0RFQlVHX0FSQ0hfVjY7Ci0JfQogCiAJQVJNX0RCR19SRUFEKGMwLCAwLCBkaWRyKTsKIAlyZXR1cm4gKGRpZHIgPj4gMTYpICYgMHhmOwpAQCAtMTUyLDYgKzE1MSwxMiBAQAogCXJldHVybiBkZWJ1Z19hcmNoOwogfQogCitzdGF0aWMgaW50IGRlYnVnX2FyY2hfc3VwcG9ydGVkKHZvaWQpCit7CisJdTggYXJjaCA9IGdldF9kZWJ1Z19hcmNoKCk7CisJcmV0dXJuIGFyY2ggPj0gQVJNX0RFQlVHX0FSQ0hfVjYgJiYgYXJjaCA8PSBBUk1fREVCVUdfQVJDSF9WN19FQ1AxNDsKK30KKwogLyogRGV0ZXJtaW5lIG51bWJlciBvZiBCUlAgcmVnaXN0ZXIgYXZhaWxhYmxlLiAqLwogc3RhdGljIGludCBnZXRfbnVtX2JycF9yZXNvdXJjZXModm9pZCkKIHsKQEAgLTI2OCw2ICsyNzMsOSBAQAogCiBpbnQgaHdfYnJlYWtwb2ludF9zbG90cyhpbnQgdHlwZSkKIHsKKwlpZiAoIWRlYnVnX2FyY2hfc3VwcG9ydGVkKCkpCisJCXJldHVybiAwOworCiAJLyoKIAkgKiBXZSBjYW4gYmUgY2FsbGVkIGVhcmx5LCBzbyBkb24ndCByZWx5IG9uCiAJICogb3VyIHN0YXRpYyB2YXJpYWJsZXMgYmVpbmcgaW5pdGlhbGlzZWQuCkBAIC04MzQsMTEgKzg0MiwxMSBAQAogCiAJLyoKIAkgKiB2NyBkZWJ1ZyBjb250YWlucyBzYXZlIGFuZCByZXN0b3JlIHJlZ2lzdGVycyBzbyB0aGF0IGRlYnVnIHN0YXRlCi0JICogY2FuIGJlIG1haW50YWluZWQgYWNyb3NzIGxvdy1wb3dlciBtb2RlcyB3aXRob3V0IGxlYXZpbmcKLQkgKiB0aGUgZGVidWcgbG9naWMgcG93ZXJlZCB1cC4gSXQgaXMgSU1QTEVNRU5UQVRJT04gREVGSU5FRCB3aGV0aGVyCi0JICogd2UgY2FuIHdyaXRlIHRvIHRoZSBkZWJ1ZyByZWdpc3RlcnMgb3V0IG9mIHJlc2V0LCBzbyB3ZSBtdXN0Ci0JICogdW5sb2NrIHRoZSBPUyBMb2NrIEFjY2VzcyBSZWdpc3RlciB0byBhdm9pZCB0YWtpbmcgdW5kZWZpbmVkCi0JICogaW5zdHJ1Y3Rpb24gZXhjZXB0aW9ucyBsYXRlciBvbi4KKwkgKiBjYW4gYmUgbWFpbnRhaW5lZCBhY3Jvc3MgbG93LXBvd2VyIG1vZGVzIHdpdGhvdXQgbGVhdmluZyB0aGUgZGVidWcKKwkgKiBsb2dpYyBwb3dlcmVkIHVwLiBJdCBpcyBJTVBMRU1FTlRBVElPTiBERUZJTkVEIHdoZXRoZXIgd2UgY2FuIGFjY2VzcworCSAqIHRoZSBkZWJ1ZyByZWdpc3RlcnMgb3V0IG9mIHJlc2V0LCBzbyB3ZSBtdXN0IHVubG9jayB0aGUgT1MgTG9jaworCSAqIEFjY2VzcyBSZWdpc3RlciB0byBhdm9pZCB0YWtpbmcgdW5kZWZpbmVkIGluc3RydWN0aW9uIGV4Y2VwdGlvbnMKKwkgKiBsYXRlciBvbi4KIAkgKi8KIAlpZiAoZGVidWdfYXJjaCA+PSBBUk1fREVCVUdfQVJDSF9WN19FQ1AxNCkgewogCQkvKgpAQCAtODgyLDcgKzg5MCw3IEBACiAKIAlkZWJ1Z19hcmNoID0gZ2V0X2RlYnVnX2FyY2goKTsKIAotCWlmIChkZWJ1Z19hcmNoID4gQVJNX0RFQlVHX0FSQ0hfVjdfRUNQMTQpIHsKKwlpZiAoIWRlYnVnX2FyY2hfc3VwcG9ydGVkKCkpIHsKIAkJcHJfaW5mbygiZGVidWcgYXJjaGl0ZWN0dXJlIDB4JXggdW5zdXBwb3J0ZWQuXG4iLCBkZWJ1Z19hcmNoKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtODk5LDE4ICs5MDcsMTggQEAKIAkJcHJfaW5mbygiJWQgYnJlYWtwb2ludChzKSByZXNlcnZlZCBmb3Igd2F0Y2hwb2ludCAiCiAJCQkJInNpbmdsZS1zdGVwLlxuIiwgY29yZV9udW1fcmVzZXJ2ZWRfYnJwcyk7CiAKKwkvKgorCSAqIFJlc2V0IHRoZSBicmVha3BvaW50IHJlc291cmNlcy4gV2UgYXNzdW1lIHRoYXQgYSBoYWx0aW5nCisJICogZGVidWdnZXIgd2lsbCBsZWF2ZSB0aGUgd29ybGQgaW4gYSBuaWNlIHN0YXRlIGZvciB1cy4KKwkgKi8KKwlvbl9lYWNoX2NwdShyZXNldF9jdHJsX3JlZ3MsIE5VTEwsIDEpOworCiAJQVJNX0RCR19SRUFEKGMxLCAwLCBkc2NyKTsKIAlpZiAoZHNjciAmIEFSTV9EU0NSX0hEQkdFTikgeworCQltYXhfd2F0Y2hwb2ludF9sZW4gPSA0OwogCQlwcl93YXJuaW5nKCJoYWx0aW5nIGRlYnVnIG1vZGUgZW5hYmxlZC4gQXNzdW1pbmcgbWF4aW11bSAiCi0JCQkJIndhdGNocG9pbnQgc2l6ZSBvZiA0IGJ5dGVzLiIpOworCQkJICAgIndhdGNocG9pbnQgc2l6ZSBvZiAldSBieXRlcy4iLCBtYXhfd2F0Y2hwb2ludF9sZW4pOwogCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIFJlc2V0IHRoZSBicmVha3BvaW50IHJlc291cmNlcy4gV2UgYXNzdW1lIHRoYXQgYSBoYWx0aW5nCi0JCSAqIGRlYnVnZ2VyIHdpbGwgbGVhdmUgdGhlIHdvcmxkIGluIGEgbmljZSBzdGF0ZSBmb3IgdXMuCi0JCSAqLwotCQlzbXBfY2FsbF9mdW5jdGlvbihyZXNldF9jdHJsX3JlZ3MsIE5VTEwsIDEpOwotCQlyZXNldF9jdHJsX3JlZ3MoTlVMTCk7Ci0KIAkJLyogV29yayBvdXQgdGhlIG1heGltdW0gc3VwcG9ydGVkIHdhdGNocG9pbnQgbGVuZ3RoLiAqLwogCQltYXhfd2F0Y2hwb2ludF9sZW4gPSBnZXRfbWF4X3dwX2xlbigpOwogCQlwcl9pbmZvKCJtYXhpbXVtIHdhdGNocG9pbnQgc2l6ZSBpcyAldSBieXRlcy5cbiIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1kZWNvZGUuYyBiL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLWRlY29kZS5jCmluZGV4IDJjMWYwMDUuLjhmNmVkNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLWRlY29kZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLWRlY29kZS5jCkBAIC0xNDM3LDcgKzE0MzcsNyBAQAogCiAJCXJldHVybiBzcGFjZV9jY2NjXzExMDBfMDEweChpbnNuLCBhc2kpOwogCi0JfSBlbHNlIGlmICgoaW5zbiAmIDB4MGUwMDAwMDApID09IDB4MGM0MDAwMDApIHsKKwl9IGVsc2UgaWYgKChpbnNuICYgMHgwZTAwMDAwMCkgPT0gMHgwYzAwMDAwMCkgewogCiAJCXJldHVybiBzcGFjZV9jY2NjXzExMHgoaW5zbiwgYXNpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jIGIvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jCmluZGV4IDJjZmU4MTYuLjZkNDEwNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3NtcF9wbGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgogCiAjaWZkZWYgQ09ORklHX1hJUF9LRVJORUwKQEAgLTI2OCwxMiArMjY5LDI4IEBACiAJY29uc3QgRWxmX1NoZHIgKnR4dF9zZWM7CiB9OwogCitzdGF0aWMgY29uc3QgRWxmX1NoZHIgKmZpbmRfbW9kX3NlY3Rpb24oY29uc3QgRWxmMzJfRWhkciAqaGRyLAorCWNvbnN0IEVsZl9TaGRyICpzZWNoZHJzLCBjb25zdCBjaGFyICpuYW1lKQoreworCWNvbnN0IEVsZl9TaGRyICpzLCAqc2U7CisJY29uc3QgY2hhciAqc2Vjc3RycyA9ICh2b2lkICopaGRyICsgc2VjaGRyc1toZHItPmVfc2hzdHJuZHhdLnNoX29mZnNldDsKKworCWZvciAocyA9IHNlY2hkcnMsIHNlID0gc2VjaGRycyArIGhkci0+ZV9zaG51bTsgcyA8IHNlOyBzKyspCisJCWlmIChzdHJjbXAobmFtZSwgc2Vjc3RycyArIHMtPnNoX25hbWUpID09IDApCisJCQlyZXR1cm4gczsKKworCXJldHVybiBOVUxMOworfQorCitleHRlcm4gdm9pZCBmaXh1cF9zbXAoY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBsb25nKTsKKwogaW50IG1vZHVsZV9maW5hbGl6ZShjb25zdCBFbGYzMl9FaGRyICpoZHIsIGNvbnN0IEVsZl9TaGRyICpzZWNoZHJzLAogCQkgICAgc3RydWN0IG1vZHVsZSAqbW9kKQogeworCWNvbnN0IEVsZl9TaGRyICogX19tYXliZV91bnVzZWQgcyA9IE5VTEw7CiAjaWZkZWYgQ09ORklHX0FSTV9VTldJTkQKIAljb25zdCBjaGFyICpzZWNzdHJzID0gKHZvaWQgKiloZHIgKyBzZWNoZHJzW2hkci0+ZV9zaHN0cm5keF0uc2hfb2Zmc2V0OwotCWNvbnN0IEVsZl9TaGRyICpzLCAqc2VjaGRyc19lbmQgPSBzZWNoZHJzICsgaGRyLT5lX3NobnVtOworCWNvbnN0IEVsZl9TaGRyICpzZWNoZHJzX2VuZCA9IHNlY2hkcnMgKyBoZHItPmVfc2hudW07CiAJc3RydWN0IG1vZF91bndpbmRfbWFwIG1hcHNbQVJNX1NFQ19NQVhdOwogCWludCBpOwogCkBAIC0zMTUsNiArMzMyLDkgQEAKIAkJCQkJICAgICAgICAgbWFwc1tpXS50eHRfc2VjLT5zaF9hZGRyLAogCQkJCQkgICAgICAgICBtYXBzW2ldLnR4dF9zZWMtPnNoX3NpemUpOwogI2VuZGlmCisJcyA9IGZpbmRfbW9kX3NlY3Rpb24oaGRyLCBzZWNoZHJzLCAiLmFsdC5zbXAuaW5pdCIpOworCWlmIChzICYmICFpc19zbXAoKSkKKwkJZml4dXBfc21wKCh2b2lkICopcy0+c2hfYWRkciwgcy0+c2hfc2l6ZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDVlZmEyNjQuLmQxNTBhZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtNzAwLDcgKzcwMCw3IEBACiAJICogRnJhbWUgcG9pbnRlcnMgc2hvdWxkIHN0cmljdGx5IHByb2dyZXNzIGJhY2sgdXAgdGhlIHN0YWNrCiAJICogKHRvd2FyZHMgaGlnaGVyIGFkZHJlc3NlcykuCiAJICovCi0JaWYgKHRhaWwgPj0gYnVmdGFpbC5mcCkKKwlpZiAodGFpbCArIDEgPj0gYnVmdGFpbC5mcCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlyZXR1cm4gYnVmdGFpbC5mcCAtIDE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcG11LmMgYi9hcmNoL2FybS9rZXJuZWwvcG11LmMKaW5kZXggYjhhZjk2ZS4uMmM3OWVlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3BtdS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wbXUuYwpAQCAtOTcsMjggKzk3LDM0IEBACiAJCQkgICBpcnEsIGNwdSk7CiAJcmV0dXJuIGVycjsKICNlbHNlCi0JcmV0dXJuIDA7CisJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKIH0KIAogc3RhdGljIGludAogaW5pdF9jcHVfcG11KHZvaWQpCiB7Ci0JaW50IGksIGVyciA9IDA7CisJaW50IGksIGlycXMsIGVyciA9IDA7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHBtdV9kZXZpY2VzW0FSTV9QTVVfREVWSUNFX0NQVV07CiAKLQlpZiAoIXBkZXYpIHsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQorCWlmICghcGRldikKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcGRldi0+bnVtX3Jlc291cmNlczsgKytpKSB7CisJaXJxcyA9IHBkZXYtPm51bV9yZXNvdXJjZXM7CisKKwkvKgorCSAqIElmIHdlIGhhdmUgYSBzaW5nbGUgUE1VIGludGVycnVwdCB0aGF0IHdlIGNhbid0IHNoaWZ0LCBhc3N1bWUgdGhhdAorCSAqIHdlJ3JlIHJ1bm5pbmcgb24gYSB1bmlwcm9jZXNzb3IgbWFjaGluZSBhbmQgY29udGludWUuCisJICovCisJaWYgKGlycXMgPT0gMSAmJiAhaXJxX2Nhbl9zZXRfYWZmaW5pdHkocGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKSkpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGlycXM7ICsraSkgewogCQllcnIgPSBzZXRfaXJxX2FmZmluaXR5KHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSksIGkpOwogCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAJfQogCi1vdXQ6CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwppbmRleCA0MjBiOGQ2Li41ZWE0ZmI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwpAQCAtMjI2LDggKzIyNiw4IEBACiAJCSAqIFJlZ2lzdGVyIDAgYW5kIGNoZWNrIGZvciBWTVNBdjcgb3IgUE1TQXY3ICovCiAJCWFzbSgibXJjCXAxNSwgMCwgJTAsIGMwLCBjMSwgNCIKIAkJICAgIDogIj1yIiAobW1mcjApKTsKLQkJaWYgKChtbWZyMCAmIDB4MDAwMDAwMGYpID09IDB4MDAwMDAwMDMgfHwKLQkJICAgIChtbWZyMCAmIDB4MDAwMDAwZjApID09IDB4MDAwMDAwMzApCisJCWlmICgobW1mcjAgJiAweDAwMDAwMDBmKSA+PSAweDAwMDAwMDAzIHx8CisJCSAgICAobW1mcjAgJiAweDAwMDAwMGYwKSA+PSAweDAwMDAwMDMwKQogCQkJY3B1X2FyY2ggPSBDUFVfQVJDSF9BUk12NzsKIAkJZWxzZSBpZiAoKG1tZnIwICYgMHgwMDAwMDAwZikgPT0gMHgwMDAwMDAwMiB8fAogCQkJIChtbWZyMCAmIDB4MDAwMDAwZjApID09IDB4MDAwMDAwMjApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKaW5kZXggOTA3ZDVhNi4uYWJhZjg0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYwpAQCAtNDc0LDcgKzQ3NCw5IEBACiAJdW5zaWduZWQgbG9uZyBoYW5kbGVyID0gKHVuc2lnbmVkIGxvbmcpa2EtPnNhLnNhX2hhbmRsZXI7CiAJdW5zaWduZWQgbG9uZyByZXRjb2RlOwogCWludCB0aHVtYiA9IDA7Ci0JdW5zaWduZWQgbG9uZyBjcHNyID0gcmVncy0+QVJNX2Nwc3IgJiB+UFNSX2Y7CisJdW5zaWduZWQgbG9uZyBjcHNyID0gcmVncy0+QVJNX2Nwc3IgJiB+KFBTUl9mIHwgUFNSX0VfQklUKTsKKworCWNwc3IgfD0gUFNSX0VORFNUQVRFOwogCiAJLyoKIAkgKiBNYXliZSB3ZSBuZWVkIHRvIGRlbGl2ZXIgYSAzMi1iaXQgc2lnbmFsIHRvIGEgMjYtYml0IHRhc2suCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jIGIvYXJjaC9hcm0va2VybmVsL3NtcF90d2QuYwppbmRleCBmZDkxNTY2Li42MDYzNmY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMKQEAgLTM2LDYgKzM2LDcgQEAKIAkJLyogdGltZXIgbG9hZCBhbHJlYWR5IHNldCB1cCAqLwogCQljdHJsID0gVFdEX1RJTUVSX0NPTlRST0xfRU5BQkxFIHwgVFdEX1RJTUVSX0NPTlRST0xfSVRfRU5BQkxFCiAJCQl8IFRXRF9USU1FUl9DT05UUk9MX1BFUklPRElDOworCQlfX3Jhd193cml0ZWwodHdkX3RpbWVyX3JhdGUgLyBIWiwgdHdkX2Jhc2UgKyBUV0RfVElNRVJfTE9BRCk7CiAJCWJyZWFrOwogCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKIAkJLyogcGVyaW9kIHNldCwgYW5kIHRpbWVyIGVuYWJsZWQgaW4gJ25leHRfZXZlbnQnIGhvb2sgKi8KQEAgLTgxLDcgKzgyLDcgQEAKIAogc3RhdGljIHZvaWQgX19jcHVpbml0IHR3ZF9jYWxpYnJhdGVfcmF0ZSh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgbG9hZCwgY291bnQ7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKIAl1NjQgd2FpdGppZmZpZXM7CiAKIAkvKgpAQCAtMTE2LDEwICsxMTcsNiBAQAogCQlwcmludGsoIiVsdS4lMDJsdU1Iei5cbiIsIHR3ZF90aW1lcl9yYXRlIC8gMTAwMDAwMCwKIAkJCSh0d2RfdGltZXJfcmF0ZSAvIDEwMDAwMDApICUgMTAwKTsKIAl9Ci0KLQlsb2FkID0gdHdkX3RpbWVyX3JhdGUgLyBIWjsKLQotCV9fcmF3X3dyaXRlbChsb2FkLCB0d2RfYmFzZSArIFRXRF9USU1FUl9MT0FEKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggODZiNjZmMy4uNjE0NjI3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTIxLDYgKzIxLDEyIEBACiAjZGVmaW5lIEFSTV9DUFVfS0VFUCh4KQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TTVBfT05fVVApICYmICFkZWZpbmVkKENPTkZJR19ERUJVR19TUElOTE9DSykKKyNkZWZpbmUgQVJNX0VYSVRfS0VFUCh4KQl4CisjZWxzZQorI2RlZmluZSBBUk1fRVhJVF9LRUVQKHgpCisjZW5kaWYKKwogT1VUUFVUX0FSQ0goYXJtKQogRU5UUlkoc3RleHQpCiAKQEAgLTQzLDYgKzQ5LDcgQEAKIAkJX3Npbml0dGV4dCA9IC47CiAJCQlIRUFEX1RFWFQKIAkJCUlOSVRfVEVYVAorCQkJQVJNX0VYSVRfS0VFUChFWElUX1RFWFQpCiAJCV9laW5pdHRleHQgPSAuOwogCQlBUk1fQ1BVX0RJU0NBUkQoUFJPQ19JTkZPKQogCQlfX2FyY2hfaW5mb19iZWdpbiA9IC47CkBAIC02Nyw2ICs3NCw3IEBACiAjaWZuZGVmIENPTkZJR19YSVBfS0VSTkVMCiAJCV9faW5pdF9iZWdpbiA9IF9zdGV4dDsKIAkJSU5JVF9EQVRBCisJCUFSTV9FWElUX0tFRVAoRVhJVF9EQVRBKQogI2VuZGlmCiAJfQogCkBAIC0xNjIsNiArMTcwLDcgQEAKIAkJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJCV9faW5pdF9iZWdpbiA9IC47CiAJCUlOSVRfREFUQQorCQlBUk1fRVhJVF9LRUVQKEVYSVRfREFUQSkKIAkJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJCV9faW5pdF9lbmQgPSAuOwogI2VuZGlmCkBAIC0yNDcsNiArMjU2LDggQEAKIAl9CiAjZW5kaWYKIAorCU5PVEVTCisKIAlCU1NfU0VDVElPTigwLCAwLCAwKQogCV9lbmQgPSAuOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKaW5kZXggZmZkZjg3Yi4uODIwNzk1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwpAQCAtODM4LDcgKzgzOCw3IEBACiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGVwOTN4eF9hYzk3X3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0CT0gRVA5M1hYX0FBQ19QSFlTX0JBU0UsCi0JCS5lbmQJPSBFUDkzWFhfQUFDX1BIWVNfQkFTRSArIDB4YjAgLSAxLAorCQkuZW5kCT0gRVA5M1hYX0FBQ19QSFlTX0JBU0UgKyAweGFjIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAl7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMKaW5kZXggZjNkYzc2Zi4uYmVjMzRiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYwpAQCAtNDI3LDYgKzQyNywxMyBAQAogewogCWludCBpOwogCisJLyogU2V0IFBvcnRzIEMsIEQsIEUsIEcsIGFuZCBIIGZvciBHUElPIHVzZSAqLworCWVwOTN4eF9kZXZjZmdfc2V0X2JpdHMoRVA5M1hYX1NZU0NPTl9ERVZDRkdfS0VZUyB8CisJCQkJIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0dPTksgfAorCQkJCSBFUDkzWFhfU1lTQ09OX0RFVkNGR19FT05JREUgfAorCQkJCSBFUDkzWFhfU1lTQ09OX0RFVkNGR19HT05JREUgfAorCQkJCSBFUDkzWFhfU1lTQ09OX0RFVkNGR19IT05JREUpOworCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXA5M3h4X2dwaW9fYmFua3MpOyBpKyspCiAJCWdwaW9jaGlwX2FkZCgmZXA5M3h4X2dwaW9fYmFua3NbaV0uY2hpcCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggM2M5ZTBjNC4uMzBiOTcxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTcsOCArMTcsOCBAQAogCS8qIEZvciBOZXRXaW5kZXIgZGVidWdnaW5nICovCiAJCS5tYWNybwlhZGRydWFydCwgcnAsIHJ2CiAJCW1vdglccnAsICMweDAwMDAwM2Y4Ci0JCW9ycglccnYsIFxycCwgIzB4N2MwMDAwMDAJQCBwaHlzaWNhbAotCQlvcnIJXHJwLCBccnAsICMweGZmMDAwMDAwCUAgdmlydHVhbAorCQlvcnIJXHJ2LCBccnAsICMweGZmMDAwMDAwCUAgdmlydHVhbAorCQlvcnIJXHJwLCBccnAsICMweDdjMDAwMDAwCUAgcGh5c2ljYWwKIAkJLmVuZG0KIAogI2RlZmluZSBVQVJUX1NISUZUCTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyNV8zZHMuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyNV8zZHMuYwppbmRleCBhYTc2Y2ZkLi44MzgyZTc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjVfM2RzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI1XzNkcy5jCkBAIC0xODAsNyArMTgwLDcgQEAKIAlLRVkoMywgMywgS0VZX1BPV0VSKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIG14MjVwZGtfa2V5bWFwX2RhdGEgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIG14MjVwZGtfa2V5bWFwX2RhdGEgX19pbml0Y29uc3QgPSB7CiAJLmtleW1hcAkJPSBteDI1cGRrX2tleW1hcCwKIAkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKG14MjVwZGtfa2V5bWFwKSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCmluZGV4IDRkYzY4ZDYuLjlmZDg5NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCkBAIC00MzIsNyArNDMyLDcgQEAKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCi11bnNpZ25lZCBsb25nIGl4cDR4eF90aW1lcl9mcmVxID0gRlJFUTsKK3Vuc2lnbmVkIGxvbmcgaXhwNHh4X3RpbWVyX2ZyZXEgPSBJWFA0WFhfVElNRVJfRlJFUTsKIEVYUE9SVF9TWU1CT0woaXhwNHh4X3RpbWVyX2ZyZXEpOwogc3RhdGljIHZvaWQgX19pbml0IGl4cDR4eF9jbG9ja3NvdXJjZV9pbml0KHZvaWQpCiB7CkBAIC00OTYsNyArNDk2LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGl4cDR4eF9jbG9ja2V2ZW50X2luaXQodm9pZCkKIHsKLQljbG9ja2V2ZW50X2l4cDR4eC5tdWx0ID0gZGl2X3NjKEZSRVEsIE5TRUNfUEVSX1NFQywKKwljbG9ja2V2ZW50X2l4cDR4eC5tdWx0ID0gZGl2X3NjKElYUDRYWF9USU1FUl9GUkVRLCBOU0VDX1BFUl9TRUMsCiAJCQkJCWNsb2NrZXZlbnRfaXhwNHh4LnNoaWZ0KTsKIAljbG9ja2V2ZW50X2l4cDR4eC5tYXhfZGVsdGFfbnMgPQogCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZmZmZmUsICZjbG9ja2V2ZW50X2l4cDR4eCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC90aW1leC5oCmluZGV4IDJjM2Y5M2MuLmM5ZTkzMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC90aW1leC5oCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0xMCw2ICsxMCw3IEBACiAgKiA2Ni42Ni4uLiBNSHouIFdlIGRvIGEgY29udnVsdGVkIGNhbGN1bGF0aW9uIG9mIENMT0NLX1RJQ0tfUkFURSBiL2MgdGhlCiAgKiB0aW1lciByZWdpc3RlciBpZ25vcmVzIHRoZSBib3R0b20gMiBiaXRzIG9mIHRoZSBMQVRDSCB2YWx1ZS4KICAqLwotI2RlZmluZSBGUkVRIDY2NjY2MDAwCi0jZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAoKChGUkVRIC8gSFogJiB+SVhQNFhYX09TVF9SRUxPQURfTUFTSykgKyAxKSAqIEhaKQorI2RlZmluZSBJWFA0WFhfVElNRVJfRlJFUSA2NjY2NjAwMAorI2RlZmluZSBDTE9DS19USUNLX1JBVEUgXAorCSgoKElYUDRYWF9USU1FUl9GUkVRIC8gSFogJiB+SVhQNFhYX09TVF9SRUxPQURfTUFTSykgKyAxKSAqIEhaKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peHA0eHhfcW1nci5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhwNHh4X3FtZ3IuYwppbmRleCBiZmRiZTRiLi44NTJmN2M5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peHA0eHhfcW1nci5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4cDR4eF9xbWdyLmMKQEAgLTI2NSw2ICsyNjUsMTEgQEAKIAkgICAgICAgcW1ncl9xdWV1ZV9kZXNjc1txdWV1ZV0sIHF1ZXVlKTsKIAlxbWdyX3F1ZXVlX2Rlc2NzW3F1ZXVlXVswXSA9ICdceDAnOwogI2VuZGlmCisKKwl3aGlsZSAoKGFkZHIgPSBxbWdyX2dldF9lbnRyeShxdWV1ZSkpKQorCQlwcmludGsoS0VSTl9FUlIgInFtZ3I6IHJlbGVhc2VkIHF1ZXVlICVpIG5vdCBlbXB0eTogMHglMDhYXG4iLAorCQkgICAgICAgcXVldWUsIGFkZHIpOworCiAJX19yYXdfd3JpdGVsKDAsICZxbWdyX3JlZ3MtPnNyYW1bcXVldWVdKTsKIAogCXVzZWRfc3JhbV9iaXRtYXBbMF0gJj0gfm1hc2tbMF07CkBAIC0yNzUsMTAgKzI4MCw2IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZxbWdyX2xvY2spOwogCiAJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0KLQl3aGlsZSAoKGFkZHIgPSBxbWdyX2dldF9lbnRyeShxdWV1ZSkpKQotCQlwcmludGsoS0VSTl9FUlIgInFtZ3I6IHJlbGVhc2VkIHF1ZXVlICVpIG5vdCBlbXB0eTogMHglMDhYXG4iLAotCQkgICAgICAgcXVldWUsIGFkZHIpOwogfQogCiBzdGF0aWMgaW50IHFtZ3JfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtcXNkOHg1MC5jIGIvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtcXNkOHg1MC5jCmluZGV4IDJlODM5MTMuLjZkZGU4MTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXFzZDh4NTAuYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1xc2Q4eDUwLmMKQEAgLTQzLDcgKzQzLDcgQEAKICAqIGF0IHJ1bi10aW1lOiB0aGV5IHZhcnkgZnJvbSBib2FyZCB0byBib2FyZCwgYW5kIHRoZSB0cnVlCiAgKiBjb25maWd1cmF0aW9uIHdvbid0IGJlIGtub3duIHVudGlsIGJvb3QuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCkBAIC01Miw3ICs1Miw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7CiAJLm5hbWUgICAgICAgICAgID0gInNtYzkxeCIsCiAJLmlkICAgICAgICAgICAgID0gMCwKIAkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHNtYzkxeF9yZXNvdXJjZXMpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyMy5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyMy5jCmluZGV4IGIxYTM2MmUuLmNhNzJhMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjMuYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDIzLmMKQEAgLTMwNCw3ICszMDQsNyBAQAogCXJlZyA9IF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF8jI2RyKTsJCVwKIAlyZWcgJj0gfkJNX0NMS0NUUkxfIyNkciMjX0RJVjsJCQkJCVwKIAlyZWcgfD0gZGl2IDw8IEJQX0NMS0NUUkxfIyNkciMjX0RJVjsJCQkJXAotCWlmIChyZWcgfCAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQkJXAorCWlmIChyZWcgJiAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQkJXAogCQlwcl9lcnIoIiVzOiBjbG9jayBpcyBnYXRlZFxuIiwgX19mdW5jX18pOwkJXAogCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCiAJfQkJCQkJCQkJXApAQCAtMzQ3LDcgKzM0Nyw3IEBACiB7CQkJCQkJCQkJXAogCWlmIChwYXJlbnQgIT0gY2xrLT5wYXJlbnQpIHsJCQkJCVwKIAkJX19yYXdfd3JpdGVsKEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU18jI2JpdCwJCVwKLQkJCSBIV19DTEtDVFJMX0NMS1NFUV9UT0cpOwkJCVwKKwkJCSBDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfQ0xLU0VRX1RPRyk7CVwKIAkJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CQkJCQlcCiAJfQkJCQkJCQkJXAogCQkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jCmluZGV4IDU2MzEyYzAuLmZkMWM0YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjguYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDI4LmMKQEAgLTM1NSwxMiArMzU1LDEyIEBACiAJfSBlbHNlIHsJCQkJCQkJXAogCQlyZWcgJj0gfkJNX0NMS0NUUkxfIyNkciMjX0RJVjsJCQkJXAogCQlyZWcgfD0gZGl2IDw8IEJQX0NMS0NUUkxfIyNkciMjX0RJVjsJCQlcCi0JCWlmIChyZWcgfCAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQlcCisJCWlmIChyZWcgJiAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQlcCiAJCQlwcl9lcnIoIiVzOiBjbG9jayBpcyBnYXRlZFxuIiwgX19mdW5jX18pOwlcCiAJCQlyZXR1cm4gLUVJTlZBTDsJCQkJCVwKIAkJfQkJCQkJCQlcCiAJfQkJCQkJCQkJXAotCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9DUFUpOwkJXAorCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF8jI2RyKTsJCVwKIAkJCQkJCQkJCVwKIAlmb3IgKGkgPSAxMDAwMDsgaTsgaS0tKQkJCQkJCVwKIAkJaWYgKCEoX19yYXdfcmVhZGwoQ0xLQ1RSTF9CQVNFX0FERFIgKwkJCVwKQEAgLTQ4Myw3ICs0ODMsNyBAQAogewkJCQkJCQkJCVwKIAlpZiAocGFyZW50ICE9IGNsay0+cGFyZW50KSB7CQkJCQlcCiAJCV9fcmF3X3dyaXRlbChCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfIyNiaXQsCQlcCi0JCQkgSFdfQ0xLQ1RSTF9DTEtTRVFfVE9HKTsJCQlcCisJCQkgQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX0NMS1NFUV9UT0cpOwlcCiAJCWNsay0+cGFyZW50ID0gcGFyZW50OwkJCQkJXAogCX0JCQkJCQkJCVwKIAkJCQkJCQkJCVwKQEAgLTYwOSw3ICs2MDksNiBAQAogCV9SRUdJU1RFUl9DTE9DSygiZHVhcnQiLCBOVUxMLCB1YXJ0X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteDI4LWZlYy4wIiwgTlVMTCwgZmVjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteDI4LWZlYy4xIiwgTlVMTCwgZmVjX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImZlYy4wIiwgTlVMTCwgZmVjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soInJ0YyIsIE5VTEwsIHJ0Y19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJwbGwyIiwgTlVMTCwgcGxsMl9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJoY2xrIiwgaGJ1c19jbGspCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2suYwppbmRleCBlN2QyMjY5Li5hNzA5M2M4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLmMKQEAgLTU3LDcgKzU3LDYgQEAKIAkJaWYgKGNsay0+ZGlzYWJsZSkKIAkJCWNsay0+ZGlzYWJsZShjbGspOwogCQlfX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKLQkJX19jbGtfZGlzYWJsZShjbGstPnNlY29uZGFyeSk7CiAJfQogfQogCkBAIC02OCw3ICs2Nyw2IEBACiAKIAlpZiAoY2xrLT51c2Vjb3VudCsrID09IDApIHsKIAkJX19jbGtfZW5hYmxlKGNsay0+cGFyZW50KTsKLQkJX19jbGtfZW5hYmxlKGNsay0+c2Vjb25kYXJ5KTsKIAogCQlpZiAoY2xrLT5lbmFibGUpCiAJCQljbGstPmVuYWJsZShjbGspOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1teHMvZ3Bpby5jCmluZGV4IGQ3YWQ3YTYuLmNiMGMwZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9ncGlvLmMKQEAgLTEzOSw2ICsxMzksOCBAQAogCXN0cnVjdCBteHNfZ3Bpb19wb3J0ICpwb3J0ID0gKHN0cnVjdCBteHNfZ3Bpb19wb3J0ICopZ2V0X2lycV9kYXRhKGlycSk7CiAJdTMyIGdwaW9faXJxX25vX2Jhc2UgPSBwb3J0LT52aXJ0dWFsX2lycV9zdGFydDsKIAorCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9hY2soJmRlc2MtPmlycV9kYXRhKTsKKwogCWlycV9zdGF0ID0gX19yYXdfcmVhZGwocG9ydC0+YmFzZSArIFBJTkNUUkxfSVJRU1RBVChwb3J0LT5pZCkpICYKIAkJCV9fcmF3X3JlYWRsKHBvcnQtPmJhc2UgKyBQSU5DVFJMX0lSUUVOKHBvcnQtPmlkKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKaW5kZXggMDQxZTI3Ni4uNTkyYzlhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKQEAgLTI5LDggKzI5LDYgQEAKIAlpbnQgaWQ7CiAJLyogU291cmNlIGNsb2NrIHRoaXMgY2xrIGRlcGVuZHMgb24gKi8KIAlzdHJ1Y3QgY2xrICpwYXJlbnQ7Ci0JLyogU2Vjb25kYXJ5IGNsb2NrIHRvIGVuYWJsZS9kaXNhYmxlIHdpdGggdGhpcyBjbG9jayAqLwotCXN0cnVjdCBjbGsgKnNlY29uZGFyeTsKIAkvKiBSZWZlcmVuY2UgY291bnQgb2YgY2xvY2sgZW5hYmxlL2Rpc2FibGUgKi8KIAlfX3M4IHVzZWNvdW50OwogCS8qIFJlZ2lzdGVyIGJpdCBwb3NpdGlvbiBmb3IgY2xvY2sncyBlbmFibGUvZGlzYWJsZSBjb250cm9sLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCmluZGV4IDhkMmYyZGEuLmUwYTAyODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKQEAgLTksNiArOSw3IEBACiAJZGVwZW5kcyBvbiBBUkNIX09NQVAxCiAJYm9vbCAiT01BUDczMCBCYXNlZCBTeXN0ZW0iCiAJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IE9NQVBfTVBVX1RJTUVSCiAJc2VsZWN0IEFSQ0hfT01BUF9PVEcKIAogY29uZmlnIEFSQ0hfT01BUDg1MApAQCAtMjIsNiArMjMsNyBAQAogCWRlZmF1bHQgeQogCWJvb2wgIk9NQVAxNXh4IEJhc2VkIFN5c3RlbSIKIAlzZWxlY3QgQ1BVX0FSTTkyNVQKKwlzZWxlY3QgT01BUF9NUFVfVElNRVIKIAogY29uZmlnIEFSQ0hfT01BUDE2WFgKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCmluZGV4IDZlZTE5NTAuLmJhNjAwOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQpAQCAtMywxMiArMywxMSBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBpby5vIGlkLm8gc3JhbS5vIGlycS5vIG11eC5vIGZsYXNoLm8gc2VyaWFsLm8gZGV2aWNlcy5vIGRtYS5vCitvYmoteSA6PSBpby5vIGlkLm8gc3JhbS5vIHRpbWUubyBpcnEubyBtdXgubyBmbGFzaC5vIHNlcmlhbC5vIGRldmljZXMubyBkbWEubwogb2JqLXkgKz0gY2xvY2subyBjbG9ja19kYXRhLm8gb3BwX2RhdGEubwogCiBvYmotJChDT05GSUdfT01BUF9NQ0JTUCkgKz0gbWNic3AubwogCi1vYmotJChDT05GSUdfT01BUF9NUFVfVElNRVIpCSs9IHRpbWUubwogb2JqLSQoQ09ORklHX09NQVBfMzJLX1RJTUVSKQkrPSB0aW1lcjMyay5vCiAKICMgUG93ZXIgTWFuYWdlbWVudApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKaW5kZXggYzliZTZkNC4uYmZiNGZiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0xNCwxOSArMTQsNiBAQAogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9naWMuaD4KIAotLyoKLSAqIFdlIHVzZSBfX2dsdWUgdG8gYXZvaWQgZXJyb3JzIHdpdGggbXVsdGlwbGUgZGVmaW5pdGlvbnMgb2YKLSAqIC5nbG9ibCBvbWFwX2lycV9mbGFncyBhcyBpdCdzIGluY2x1ZGVkIGZyb20gZW50cnktYXJtdi5TIGJ1dCBub3QKLSAqIGZyb20gZW50cnktY29tbW9uLlMuCi0gKi8KLSNpZmRlZiBfX2dsdWUKLQkJLnB1c2hzZWN0aW9uIC5kYXRhCi0JCS5nbG9ibAlvbWFwX2lycV9mbGFncwotb21hcF9pcnFfZmxhZ3M6Ci0JCS53b3JkCTAKLQkJLnBvcHNlY3Rpb24KLSNlbmRpZgotCiAgCQkubWFjcm8JZGlzYWJsZV9maXEKIAkJLmVuZG0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKaW5kZXggNDc3MDE1OC4uNzMxZGQzMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCkBAIC01Nyw2ICs1Nyw3IEBACiAJdW5zaWduZWQgbG9uZyB3YWtlX2VuYWJsZTsKIH07CiAKK3UzMiBvbWFwX2lycV9mbGFnczsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXJxX2JhbmtfY291bnQ7CiBzdGF0aWMgc3RydWN0IG9tYXBfaXJxX2JhbmsgKmlycV9iYW5rczsKIApAQCAtMTc2LDcgKzE3Nyw2IEBACiAKIHZvaWQgX19pbml0IG9tYXBfaW5pdF9pcnEodm9pZCkKIHsKLQlleHRlcm4gdW5zaWduZWQgaW50IG9tYXBfaXJxX2ZsYWdzOwogCWludCBpLCBqOwogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xjZF9kbWEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGNkX2RtYS5jCmluZGV4IGM5MDg4ZDguLjQ1MzgwOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbGNkX2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGNkX2RtYS5jCkBAIC0zNyw3ICszNyw3IEBACiAJICogT24gT01BUDE1MTAsIGludGVybmFsIExDRCBjb250cm9sbGVyIHdpbGwgc3RhcnQgdGhlIHRyYW5zZmVyCiAJICogd2hlbiBpdCBnZXRzIGVuYWJsZWQsIHNvIGFzc3VtZSBETUEgcnVubmluZyBpZiBMQ0QgZW5hYmxlZC4KIAkgKi8KLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpCisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQogCQlpZiAob21hcF9yZWFkdyhPTUFQX0xDRENfQ09OVFJPTCkgJiBPTUFQX0xDRENfQ1RSTF9MQ0RfRU4pCiAJCQlyZXR1cm4gMTsKIApAQCAtOTUsNyArOTUsNyBAQAogCiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjFfcm90YXRpb24oaW50IHJvdGF0ZSkKIHsKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJETUEgcm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiAxNTEwIG1vZGVcbiIpOwogCQlCVUcoKTsKIAkJcmV0dXJuOwpAQCAtMTA2LDcgKzEwNiw3IEBACiAKIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV9taXJyb3IoaW50IG1pcnJvcikKIHsKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJETUEgbWlycm9yIGlzIG5vdCBzdXBwb3J0ZWQgaW4gMTUxMCBtb2RlXG4iKTsKIAkJQlVHKCk7CiAJfQpAQCAtMTE2LDcgKzExNiw3IEBACiAKIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV92eHJlcyh1bnNpZ25lZCBsb25nIHZ4cmVzKQogewotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkRNQSB2aXJ0dWFsIHJlc3Vsb3Rpb24gaXMgbm90IHN1cHBvcnRlZCAiCiAJCQkJImluIDE1MTAgbW9kZVxuIik7CiAJCUJVRygpOwpAQCAtMTI3LDcgKzEyNyw3IEBACiAKIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV9zY2FsZSh1bnNpZ25lZCBpbnQgeHNjYWxlLCB1bnNpZ25lZCBpbnQgeXNjYWxlKQogewotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkRNQSBzY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGluIDE1MTAgbW9kZVxuIik7CiAJCUJVRygpOwogCX0KQEAgLTE3Nyw3ICsxNzcsNyBAQAogCQkJYm90dG9tID0gUElYQUREUihsY2RfZG1hLnhyZXMgLSAxLCBsY2RfZG1hLnlyZXMgLSAxKTsKIAkJCS8qIDE1MTAgRE1BIHJlcXVpcmVzIHRoZSBib3R0b20gYWRkcmVzcyB0byBiZSAyIG1vcmUKIAkJCSAqIHRoYW4gdGhlIGFjdHVhbCBsYXN0IG1lbW9yeSBhY2Nlc3MgbG9jYXRpb24uICovCi0JCQlpZiAoY3B1X2lzX29tYXAxNTEwKCkgJiYKKwkJCWlmIChjcHVfaXNfb21hcDE1eHgoKSAmJgogCQkJCWxjZF9kbWEuZGF0YV90eXBlID09IE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIpCiAJCQkJCWJvdHRvbSArPSAyOwogCQkJZWkgPSBQSVhTVEVQKDAsIDAsIDEsIDApOwpAQCAtMjQxLDcgKzI0MSw3IEBACiAJCXJldHVybjsJLyogU3VwcHJlc3Mgd2FybmluZyBhYm91dCB1bmluaXRpYWxpemVkIHZhcnMgKi8KIAl9CiAKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJb21hcF93cml0ZXcodG9wID4+IDE2LCBPTUFQMTUxMF9ETUFfTENEX1RPUF9GMV9VKTsKIAkJb21hcF93cml0ZXcodG9wLCBPTUFQMTUxMF9ETUFfTENEX1RPUF9GMV9MKTsKIAkJb21hcF93cml0ZXcoYm90dG9tID4+IDE2LCBPTUFQMTUxMF9ETUFfTENEX0JPVF9GMV9VKTsKQEAgLTM0Myw3ICszNDMsNyBAQAogCQlCVUcoKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAoIWNwdV9pc19vbWFwMTUxMCgpKQorCWlmICghY3B1X2lzX29tYXAxNXh4KCkpCiAJCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpICYgfjEsCiAJCQkgICAgT01BUDE2MTBfRE1BX0xDRF9DQ1IpOwogCWxjZF9kbWEucmVzZXJ2ZWQgPSAwOwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJICogY29ubmVjdGVkLiBPdGhlcndpc2UgdGhlIE9NQVAgaW50ZXJuYWwgY29udHJvbGxlciB3aWxsCiAJICogc3RhcnQgdGhlIHRyYW5zZmVyIHdoZW4gaXQgZ2V0cyBlbmFibGVkLgogCSAqLwotCWlmIChjcHVfaXNfb21hcDE1MTAoKSB8fCAhbGNkX2RtYS5leHRfY3RybCkKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkgfHwgIWxjZF9kbWEuZXh0X2N0cmwpCiAJCXJldHVybjsKIAogCXcgPSBvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTCk7CkBAIC0zNzgsMTQgKzM3OCwxNCBAQAogdm9pZCBvbWFwX3NldHVwX2xjZF9kbWEodm9pZCkKIHsKIAlCVUdfT04obGNkX2RtYS5hY3RpdmUpOwotCWlmICghY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoIWNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCS8qIFNldCBzb21lIHJlYXNvbmFibGUgZGVmYXVsdHMgKi8KIAkJb21hcF93cml0ZXcoMHg1NDQwLCBPTUFQMTYxMF9ETUFfTENEX0NDUik7CiAJCW9tYXBfd3JpdGV3KDB4OTEwMiwgT01BUDE2MTBfRE1BX0xDRF9DU0RQKTsKIAkJb21hcF93cml0ZXcoMHgwMDA0LCBPTUFQMTYxMF9ETUFfTENEX0xDSF9DVFJMKTsKIAl9CiAJc2V0X2IxX3JlZ3MoKTsKLQlpZiAoIWNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkgewogCQl1MTYgdzsKIAogCQl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUik7CkBAIC00MDcsNyArNDA3LDcgQEAKIAl1MTYgdzsKIAogCWxjZF9kbWEuYWN0aXZlID0gMDsKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkgfHwgIWxjZF9kbWEuZXh0X2N0cmwpCisJaWYgKGNwdV9pc19vbWFwMTV4eCgpIHx8ICFsY2RfZG1hLmV4dF9jdHJsKQogCQlyZXR1cm47CiAKIAl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCmluZGV4IGVkN2E2MWYuLjY4ODVkMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCkBAIC00OSwxMSArNDksMTUgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2xlZHMuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NjaGVkX2Nsb2NrLmg+CisKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogCisjaWZkZWYgQ09ORklHX09NQVBfTVBVX1RJTUVSCisKICNkZWZpbmUgT01BUF9NUFVfVElNRVJfQkFTRQkJT01BUF9NUFVfVElNRVIxX0JBU0UKICNkZWZpbmUgT01BUF9NUFVfVElNRVJfT0ZGU0VUCQkweDEwMAogCkBAIC02Nyw3ICs3MSw3IEBACiAoKHZvbGF0aWxlIG9tYXBfbXB1X3RpbWVyX3JlZ3NfdCopT01BUDFfSU9fQUREUkVTUyhPTUFQX01QVV9USU1FUl9CQVNFICsJXAogCQkJCSAobikqT01BUF9NUFVfVElNRVJfT0ZGU0VUKSkKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9tYXBfbXB1X3RpbWVyX3JlYWQoaW50IG5yKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5vdHJhY2Ugb21hcF9tcHVfdGltZXJfcmVhZChpbnQgbnIpCiB7CiAJdm9sYXRpbGUgb21hcF9tcHVfdGltZXJfcmVnc190KiB0aW1lciA9IG9tYXBfbXB1X3RpbWVyX2Jhc2UobnIpOwogCXJldHVybiB0aW1lci0+cmVhZF90aW07CkBAIC0yMTIsNiArMjE2LDMyIEBACiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAorc3RhdGljIERFRklORV9DTE9DS19EQVRBKGNkKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBfb21hcF9tcHVfc2NoZWRfY2xvY2sodm9pZCkKK3sKKwl1MzIgY3ljID0gbXB1X3JlYWQoJmNsb2Nrc291cmNlX21wdSk7CisJcmV0dXJuIGN5Y190b19zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCk7Cit9CisKKyNpZm5kZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCit1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKQoreworCXJldHVybiBfb21hcF9tcHVfc2NoZWRfY2xvY2soKTsKK30KKyNlbHNlCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugb21hcF9tcHVfc2NoZWRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gX29tYXBfbXB1X3NjaGVkX2Nsb2NrKCk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgbm90cmFjZSBtcHVfdXBkYXRlX3NjaGVkX2Nsb2NrKHZvaWQpCit7CisJdTMyIGN5YyA9IG1wdV9yZWFkKCZjbG9ja3NvdXJjZV9tcHUpOworCXVwZGF0ZV9zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2luaXRfY2xvY2tzb3VyY2UodW5zaWduZWQgbG9uZyByYXRlKQogewogCXN0YXRpYyBjaGFyIGVycltdIF9faW5pdGRhdGEgPSBLRVJOX0VSUgpAQCAtMjE5LDE3ICsyNDksMTMgQEAKIAogCXNldHVwX2lycShJTlRfVElNRVIyLCAmb21hcF9tcHVfdGltZXIyX2lycSk7CiAJb21hcF9tcHVfdGltZXJfc3RhcnQoMSwgfjAsIDEpOworCWluaXRfc2NoZWRfY2xvY2soJmNkLCBtcHVfdXBkYXRlX3NjaGVkX2Nsb2NrLCAzMiwgcmF0ZSk7CiAKIAlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX21wdSwgcmF0ZSkpCiAJCXByaW50ayhlcnIsIGNsb2Nrc291cmNlX21wdS5uYW1lKTsKIH0KIAotLyoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogVGltZXIgaW5pdGlhbGl6YXRpb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF90aW1lcl9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9tcHVfdGltZXJfaW5pdCh2b2lkKQogewogCXN0cnVjdCBjbGsJKmNrX3JlZiA9IGNsa19nZXQoTlVMTCwgImNrX3JlZiIpOwogCXVuc2lnbmVkIGxvbmcJcmF0ZTsKQEAgLTI0Niw2ICsyNzIsNjYgQEAKIAlvbWFwX2luaXRfY2xvY2tzb3VyY2UocmF0ZSk7CiB9CiAKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9tcHVfdGltZXJfaW5pdCh2b2lkKQoreworCXByX2VycigiQm9ndXMgdGltZXIsIHNob3VsZCBub3QgaGFwcGVuXG4iKTsKK30KKyNlbmRpZgkvKiBDT05GSUdfT01BUF9NUFVfVElNRVIgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTVBVX1RJTUVSKSAmJiBkZWZpbmVkKENPTkZJR19PTUFQXzMyS19USU1FUikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKCpwcmVmZXJyZWRfc2NoZWRfY2xvY2spKHZvaWQpOworCit1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKQoreworCWlmICghcHJlZmVycmVkX3NjaGVkX2Nsb2NrKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBwcmVmZXJyZWRfc2NoZWRfY2xvY2soKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHByZWZlcnJlZF9zY2hlZF9jbG9ja19pbml0KGJvb2wgdXNlXzMya19zY2hlZF9jbG9jaykKK3sKKwlpZiAodXNlXzMya19zY2hlZF9jbG9jaykKKwkJcHJlZmVycmVkX3NjaGVkX2Nsb2NrID0gb21hcF8zMmtfc2NoZWRfY2xvY2s7CisJZWxzZQorCQlwcmVmZXJyZWRfc2NoZWRfY2xvY2sgPSBvbWFwX21wdV9zY2hlZF9jbG9jazsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmVycmVkX3NjaGVkX2Nsb2NrX2luaXQoYm9vbCB1c2VfMzJrX3NjaGVkX2NsY29rKQoreworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IG9tYXBfMzJrX3RpbWVyX3VzYWJsZSh2b2lkKQoreworCWludCByZXMgPSBmYWxzZTsKKworCWlmIChjcHVfaXNfb21hcDczMCgpIHx8IGNwdV9pc19vbWFwMTV4eCgpKQorCQlyZXR1cm4gcmVzOworCisjaWZkZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCisJcmVzID0gb21hcF8zMmtfdGltZXJfaW5pdCgpOworI2VuZGlmCisKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaW1lciBpbml0aWFsaXphdGlvbgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlpZiAob21hcF8zMmtfdGltZXJfdXNhYmxlKCkpIHsKKwkJcHJlZmVycmVkX3NjaGVkX2Nsb2NrX2luaXQoMSk7CisJfSBlbHNlIHsKKwkJb21hcF9tcHVfdGltZXJfaW5pdCgpOworCQlwcmVmZXJyZWRfc2NoZWRfY2xvY2tfaW5pdCgwKTsKKwl9Cit9CisKIHN0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lciA9IHsKIAkuaW5pdAkJPSBvbWFwX3RpbWVyX2luaXQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lcjMyay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lcjMyay5jCmluZGV4IDIwY2ZiY2MuLjEzZDdiOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZXIzMmsuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyMzJrLmMKQEAgLTUyLDEwICs1Miw5IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvZG10aW1lci5oPgogCi1zdHJ1Y3Qgc3lzX3RpbWVyIG9tYXBfdGltZXI7Ci0KIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIDMyS0h6IE9TIHRpbWVyCkBAIC0xODEsMTQgKzE4MCwxNCBAQAogICogVGltZXIgaW5pdGlhbGl6YXRpb24KICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF90aW1lcl9pbml0KHZvaWQpCitib29sIF9faW5pdCBvbWFwXzMya190aW1lcl9pbml0KHZvaWQpCiB7CisJb21hcF9pbml0X2Nsb2Nrc291cmNlXzMyaygpOworCiAjaWZkZWYgQ09ORklHX09NQVBfRE1fVElNRVIKIAlvbWFwX2RtX3RpbWVyX2luaXQoKTsKICNlbmRpZgogCW9tYXBfaW5pdF8zMmtfdGltZXIoKTsKLX0KIAotc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyID0gewotCS5pbml0CQk9IG9tYXBfdGltZXJfaW5pdCwKLX07CisJcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMKaW5kZXggNWIwYzc3Ny4uOGY5YTY0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1MTcuYwpAQCAtMTI0LDggKzEyNCw5IEBACiAjaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9WMzAyMCkgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9WMzAyMF9NT0RVTEUpCiAjZGVmaW5lIFJUQ19JT19HUElPCQkoMTUzKQogI2RlZmluZSBSVENfV1JfR1BJTwkJKDE1NCkKLSNkZWZpbmUgUlRDX1JEX0dQSU8JCSgxNjApCisjZGVmaW5lIFJUQ19SRF9HUElPCQkoNTMpCiAjZGVmaW5lIFJUQ19DU19HUElPCQkoMTYzKQorI2RlZmluZSBSVENfQ1NfRU5fR1BJTwkJKDE2MCkKIAogc3RydWN0IHYzMDIwX3BsYXRmb3JtX2RhdGEgY21fdDM1MTdfdjMwMjBfcGRhdGEgPSB7CiAJLnVzZV9ncGlvCT0gMSwKQEAgLTE0NSw2ICsxNDYsMTYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGNtX3QzNTE3X2luaXRfcnRjKHZvaWQpCiB7CisJaW50IGVycjsKKworCWVyciA9IGdwaW9fcmVxdWVzdChSVENfQ1NfRU5fR1BJTywgInJ0YyBjcyBlbiIpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJDTS1UMzUxNzogcnRjIGNzIGVuIGdwaW8gcmVxdWVzdCBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQlyZXR1cm47CisJfQorCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFJUQ19DU19FTl9HUElPLCAxKTsKKwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY21fdDM1MTdfcnRjX2RldmljZSk7CiB9CiAjZWxzZQpAQCAtMjE0LDEyICsyMjUsMTIgQEAKIAl9LAogCXsKIAkJLm5hbWUgICAgICAgICAgID0gImxpbnV4IiwKLQkJLm9mZnNldCAgICAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDI4MDAwMCAqLworCQkub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MkEwMDAwICovCiAJCS5zaXplICAgICAgICAgICA9IDMyICogTkFORF9CTE9DS19TSVpFLAogCX0sCiAJewogCQkubmFtZSAgICAgICAgICAgPSAicm9vdGZzIiwKLQkJLm9mZnNldCAgICAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDY4MDAwMCAqLworCQkub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4NkEwMDAwICovCiAJCS5zaXplICAgICAgICAgICA9IE1URFBBUlRfU0laX0ZVTEwsCiAJfSwKIH07CkBAIC0yNTYsMTEgKzI2NywxOSBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0gewogCS8qIEdQSU8xODYgLSBHcmVlbiBMRUQgKi8KIAlPTUFQM19NVVgoU1lTX0NMS09VVDIsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fT1VUUFVUKSwKLQkvKiBSVEMgR1BJT3M6IElPLCBXUiMsIFJEIywgQ1MjICovCisKKwkvKiBSVEMgR1BJT3M6ICovCisJLyogSU8gLSBHUElPMTUzICovCiAJT01BUDNfTVVYKE1DQlNQNF9EUiwgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9JTlBVVCksCisJLyogV1IjIC0gR1BJTzE1NCAqLwogCU9NQVAzX01VWChNQ0JTUDRfRFgsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fSU5QVVQpLAotCU9NQVAzX01VWChNQ0JTUF9DTEtTLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUKSwKKwkvKiBSRCMgLSBHUElPNTMgKi8KKwlPTUFQM19NVVgoR1BNQ19OQ1MyLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUKSwKKwkvKiBDUyMgLSBHUElPMTYzICovCiAJT01BUDNfTVVYKFVBUlQzX0NUU19SQ1RYLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUKSwKKwkvKiBDUyBFTiAtIEdQSU8xNjAgKi8KKwlPTUFQM19NVVgoTUNCU1BfQ0xLUywgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9JTlBVVCksCisKIAkvKiBIU1VTQjEgUkVTRVQgKi8KIAlPTUFQM19NVVgoVUFSVDJfVFgsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fT1VUUFVUKSwKIAkvKiBIU1VTQjIgUkVTRVQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZGV2a2l0ODAwMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKaW5kZXggMDBiYjFmYy4uOWEyYTMxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKQEAgLTExNSw5ICsxMTUsNiBAQAogCiBzdGF0aWMgaW50IGRldmtpdDgwMDBfcGFuZWxfZW5hYmxlX2xjZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0JdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9HUElPLCAweDgwLCBSRUdfR1BJT0RBVEFESVIxKTsKLQl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0xFRCwgMHgwLCAweDApOwotCiAJaWYgKGdwaW9faXNfdmFsaWQoZHNzZGV2LT5yZXNldF9ncGlvKSkKIAkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAoZHNzZGV2LT5yZXNldF9ncGlvLCAxKTsKIAlyZXR1cm4gMDsKQEAgLTI0Nyw2ICsyNDQsOCBAQAogc3RhdGljIGludCBkZXZraXQ4MDAwX3R3bF9ncGlvX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pCiB7CisJaW50IHJldDsKKwogCW9tYXBfbXV4X2luaXRfZ3BpbygyOSwgT01BUF9QSU5fSU5QVVQpOwogCS8qIGdwaW8gKyAwIGlzICJtbWMwX2NkIiAoaW5wdXQvSVJRKSAqLwogCW1tY1swXS5ncGlvX2NkID0gZ3BpbyArIDA7CkBAIC0yNTUsMTcgKzI1NCwyMyBAQAogCS8qIFRXTDQwMzBfR1BJT19NQVggKyAxID09IGxlZEIsIFBNVV9TVEFUIChvdXQsIGFjdGl2ZSBsb3cgTEVEKSAqLwogCWdwaW9fbGVkc1syXS5ncGlvID0gZ3BpbyArIFRXTDQwMzBfR1BJT19NQVggKyAxOwogCi0gICAgICAgIC8qIGdwaW8gKyAxIGlzICJMQ0RfUFdSRU4iIChvdXQsIGFjdGl2ZSBoaWdoKSAqLwotCWRldmtpdDgwMDBfbGNkX2RldmljZS5yZXNldF9ncGlvID0gZ3BpbyArIDE7Ci0JZ3Bpb19yZXF1ZXN0KGRldmtpdDgwMDBfbGNkX2RldmljZS5yZXNldF9ncGlvLCAiTENEX1BXUkVOIik7Ci0JLyogRGlzYWJsZSB1bnRpbCBuZWVkZWQgKi8KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZGV2a2l0ODAwMF9sY2RfZGV2aWNlLnJlc2V0X2dwaW8sIDApOworCS8qIFRXTDQwMzBfR1BJT19NQVggKyAwIGlzICJMQ0RfUFdSRU4iIChvdXQsIGFjdGl2ZSBoaWdoKSAqLworCWRldmtpdDgwMDBfbGNkX2RldmljZS5yZXNldF9ncGlvID0gZ3BpbyArIFRXTDQwMzBfR1BJT19NQVggKyAwOworCXJldCA9IGdwaW9fcmVxdWVzdF9vbmUoZGV2a2l0ODAwMF9sY2RfZGV2aWNlLnJlc2V0X2dwaW8sCisJCQlHUElPRl9ESVJfT1VUIHwgR1BJT0ZfSU5JVF9MT1csICJMQ0RfUFdSRU4iKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZraXQ4MDAwX2xjZF9kZXZpY2UucmVzZXRfZ3BpbyA9IC1FSU5WQUw7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyBmb3IgTENEX1BXUk5cbiIpOworCX0KIAogCS8qIGdwaW8gKyA3IGlzICJEVklfUEQiIChvdXQsIGFjdGl2ZSBsb3cpICovCiAJZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8gPSBncGlvICsgNzsKLQlncGlvX3JlcXVlc3QoZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8sICJEVkkgUG93ZXJEb3duIik7Ci0JLyogRGlzYWJsZSB1bnRpbCBuZWVkZWQgKi8KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8sIDApOworCXJldCA9IGdwaW9fcmVxdWVzdF9vbmUoZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8sCisJCQlHUElPRl9ESVJfT1VUIHwgR1BJT0ZfSU5JVF9MT1csICJEVkkgUG93ZXJEb3duIik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8gPSAtRUlOVkFMOworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8gZm9yIERWSSBQb3dlckRvd25cbiIpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMjc1LDggKzI4MCw3IEBACiAJLmlycV9iYXNlCT0gVFdMNDAzMF9HUElPX0lSUV9CQVNFLAogCS5pcnFfZW5kCT0gVFdMNDAzMF9HUElPX0lSUV9FTkQsCiAJLnVzZV9sZWRzCT0gdHJ1ZSwKLQkucHVsbHVwcwk9IEJJVCgxKSwKLQkucHVsbGRvd25zCT0gQklUKDIpIHwgQklUKDYpIHwgQklUKDcpIHwgQklUKDgpIHwgQklUKDEzKQorCS5wdWxsZG93bnMJPSBCSVQoMSkgfCBCSVQoMikgfCBCSVQoNikgfCBCSVQoOCkgfCBCSVQoMTMpCiAJCQkJfCBCSVQoMTUpIHwgQklUKDE2KSB8IEJJVCgxNyksCiAJLnNldHVwCQk9IGRldmtpdDgwMDBfdHdsX2dwaW9fc2V0dXAsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwNHBhbmRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwppbmRleCBlMDAxYTA0Li5lOTQ0MDI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwpAQCAtNDA5LDggKzQwOSw2IEBACiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGFuZGFfZGV2aWNlcywgQVJSQVlfU0laRShwYW5kYV9kZXZpY2VzKSk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCW9tYXA0X3R3bDYwMzBfaHNtbWNfaW5pdChtbWMpOwotCS8qIE9NQVA0IFBhbmRhIHVzZXMgaW50ZXJuYWwgdHJhbnNjZWl2ZXIgc28gcmVnaXN0ZXIgbm9wIHRyYW5zY2VpdmVyICovCi0JdXNiX25vcF94Y2Vpdl9yZWdpc3RlcigpOwogCW9tYXA0X2VoY2lfaW5pdCgpOwogCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJtNjgwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJtNjgwLmMKaW5kZXggY2I3N2JlNy4uMzlhNzFiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1ybTY4MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcm02ODAuYwpAQCAtNDAsOSArNDAsNiBAQAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHJtNjgwX3ZlbW1jID0gewogCS5jb25zdHJhaW50cyA9CXsKIAkJLm5hbWUJCQk9ICJybTY4MF92ZW1tYyIsCi0JCS5taW5fdVYJCQk9IDI5MDAwMDAsCi0JCS5tYXhfdVYJCQk9IDI5MDAwMDAsCi0JCS5hcHBseV91VgkJPSAxLAogCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAogCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCiAJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jCmluZGV4IGU4Y2IzMmYuLmRlOWVjOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eF9kYXRhLmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJjbTJfNDR4eC5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtNDR4eC5oIgogI2luY2x1ZGUgInBybTQ0eHguaCIKLSNpbmNsdWRlICJwcm00NHh4LmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtNDR4eC5oIgogI2luY2x1ZGUgImNvbnRyb2wuaCIKICNpbmNsdWRlICJzY3JtNDR4eC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCmluZGV4IGUyMGI5ODYuLjU4ZTQyZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKQEAgLTQyMyw2ICs0MjMsMTIgQEAKIHsKIAlzdHJ1Y3QgY2xrZG1fZGVwICpjZDsKIAorCWlmICghY3B1X2lzX29tYXAyNHh4KCkgJiYgIWNwdV9pc19vbWFwMzR4eCgpKSB7CisJCXByX2VycigiY2xvY2tkb21haW46ICVzLyVzOiAlczogbm90IHlldCBpbXBsZW1lbnRlZFxuIiwKKwkJICAgICAgIGNsa2RtMS0+bmFtZSwgY2xrZG0yLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWlmICghY2xrZG0xIHx8ICFjbGtkbTIpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC00NTgsNiArNDY0LDEyIEBACiB7CiAJc3RydWN0IGNsa2RtX2RlcCAqY2Q7CiAKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpICYmICFjcHVfaXNfb21hcDM0eHgoKSkgeworCQlwcl9lcnIoImNsb2NrZG9tYWluOiAlcy8lczogJXM6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsCisJCSAgICAgICBjbGtkbTEtPm5hbWUsIGNsa2RtMi0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlpZiAoIWNsa2RtMSB8fCAhY2xrZG0yKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNTAwLDYgKzUxMiwxMiBAQAogCWlmICghY2xrZG0xIHx8ICFjbGtkbTIpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSAmJiAhY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJcHJfZXJyKCJjbG9ja2RvbWFpbjogJXMvJXM6ICVzOiBub3QgeWV0IGltcGxlbWVudGVkXG4iLAorCQkgICAgICAgY2xrZG0xLT5uYW1lLCBjbGtkbTItPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJY2QgPSBfY2xrZG1fZGVwc19sb29rdXAoY2xrZG0yLCBjbGtkbTEtPndrZGVwX3NyY3MpOwogCWlmIChJU19FUlIoY2QpKSB7CiAJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogaGFyZHdhcmUgY2Fubm90IHNldC9jbGVhciB3YWtlIHVwIG9mICIKQEAgLTUyNyw2ICs1NDUsMTIgQEAKIAlzdHJ1Y3QgY2xrZG1fZGVwICpjZDsKIAl1MzIgbWFzayA9IDA7CiAKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpICYmICFjcHVfaXNfb21hcDM0eHgoKSkgeworCQlwcl9lcnIoImNsb2NrZG9tYWluOiAlczogJXM6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsCisJCSAgICAgICBjbGtkbS0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlpZiAoIWNsa2RtKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODMwLDggKzg1NCw3IEBACiAJICogZGVwZW5kZW5jeSBjb2RlIGFuZCBkYXRhIGZvciBPTUFQNC4KIAkgKi8KIAlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJV0FSTl9PTkNFKDEsICJjbG9ja2RvbWFpbjogT01BUDQgd2FrZXVwL3NsZWVwIGRlcGVuZGVuY3kgIgotCQkJICAic3VwcG9ydCBpcyBub3QgeWV0IGltcGxlbWVudGVkXG4iKTsKKwkJcHJfZXJyKCJjbG9ja2RvbWFpbjogJXM6IE9NQVA0IHdha2V1cC9zbGVlcCBkZXBlbmRlbmN5IHN1cHBvcnQ6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsIGNsa2RtLT5uYW1lKTsKIAl9IGVsc2UgewogCQlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPiAwKQogCQkJX2Nsa2RtX2FkZF9hdXRvZGVwcyhjbGtkbSk7CkBAIC04NzIsOCArODk1LDcgQEAKIAkgKiBkZXBlbmRlbmN5IGNvZGUgYW5kIGRhdGEgZm9yIE9NQVA0LgogCSAqLwogCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewotCQlXQVJOX09OQ0UoMSwgImNsb2NrZG9tYWluOiBPTUFQNCB3YWtldXAvc2xlZXAgZGVwZW5kZW5jeSAiCi0JCQkgICJzdXBwb3J0IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIpOworCQlwcl9lcnIoImNsb2NrZG9tYWluOiAlczogT01BUDQgd2FrZXVwL3NsZWVwIGRlcGVuZGVuY3kgc3VwcG9ydDogbm90IHlldCBpbXBsZW1lbnRlZFxuIiwgY2xrZG0tPm5hbWUpOwogCX0gZWxzZSB7CiAJCWlmIChhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA+IDApCiAJCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zNDR4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluczQ0eHhfZGF0YS5jCmluZGV4IDUxOTIwZmMuLjEwNjIyYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zNDR4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnM0NHh4X2RhdGEuYwpAQCAtMzAsOCArMzAsNiBAQAogI2luY2x1ZGUgImNtMV80NHh4LmgiCiAjaW5jbHVkZSAiY20yXzQ0eHguaCIKIAotI2luY2x1ZGUgImNtMV80NHh4LmgiCi0jaW5jbHVkZSAiY20yXzQ0eHguaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTQ0eHguaCIKICNpbmNsdWRlICJwcm00NHh4LmgiCiAjaW5jbHVkZSAicHJjbTQ0eHguaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZG1hLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RtYS5jCmluZGV4IGQyZjE1ZjUuLjM0OTIyYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kbWEuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJaWYgKElTX0VSUihvZCkpIHsKIAkJcHJfZXJyKCIlczogQ2FudCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXM6JXMuXG4iLAogCQkJX19mdW5jX18sIG5hbWUsIG9oLT5uYW1lKTsKLQkJcmV0dXJuIElTX0VSUihvZCk7CisJCXJldHVybiBQVFJfRVJSKG9kKTsKIAl9CiAKIAltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoJm9kLT5wZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCBiZWZhMzIxLi44MTk4NWE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTM4LDIwICszOCw2IEBACiAgKi8KIAogI2lmZGVmIE1VTFRJX09NQVAyCi0KLS8qCi0gKiBXZSB1c2UgX19nbHVlIHRvIGF2b2lkIGVycm9ycyB3aXRoIG11bHRpcGxlIGRlZmluaXRpb25zIG9mCi0gKiAuZ2xvYmwgb21hcF9pcnFfYmFzZSBhcyBpdCdzIGluY2x1ZGVkIGZyb20gZW50cnktYXJtdi5TIGJ1dCBub3QKLSAqIGZyb20gZW50cnktY29tbW9uLlMuCi0gKi8KLSNpZmRlZiBfX2dsdWUKLQkJLnB1c2hzZWN0aW9uIC5kYXRhCi0JCS5nbG9ibAlvbWFwX2lycV9iYXNlCi1vbWFwX2lycV9iYXNlOgotCQkud29yZAkwCi0JCS5wb3BzZWN0aW9uCi0jZW5kaWYKLQogCQkvKgogCQkgKiBDb25maWd1cmUgdGhlIGludGVycnVwdCBiYXNlIG9uIHRoZSBmaXJzdCBpbnRlcnJ1cHQuCiAJCSAqIFNlZSBhbHNvIG9tYXBfaXJxX2Jhc2VfaW5pdCBmb3Igc2V0dGluZyBvbWFwX2lycV9iYXNlLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCmluZGV4IGU2NjY4N2IuLmMyMDMyMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKQEAgLTMxNCwxNCArMzE0LDEzIEBACiAJcmV0dXJuIG9tYXBfaHdtb2Rfc2V0X3Bvc3RzZXR1cF9zdGF0ZShvaCwgKih1OCAqKWRhdGEpOwogfQogCit2b2lkIF9faW9tZW0gKm9tYXBfaXJxX2Jhc2U7CisKIC8qCiAgKiBJbml0aWFsaXplIGFzbV9pcnFfYmFzZSBmb3IgZW50cnktbWFjcm8uUwogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pcnFfYmFzZV9pbml0KHZvaWQpCiB7Ci0JZXh0ZXJuIHZvaWQgX19pb21lbSAqb21hcF9pcnFfYmFzZTsKLQotI2lmZGVmIE1VTFRJX09NQVAyCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQogCQlvbWFwX2lycV9iYXNlID0gT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMjRYWF9JQ19CQVNFKTsKIAllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkKQEAgLTMzMCw3ICszMjksNiBAQAogCQlvbWFwX2lycV9iYXNlID0gT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQNDRYWF9HSUNfQ1BVX0JBU0UpOwogCWVsc2UKIAkJcHJfZXJyKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSBvbWFwX2lycV9iYXNlXG4iKTsKLSNlbmRpZgogfQogCiB2b2lkIF9faW5pdCBvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKaW5kZXggZGY4ZDJmMi4uOTgxNDhiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIAlzdHJ1Y3Qgb21hcF9tdXggKm11eCA9IE5VTEw7CiAJc3RydWN0IG9tYXBfbXV4X2VudHJ5ICplOwogCWNvbnN0IGNoYXIgKm1vZGVfbmFtZTsKLQlpbnQgZm91bmQgPSAwLCBmb3VuZF9tb2RlLCBtb2RlMF9sZW4gPSAwOworCWludCBmb3VuZCA9IDAsIGZvdW5kX21vZGUgPSAwLCBtb2RlMF9sZW4gPSAwOwogCXN0cnVjdCBsaXN0X2hlYWQgKm11eG1vZGVzID0gJnBhcnRpdGlvbi0+bXV4bW9kZXM7CiAKIAltb2RlX25hbWUgPSBzdHJjaHIobXV4bmFtZSwgJy4nKTsKQEAgLTEwMDAsNiArMTAwMCw3IEBACiAJaWYgKCFwYXJ0aXRpb24tPmJhc2UpIHsKIAkJcHJfZXJyKCIlczogQ291bGQgbm90IGlvcmVtYXAgbXV4IHBhcnRpdGlvbiBhdCAweCUwOHhcbiIsCiAJCQlfX2Z1bmNfXywgcGFydGl0aW9uLT5waHlzKTsKKwkJa2ZyZWUocGFydGl0aW9uKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTI0eHguYwppbmRleCA5ZTVkYzhlLi45N2ZlYjNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0yNHh4LmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCiAJLyogQmxvY2sgY29uc29sZSBvdXRwdXQgaW4gY2FzZSBpdCBpcyBvbiBvbmUgb2YgdGhlIE9NQVAgVUFSVHMgKi8KIAlpZiAoIWlzX3N1c3BlbmRpbmcoKSkKLQkJaWYgKHRyeV9hY3F1aXJlX2NvbnNvbGVfc2VtKCkpCisJCWlmICghY29uc29sZV90cnlsb2NrKCkpCiAJCQlnb3RvIG5vX3NsZWVwOwogCiAJb21hcF91YXJ0X3ByZXBhcmVfaWRsZSgwKTsKQEAgLTE1MSw3ICsxNTEsNyBAQAogCW9tYXBfdWFydF9yZXN1bWVfaWRsZSgwKTsKIAogCWlmICghaXNfc3VzcGVuZGluZygpKQotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAKIG5vX3NsZWVwOgogCWlmIChvbWFwMl9wbV9kZWJ1ZykgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKaW5kZXggOGNiYmVhZC4uMmY4NjRlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCkBAIC0xNjgsOSArMTY4LDEwIEBACiAgKiBvbmNlIGR1cmluZyBib290IHNlcXVlbmNlLCBidXQgdGhpcyB3b3JrcyBhcyB3ZSBhcmUgbm90IHVzaW5nIHNlY3VyZQogICogc2VydmljZXMuCiAgKi8KLXN0YXRpYyB2b2lkIG9tYXAzX3NhdmVfc2VjdXJlX3JhbV9jb250ZXh0KHUzMiB0YXJnZXRfbXB1X3N0YXRlKQorc3RhdGljIHZvaWQgb21hcDNfc2F2ZV9zZWN1cmVfcmFtX2NvbnRleHQodm9pZCkKIHsKIAl1MzIgcmV0OworCWludCBtcHVfbmV4dF9zdGF0ZSA9IHB3cmRtX3JlYWRfbmV4dF9wd3JzdChtcHVfcHdyZG0pOwogCiAJaWYgKG9tYXBfdHlwZSgpICE9IE9NQVAyX0RFVklDRV9UWVBFX0dQKSB7CiAJCS8qCkBAIC0xODEsNyArMTgyLDcgQEAKIAkJcHdyZG1fc2V0X25leHRfcHdyc3QobXB1X3B3cmRtLCBQV1JETV9QT1dFUl9PTik7CiAJCXJldCA9IF9vbWFwX3NhdmVfc2VjdXJlX3NyYW0oKHUzMiAqKQogCQkJCV9fcGEob21hcDNfc2VjdXJlX3JhbV9zdG9yYWdlKSk7Ci0JCXB3cmRtX3NldF9uZXh0X3B3cnN0KG1wdV9wd3JkbSwgdGFyZ2V0X21wdV9zdGF0ZSk7CisJCXB3cmRtX3NldF9uZXh0X3B3cnN0KG1wdV9wd3JkbSwgbXB1X25leHRfc3RhdGUpOwogCQkvKiBGb2xsb3dpbmcgaXMgZm9yIGVycm9yIHRyYWNraW5nLCBpdCBzaG91bGQgbm90IGhhcHBlbiAqLwogCQlpZiAocmV0KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgInNhdmVfc2VjdXJlX3NyYW0oKSByZXR1cm5zICUwOHhcbiIsCkBAIC0zOTgsNyArMzk5LDcgQEAKIAlpZiAoIWlzX3N1c3BlbmRpbmcoKSkKIAkJaWYgKHBlcl9uZXh0X3N0YXRlIDwgUFdSRE1fUE9XRVJfT04gfHwKIAkJICAgIGNvcmVfbmV4dF9zdGF0ZSA8IFBXUkRNX1BPV0VSX09OKQotCQkJaWYgKHRyeV9hY3F1aXJlX2NvbnNvbGVfc2VtKCkpCisJCQlpZiAoIWNvbnNvbGVfdHJ5bG9jaygpKQogCQkJCWdvdG8gY29uc29sZV9zdGlsbF9hY3RpdmU7CiAKIAkvKiBQRVIgKi8KQEAgLTQ4MSw3ICs0ODIsNyBAQAogCX0KIAogCWlmICghaXNfc3VzcGVuZGluZygpKQotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAKIGNvbnNvbGVfc3RpbGxfYWN0aXZlOgogCS8qIERpc2FibGUgSU8tUEFEIGFuZCBJTy1DSEFJTiB3YWtldXAgKi8KQEAgLTEwOTQsNyArMTA5NSw3IEBACiAJCWxvY2FsX2ZpcV9kaXNhYmxlKCk7CiAKIAkJb21hcF9kbWFfZ2xvYmFsX2NvbnRleHRfc2F2ZSgpOwotCQlvbWFwM19zYXZlX3NlY3VyZV9yYW1fY29udGV4dChQV1JETV9QT1dFUl9PTik7CisJCW9tYXAzX3NhdmVfc2VjdXJlX3JhbV9jb250ZXh0KCk7CiAJCW9tYXBfZG1hX2dsb2JhbF9jb250ZXh0X3Jlc3RvcmUoKTsKIAogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluMnh4eF8zeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluMnh4eF8zeHh4LmMKaW5kZXggZDUyMzM4OS4uY2Y2MDBlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbjJ4eHhfM3h4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4yeHh4XzN4eHguYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPHBsYXQvcHJjbS5oPgogCiAjaW5jbHVkZSAicG93ZXJkb21haW4uaCIKLSNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCiAjaW5jbHVkZSAicHJtLmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgogI2luY2x1ZGUgInBybS1yZWdiaXRzLTM0eHguaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCmluZGV4IDMwMmRhNzQuLjMyZTkxYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwpAQCAtODEyLDcgKzgxMiw3IEBACiAKIAlvaC0+ZGV2X2F0dHIgPSB1YXJ0OwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOyAvKiBpbiBjYXNlIHRoZSBlYXJseWNvbiBpcyBvbiB0aGUgVUFSVCAqLworCWNvbnNvbGVfbG9jaygpOyAvKiBpbiBjYXNlIHRoZSBlYXJseWNvbiBpcyBvbiB0aGUgVUFSVCAqLwogCiAJLyoKIAkgKiBCZWNhdXNlIG9mIGVhcmx5IFVBUlQgcHJvYmluZywgVUFSVCBkaWQgbm90IGdldCBpZGxlZApAQCAtODM4LDcgKzgzOCw3IEBACiAJb21hcF91YXJ0X2Jsb2NrX3NsZWVwKHVhcnQpOwogCXVhcnQtPnRpbWVvdXQgPSBERUZBVUxUX1RJTUVPVVQ7CiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCWlmICgoY3B1X2lzX29tYXAzNHh4KCkgJiYgdWFydC0+cGFkY29uZikgfHwKIAkgICAgKHVhcnQtPndrX2VuICYmIHVhcnQtPndrX21hc2spKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LmMKaW5kZXggNzdlY2ViZi4uYzM3ZTgyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbWFydHJlZmxleC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc21hcnRyZWZsZXguYwpAQCAtNzgwLDggKzc4MCw3IEBACiAJc3RydWN0IG9tYXBfc3IgKnNyX2luZm8gPSAoc3RydWN0IG9tYXBfc3IgKikgZGF0YTsKIAogCWlmICghc3JfaW5mbykgewotCQlwcl93YXJuaW5nKCIlczogb21hcF9zciBzdHJ1Y3QgZm9yIHNyXyVzIG5vdCBmb3VuZFxuIiwKLQkJCV9fZnVuY19fLCBzcl9pbmZvLT52b2x0ZG0tPm5hbWUpOworCQlwcl93YXJuaW5nKCIlczogb21hcF9zciBzdHJ1Y3Qgbm90IGZvdW5kXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNzk1LDggKzc5NCw3IEBACiAJc3RydWN0IG9tYXBfc3IgKnNyX2luZm8gPSAoc3RydWN0IG9tYXBfc3IgKikgZGF0YTsKIAogCWlmICghc3JfaW5mbykgewotCQlwcl93YXJuaW5nKCIlczogb21hcF9zciBzdHJ1Y3QgZm9yIHNyXyVzIG5vdCBmb3VuZFxuIiwKLQkJCV9fZnVuY19fLCBzcl9pbmZvLT52b2x0ZG0tPm5hbWUpOworCQlwcl93YXJuaW5nKCIlczogb21hcF9zciBzdHJ1Y3Qgbm90IGZvdW5kXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODM0LDcgKzgzMiw4IEBACiAKIAlpZiAoIXBkYXRhKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBwbGF0Zm9ybSBkYXRhIG1pc3NpbmdcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2ZyZWVfZGV2aW5mbzsKIAl9CiAKIAltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwpAQCAtOTY2LDcgKzk2NSw3IEBACiAJfQogCiAJc3JfaW5mbyA9IF9zcl9sb29rdXAocGRhdGEtPnZvbHRkbSk7Ci0JaWYgKCFzcl9pbmZvKSB7CisJaWYgKElTX0VSUihzcl9pbmZvKSkgewogCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiJXM6IG9tYXBfc3Igc3RydWN0IG5vdCBmb3VuZFxuIiwKIAkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKaW5kZXggNGU0OGU3OC4uN2I3YzI2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYwpAQCAtNDIsNiArNDIsOCBAQAogCiAjaW5jbHVkZSAidGltZXItZ3AuaCIKIAorI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CisKIC8qIE1BWF9HUFRJTUVSX0lEOiBudW1iZXIgb2YgR1BUSU1FUnMgb24gdGhlIGNoaXAgKi8KICNkZWZpbmUgTUFYX0dQVElNRVJfSUQJCTEyCiAKQEAgLTE3NiwxMCArMTc4LDE0IEBACiAvKiAKICAqIFdoZW4gMzJrLXRpbWVyIGlzIGVuYWJsZWQsIGRvbid0IHVzZSBHUFRpbWVyIGZvciBjbG9ja3NvdXJjZQogICogaW5zdGVhZCwganVzdCBsZWF2ZSBkZWZhdWx0IGNsb2Nrc291cmNlIHdoaWNoIHVzZXMgdGhlIDMyawotICogc3luYyBjb3VudGVyLiAgU2VlIGNsb2Nrc291cmNlIHNldHVwIGluIHNlZSBwbGF0LW9tYXAvY29tbW9uLmMuIAorICogc3luYyBjb3VudGVyLiAgU2VlIGNsb2Nrc291cmNlIHNldHVwIGluIHBsYXQtb21hcC9jb3VudGVyXzMyay5jCiAgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBvbWFwMl9ncF9jbG9ja3NvdXJjZV9pbml0KHZvaWQpIHt9CitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDJfZ3BfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKQoreworCW9tYXBfaW5pdF9jbG9ja3NvdXJjZV8zMmsoKTsKK30KKwogI2Vsc2UKIC8qCiAgKiBjbG9ja3NvdXJjZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2UuYwppbmRleCBlZDYwNzljLi4xMmJlNTI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2UuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2UuYwpAQCAtNDcxLDYgKzQ3MSw3IEBACiAJc3RyY2F0KG5hbWUsIHZkZC0+dm9sdGRtLm5hbWUpOwogCiAJdmRkLT5kZWJ1Z19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgdm9sdGFnZV9kaXIpOworCWtmcmVlKG5hbWUpOwogCWlmIChJU19FUlIodmRkLT5kZWJ1Z19kaXIpKSB7CiAJCXByX3dhcm5pbmcoIiVzOiBVbmFibGUgdG8gY3JlYXRlIGRlYnVnZnMgZGlyZWN0b3J5IGZvciIKIAkJCSIgdmRkXyVzXG4iLCBfX2Z1bmNfXywgdmRkLT52b2x0ZG0ubmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLWV2YWxib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1ldmFsYm9hcmQuYwppbmRleCA2YjJjODAwLi4yOGY2NjdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLWV2YWxib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktZXZhbGJvYXJkLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAkJCUdQSU8wX0NPTElCUklfUFhBMjcwX1NEX0RFVEVDVDsKIAlpZiAobWFjaGluZV9pc19jb2xpYnJpMzAwKCkpCS8qIFBYQTMwMCBDb2xpYnJpICovCiAJCWNvbGlicmlfbWNpX3BsYXRmb3JtX2RhdGEuZ3Bpb19jYXJkX2RldGVjdCA9Ci0JCQlHUElPMzlfQ09MSUJSSV9QWEEzMDBfU0RfREVURUNUOworCQkJR1BJTzEzX0NPTElCUklfUFhBMzAwX1NEX0RFVEVDVDsKIAllbHNlCQkJCS8qIFBYQTMyMCBDb2xpYnJpICovCiAJCWNvbGlicmlfbWNpX3BsYXRmb3JtX2RhdGEuZ3Bpb19jYXJkX2RldGVjdCA9CiAJCQlHUElPMjhfQ09MSUJSSV9QWEEzMjBfU0RfREVURUNUOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMKaW5kZXggZmRkYjE2ZC4uNjZkZDgxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMwMC5jCkBAIC00MSw3ICs0MSw3IEBACiAJR1BJTzRfTU1DMV9EQVQxLAogCUdQSU81X01NQzFfREFUMiwKIAlHUElPNl9NTUMxX0RBVDMsCi0JR1BJTzM5X0dQSU8sCS8qIFNEIGRldGVjdCAqLworCUdQSU8xM19HUElPLAkvKiBHUElPMTNfQ09MSUJSSV9QWEEzMDBfU0RfREVURUNUICovCiAKIAkvKiBVSEMgKi8KIAlHUElPMF8yX1VTQkhfUEVOLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb2xpYnJpLmgKaW5kZXggMzg4YTk2Zi4uY2I0MjM2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29saWJyaS5oCkBAIC02MCw3ICs2MCw3IEBACiAjZGVmaW5lIEdQSU8xMTNfQ09MSUJSSV9QWEEyNzBfVFNfSVJRCTExMwogCiAvKiBHUElPIGRlZmluaXRpb25zIGZvciBDb2xpYnJpIFBYQTMwMC8zMTAgKi8KLSNkZWZpbmUgR1BJTzM5X0NPTElCUklfUFhBMzAwX1NEX0RFVEVDVAkzOQorI2RlZmluZSBHUElPMTNfQ09MSUJSSV9QWEEzMDBfU0RfREVURUNUCTEzCiAKIC8qIEdQSU8gZGVmaW5pdGlvbnMgZm9yIENvbGlicmkgUFhBMzIwICovCiAjZGVmaW5lIEdQSU8yOF9DT0xJQlJJX1BYQTMyMF9TRF9ERVRFQ1QJMjgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG0yN3guYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG0yN3guYwppbmRleCA0MDViOTJhLi4zNTU3MmM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtMjd4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbTI3eC5jCkBAIC0zMjMsNyArMzIzLDcgQEAKIAkucHdtX2lkCQk9IDAsCiAJLm1heF9icmlnaHRuZXNzCT0gMHhmZSwKIAkuZGZ0X2JyaWdodG5lc3MJPSAweDdlLAotCS5wd21fcGVyaW9kX25zCT0gMzUwMCwKKwkucHdtX3BlcmlvZF9ucwk9IDM1MDAgKiAxMDI0LAogCS5pbml0CQk9IHBhbG0yN3hfYmFja2xpZ2h0X2luaXQsCiAJLm5vdGlmeQkJPSBwYWxtMjd4X2JhY2tsaWdodF9ub3RpZnksCiAJLmV4aXQJCT0gcGFsbTI3eF9iYWNrbGlnaHRfZXhpdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BtLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wbS5jCmluZGV4IDk3OGUxYjIuLjE4MDdjOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcG0uYwpAQCAtMzMsNyArMzMsNyBAQAogI2VuZGlmCiAKIAkvKiBza2lwIHJlZ2lzdGVycyBzYXZpbmcgZm9yIHN0YW5kYnkgKi8KLQlpZiAoc3RhdGUgIT0gUE1fU1VTUEVORF9TVEFOREJZKSB7CisJaWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfU1RBTkRCWSAmJiBweGFfY3B1X3BtX2Zucy0+c2F2ZSkgewogCQlweGFfY3B1X3BtX2Zucy0+c2F2ZShzbGVlcF9zYXZlKTsKIAkJLyogYmVmb3JlIHNsZWVwaW5nLCBjYWxjdWxhdGUgYW5kIHNhdmUgYSBjaGVja3N1bSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgcHhhX2NwdV9wbV9mbnMtPnNhdmVfY291bnQgLSAxOyBpKyspCkBAIC00NCw3ICs0NCw3IEBACiAJcHhhX2NwdV9wbV9mbnMtPmVudGVyKHN0YXRlKTsKIAljcHVfaW5pdCgpOwogCi0JaWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfU1RBTkRCWSkgeworCWlmIChzdGF0ZSAhPSBQTV9TVVNQRU5EX1NUQU5EQlkgJiYgcHhhX2NwdV9wbV9mbnMtPnJlc3RvcmUpIHsKIAkJLyogYWZ0ZXIgc2xlZXBpbmcsIHZhbGlkYXRlIHRoZSBjaGVja3N1bSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgcHhhX2NwdV9wbV9mbnMtPnNhdmVfY291bnQgLSAxOyBpKyspCiAJCQljaGVja3N1bSArPSBzbGVlcF9zYXZlW2ldOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCmluZGV4IGI0NTc1YWUuLjdjYTEzOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKQEAgLTIsNTIgKzIsNTYgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfUkVBTFZJRVcKIAogY29uZmlnIE1BQ0hfUkVBTFZJRVdfRUIKLQlib29sICJTdXBwb3J0IFJlYWxWaWV3L0VCIHBsYXRmb3JtIgorCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcoUikgRW11bGF0aW9uIEJhc2Vib2FyZCIKIAlzZWxlY3QgQVJNX0dJQwogCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyBFbXVsYXRpb24gQmFzZWJvYXJkIHBsYXRmb3JtLgorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFJlYWxWaWV3KFIpIEVtdWxhdGlvbiBCYXNlYm9hcmQKKwkgIHBsYXRmb3JtLgogCiBjb25maWcgUkVBTFZJRVdfRUJfQTlNUAotCWJvb2wgIlN1cHBvcnQgTXVsdGljb3JlIENvcnRleC1BOSIKKwlib29sICJTdXBwb3J0IE11bHRpY29yZSBDb3J0ZXgtQTkgVGlsZSIKIAlkZXBlbmRzIG9uIE1BQ0hfUkVBTFZJRVdfRUIKIAlzZWxlY3QgQ1BVX1Y3CiAJaGVscAotCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBDb3J0ZXgtQTlNUENvcmUgdGlsZSBvbiB0aGUgUmVhbHZpZXcgcGxhdGZvcm0uCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIENvcnRleC1BOU1QQ29yZSB0aWxlIGZpdHRlZCB0byB0aGUKKwkgIFJlYWx2aWV3KFIpIEVtdWxhdGlvbiBCYXNlYm9hcmQgcGxhdGZvcm0uCiAKIGNvbmZpZyBSRUFMVklFV19FQl9BUk0xMU1QCi0JYm9vbCAiU3VwcG9ydCBBUk0xMU1QQ29yZSB0aWxlIgorCWJvb2wgIlN1cHBvcnQgQVJNMTFNUENvcmUgVGlsZSIKIAlkZXBlbmRzIG9uIE1BQ0hfUkVBTFZJRVdfRUIKIAlzZWxlY3QgQ1BVX1Y2CiAJc2VsZWN0IEFSQ0hfSEFTX0JBUlJJRVJTIGlmIFNNUAogCWhlbHAKLQkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQVJNMTFNUENvcmUgdGlsZSBvbiB0aGUgUmVhbHZpZXcgcGxhdGZvcm0uCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEFSTTExTVBDb3JlIHRpbGUgZml0dGVkIHRvIHRoZSBSZWFsdmlldyhSKQorCSAgRW11bGF0aW9uIEJhc2Vib2FyZCBwbGF0Zm9ybS4KIAogY29uZmlnIFJFQUxWSUVXX0VCX0FSTTExTVBfUkVWQgotCWJvb2wgIlN1cHBvcnQgQVJNMTFNUENvcmUgUmV2QiB0aWxlIgorCWJvb2wgIlN1cHBvcnQgQVJNMTFNUENvcmUgUmV2QiBUaWxlIgogCWRlcGVuZHMgb24gUkVBTFZJRVdfRUJfQVJNMTFNUAogCWhlbHAKLQkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQVJNMTFNUENvcmUgUmV2QiB0aWxlIG9uIHRoZSBSZWFsdmlldwotCSAgcGxhdGZvcm0uIFNpbmNlIHRoZXJlIGFyZSBkZXZpY2UgYWRkcmVzcyBkaWZmZXJlbmNlcywgYQotCSAga2VybmVsIGJ1aWx0IHdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCBpcyBub3QgY29tcGF0aWJsZSB3aXRoCi0JICBvdGhlciByZXZpc2lvbnMgb2YgdGhlIEFSTTExTVBDb3JlIHRpbGUuCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEFSTTExTVBDb3JlIFJldmlzaW9uIEIgdGlsZSBvbiB0aGUKKwkgIFJlYWx2aWV3KFIpIEVtdWxhdGlvbiBCYXNlYm9hcmQgcGxhdGZvcm0uIFNpbmNlIHRoZXJlIGFyZSBkZXZpY2UKKwkgIGFkZHJlc3MgZGlmZmVyZW5jZXMsIGEga2VybmVsIGJ1aWx0IHdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCBpcworCSAgbm90IGNvbXBhdGlibGUgd2l0aCBvdGhlciByZXZpc2lvbnMgb2YgdGhlIEFSTTExTVBDb3JlIHRpbGUuCiAKIGNvbmZpZyBNQUNIX1JFQUxWSUVXX1BCMTFNUAotCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcvUEIxMU1QQ29yZSBwbGF0Zm9ybSIKKwlib29sICJTdXBwb3J0IFJlYWxWaWV3KFIpIFBsYXRmb3JtIEJhc2Vib2FyZCBmb3IgQVJNMTFNUENvcmUiCiAJc2VsZWN0IENQVV9WNgogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IEhBVkVfUEFUQV9QTEFURk9STQogCXNlbGVjdCBBUkNIX0hBU19CQVJSSUVSUyBpZiBTTVAKIAloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgTVBDb3JlIFBsYXRmb3JtIEJhc2Vib2FyZC4KLQkgIFBCMTFNUENvcmUgaXMgYSBwbGF0Zm9ybSB3aXRoIGFuIG9uLWJvYXJkIEFSTTExTVBDb3JlIGFuZCBoYXMKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyhSKSBQbGF0Zm9ybSBCYXNlYm9hcmQgZm9yCisJICB0aGUgQVJNMTFNUENvcmUuICBUaGlzIHBsYXRmb3JtIGhhcyBhbiBvbi1ib2FyZCBBUk0xMU1QQ29yZSBhbmQgaGFzCiAJICBzdXBwb3J0IGZvciBQQ0ktRSBhbmQgQ29tcGFjdCBGbGFzaC4KIAogY29uZmlnIE1BQ0hfUkVBTFZJRVdfUEIxMTc2Ci0JYm9vbCAiU3VwcG9ydCBSZWFsVmlldy9QQjExNzYgcGxhdGZvcm0iCisJYm9vbCAiU3VwcG9ydCBSZWFsVmlldyhSKSBQbGF0Zm9ybSBCYXNlYm9hcmQgZm9yIEFSTTExNzZKWkYtUyIKIAlzZWxlY3QgQ1BVX1Y2CiAJc2VsZWN0IEFSTV9HSUMKIAloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgQVJNMTE3NiBQbGF0Zm9ybSBCYXNlYm9hcmQuCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcoUikgUGxhdGZvcm0gQmFzZWJvYXJkIGZvcgorCSAgQVJNMTE3NkpaRi1TLgogCiBjb25maWcgUkVBTFZJRVdfUEIxMTc2X1NFQ1VSRV9GTEFTSAogCWJvb2wgIkFsbG93IGFjY2VzcyB0byB0aGUgc2VjdXJlIGZsYXNoIG1lbW9yeSBibG9jayIKQEAgLTU5LDIzICs2MywyNCBAQAogCSAgYmxvY2sgKDY0TUIgQCAweDNjMDAwMDAwKSBpcyByZXF1aXJlZC4KIAogY29uZmlnIE1BQ0hfUkVBTFZJRVdfUEJBOAotCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcvUEItQTggcGxhdGZvcm0iCisJYm9vbCAiU3VwcG9ydCBSZWFsVmlldyhSKSBQbGF0Zm9ybSBCYXNlYm9hcmQgZm9yIENvcnRleCh0bSktQTggcGxhdGZvcm0iCiAJc2VsZWN0IENQVV9WNwogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IEhBVkVfUEFUQV9QTEFURk9STQogCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyBDb3J0ZXgtQTggUGxhdGZvcm0gQmFzZWJvYXJkLgotCSAgUEItQTggaXMgYSBwbGF0Zm9ybSB3aXRoIGFuIG9uLWJvYXJkIENvcnRleC1BOCBhbmQgaGFzIHN1cHBvcnQgZm9yCi0JICBQQ0ktRSBhbmQgQ29tcGFjdCBGbGFzaC4KKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyBQbGF0Zm9ybSBCYXNlYm9hcmQgZm9yCisJICBDb3J0ZXgodG0pLUE4LiAgVGhpcyBwbGF0Zm9ybSBoYXMgYW4gb24tYm9hcmQgQ29ydGV4LUE4IGFuZCBoYXMKKwkgIHN1cHBvcnQgZm9yIFBDSS1FIGFuZCBDb21wYWN0IEZsYXNoLgogCiBjb25maWcgTUFDSF9SRUFMVklFV19QQlgKLQlib29sICJTdXBwb3J0IFJlYWxWaWV3L1BCWCBwbGF0Zm9ybSIKKwlib29sICJTdXBwb3J0IFJlYWxWaWV3KFIpIFBsYXRmb3JtIEJhc2Vib2FyZCBFeHBsb3JlIgogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IEhBVkVfUEFUQV9QTEFURk9STQogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUgaWYgQ1BVX1Y3ICYmICFSRUFMVklFV19ISUdIX1BIWVNfT0ZGU0VUCiAJc2VsZWN0IFpPTkVfRE1BIGlmIFNQQVJTRU1FTQogCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyBQQlggcGxhdGZvcm0uCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcoUikgUGxhdGZvcm0gQmFzZWJvYXJkCisJICBFeHBsb3JlLgogCiBjb25maWcgUkVBTFZJRVdfSElHSF9QSFlTX09GRlNFVAogCWJvb2wgIkhpZ2ggcGh5c2ljYWwgYmFzZSBhZGRyZXNzIGZvciB0aGUgUmVhbFZpZXcgcGxhdGZvcm0iCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCmluZGV4IGEyMmJmNjcuLjY5NTlkMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCkBAIC00MSw3ICs0MSw3IEBACiAgKiBvYnNlcnZlcnMsIGlycmVzcGVjdGl2ZSBvZiB3aGV0aGVyIHRoZXkncmUgdGFraW5nIHBhcnQgaW4gY29oZXJlbmN5CiAgKiBvciBub3QuICBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGhvdHBsdWcgY29kZSB0byB3b3JrIHJlbGlhYmx5LgogICovCi1zdGF0aWMgdm9pZCB3cml0ZV9wZW5fcmVsZWFzZShpbnQgdmFsKQorc3RhdGljIHZvaWQgX19jcHVpbml0IHdyaXRlX3Blbl9yZWxlYXNlKGludCB2YWwpCiB7CiAJcGVuX3JlbGVhc2UgPSB2YWw7CiAJc21wX3dtYigpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvbWFwLmgKaW5kZXggMjAzZGQ1YS4uMDU4ZGFiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC0xLDYgKzEsNiBAQAogLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9tYXAuaAogICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KICAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLwogICoKICAqIFM1UDY0NDIgLSBNZW1vcnkgbWFwIGRlZmluaXRpb25zCkBAIC0xNiw1NiArMTYsNjEgQEAKICNpbmNsdWRlIDxwbGF0L21hcC1iYXNlLmg+CiAjaW5jbHVkZSA8cGxhdC9tYXAtczVwLmg+CiAKLSNkZWZpbmUgUzVQNjQ0Ml9QQV9DSElQSUQJKDB4RTAwMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9DSElQSUQJCVM1UDY0NDJfUEFfQ0hJUElECisjZGVmaW5lIFM1UDY0NDJfUEFfU0RSQU0JMHgyMDAwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfU1lTQ09OCSgweEUwMTAwMDAwKQotI2RlZmluZSBTNVBfUEFfU1lTQ09OCQlTNVA2NDQyX1BBX1NZU0NPTgorI2RlZmluZSBTNVA2NDQyX1BBX0kyUzAJCTB4QzBCMDAwMDAKKyNkZWZpbmUgUzVQNjQ0Ml9QQV9JMlMxCQkweEYyMjAwMDAwCiAKLSNkZWZpbmUgUzVQNjQ0Ml9QQV9HUElPCQkoMHhFMDIwMDAwMCkKKyNkZWZpbmUgUzVQNjQ0Ml9QQV9DSElQSUQJMHhFMDAwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfVklDMAkJKDB4RTQwMDAwMDApCi0jZGVmaW5lIFM1UDY0NDJfUEFfVklDMQkJKDB4RTQxMDAwMDApCi0jZGVmaW5lIFM1UDY0NDJfUEFfVklDMgkJKDB4RTQyMDAwMDApCisjZGVmaW5lIFM1UDY0NDJfUEFfU1lTQ09OCTB4RTAxMDAwMDAKIAotI2RlZmluZSBTNVA2NDQyX1BBX1NST01DCSgweEU3MDAwMDAwKQotI2RlZmluZSBTNVBfUEFfU1JPTUMJCVM1UDY0NDJfUEFfU1JPTUMKKyNkZWZpbmUgUzVQNjQ0Ml9QQV9HUElPCQkweEUwMjAwMDAwCisKKyNkZWZpbmUgUzVQNjQ0Ml9QQV9WSUMwCQkweEU0MDAwMDAwCisjZGVmaW5lIFM1UDY0NDJfUEFfVklDMQkJMHhFNDEwMDAwMAorI2RlZmluZSBTNVA2NDQyX1BBX1ZJQzIJCTB4RTQyMDAwMDAKKworI2RlZmluZSBTNVA2NDQyX1BBX1NST01DCTB4RTcwMDAwMDAKIAogI2RlZmluZSBTNVA2NDQyX1BBX01ETUEJCTB4RTgwMDAwMDAKICNkZWZpbmUgUzVQNjQ0Ml9QQV9QRE1BCQkweEU5MDAwMDAwCiAKLSNkZWZpbmUgUzVQNjQ0Ml9QQV9USU1FUgkoMHhFQTAwMDAwMCkKLSNkZWZpbmUgUzVQX1BBX1RJTUVSCQlTNVA2NDQyX1BBX1RJTUVSCisjZGVmaW5lIFM1UDY0NDJfUEFfVElNRVIJMHhFQTAwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfU1lTVElNRVIgICAJKDB4RUExMDAwMDApCisjZGVmaW5lIFM1UDY0NDJfUEFfU1lTVElNRVIJMHhFQTEwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfV0FUQ0hET0cJKDB4RUEyMDAwMDApCisjZGVmaW5lIFM1UDY0NDJfUEFfV0FUQ0hET0cJMHhFQTIwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfVUFSVAkJKDB4RUMwMDAwMDApCisjZGVmaW5lIFM1UDY0NDJfUEFfVUFSVAkJMHhFQzAwMDAwMAogCi0jZGVmaW5lIFM1UF9QQV9VQVJUMAkJKFM1UDY0NDJfUEFfVUFSVCArIDB4MCkKLSNkZWZpbmUgUzVQX1BBX1VBUlQxCQkoUzVQNjQ0Ml9QQV9VQVJUICsgMHg0MDApCi0jZGVmaW5lIFM1UF9QQV9VQVJUMgkJKFM1UDY0NDJfUEFfVUFSVCArIDB4ODAwKQotI2RlZmluZSBTNVBfU1pfVUFSVAkJU1pfMjU2Ci0KLSNkZWZpbmUgUzVQNjQ0Ml9QQV9JSUMwCQkoMHhFQzEwMDAwMCkKLQotI2RlZmluZSBTNVA2NDQyX1BBX1NEUkFNCSgweDIwMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfU0RSQU0JCVM1UDY0NDJfUEFfU0RSQU0KKyNkZWZpbmUgUzVQNjQ0Ml9QQV9JSUMwCQkweEVDMTAwMDAwCiAKICNkZWZpbmUgUzVQNjQ0Ml9QQV9TUEkJCTB4RUMzMDAwMDAKIAotLyogSTJTICovCi0jZGVmaW5lIFM1UDY0NDJfUEFfSTJTMAkJMHhDMEIwMDAwMAotI2RlZmluZSBTNVA2NDQyX1BBX0kyUzEJCTB4RjIyMDAwMDAKLQotLyogUENNICovCiAjZGVmaW5lIFM1UDY0NDJfUEFfUENNMAkJMHhGMjQwMDAwMAogI2RlZmluZSBTNVA2NDQyX1BBX1BDTTEJCTB4RjI1MDAwMDAKIAotLyogY29tcGF0aWJpbHRpeSBkZWZpbmVzLiAqLwotI2RlZmluZSBTM0NfUEFfV0RUCQlTNVA2NDQyX1BBX1dBVENIRE9HCi0jZGVmaW5lIFMzQ19QQV9VQVJUCQlTNVA2NDQyX1BBX1VBUlQKKy8qIENvbXBhdGliaWx0aXkgRGVmaW5lcyAqLworCiAjZGVmaW5lIFMzQ19QQV9JSUMJCVM1UDY0NDJfUEFfSUlDMAorI2RlZmluZSBTM0NfUEFfV0RUCQlTNVA2NDQyX1BBX1dBVENIRE9HCisKKyNkZWZpbmUgUzVQX1BBX0NISVBJRAkJUzVQNjQ0Ml9QQV9DSElQSUQKKyNkZWZpbmUgUzVQX1BBX1NEUkFNCQlTNVA2NDQyX1BBX1NEUkFNCisjZGVmaW5lIFM1UF9QQV9TUk9NQwkJUzVQNjQ0Ml9QQV9TUk9NQworI2RlZmluZSBTNVBfUEFfU1lTQ09OCQlTNVA2NDQyX1BBX1NZU0NPTgorI2RlZmluZSBTNVBfUEFfVElNRVIJCVM1UDY0NDJfUEFfVElNRVIKKworLyogVUFSVCAqLworCisjZGVmaW5lIFMzQ19QQV9VQVJUCQlTNVA2NDQyX1BBX1VBUlQKKworI2RlZmluZSBTNVBfUEFfVUFSVCh4KQkJKFMzQ19QQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCisjZGVmaW5lIFM1UF9QQV9VQVJUMAkJUzVQX1BBX1VBUlQoMCkKKyNkZWZpbmUgUzVQX1BBX1VBUlQxCQlTNVBfUEFfVUFSVCgxKQorI2RlZmluZSBTNVBfUEFfVUFSVDIJCVM1UF9QQV9VQVJUKDIpCisKKyNkZWZpbmUgUzVQX1NaX1VBUlQJCVNaXzI1NgogCiAjZW5kaWYgLyogX19BU01fQVJDSF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NHgwL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczVwNjR4MC9pbmNsdWRlL21hY2gvbWFwLmgKaW5kZXggYTkzNjVlNS4uOTVjOTEyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXA2NHgwL2luY2x1ZGUvbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC0xLDYgKzEsNiBAQAogLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXA2NHgwL2luY2x1ZGUvbWFjaC9tYXAuaAogICoKLSAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgogICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KICAqCiAgKiBTNVA2NFgwIC0gTWVtb3J5IG1hcCBkZWZpbml0aW9ucwpAQCAtMTYsMzAgKzE2LDYzIEBACiAjaW5jbHVkZSA8cGxhdC9tYXAtYmFzZS5oPgogI2luY2x1ZGUgPHBsYXQvbWFwLXM1cC5oPgogCi0jZGVmaW5lIFM1UDY0WDBfUEFfU0RSQU0JKDB4MjAwMDAwMDApCisjZGVmaW5lIFM1UDY0WDBfUEFfU0RSQU0JMHgyMDAwMDAwMAogCi0jZGVmaW5lIFM1UDY0WDBfUEFfQ0hJUElECSgweEUwMDAwMDAwKQorI2RlZmluZSBTNVA2NFgwX1BBX0NISVBJRAkweEUwMDAwMDAwCisKKyNkZWZpbmUgUzVQNjRYMF9QQV9TWVNDT04JMHhFMDEwMDAwMAorCisjZGVmaW5lIFM1UDY0WDBfUEFfR1BJTwkJMHhFMDMwODAwMAorCisjZGVmaW5lIFM1UDY0WDBfUEFfVklDMAkJMHhFNDAwMDAwMAorI2RlZmluZSBTNVA2NFgwX1BBX1ZJQzEJCTB4RTQxMDAwMDAKKworI2RlZmluZSBTNVA2NFgwX1BBX1NST01DCTB4RTcwMDAwMDAKKworI2RlZmluZSBTNVA2NFgwX1BBX1BETUEJCTB4RTkwMDAwMDAKKworI2RlZmluZSBTNVA2NFgwX1BBX1RJTUVSCTB4RUEwMDAwMDAKKyNkZWZpbmUgUzVQNjRYMF9QQV9SVEMJCTB4RUExMDAwMDAKKyNkZWZpbmUgUzVQNjRYMF9QQV9XRFQJCTB4RUEyMDAwMDAKKworI2RlZmluZSBTNVA2NDQwX1BBX0lJQzAJCTB4RUMxMDQwMDAKKyNkZWZpbmUgUzVQNjQ0MF9QQV9JSUMxCQkweEVDMjBGMDAwCisjZGVmaW5lIFM1UDY0NTBfUEFfSUlDMAkJMHhFQzEwMDAwMAorI2RlZmluZSBTNVA2NDUwX1BBX0lJQzEJCTB4RUMyMDAwMDAKKworI2RlZmluZSBTNVA2NFgwX1BBX1NQSTAJCTB4RUM0MDAwMDAKKyNkZWZpbmUgUzVQNjRYMF9QQV9TUEkxCQkweEVDNTAwMDAwCisKKyNkZWZpbmUgUzVQNjRYMF9QQV9IU09URwkweEVEMTAwMDAwCisKKyNkZWZpbmUgUzVQNjRYMF9QQV9IU01NQyh4KQkoMHhFRDgwMDAwMCArICgoeCkgKiAweDEwMDAwMCkpCisKKyNkZWZpbmUgUzVQNjRYMF9QQV9JMlMJCTB4RjIwMDAwMDAKKyNkZWZpbmUgUzVQNjQ1MF9QQV9JMlMxCQkweEYyODAwMDAwCisjZGVmaW5lIFM1UDY0NTBfUEFfSTJTMgkJMHhGMjkwMDAwMAorCisjZGVmaW5lIFM1UDY0WDBfUEFfUENNCQkweEYyMTAwMDAwCisKKyNkZWZpbmUgUzVQNjRYMF9QQV9BREMJCTB4RjMwMDAwMDAKKworLyogQ29tcGF0aWJpbHRpeSBEZWZpbmVzICovCisKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMAkJUzVQNjRYMF9QQV9IU01NQygwKQorI2RlZmluZSBTM0NfUEFfSFNNTUMxCQlTNVA2NFgwX1BBX0hTTU1DKDEpCisjZGVmaW5lIFMzQ19QQV9IU01NQzIJCVM1UDY0WDBfUEFfSFNNTUMoMikKKyNkZWZpbmUgUzNDX1BBX0lJQwkJUzVQNjQ0MF9QQV9JSUMwCisjZGVmaW5lIFMzQ19QQV9JSUMxCQlTNVA2NDQwX1BBX0lJQzEKKyNkZWZpbmUgUzNDX1BBX1JUQwkJUzVQNjRYMF9QQV9SVEMKKyNkZWZpbmUgUzNDX1BBX1dEVAkJUzVQNjRYMF9QQV9XRFQKKwogI2RlZmluZSBTNVBfUEFfQ0hJUElECQlTNVA2NFgwX1BBX0NISVBJRAotCi0jZGVmaW5lIFM1UDY0WDBfUEFfU1lTQ09OCSgweEUwMTAwMDAwKQotI2RlZmluZSBTNVBfUEFfU1lTQ09OCQlTNVA2NFgwX1BBX1NZU0NPTgotCi0jZGVmaW5lIFM1UDY0WDBfUEFfR1BJTwkJKDB4RTAzMDgwMDApCi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9WSUMwCQkoMHhFNDAwMDAwMCkKLSNkZWZpbmUgUzVQNjRYMF9QQV9WSUMxCQkoMHhFNDEwMDAwMCkKLQotI2RlZmluZSBTNVA2NFgwX1BBX1NST01DCSgweEU3MDAwMDAwKQogI2RlZmluZSBTNVBfUEFfU1JPTUMJCVM1UDY0WDBfUEFfU1JPTUMKLQotI2RlZmluZSBTNVA2NFgwX1BBX1BETUEJCSgweEU5MDAwMDAwKQotCi0jZGVmaW5lIFM1UDY0WDBfUEFfVElNRVIJKDB4RUEwMDAwMDApCisjZGVmaW5lIFM1UF9QQV9TWVNDT04JCVM1UDY0WDBfUEFfU1lTQ09OCiAjZGVmaW5lIFM1UF9QQV9USU1FUgkJUzVQNjRYMF9QQV9USU1FUgogCi0jZGVmaW5lIFM1UDY0WDBfUEFfUlRDCQkoMHhFQTEwMDAwMCkKKyNkZWZpbmUgU0FNU1VOR19QQV9BREMJCVM1UDY0WDBfUEFfQURDCiAKLSNkZWZpbmUgUzVQNjRYMF9QQV9XRFQJCSgweEVBMjAwMDAwKQorLyogVUFSVCAqLwogCiAjZGVmaW5lIFM1UDY0NDBfUEFfVUFSVCh4KQkoMHhFQzAwMDAwMCArICgoeCkgKiBTM0NfVUFSVF9PRkZTRVQpKQogI2RlZmluZSBTNVA2NDUwX1BBX1VBUlQoeCkJKCh4IDwgNSkgPyAoMHhFQzgwMDAwMCArICgoeCkgKiBTM0NfVUFSVF9PRkZTRVQpKSA6ICgweEVDMDAwMDAwKSkKQEAgLTUzLDM2ICs4Niw0IEBACiAKICNkZWZpbmUgUzVQX1NaX1VBUlQJCVNaXzI1NgogCi0jZGVmaW5lIFM1UDY0NDBfUEFfSUlDMAkJKDB4RUMxMDQwMDApCi0jZGVmaW5lIFM1UDY0NDBfUEFfSUlDMQkJKDB4RUMyMEYwMDApCi0jZGVmaW5lIFM1UDY0NTBfUEFfSUlDMAkJKDB4RUMxMDAwMDApCi0jZGVmaW5lIFM1UDY0NTBfUEFfSUlDMQkJKDB4RUMyMDAwMDApCi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9TUEkwCQkoMHhFQzQwMDAwMCkKLSNkZWZpbmUgUzVQNjRYMF9QQV9TUEkxCQkoMHhFQzUwMDAwMCkKLQotI2RlZmluZSBTNVA2NFgwX1BBX0hTT1RHCSgweEVEMTAwMDAwKQotCi0jZGVmaW5lIFM1UDY0WDBfUEFfSFNNTUMoeCkJKDB4RUQ4MDAwMDAgKyAoKHgpICogMHgxMDAwMDApKQotCi0jZGVmaW5lIFM1UDY0WDBfUEFfSTJTCQkoMHhGMjAwMDAwMCkKLSNkZWZpbmUgUzVQNjQ1MF9QQV9JMlMxCQkweEYyODAwMDAwCi0jZGVmaW5lIFM1UDY0NTBfUEFfSTJTMgkJMHhGMjkwMDAwMAotCi0jZGVmaW5lIFM1UDY0WDBfUEFfUENNCQkoMHhGMjEwMDAwMCkKLQotI2RlZmluZSBTNVA2NFgwX1BBX0FEQwkJKDB4RjMwMDAwMDApCi0KLS8qIGNvbXBhdGliaWx0aXkgZGVmaW5lcy4gKi8KLQotI2RlZmluZSBTM0NfUEFfSFNNTUMwCQlTNVA2NFgwX1BBX0hTTU1DKDApCi0jZGVmaW5lIFMzQ19QQV9IU01NQzEJCVM1UDY0WDBfUEFfSFNNTUMoMSkKLSNkZWZpbmUgUzNDX1BBX0hTTU1DMgkJUzVQNjRYMF9QQV9IU01NQygyKQotI2RlZmluZSBTM0NfUEFfSUlDCQlTNVA2NDQwX1BBX0lJQzAKLSNkZWZpbmUgUzNDX1BBX0lJQzEJCVM1UDY0NDBfUEFfSUlDMQotI2RlZmluZSBTM0NfUEFfUlRDCQlTNVA2NFgwX1BBX1JUQwotI2RlZmluZSBTM0NfUEFfV0RUCQlTNVA2NFgwX1BBX1dEVAotCi0jZGVmaW5lIFNBTVNVTkdfUEFfQURDCQlTNVA2NFgwX1BBX0FEQwotCiAjZW5kaWYgLyogX19BU01fQVJDSF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvbWFwLmgKaW5kZXggMzI4NDY3Yi4uY2NiZTZiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC0xLDUgKzEsOCBAQAogLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9tYXAuaAogICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgogICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KICAqCUJ5dW5naG8gTWluIDxiaG1pbkBzYW1zdW5nLmNvbT4KICAqCkBAIC0xNiwxNDUgKzE5LDExNSBAQAogI2luY2x1ZGUgPHBsYXQvbWFwLWJhc2UuaD4KICNpbmNsdWRlIDxwbGF0L21hcC1zNXAuaD4KIAotLyoKLSAqIG1hcC1iYXNlLmggaGFzIGFscmVhZHkgZGVmaW5lZCB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzCi0gKiBTM0NfVkFfSVJRCQlTM0NfQUREUigweDAwMDAwMDAwKQlpcnEgY29udHJvbGxlcihzKQotICogUzNDX1ZBX1NZUwkJUzNDX0FERFIoMHgwMDEwMDAwMCkJc3lzdGVtIGNvbnRyb2wKLSAqIFMzQ19WQV9NRU0JCVMzQ19BRERSKDB4MDAyMDAwMDApCXN5c3RlbSBjb250cm9sIChub3QgdXNlZCkKLSAqIFMzQ19WQV9USU1FUgkJUzNDX0FERFIoMHgwMDMwMDAwMCkJdGltZXIgYmxvY2sKLSAqIFMzQ19WQV9XQVRDSERPRwlTM0NfQUREUigweDAwNDAwMDAwKQl3YXRjaGRvZwotICogUzNDX1ZBX1VBUlQJCVMzQ19BRERSKDB4MDEwMDAwMDApCVVBUlQKLSAqCi0gKiBTNVBDMTAwIHNwZWNpZmljIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MgY2FuIGJlIGRlZmluZWQgaGVyZQotICogUzVQQzFYWF9WQV9HUElPCVMzQ19BRERSKDB4MDA1MDAwMDApCUdQSU8KLSAqCi0gKi8KKyNkZWZpbmUgUzVQQzEwMF9QQV9TRFJBTQkJMHgyMDAwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfT05FTkFORF9CVUYJKDB4QjAwMDAwMDApCi0jZGVmaW5lIFM1UEMxMDBfU1pfT05FTkFORF9CVUYJKFNaXzI1Nk0gLSBTWl8zMk0pCisjZGVmaW5lIFM1UEMxMDBfUEFfT05FTkFORAkJMHhFNzEwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX09ORU5BTkRfQlVGCQkweEIwMDAwMDAwCiAKLS8qIENoaXAgSUQgKi8KKyNkZWZpbmUgUzVQQzEwMF9QQV9DSElQSUQJCTB4RTAwMDAwMDAKIAotI2RlZmluZSBTNVBDMTAwX1BBX0NISVBJRAkoMHhFMDAwMDAwMCkKLSNkZWZpbmUgUzVQX1BBX0NISVBJRAkJUzVQQzEwMF9QQV9DSElQSUQKKyNkZWZpbmUgUzVQQzEwMF9QQV9TWVNDT04JCTB4RTAxMDAwMDAKIAotI2RlZmluZSBTNVBDMTAwX1BBX1NZU0NPTgkoMHhFMDEwMDAwMCkKLSNkZWZpbmUgUzVQX1BBX1NZU0NPTgkJUzVQQzEwMF9QQV9TWVNDT04KKyNkZWZpbmUgUzVQQzEwMF9QQV9PVEhFUlMJCTB4RTAyMDAwMDAKIAotI2RlZmluZSBTNVBDMTAwX1BBX09USEVSUwkoMHhFMDIwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9WQV9PVEhFUlMJKFMzQ19WQV9TWVMgKyAweDEwMDAwKQorI2RlZmluZSBTNVBDMTAwX1BBX0dQSU8JCQkweEUwMzAwMDAwCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9HUElPCQkoMHhFMDMwMDAwMCkKLSNkZWZpbmUgUzVQQzFYWF9WQV9HUElPCQlTM0NfQUREUigweDAwNTAwMDAwKQorI2RlZmluZSBTNVBDMTAwX1BBX1ZJQzAJCQkweEU0MDAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfVklDMQkJCTB4RTQxMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9WSUMyCQkJMHhFNDIwMDAwMAogCi0vKiBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgUzVQQzEwMF9QQV9WSUMwCQkoMHhFNDAwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9QQV9WSUMxCQkoMHhFNDEwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9QQV9WSUMyCQkoMHhFNDIwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9WQV9WSUMJCVMzQ19WQV9JUlEKLSNkZWZpbmUgUzVQQzEwMF9WQV9WSUNfT0ZGU0VUCTB4MTAwMDAKLSNkZWZpbmUgUzVQQzFYWF9WQV9WSUMoeCkJKFM1UEMxMDBfVkFfVklDICsgKCh4KSAqIFM1UEMxMDBfVkFfVklDX09GRlNFVCkpCisjZGVmaW5lIFM1UEMxMDBfUEFfU1JPTUMJCTB4RTcwMDAwMDAKIAotI2RlZmluZSBTNVBDMTAwX1BBX1NST01DCSgweEU3MDAwMDAwKQotI2RlZmluZSBTNVBfUEFfU1JPTUMJCVM1UEMxMDBfUEFfU1JPTUMKKyNkZWZpbmUgUzVQQzEwMF9QQV9DRkNPTgkJMHhFNzgwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfT05FTkFORAkoMHhFNzEwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9NRE1BCQkJMHhFODEwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX1BETUEwCQkweEU5MDAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfUERNQTEJCTB4RTkyMDAwMDAKIAotI2RlZmluZSBTNVBDMTAwX1BBX0NGQ09OCSgweEU3ODAwMDAwKQorI2RlZmluZSBTNVBDMTAwX1BBX1RJTUVSCQkweEVBMDAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfU1lTVElNRVIJCTB4RUExMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9XQVRDSERPRwkJMHhFQTIwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX1JUQwkJCTB4RUEzMDAwMDAKIAotLyogRE1BICovCi0jZGVmaW5lIFM1UEMxMDBfUEFfTURNQQkJKDB4RTgxMDAwMDApCi0jZGVmaW5lIFM1UEMxMDBfUEFfUERNQTAJKDB4RTkwMDAwMDApCi0jZGVmaW5lIFM1UEMxMDBfUEFfUERNQTEJKDB4RTkyMDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfVUFSVAkJCTB4RUMwMDAwMDAKIAotLyogVGltZXIgKi8KLSNkZWZpbmUgUzVQQzEwMF9QQV9USU1FUgkoMHhFQTAwMDAwMCkKLSNkZWZpbmUgUzVQX1BBX1RJTUVSCQlTNVBDMTAwX1BBX1RJTUVSCisjZGVmaW5lIFM1UEMxMDBfUEFfSUlDMAkJCTB4RUMxMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9JSUMxCQkJMHhFQzIwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfU1lTVElNRVIJKDB4RUExMDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfU1BJMAkJCTB4RUMzMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9TUEkxCQkJMHhFQzQwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX1NQSTIJCQkweEVDNTAwMDAwCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9XQVRDSERPRwkoMHhFQTIwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9QQV9SVEMJCSgweEVBMzAwMDAwKQorI2RlZmluZSBTNVBDMTAwX1BBX1VTQl9IU09URwkJMHhFRDIwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX1VTQl9IU1BIWQkJMHhFRDMwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfVUFSVAkJKDB4RUMwMDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfSFNNTUMoeCkJCSgweEVEODAwMDAwICsgKCh4KSAqIDB4MTAwMDAwKSkKIAotI2RlZmluZSBTNVBfUEFfVUFSVDAJCShTNVBDMTAwX1BBX1VBUlQgKyAweDApCi0jZGVmaW5lIFM1UF9QQV9VQVJUMQkJKFM1UEMxMDBfUEFfVUFSVCArIDB4NDAwKQotI2RlZmluZSBTNVBfUEFfVUFSVDIJCShTNVBDMTAwX1BBX1VBUlQgKyAweDgwMCkKLSNkZWZpbmUgUzVQX1BBX1VBUlQzCQkoUzVQQzEwMF9QQV9VQVJUICsgMHhDMDApCi0jZGVmaW5lIFM1UF9TWl9VQVJUCQlTWl8yNTYKKyNkZWZpbmUgUzVQQzEwMF9QQV9GQgkJCTB4RUUwMDAwMDAKIAotI2RlZmluZSBTNVBDMTAwX1BBX0lJQzAJCSgweEVDMTAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX0lJQzEJCSgweEVDMjAwMDAwKQorI2RlZmluZSBTNVBDMTAwX1BBX0ZJTUMwCQkweEVFMjAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfRklNQzEJCTB4RUUzMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9GSU1DMgkJMHhFRTQwMDAwMAogCi0vKiBTUEkgKi8KLSNkZWZpbmUgUzVQQzEwMF9QQV9TUEkwCQkweEVDMzAwMDAwCi0jZGVmaW5lIFM1UEMxMDBfUEFfU1BJMQkJMHhFQzQwMDAwMAotI2RlZmluZSBTNVBDMTAwX1BBX1NQSTIJCTB4RUM1MDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9JMlMwCQkJMHhGMjAwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX0kyUzEJCQkweEYyMTAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfSTJTMgkJCTB4RjIyMDAwMDAKIAotLyogVVNCIEhTIE9URyAqLwotI2RlZmluZSBTNVBDMTAwX1BBX1VTQl9IU09URwkoMHhFRDIwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9QQV9VU0JfSFNQSFkJKDB4RUQzMDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfQUM5NwkJCTB4RjIzMDAwMDAKIAotI2RlZmluZSBTNVBDMTAwX1BBX0ZCCQkoMHhFRTAwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9QQ00wCQkJMHhGMjQwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX1BDTTEJCQkweEYyNTAwMDAwCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9GSU1DMAkoMHhFRTIwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9QQV9GSU1DMQkoMHhFRTMwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9QQV9GSU1DMgkoMHhFRTQwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9TUERJRgkJMHhGMjYwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfSTJTMAkJKDB4RjIwMDAwMDApCi0jZGVmaW5lIFM1UEMxMDBfUEFfSTJTMQkJKDB4RjIxMDAwMDApCi0jZGVmaW5lIFM1UEMxMDBfUEFfSTJTMgkJKDB4RjIyMDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfVFNBREMJCTB4RjMwMDAwMDAKIAotI2RlZmluZSBTNVBDMTAwX1BBX0FDOTcJCTB4RjIzMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9LRVlQQUQJCTB4RjMxMDAwMDAKIAotLyogUENNICovCi0jZGVmaW5lIFM1UEMxMDBfUEFfUENNMAkJMHhGMjQwMDAwMAotI2RlZmluZSBTNVBDMTAwX1BBX1BDTTEJCTB4RjI1MDAwMDAKKy8qIENvbXBhdGliaWx0aXkgRGVmaW5lcyAqLwogCi0jZGVmaW5lIFM1UEMxMDBfUEFfU1BESUYJMHhGMjYwMDAwMAorI2RlZmluZSBTM0NfUEFfRkIJCQlTNVBDMTAwX1BBX0ZCCisjZGVmaW5lIFMzQ19QQV9IU01NQzAJCQlTNVBDMTAwX1BBX0hTTU1DKDApCisjZGVmaW5lIFMzQ19QQV9IU01NQzEJCQlTNVBDMTAwX1BBX0hTTU1DKDEpCisjZGVmaW5lIFMzQ19QQV9IU01NQzIJCQlTNVBDMTAwX1BBX0hTTU1DKDIpCisjZGVmaW5lIFMzQ19QQV9JSUMJCQlTNVBDMTAwX1BBX0lJQzAKKyNkZWZpbmUgUzNDX1BBX0lJQzEJCQlTNVBDMTAwX1BBX0lJQzEKKyNkZWZpbmUgUzNDX1BBX0tFWVBBRAkJCVM1UEMxMDBfUEFfS0VZUEFECisjZGVmaW5lIFMzQ19QQV9PTkVOQU5ECQkJUzVQQzEwMF9QQV9PTkVOQU5ECisjZGVmaW5lIFMzQ19QQV9PTkVOQU5EX0JVRgkJUzVQQzEwMF9QQV9PTkVOQU5EX0JVRgorI2RlZmluZSBTM0NfUEFfUlRDCQkJUzVQQzEwMF9QQV9SVEMKKyNkZWZpbmUgUzNDX1BBX1RTQURDCQkJUzVQQzEwMF9QQV9UU0FEQworI2RlZmluZSBTM0NfUEFfVVNCX0hTT1RHCQlTNVBDMTAwX1BBX1VTQl9IU09URworI2RlZmluZSBTM0NfUEFfVVNCX0hTUEhZCQlTNVBDMTAwX1BBX1VTQl9IU1BIWQorI2RlZmluZSBTM0NfUEFfV0RUCQkJUzVQQzEwMF9QQV9XQVRDSERPRwogCi0jZGVmaW5lIFM1UEMxMDBfUEFfVFNBREMJKDB4RjMwMDAwMDApCisjZGVmaW5lIFM1UF9QQV9DSElQSUQJCQlTNVBDMTAwX1BBX0NISVBJRAorI2RlZmluZSBTNVBfUEFfRklNQzAJCQlTNVBDMTAwX1BBX0ZJTUMwCisjZGVmaW5lIFM1UF9QQV9GSU1DMQkJCVM1UEMxMDBfUEFfRklNQzEKKyNkZWZpbmUgUzVQX1BBX0ZJTUMyCQkJUzVQQzEwMF9QQV9GSU1DMgorI2RlZmluZSBTNVBfUEFfU0RSQU0JCQlTNVBDMTAwX1BBX1NEUkFNCisjZGVmaW5lIFM1UF9QQV9TUk9NQwkJCVM1UEMxMDBfUEFfU1JPTUMKKyNkZWZpbmUgUzVQX1BBX1NZU0NPTgkJCVM1UEMxMDBfUEFfU1lTQ09OCisjZGVmaW5lIFM1UF9QQV9USU1FUgkJCVM1UEMxMDBfUEFfVElNRVIKIAotLyogS0VZUEFEICovCi0jZGVmaW5lIFM1UEMxMDBfUEFfS0VZUEFECSgweEYzMTAwMDAwKQorI2RlZmluZSBTQU1TVU5HX1BBX0FEQwkJCVM1UEMxMDBfUEFfVFNBREMKKyNkZWZpbmUgU0FNU1VOR19QQV9DRkNPTgkJUzVQQzEwMF9QQV9DRkNPTgorI2RlZmluZSBTQU1TVU5HX1BBX0tFWVBBRAkJUzVQQzEwMF9QQV9LRVlQQUQKIAotI2RlZmluZSBTNVBDMTAwX1BBX0hTTU1DKHgpCSgweEVEODAwMDAwICsgKCh4KSAqIDB4MTAwMDAwKSkKKyNkZWZpbmUgUzVQQzEwMF9WQV9PVEhFUlMJCShTM0NfVkFfU1lTICsgMHgxMDAwMCkKIAotI2RlZmluZSBTNVBDMTAwX1BBX1NEUkFNCSgweDIwMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfU0RSQU0JCVM1UEMxMDBfUEFfU0RSQU0KKyNkZWZpbmUgUzNDX1NaX09ORU5BTkRfQlVGCQkoU1pfMjU2TSAtIFNaXzMyTSkKIAotLyogY29tcGF0aWJpbHRpeSBkZWZpbmVzLiAqLwotI2RlZmluZSBTM0NfUEFfVUFSVAkJUzVQQzEwMF9QQV9VQVJUCi0jZGVmaW5lIFMzQ19QQV9JSUMJCVM1UEMxMDBfUEFfSUlDMAotI2RlZmluZSBTM0NfUEFfSUlDMQkJUzVQQzEwMF9QQV9JSUMxCi0jZGVmaW5lIFMzQ19QQV9GQgkJUzVQQzEwMF9QQV9GQgotI2RlZmluZSBTM0NfUEFfRzJECQlTNVBDMTAwX1BBX0cyRAotI2RlZmluZSBTM0NfUEFfRzNECQlTNVBDMTAwX1BBX0czRAotI2RlZmluZSBTM0NfUEFfSlBFRwkJUzVQQzEwMF9QQV9KUEVHCi0jZGVmaW5lIFMzQ19QQV9ST1RBVE9SCQlTNVBDMTAwX1BBX1JPVEFUT1IKLSNkZWZpbmUgUzVQX1ZBX1ZJQzAJCVM1UEMxWFhfVkFfVklDKDApCi0jZGVmaW5lIFM1UF9WQV9WSUMxCQlTNVBDMVhYX1ZBX1ZJQygxKQotI2RlZmluZSBTNVBfVkFfVklDMgkJUzVQQzFYWF9WQV9WSUMoMikKLSNkZWZpbmUgUzNDX1BBX1VTQl9IU09URwlTNVBDMTAwX1BBX1VTQl9IU09URwotI2RlZmluZSBTM0NfUEFfVVNCX0hTUEhZCVM1UEMxMDBfUEFfVVNCX0hTUEhZCi0jZGVmaW5lIFMzQ19QQV9IU01NQzAJCVM1UEMxMDBfUEFfSFNNTUMoMCkKLSNkZWZpbmUgUzNDX1BBX0hTTU1DMQkJUzVQQzEwMF9QQV9IU01NQygxKQotI2RlZmluZSBTM0NfUEFfSFNNTUMyCQlTNVBDMTAwX1BBX0hTTU1DKDIpCi0jZGVmaW5lIFMzQ19QQV9LRVlQQUQJCVM1UEMxMDBfUEFfS0VZUEFECi0jZGVmaW5lIFMzQ19QQV9XRFQJCVM1UEMxMDBfUEFfV0FUQ0hET0cKLSNkZWZpbmUgUzNDX1BBX1RTQURDCQlTNVBDMTAwX1BBX1RTQURDCi0jZGVmaW5lIFMzQ19QQV9PTkVOQU5ECQlTNVBDMTAwX1BBX09ORU5BTkQKLSNkZWZpbmUgUzNDX1BBX09ORU5BTkRfQlVGCVM1UEMxMDBfUEFfT05FTkFORF9CVUYKLSNkZWZpbmUgUzNDX1NaX09ORU5BTkRfQlVGCVM1UEMxMDBfU1pfT05FTkFORF9CVUYKLSNkZWZpbmUgUzNDX1BBX1JUQwkJUzVQQzEwMF9QQV9SVEMKKy8qIFVBUlQgKi8KIAotI2RlZmluZSBTQU1TVU5HX1BBX0FEQwkJUzVQQzEwMF9QQV9UU0FEQwotI2RlZmluZSBTQU1TVU5HX1BBX0NGQ09OCVM1UEMxMDBfUEFfQ0ZDT04KLSNkZWZpbmUgU0FNU1VOR19QQV9LRVlQQUQJUzVQQzEwMF9QQV9LRVlQQUQKKyNkZWZpbmUgUzNDX1BBX1VBUlQJCQlTNVBDMTAwX1BBX1VBUlQKIAotI2RlZmluZSBTNVBfUEFfRklNQzAJCVM1UEMxMDBfUEFfRklNQzAKLSNkZWZpbmUgUzVQX1BBX0ZJTUMxCQlTNVBDMTAwX1BBX0ZJTUMxCi0jZGVmaW5lIFM1UF9QQV9GSU1DMgkJUzVQQzEwMF9QQV9GSU1DMgorI2RlZmluZSBTNVBfUEFfVUFSVCh4KQkJCShTM0NfUEFfVUFSVCArICgoeCkgKiBTM0NfVUFSVF9PRkZTRVQpKQorI2RlZmluZSBTNVBfUEFfVUFSVDAJCQlTNVBfUEFfVUFSVCgwKQorI2RlZmluZSBTNVBfUEFfVUFSVDEJCQlTNVBfUEFfVUFSVCgxKQorI2RlZmluZSBTNVBfUEFfVUFSVDIJCQlTNVBfUEFfVUFSVCgyKQorI2RlZmluZSBTNVBfUEFfVUFSVDMJCQlTNVBfUEFfVUFSVCgzKQogCi0jZW5kaWYgLyogX19BU01fQVJDSF9DMTAwX01BUF9IICovCisjZGVmaW5lIFM1UF9TWl9VQVJUCQkJU1pfMjU2CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL21hcC5oIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9tYXAuaAppbmRleCAzNjExNDkyLi4xZGQ1ODgzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL21hcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvbWFwLmgKQEAgLTEsNiArMSw2IEBACiAvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL21hcC5oCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgogICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCiAgKgogICogUzVQVjIxMCAtIE1lbW9yeSBtYXAgZGVmaW5pdGlvbnMKQEAgLTE2LDEyMiArMTYsMTIwIEBACiAjaW5jbHVkZSA8cGxhdC9tYXAtYmFzZS5oPgogI2luY2x1ZGUgPHBsYXQvbWFwLXM1cC5oPgogCi0jZGVmaW5lIFM1UFYyMTBfUEFfU1JPTV9CQU5LNQkoMHhBODAwMDAwMCkKKyNkZWZpbmUgUzVQVjIxMF9QQV9TRFJBTQkJMHgyMDAwMDAwMAogCi0jZGVmaW5lIFM1UEMxMTBfUEFfT05FTkFORAkoMHhCMDAwMDAwMCkKLSNkZWZpbmUgUzVQX1BBX09ORU5BTkQJCVM1UEMxMTBfUEFfT05FTkFORAorI2RlZmluZSBTNVBWMjEwX1BBX1NST01fQkFOSzUJCTB4QTgwMDAwMDAKIAotI2RlZmluZSBTNVBDMTEwX1BBX09ORU5BTkRfRE1BCSgweEIwNjAwMDAwKQotI2RlZmluZSBTNVBfUEFfT05FTkFORF9ETUEJUzVQQzExMF9QQV9PTkVOQU5EX0RNQQorI2RlZmluZSBTNVBDMTEwX1BBX09ORU5BTkQJCTB4QjAwMDAwMDAKKyNkZWZpbmUgUzVQQzExMF9QQV9PTkVOQU5EX0RNQQkJMHhCMDYwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfQ0hJUElECSgweEUwMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfQ0hJUElECQlTNVBWMjEwX1BBX0NISVBJRAorI2RlZmluZSBTNVBWMjEwX1BBX0NISVBJRAkJMHhFMDAwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfU1lTQ09OCSgweEUwMTAwMDAwKQotI2RlZmluZSBTNVBfUEFfU1lTQ09OCQlTNVBWMjEwX1BBX1NZU0NPTgorI2RlZmluZSBTNVBWMjEwX1BBX1NZU0NPTgkJMHhFMDEwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfR1BJTwkJKDB4RTAyMDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfR1BJTwkJCTB4RTAyMDAwMDAKIAotLyogU1BJICovCi0jZGVmaW5lIFM1UFYyMTBfUEFfU1BJMAkJMHhFMTMwMDAwMAotI2RlZmluZSBTNVBWMjEwX1BBX1NQSTEJCTB4RTE0MDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9TUERJRgkJMHhFMTEwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfS0VZUEFECSgweEUxNjAwMDAwKQorI2RlZmluZSBTNVBWMjEwX1BBX1NQSTAJCQkweEUxMzAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfU1BJMQkJCTB4RTE0MDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX0lJQzAJCSgweEUxODAwMDAwKQotI2RlZmluZSBTNVBWMjEwX1BBX0lJQzEJCSgweEZBQjAwMDAwKQotI2RlZmluZSBTNVBWMjEwX1BBX0lJQzIJCSgweEUxQTAwMDAwKQorI2RlZmluZSBTNVBWMjEwX1BBX0tFWVBBRAkJMHhFMTYwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfVElNRVIJKDB4RTI1MDAwMDApCi0jZGVmaW5lIFM1UF9QQV9USU1FUgkJUzVQVjIxMF9QQV9USU1FUgorI2RlZmluZSBTNVBWMjEwX1BBX0FEQwkJCTB4RTE3MDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX1NZU1RJTUVSCSgweEUyNjAwMDAwKQorI2RlZmluZSBTNVBWMjEwX1BBX0lJQzAJCQkweEUxODAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfSUlDMQkJCTB4RkFCMDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9JSUMyCQkJMHhFMUEwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfV0FUQ0hET0cJKDB4RTI3MDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfQUM5NwkJCTB4RTIyMDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX1JUQwkJKDB4RTI4MDAwMDApCi0jZGVmaW5lIFM1UFYyMTBfUEFfVUFSVAkJKDB4RTI5MDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfUENNMAkJCTB4RTIzMDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9QQ00xCQkJMHhFMTIwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1BDTTIJCQkweEUyQjAwMDAwCiAKLSNkZWZpbmUgUzVQX1BBX1VBUlQwCQkoUzVQVjIxMF9QQV9VQVJUICsgMHgwKQotI2RlZmluZSBTNVBfUEFfVUFSVDEJCShTNVBWMjEwX1BBX1VBUlQgKyAweDQwMCkKLSNkZWZpbmUgUzVQX1BBX1VBUlQyCQkoUzVQVjIxMF9QQV9VQVJUICsgMHg4MDApCi0jZGVmaW5lIFM1UF9QQV9VQVJUMwkJKFM1UFYyMTBfUEFfVUFSVCArIDB4QzAwKQorI2RlZmluZSBTNVBWMjEwX1BBX1RJTUVSCQkweEUyNTAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfU1lTVElNRVIJCTB4RTI2MDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9XQVRDSERPRwkJMHhFMjcwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1JUQwkJCTB4RTI4MDAwMDAKIAotI2RlZmluZSBTNVBfU1pfVUFSVAkJU1pfMjU2CisjZGVmaW5lIFM1UFYyMTBfUEFfVUFSVAkJCTB4RTI5MDAwMDAKIAotI2RlZmluZSBTM0NfVkFfVUFSVHgoeCkJCShTM0NfVkFfVUFSVCArICgoeCkgKiBTM0NfVUFSVF9PRkZTRVQpKQorI2RlZmluZSBTNVBWMjEwX1BBX1NST01DCQkweEU4MDAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9TUk9NQwkoMHhFODAwMDAwMCkKLSNkZWZpbmUgUzVQX1BBX1NST01DCQlTNVBWMjEwX1BBX1NST01DCisjZGVmaW5lIFM1UFYyMTBfUEFfQ0ZDT04JCTB4RTgyMDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX0NGQ09OCSgweEU4MjAwMDAwKQorI2RlZmluZSBTNVBWMjEwX1BBX0hTTU1DKHgpCQkoMHhFQjAwMDAwMCArICgoeCkgKiAweDEwMDAwMCkpCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9NRE1BCQkweEZBMjAwMDAwCi0jZGVmaW5lIFM1UFYyMTBfUEFfUERNQTAJMHhFMDkwMDAwMAotI2RlZmluZSBTNVBWMjEwX1BBX1BETUExCTB4RTBBMDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9IU09URwkJMHhFQzAwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX0hTUEhZCQkweEVDMTAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9GQgkJKDB4RjgwMDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfSUlTMAkJCTB4RUVFMzAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9JSVMxCQkJMHhFMjEwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX0lJUzIJCQkweEUyQTAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9GSU1DMAkoMHhGQjIwMDAwMCkKLSNkZWZpbmUgUzVQVjIxMF9QQV9GSU1DMQkoMHhGQjMwMDAwMCkKLSNkZWZpbmUgUzVQVjIxMF9QQV9GSU1DMgkoMHhGQjQwMDAwMCkKKyNkZWZpbmUgUzVQVjIxMF9QQV9ETUMwCQkJMHhGMDAwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX0RNQzEJCQkweEYxNDAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9IU01NQyh4KQkoMHhFQjAwMDAwMCArICgoeCkgKiAweDEwMDAwMCkpCisjZGVmaW5lIFM1UFYyMTBfUEFfVklDMAkJCTB4RjIwMDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9WSUMxCQkJMHhGMjEwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1ZJQzIJCQkweEYyMjAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfVklDMwkJCTB4RjIzMDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX0hTT1RHCSgweEVDMDAwMDAwKQotI2RlZmluZSBTNVBWMjEwX1BBX0hTUEhZCSgweEVDMTAwMDAwKQorI2RlZmluZSBTNVBWMjEwX1BBX0ZCCQkJMHhGODAwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfVklDMAkJKDB4RjIwMDAwMDApCi0jZGVmaW5lIFM1UFYyMTBfUEFfVklDMQkJKDB4RjIxMDAwMDApCi0jZGVmaW5lIFM1UFYyMTBfUEFfVklDMgkJKDB4RjIyMDAwMDApCi0jZGVmaW5lIFM1UFYyMTBfUEFfVklDMwkJKDB4RjIzMDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfTURNQQkJCTB4RkEyMDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9QRE1BMAkJMHhFMDkwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1BETUExCQkweEUwQTAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9TRFJBTQkoMHgyMDAwMDAwMCkKLSNkZWZpbmUgUzVQX1BBX1NEUkFNCQlTNVBWMjEwX1BBX1NEUkFNCisjZGVmaW5lIFM1UFYyMTBfUEFfTUlQSV9DU0lTCQkweEZBNjAwMDAwCiAKLS8qIFMvUERJRiAqLwotI2RlZmluZSBTNVBWMjEwX1BBX1NQRElGCTB4RTExMDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9GSU1DMAkJMHhGQjIwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX0ZJTUMxCQkweEZCMzAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfRklNQzIJCTB4RkI0MDAwMDAKIAotLyogSTJTICovCi0jZGVmaW5lIFM1UFYyMTBfUEFfSUlTMAkJMHhFRUUzMDAwMAotI2RlZmluZSBTNVBWMjEwX1BBX0lJUzEJCTB4RTIxMDAwMDAKLSNkZWZpbmUgUzVQVjIxMF9QQV9JSVMyCQkweEUyQTAwMDAwCisvKiBDb21wYXRpYmlsdGl5IERlZmluZXMgKi8KIAotLyogUENNICovCi0jZGVmaW5lIFM1UFYyMTBfUEFfUENNMAkJMHhFMjMwMDAwMAotI2RlZmluZSBTNVBWMjEwX1BBX1BDTTEJCTB4RTEyMDAwMDAKLSNkZWZpbmUgUzVQVjIxMF9QQV9QQ00yCQkweEUyQjAwMDAwCisjZGVmaW5lIFMzQ19QQV9GQgkJCVM1UFYyMTBfUEFfRkIKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMAkJCVM1UFYyMTBfUEFfSFNNTUMoMCkKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMQkJCVM1UFYyMTBfUEFfSFNNTUMoMSkKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMgkJCVM1UFYyMTBfUEFfSFNNTUMoMikKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMwkJCVM1UFYyMTBfUEFfSFNNTUMoMykKKyNkZWZpbmUgUzNDX1BBX0lJQwkJCVM1UFYyMTBfUEFfSUlDMAorI2RlZmluZSBTM0NfUEFfSUlDMQkJCVM1UFYyMTBfUEFfSUlDMQorI2RlZmluZSBTM0NfUEFfSUlDMgkJCVM1UFYyMTBfUEFfSUlDMgorI2RlZmluZSBTM0NfUEFfUlRDCQkJUzVQVjIxMF9QQV9SVEMKKyNkZWZpbmUgUzNDX1BBX1VTQl9IU09URwkJUzVQVjIxMF9QQV9IU09URworI2RlZmluZSBTM0NfUEFfV0RUCQkJUzVQVjIxMF9QQV9XQVRDSERPRwogCi0vKiBBQzk3ICovCi0jZGVmaW5lIFM1UFYyMTBfUEFfQUM5NwkJMHhFMjIwMDAwMAorI2RlZmluZSBTNVBfUEFfQ0hJUElECQkJUzVQVjIxMF9QQV9DSElQSUQKKyNkZWZpbmUgUzVQX1BBX0ZJTUMwCQkJUzVQVjIxMF9QQV9GSU1DMAorI2RlZmluZSBTNVBfUEFfRklNQzEJCQlTNVBWMjEwX1BBX0ZJTUMxCisjZGVmaW5lIFM1UF9QQV9GSU1DMgkJCVM1UFYyMTBfUEFfRklNQzIKKyNkZWZpbmUgUzVQX1BBX01JUElfQ1NJUzAJCVM1UFYyMTBfUEFfTUlQSV9DU0lTCisjZGVmaW5lIFM1UF9QQV9PTkVOQU5ECQkJUzVQQzExMF9QQV9PTkVOQU5ECisjZGVmaW5lIFM1UF9QQV9PTkVOQU5EX0RNQQkJUzVQQzExMF9QQV9PTkVOQU5EX0RNQQorI2RlZmluZSBTNVBfUEFfU0RSQU0JCQlTNVBWMjEwX1BBX1NEUkFNCisjZGVmaW5lIFM1UF9QQV9TUk9NQwkJCVM1UFYyMTBfUEFfU1JPTUMKKyNkZWZpbmUgUzVQX1BBX1NZU0NPTgkJCVM1UFYyMTBfUEFfU1lTQ09OCisjZGVmaW5lIFM1UF9QQV9USU1FUgkJCVM1UFYyMTBfUEFfVElNRVIKIAotI2RlZmluZSBTNVBWMjEwX1BBX0FEQwkJKDB4RTE3MDAwMDApCisjZGVmaW5lIFNBTVNVTkdfUEFfQURDCQkJUzVQVjIxMF9QQV9BREMKKyNkZWZpbmUgU0FNU1VOR19QQV9DRkNPTgkJUzVQVjIxMF9QQV9DRkNPTgorI2RlZmluZSBTQU1TVU5HX1BBX0tFWVBBRAkJUzVQVjIxMF9QQV9LRVlQQUQKIAotI2RlZmluZSBTNVBWMjEwX1BBX0RNQzAJCSgweEYwMDAwMDAwKQotI2RlZmluZSBTNVBWMjEwX1BBX0RNQzEJCSgweEYxNDAwMDAwKQorLyogVUFSVCAqLwogCi0jZGVmaW5lIFM1UFYyMTBfUEFfTUlQSV9DU0lTCTB4RkE2MDAwMDAKKyNkZWZpbmUgUzNDX1ZBX1VBUlR4KHgpCQkJKFMzQ19WQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCiAKLS8qIGNvbXBhdGliaWx0aXkgZGVmaW5lcy4gKi8KLSNkZWZpbmUgUzNDX1BBX1VBUlQJCVM1UFYyMTBfUEFfVUFSVAotI2RlZmluZSBTM0NfUEFfSFNNTUMwCQlTNVBWMjEwX1BBX0hTTU1DKDApCi0jZGVmaW5lIFMzQ19QQV9IU01NQzEJCVM1UFYyMTBfUEFfSFNNTUMoMSkKLSNkZWZpbmUgUzNDX1BBX0hTTU1DMgkJUzVQVjIxMF9QQV9IU01NQygyKQotI2RlZmluZSBTM0NfUEFfSFNNTUMzCQlTNVBWMjEwX1BBX0hTTU1DKDMpCi0jZGVmaW5lIFMzQ19QQV9JSUMJCVM1UFYyMTBfUEFfSUlDMAotI2RlZmluZSBTM0NfUEFfSUlDMQkJUzVQVjIxMF9QQV9JSUMxCi0jZGVmaW5lIFMzQ19QQV9JSUMyCQlTNVBWMjEwX1BBX0lJQzIKLSNkZWZpbmUgUzNDX1BBX0ZCCQlTNVBWMjEwX1BBX0ZCCi0jZGVmaW5lIFMzQ19QQV9SVEMJCVM1UFYyMTBfUEFfUlRDCi0jZGVmaW5lIFMzQ19QQV9XRFQJCVM1UFYyMTBfUEFfV0FUQ0hET0cKLSNkZWZpbmUgUzNDX1BBX1VTQl9IU09URwlTNVBWMjEwX1BBX0hTT1RHCi0jZGVmaW5lIFM1UF9QQV9GSU1DMAkJUzVQVjIxMF9QQV9GSU1DMAotI2RlZmluZSBTNVBfUEFfRklNQzEJCVM1UFYyMTBfUEFfRklNQzEKLSNkZWZpbmUgUzVQX1BBX0ZJTUMyCQlTNVBWMjEwX1BBX0ZJTUMyCi0jZGVmaW5lIFM1UF9QQV9NSVBJX0NTSVMwCVM1UFYyMTBfUEFfTUlQSV9DU0lTCisjZGVmaW5lIFMzQ19QQV9VQVJUCQkJUzVQVjIxMF9QQV9VQVJUCiAKLSNkZWZpbmUgU0FNU1VOR19QQV9BREMJCVM1UFYyMTBfUEFfQURDCi0jZGVmaW5lIFNBTVNVTkdfUEFfQ0ZDT04JUzVQVjIxMF9QQV9DRkNPTgotI2RlZmluZSBTQU1TVU5HX1BBX0tFWVBBRAlTNVBWMjEwX1BBX0tFWVBBRAorI2RlZmluZSBTNVBfUEFfVUFSVCh4KQkJCShTM0NfUEFfVUFSVCArICgoeCkgKiBTM0NfVUFSVF9PRkZTRVQpKQorI2RlZmluZSBTNVBfUEFfVUFSVDAJCQlTNVBfUEFfVUFSVCgwKQorI2RlZmluZSBTNVBfUEFfVUFSVDEJCQlTNVBfUEFfVUFSVCgxKQorI2RlZmluZSBTNVBfUEFfVUFSVDIJCQlTNVBfUEFfVUFSVCgyKQorI2RlZmluZSBTNVBfUEFfVUFSVDMJCQlTNVBfUEFfVUFSVCgzKQorCisjZGVmaW5lIFM1UF9TWl9VQVJUCQkJU1pfMjU2CiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1hcXVpbGEuYyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWFxdWlsYS5jCmluZGV4IDQ2MWFhMDM1Li41NTdhZGQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1hcXVpbGEuYworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1hcXVpbGEuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBhcXVpbGFfbGRvM19kYXRhID0gewogCS5jb25zdHJhaW50cwk9IHsKLQkJLm5hbWUJCT0gIlZVU0IvTUlQSV8xLjFWIiwKKwkJLm5hbWUJCT0gIlZVU0IrTUlQSV8xLjFWIiwKIAkJLm1pbl91VgkJPSAxMTAwMDAwLAogCQkubWF4X3VWCQk9IDExMDAwMDAsCiAJCS5hcHBseV91Vgk9IDEsCkBAIC0xOTcsNyArMTk3LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGFxdWlsYV9sZG84X2RhdGEgPSB7CiAJLmNvbnN0cmFpbnRzCT0gewotCQkubmFtZQkJPSAiVlVTQi9WQURDXzMuM1YiLAorCQkubmFtZQkJPSAiVlVTQitWQURDXzMuM1YiLAogCQkubWluX3VWCQk9IDMzMDAwMDAsCiAJCS5tYXhfdVYJCT0gMzMwMDAwMCwKIAkJLmFwcGx5X3VWCT0gMSwKQEAgLTIwNyw3ICsyMDcsNyBAQAogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYXF1aWxhX2xkbzlfZGF0YSA9IHsKIAkuY29uc3RyYWludHMJPSB7Ci0JCS5uYW1lCQk9ICJWQ0MvVkNBTV8yLjhWIiwKKwkJLm5hbWUJCT0gIlZDQytWQ0FNXzIuOFYiLAogCQkubWluX3VWCQk9IDI4MDAwMDAsCiAJCS5tYXhfdVYJCT0gMjgwMDAwMCwKIAkJLmFwcGx5X3VWCT0gMSwKQEAgLTM4MSw5ICszODEsMTIgQEAKIAkuYnVjazFfc2V0MQk9IFM1UFYyMTBfR1BIMCgzKSwKIAkuYnVjazFfc2V0Mgk9IFM1UFYyMTBfR1BIMCg0KSwKIAkuYnVjazJfc2V0Mwk9IFM1UFYyMTBfR1BIMCg1KSwKLQkuYnVjazFfbWF4X3ZvbHRhZ2UxID0gMTIwMDAwMCwKLQkuYnVjazFfbWF4X3ZvbHRhZ2UyID0gMTIwMDAwMCwKLQkuYnVjazJfbWF4X3ZvbHRhZ2UgPSAxMjAwMDAwLAorCS5idWNrMV92b2x0YWdlMQk9IDEyMDAwMDAsCisJLmJ1Y2sxX3ZvbHRhZ2UyCT0gMTIwMDAwMCwKKwkuYnVjazFfdm9sdGFnZTMJPSAxMjAwMDAwLAorCS5idWNrMV92b2x0YWdlNAk9IDEyMDAwMDAsCisJLmJ1Y2syX3ZvbHRhZ2UxCT0gMTIwMDAwMCwKKwkuYnVjazJfdm9sdGFnZTIJPSAxMjAwMDAwLAogfTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1nb25pLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1nb25pLmMKaW5kZXggZTIyZDUxMS4uMDU2ZjVjNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtZ29uaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWdvbmkuYwpAQCAtMjg4LDcgKzI4OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBnb25pX2xkbzNfZGF0YSA9IHsKIAkuY29uc3RyYWludHMJPSB7Ci0JCS5uYW1lCQk9ICJWVVNCL01JUElfMS4xViIsCisJCS5uYW1lCQk9ICJWVVNCK01JUElfMS4xViIsCiAJCS5taW5fdVYJCT0gMTEwMDAwMCwKIAkJLm1heF91VgkJPSAxMTAwMDAwLAogCQkuYXBwbHlfdVYJPSAxLApAQCAtMzM3LDcgKzMzNyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBnb25pX2xkbzhfZGF0YSA9IHsKIAkuY29uc3RyYWludHMJPSB7Ci0JCS5uYW1lCQk9ICJWVVNCL1ZBRENfMy4zViIsCisJCS5uYW1lCQk9ICJWVVNCK1ZBRENfMy4zViIsCiAJCS5taW5fdVYJCT0gMzMwMDAwMCwKIAkJLm1heF91VgkJPSAzMzAwMDAwLAogCQkuYXBwbHlfdVYJPSAxLApAQCAtMzQ3LDcgKzM0Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBnb25pX2xkbzlfZGF0YSA9IHsKIAkuY29uc3RyYWludHMJPSB7Ci0JCS5uYW1lCQk9ICJWQ0MvVkNBTV8yLjhWIiwKKwkJLm5hbWUJCT0gIlZDQytWQ0FNXzIuOFYiLAogCQkubWluX3VWCQk9IDI4MDAwMDAsCiAJCS5tYXhfdVYJCT0gMjgwMDAwMCwKIAkJLmFwcGx5X3VWCT0gMSwKQEAgLTUyMSw5ICs1MjEsMTIgQEAKIAkuYnVjazFfc2V0MQk9IFM1UFYyMTBfR1BIMCgzKSwKIAkuYnVjazFfc2V0Mgk9IFM1UFYyMTBfR1BIMCg0KSwKIAkuYnVjazJfc2V0Mwk9IFM1UFYyMTBfR1BIMCg1KSwKLQkuYnVjazFfbWF4X3ZvbHRhZ2UxID0gMTIwMDAwMCwKLQkuYnVjazFfbWF4X3ZvbHRhZ2UyID0gMTIwMDAwMCwKLQkuYnVjazJfbWF4X3ZvbHRhZ2UgPSAxMjAwMDAwLAorCS5idWNrMV92b2x0YWdlMQk9IDEyMDAwMDAsCisJLmJ1Y2sxX3ZvbHRhZ2UyCT0gMTIwMDAwMCwKKwkuYnVjazFfdm9sdGFnZTMJPSAxMjAwMDAwLAorCS5idWNrMV92b2x0YWdlNAk9IDEyMDAwMDAsCisJLmJ1Y2syX3ZvbHRhZ2UxCT0gMTIwMDAwMCwKKwkuYnVjazJfdm9sdGFnZTIJPSAxMjAwMDAwLAogfTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9LY29uZmlnCmluZGV4IDA5YzRjMjEuLmIyYTlhY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9LY29uZmlnCkBAIC0xMjIsNiArMTIyLDcgQEAKIAlzZWxlY3QgUzNDX0RFVl9IU01NQzIKIAlzZWxlY3QgUzNDX0RFVl9IU01NQzMKIAlzZWxlY3QgUzVQVjMxMF9ERVZfUEQKKwlzZWxlY3QgUzVQVjMxMF9ERVZfU1lTTU1VCiAJc2VsZWN0IFM1UFYzMTBfU0VUVVBfSTJDMQogCXNlbGVjdCBTNVBWMzEwX1NFVFVQX1NESENJCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWFwLmgKaW5kZXggNzRkNDAwNi4uOTAxNjU3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC0xLDYgKzEsNiBAQAogLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9tYXAuaAogICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KICAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLwogICoKICAqIFM1UFYzMTAgLSBNZW1vcnkgbWFwIGRlZmluaXRpb25zCkBAIC0yMyw5MCArMjMsNDMgQEAKIAogI2luY2x1ZGUgPHBsYXQvbWFwLXM1cC5oPgogCi0jZGVmaW5lIFM1UFYzMTBfUEFfU1lTUkFNCQkoMHgwMjAyNTAwMCkKKyNkZWZpbmUgUzVQVjMxMF9QQV9TWVNSQU0JCTB4MDIwMjUwMDAKKworI2RlZmluZSBTNVBWMzEwX1BBX0kyUzAJCQkweDAzODMwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfSTJTMQkJCTB4RTMxMDAwMDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9JMlMyCQkJMHhFMkEwMDAwMAorCisjZGVmaW5lIFM1UFYzMTBfUEFfUENNMAkJCTB4MDM4NDAwMDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9QQ00xCQkJMHgxMzk4MDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX1BDTTIJCQkweDEzOTkwMDAwCiAKICNkZWZpbmUgUzVQVjMxMF9QQV9TUk9NX0JBTksoeCkJCSgweDA0MDAwMDAwICsgKCh4KSAqIDB4MDEwMDAwMDApKQogCi0jZGVmaW5lIFM1UEMyMTBfUEFfT05FTkFORAkJKDB4MEMwMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9PTkVOQU5ECQkJUzVQQzIxMF9QQV9PTkVOQU5ECisjZGVmaW5lIFM1UEMyMTBfUEFfT05FTkFORAkJMHgwQzAwMDAwMAorI2RlZmluZSBTNVBDMjEwX1BBX09ORU5BTkRfRE1BCQkweDBDNjAwMDAwCiAKLSNkZWZpbmUgUzVQQzIxMF9QQV9PTkVOQU5EX0RNQQkJKDB4MEM2MDAwMDApCi0jZGVmaW5lIFM1UF9QQV9PTkVOQU5EX0RNQQkJUzVQQzIxMF9QQV9PTkVOQU5EX0RNQQorI2RlZmluZSBTNVBWMzEwX1BBX0NISVBJRAkJMHgxMDAwMDAwMAogCi0jZGVmaW5lIFM1UFYzMTBfUEFfQ0hJUElECQkoMHgxMDAwMDAwMCkKLSNkZWZpbmUgUzVQX1BBX0NISVBJRAkJCVM1UFYzMTBfUEFfQ0hJUElECisjZGVmaW5lIFM1UFYzMTBfUEFfU1lTQ09OCQkweDEwMDEwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfUE1VCQkJMHgxMDAyMDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX0NNVQkJCTB4MTAwMzAwMDAKIAotI2RlZmluZSBTNVBWMzEwX1BBX1NZU0NPTgkJKDB4MTAwMTAwMDApCi0jZGVmaW5lIFM1UF9QQV9TWVNDT04JCQlTNVBWMzEwX1BBX1NZU0NPTgorI2RlZmluZSBTNVBWMzEwX1BBX1dBVENIRE9HCQkweDEwMDYwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfUlRDCQkJMHgxMDA3MDAwMAogCi0jZGVmaW5lIFM1UFYzMTBfUEFfUE1VCQkJKDB4MTAwMjAwMDApCisjZGVmaW5lIFM1UFYzMTBfUEFfRE1DMAkJCTB4MTA0MDAwMDAKIAotI2RlZmluZSBTNVBWMzEwX1BBX0NNVQkJCSgweDEwMDMwMDAwKQorI2RlZmluZSBTNVBWMzEwX1BBX0NPTUJJTkVSCQkweDEwNDQ4MDAwCiAKLSNkZWZpbmUgUzVQVjMxMF9QQV9XQVRDSERPRwkJKDB4MTAwNjAwMDApCi0jZGVmaW5lIFM1UFYzMTBfUEFfUlRDCQkJKDB4MTAwNzAwMDApCisjZGVmaW5lIFM1UFYzMTBfUEFfQ09SRVBFUkkJCTB4MTA1MDAwMDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9HSUNfQ1BVCQkweDEwNTAwMTAwCisjZGVmaW5lIFM1UFYzMTBfUEFfVFdECQkJMHgxMDUwMDYwMAorI2RlZmluZSBTNVBWMzEwX1BBX0dJQ19ESVNUCQkweDEwNTAxMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfTDJDQwkJCTB4MTA1MDIwMDAKIAotI2RlZmluZSBTNVBWMzEwX1BBX0RNQzAJCQkoMHgxMDQwMDAwMCkKLQotI2RlZmluZSBTNVBWMzEwX1BBX0NPTUJJTkVSCQkoMHgxMDQ0ODAwMCkKLQotI2RlZmluZSBTNVBWMzEwX1BBX0NPUkVQRVJJCQkoMHgxMDUwMDAwMCkKLSNkZWZpbmUgUzVQVjMxMF9QQV9HSUNfQ1BVCQkoMHgxMDUwMDEwMCkKLSNkZWZpbmUgUzVQVjMxMF9QQV9UV0QJCQkoMHgxMDUwMDYwMCkKLSNkZWZpbmUgUzVQVjMxMF9QQV9HSUNfRElTVAkJKDB4MTA1MDEwMDApCi0jZGVmaW5lIFM1UFYzMTBfUEFfTDJDQwkJCSgweDEwNTAyMDAwKQotCi0vKiBETUEgKi8KLSNkZWZpbmUgUzVQVjMxMF9QQV9NRE1BCQkweDEwODEwMDAwCi0jZGVmaW5lIFM1UFYzMTBfUEFfUERNQTAJMHgxMjY4MDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX1BETUExCTB4MTI2OTAwMDAKLQotI2RlZmluZSBTNVBWMzEwX1BBX0dQSU8xCQkoMHgxMTQwMDAwMCkKLSNkZWZpbmUgUzVQVjMxMF9QQV9HUElPMgkJKDB4MTEwMDAwMDApCi0jZGVmaW5lIFM1UFYzMTBfUEFfR1BJTzMJCSgweDAzODYwMDAwKQotCi0jZGVmaW5lIFM1UFYzMTBfUEFfTUlQSV9DU0lTMAkJMHgxMTg4MDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX01JUElfQ1NJUzEJCTB4MTE4OTAwMDAKLQotI2RlZmluZSBTNVBWMzEwX1BBX0hTTU1DKHgpCQkoMHgxMjUxMDAwMCArICgoeCkgKiAweDEwMDAwKSkKLQotI2RlZmluZSBTNVBWMzEwX1BBX1NST01DCQkoMHgxMjU3MDAwMCkKLSNkZWZpbmUgUzVQX1BBX1NST01DCQkJUzVQVjMxMF9QQV9TUk9NQwotCi0vKiBTL1BESUYgKi8KLSNkZWZpbmUgUzVQVjMxMF9QQV9TUERJRgkweEUxMTAwMDAwCi0KLS8qIEkyUyAqLwotI2RlZmluZSBTNVBWMzEwX1BBX0kyUzAJCTB4MDM4MzAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9JMlMxCQkweEUzMTAwMDAwCi0jZGVmaW5lIFM1UFYzMTBfUEFfSTJTMgkJMHhFMkEwMDAwMAotCi0vKiBQQ00gKi8KLSNkZWZpbmUgUzVQVjMxMF9QQV9QQ00wCQkweDAzODQwMDAwCi0jZGVmaW5lIFM1UFYzMTBfUEFfUENNMQkJMHgxMzk4MDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX1BDTTIJCTB4MTM5OTAwMDAKLQotLyogQUM5NyAqLwotI2RlZmluZSBTNVBWMzEwX1BBX0FDOTcJCTB4MTM5QTAwMDAKLQotI2RlZmluZSBTNVBWMzEwX1BBX1VBUlQJCQkoMHgxMzgwMDAwMCkKLQotI2RlZmluZSBTNVBfUEFfVUFSVCh4KQkJCShTNVBWMzEwX1BBX1VBUlQgKyAoKHgpICogUzNDX1VBUlRfT0ZGU0VUKSkKLSNkZWZpbmUgUzVQX1BBX1VBUlQwCQkJUzVQX1BBX1VBUlQoMCkKLSNkZWZpbmUgUzVQX1BBX1VBUlQxCQkJUzVQX1BBX1VBUlQoMSkKLSNkZWZpbmUgUzVQX1BBX1VBUlQyCQkJUzVQX1BBX1VBUlQoMikKLSNkZWZpbmUgUzVQX1BBX1VBUlQzCQkJUzVQX1BBX1VBUlQoMykKLSNkZWZpbmUgUzVQX1BBX1VBUlQ0CQkJUzVQX1BBX1VBUlQoNCkKLQotI2RlZmluZSBTNVBfU1pfVUFSVAkJCVNaXzI1NgotCi0jZGVmaW5lIFM1UFYzMTBfUEFfSUlDKHgpCQkoMHgxMzg2MDAwMCArICgoeCkgKiAweDEwMDAwKSkKLQotI2RlZmluZSBTNVBWMzEwX1BBX1RJTUVSCQkoMHgxMzlEMDAwMCkKLSNkZWZpbmUgUzVQX1BBX1RJTUVSCQkJUzVQVjMxMF9QQV9USU1FUgotCi0jZGVmaW5lIFM1UFYzMTBfUEFfU0RSQU0JCSgweDQwMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfU0RSQU0JCQlTNVBWMzEwX1BBX1NEUkFNCisjZGVmaW5lIFM1UFYzMTBfUEFfTURNQQkJCTB4MTA4MTAwMDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9QRE1BMAkJMHgxMjY4MDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX1BETUExCQkweDEyNjkwMDAwCiAKICNkZWZpbmUgUzVQVjMxMF9QQV9TWVNNTVVfTURNQQkJMHgxMEE0MDAwMAogI2RlZmluZSBTNVBWMzEwX1BBX1NZU01NVV9TU1MJCTB4MTBBNTAwMDAKQEAgLTEyNCwxMSArNzcsMzIgQEAKICNkZWZpbmUgUzVQVjMxMF9QQV9TWVNNTVVfVFYJCTB4MTJFMjAwMDAKICNkZWZpbmUgUzVQVjMxMF9QQV9TWVNNTVVfTUZDX0wJCTB4MTM2MjAwMDAKICNkZWZpbmUgUzVQVjMxMF9QQV9TWVNNTVVfTUZDX1IJCTB4MTM2MzAwMDAKLSNkZWZpbmUgUzVQVjMxMF9TWVNNTVVfVE9UQUxfSVBOVU0JMTYKLSNkZWZpbmUgUzVQX1NZU01NVV9UT1RBTF9JUE5VTQkJUzVQVjMxMF9TWVNNTVVfVE9UQUxfSVBOVU0KIAotLyogY29tcGF0aWJpbHRpeSBkZWZpbmVzLiAqLwotI2RlZmluZSBTM0NfUEFfVUFSVAkJCVM1UFYzMTBfUEFfVUFSVAorI2RlZmluZSBTNVBWMzEwX1BBX0dQSU8xCQkweDExNDAwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfR1BJTzIJCTB4MTEwMDAwMDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9HUElPMwkJMHgwMzg2MDAwMAorCisjZGVmaW5lIFM1UFYzMTBfUEFfTUlQSV9DU0lTMAkJMHgxMTg4MDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX01JUElfQ1NJUzEJCTB4MTE4OTAwMDAKKworI2RlZmluZSBTNVBWMzEwX1BBX0hTTU1DKHgpCQkoMHgxMjUxMDAwMCArICgoeCkgKiAweDEwMDAwKSkKKworI2RlZmluZSBTNVBWMzEwX1BBX1NST01DCQkweDEyNTcwMDAwCisKKyNkZWZpbmUgUzVQVjMxMF9QQV9VQVJUCQkJMHgxMzgwMDAwMAorCisjZGVmaW5lIFM1UFYzMTBfUEFfSUlDKHgpCQkoMHgxMzg2MDAwMCArICgoeCkgKiAweDEwMDAwKSkKKworI2RlZmluZSBTNVBWMzEwX1BBX0FDOTcJCQkweDEzOUEwMDAwCisKKyNkZWZpbmUgUzVQVjMxMF9QQV9USU1FUgkJMHgxMzlEMDAwMAorCisjZGVmaW5lIFM1UFYzMTBfUEFfU0RSQU0JCTB4NDAwMDAwMDAKKworI2RlZmluZSBTNVBWMzEwX1BBX1NQRElGCQkweEUxMTAwMDAwCisKKy8qIENvbXBhdGliaWx0aXkgRGVmaW5lcyAqLworCiAjZGVmaW5lIFMzQ19QQV9IU01NQzAJCQlTNVBWMzEwX1BBX0hTTU1DKDApCiAjZGVmaW5lIFMzQ19QQV9IU01NQzEJCQlTNVBWMzEwX1BBX0hTTU1DKDEpCiAjZGVmaW5lIFMzQ19QQV9IU01NQzIJCQlTNVBWMzEwX1BBX0hTTU1DKDIpCkBAIC0xNDMsNyArMTE3LDI4IEBACiAjZGVmaW5lIFMzQ19QQV9JSUM3CQkJUzVQVjMxMF9QQV9JSUMoNykKICNkZWZpbmUgUzNDX1BBX1JUQwkJCVM1UFYzMTBfUEFfUlRDCiAjZGVmaW5lIFMzQ19QQV9XRFQJCQlTNVBWMzEwX1BBX1dBVENIRE9HCisKKyNkZWZpbmUgUzVQX1BBX0NISVBJRAkJCVM1UFYzMTBfUEFfQ0hJUElECiAjZGVmaW5lIFM1UF9QQV9NSVBJX0NTSVMwCQlTNVBWMzEwX1BBX01JUElfQ1NJUzAKICNkZWZpbmUgUzVQX1BBX01JUElfQ1NJUzEJCVM1UFYzMTBfUEFfTUlQSV9DU0lTMQorI2RlZmluZSBTNVBfUEFfT05FTkFORAkJCVM1UEMyMTBfUEFfT05FTkFORAorI2RlZmluZSBTNVBfUEFfT05FTkFORF9ETUEJCVM1UEMyMTBfUEFfT05FTkFORF9ETUEKKyNkZWZpbmUgUzVQX1BBX1NEUkFNCQkJUzVQVjMxMF9QQV9TRFJBTQorI2RlZmluZSBTNVBfUEFfU1JPTUMJCQlTNVBWMzEwX1BBX1NST01DCisjZGVmaW5lIFM1UF9QQV9TWVNDT04JCQlTNVBWMzEwX1BBX1NZU0NPTgorI2RlZmluZSBTNVBfUEFfVElNRVIJCQlTNVBWMzEwX1BBX1RJTUVSCisKKy8qIFVBUlQgKi8KKworI2RlZmluZSBTM0NfUEFfVUFSVAkJCVM1UFYzMTBfUEFfVUFSVAorCisjZGVmaW5lIFM1UF9QQV9VQVJUKHgpCQkJKFMzQ19QQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCisjZGVmaW5lIFM1UF9QQV9VQVJUMAkJCVM1UF9QQV9VQVJUKDApCisjZGVmaW5lIFM1UF9QQV9VQVJUMQkJCVM1UF9QQV9VQVJUKDEpCisjZGVmaW5lIFM1UF9QQV9VQVJUMgkJCVM1UF9QQV9VQVJUKDIpCisjZGVmaW5lIFM1UF9QQV9VQVJUMwkJCVM1UF9QQV9VQVJUKDMpCisjZGVmaW5lIFM1UF9QQV9VQVJUNAkJCVM1UF9QQV9VQVJUKDQpCisKKyNkZWZpbmUgUzVQX1NaX1VBUlQJCQlTWl8yNTYKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvc3lzbW11LmggYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3N5c21tdS5oCmluZGV4IDY2MmZlODVmLi41OThmYzVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3N5c21tdS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvc3lzbW11LmgKQEAgLTEzLDYgKzEzLDkgQEAKICNpZm5kZWYgX19BU01fQVJNX0FSQ0hfU1lTTU1VX0gKICNkZWZpbmUgX19BU01fQVJNX0FSQ0hfU1lTTU1VX0ggX19GSUxFX18KIAorI2RlZmluZSBTNVBWMzEwX1NZU01NVV9UT1RBTF9JUE5VTQkxNgorI2RlZmluZSBTNVBfU1lTTU1VX1RPVEFMX0lQTlVNCQlTNVBWMzEwX1NZU01NVV9UT1RBTF9JUE5VTQorCiBlbnVtIHM1cHYzMTBfc3lzbW11X2lwcyB7CiAJU1lTTU1VX01ETUEsCiAJU1lTTU1VX1NTUywKQEAgLTMyLDcgKzM1LDcgQEAKIAlTWVNNTVVfTUZDX1IsCiB9OwogCi1zdGF0aWMgY2hhciAqc3lzbW11X2lwc19uYW1lW1M1UF9TWVNNTVVfVE9UQUxfSVBOVU1dID0geworc3RhdGljIGNoYXIgKnN5c21tdV9pcHNfbmFtZVtTNVBWMzEwX1NZU01NVV9UT1RBTF9JUE5VTV0gPSB7CiAJIlNZU01NVV9NRE1BIgksCiAJIlNZU01NVV9TU1MiCSwKIAkiU1lTTU1VX0ZJTUMwIgksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCmluZGV4IGQ0M2M1ZWYuLmJkM2UxYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCkBAIC0yNDEsNiArMjQxLDkgQEAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY29sbGllX2xvY29tb19kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImxvY29tbyIsCiAJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmxvY29tb19pbmZvLAorCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGxvY29tb19yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IGxvY29tb19yZXNvdXJjZXMsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnCmluZGV4IDRkMWI0YzUuLjBjOGY2Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWcKQEAgLTYwLDYgKzYwLDggQEAKIAogY29uZmlnIE1BQ0hfQUc1RVZNCiAJYm9vbCAiQUc1RVZNIGJvYXJkIgorCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCXNlbGVjdCBTSF9MQ0RfTUlQSV9EU0kKIAlkZXBlbmRzIG9uIEFSQ0hfU0g3M0EwCiAKIGNvbmZpZyBNQUNIX01BQ0tFUkVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFnNWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hZzVldm0uYwppbmRleCBjMThhNzQwLi4yMTIzYjk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFnNWV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYWc1ZXZtLmMKQEAgLTM0LDkgKzM0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQvc2hfa2V5c2MuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9zaF9tbWNpZi5oPgotCisjaW5jbHVkZSA8bGludXgvc2hfY2xrLmg+CisjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KKyNpbmNsdWRlIDx2aWRlby9zaF9taXBpX2RzaS5oPgogI2luY2x1ZGUgPHNvdW5kL3NoX2ZzaS5oPgotCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvc2g3M2EwLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KQEAgLTE4MywxMSArMTg0LDE2NSBAQAogCS5yZXNvdXJjZQk9IHNoX21tY2lmX3Jlc291cmNlcywKIH07CiAKKy8qIElyREEgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXJkYV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4RTZEMDAwMDAsCisJCS5lbmQJPSAweEU2RDAxRkQ0IC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBnaWNfc3BpKDk1KSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpcmRhX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAic2hfaXJkYSIsCisJLmlkCQk9IDAsCisJLnJlc291cmNlICAgICAgID0gaXJkYV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShpcmRhX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBsY2RfYmFja2xpZ2h0X3NlcVszXVsyXSA9IHsKKwl7IDB4MDQsIDB4MDcgfSwKKwl7IDB4MjMsIDB4ODAgfSwKKwl7IDB4MDMsIDB4MDEgfSwKK307CisKK3N0YXRpYyB2b2lkIGxjZF9iYWNrbGlnaHRfb24odm9pZCkKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmE7CisJc3RydWN0IGkyY19tc2cgbXNnOworCWludCBrOworCisJYSA9IGkyY19nZXRfYWRhcHRlcigxKTsKKwlmb3IgKGsgPSAwOyBhICYmIGsgPCAzOyBrKyspIHsKKwkJbXNnLmFkZHIgPSAweDZkOworCQltc2cuYnVmID0gJmxjZF9iYWNrbGlnaHRfc2VxW2tdWzBdOworCQltc2cubGVuID0gMjsKKwkJbXNnLmZsYWdzID0gMDsKKwkJaWYgKGkyY190cmFuc2ZlcihhLCAmbXNnLCAxKSAhPSAxKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBsY2RfYmFja2xpZ2h0X3Jlc2V0KHZvaWQpCit7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QT1JUMjM1LCAwKTsKKwltZGVsYXkoMjQpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUE9SVDIzNSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGxjZF9vbih2b2lkICpib2FyZF9kYXRhLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlsY2RfYmFja2xpZ2h0X29uKCk7Cit9CisKK3N0YXRpYyB2b2lkIGxjZF9vZmYodm9pZCAqYm9hcmRfZGF0YSkKK3sKKwlsY2RfYmFja2xpZ2h0X3Jlc2V0KCk7Cit9CisKKy8qIExDREMwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSBsY2RjMF9tb2Rlc1tdID0geworCXsKKwkJLm5hbWUJCT0gIlI2MzMwMihRSEQpIiwKKwkJLnhyZXMJCT0gNTQ0LAorCQkueXJlcwkJPSA5NjEsCisJCS5sZWZ0X21hcmdpbgk9IDcyLAorCQkucmlnaHRfbWFyZ2luCT0gNjAwLAorCQkuaHN5bmNfbGVuCT0gMTYsCisJCS51cHBlcl9tYXJnaW4JPSA4LAorCQkubG93ZXJfbWFyZ2luCT0gOCwKKwkJLnZzeW5jX2xlbgk9IDIsCisJCS5zeW5jCQk9IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCB8IEZCX1NZTkNfSE9SX0hJR0hfQUNULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9sY2RjX2luZm8gbGNkYzBfaW5mbyA9IHsKKwkuY2xvY2tfc291cmNlID0gTENEQ19DTEtfUEVSSVBIRVJBTCwKKwkuY2hbMF0gPSB7CisJCS5jaGFuID0gTENEQ19DSEFOX01BSU5MQ0QsCisJCS5pbnRlcmZhY2VfdHlwZSA9IFJHQjI0LAorCQkuY2xvY2tfZGl2aWRlciA9IDEsCisJCS5mbGFncyA9IExDRENfRkxBR1NfRFdQT0wsCisJCS5sY2Rfc2l6ZV9jZmcud2lkdGggPSA0NCwKKwkJLmxjZF9zaXplX2NmZy5oZWlnaHQgPSA3OSwKKwkJLmJwcCA9IDE2LAorCQkubGNkX2NmZyA9IGxjZGMwX21vZGVzLAorCQkubnVtX2NmZyA9IEFSUkFZX1NJWkUobGNkYzBfbW9kZXMpLAorCQkuYm9hcmRfY2ZnID0geworCQkJLmRpc3BsYXlfb24gPSBsY2Rfb24sCisJCQkuZGlzcGxheV9vZmYgPSBsY2Rfb2ZmLAorCQl9LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGNkYzBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJMQ0RDMCIsCisJCS5zdGFydAk9IDB4ZmU5NDAwMDAsIC8qIFA0LW9ubHkgc3BhY2UgKi8KKwkJLmVuZAk9IDB4ZmU5NDNmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBpbnRjc19ldnQyaXJxKDB4NTgwKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxjZGMwX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfbW9iaWxlX2xjZGNfZmIiLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShsY2RjMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGxjZGMwX3Jlc291cmNlcywKKwkuaWQgICAgICAgICAgICAgPSAwLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmxjZGMwX2luZm8sCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IH4wLAorCX0sCit9OworCisvKiBNSVBJLURTSSAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtaXBpZHNpMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCAgPSAweGZlYWIwMDAwLAorCQkuZW5kICAgID0gMHhmZWFiM2ZmZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gMHhmZWFiNDAwMCwKKwkJLmVuZCAgICA9IDB4ZmVhYjdmZmYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzaF9taXBpX2RzaV9pbmZvIG1pcGlkc2kwX2luZm8gPSB7CisJLmRhdGFfZm9ybWF0CT0gTUlQSV9SR0I4ODgsCisJLmxjZF9jaGFuCT0gJmxjZGMwX2luZm8uY2hbMF0sCisJLnZzeW53X29mZnNldAk9IDIwLAorCS5jbGtzcmMJCT0gMSwKKwkuZmxhZ3MJCT0gU0hfTUlQSV9EU0lfSFNBQk0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtaXBpZHNpMF9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNoLW1pcGktZHNpIiwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG1pcGlkc2kwX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gbWlwaWRzaTBfcmVzb3VyY2VzLAorCS5pZCAgICAgICAgICAgICA9IDAsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbWlwaWRzaTBfaW5mbywKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmFnNWV2bV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmZXRoX2RldmljZSwKIAkma2V5c2NfZGV2aWNlLAogCSZmc2lfZGV2aWNlLAogCSZtbWNfZGV2aWNlLAorCSZpcmRhX2RldmljZSwKKwkmbGNkYzBfZGV2aWNlLAorCSZtaXBpZHNpMF9kZXZpY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGFnNWV2bV9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKQEAgLTIyNCw2ICszNzksOCBAQAogCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQSU5UQ1IwQSkgfCAoMjw8MTApLCBQSU5UQ1IwQSk7CiB9CiAKKyNkZWZpbmUgRFNJMFBIWUNSCTB4ZTYxNTAwNmMKKwogc3RhdGljIHZvaWQgX19pbml0IGFnNWV2bV9pbml0KHZvaWQpCiB7CiAJc2g3M2EwX3Bpbm11eF9pbml0KCk7CkBAIC0yODcsNiArNDQ0LDI1IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJQUlTTEQsIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUFPU0xELCBOVUxMKTsKIAorCS8qIElyREEgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9QT1JUMjQxX0lSREFfT1VULCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9QT1JUMjQyX0lSREFfSU4sICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9QT1JUMjQzX0lSREFfRklSU0VMLCBOVUxMKTsKKworCS8qIExDRCBwYW5lbCAqLworCWdwaW9fcmVxdWVzdChHUElPX1BPUlQyMTcsIE5VTEwpOyAvKiBSRVNFVCAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BPUlQyMTcsIDApOworCW1kZWxheSgxKTsKKwlncGlvX3NldF92YWx1ZShHUElPX1BPUlQyMTcsIDEpOworCisJLyogTENEIGJhY2tsaWdodCBjb250cm9sbGVyICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUE9SVDIzNSwgTlVMTCk7IC8qIFJFU0VUICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUE9SVDIzNSwgMCk7CisJbGNkX2JhY2tsaWdodF9yZXNldCgpOworCisJLyogTUlQSS1EU0kgY2xvY2sgc2V0dXAgKi8KKwlfX3Jhd193cml0ZWwoMHgyYTgwOTAxMCwgRFNJMFBIWUNSKTsKKwogI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCiAJLyogU2hhcmVkIGF0dHJpYnV0ZSBvdmVycmlkZSBlbmFibGUsIDY0Syo4d2F5ICovCiAJbDJ4MF9pbml0KF9faW8oMHhmMDEwMDAwMCksIDB4MDA0NjAwMDAsIDB4YzIwMDBmZmYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1nM2V2bS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1nM2V2bS5jCmluZGV4IDY4NmIzMDQuLmVmNDYxM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZzNldm0uYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWczZXZtLmMKQEAgLTM0Nyw3ICszNDcsNiBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSREFfT1VULCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9JUkRBX0lOLCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9JUkRBX0ZJUlNFTCwgTlVMTCk7Ci0Jc2V0X2lycV90eXBlKGV2dDJpcnEoMHg0ODApLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwogCiAJc2g3MzY3X2FkZF9zdGFuZGFyZF9kZXZpY2VzKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYwppbmRleCA3YjE1ZDIxLi5mYjQyMTNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jCkBAIC0xNjksOSArMTY5LDggQEAKICAqCVNXMQl8CVNXMzMKICAqCQl8IGJpdDEgfCBiaXQyIHwgYml0MyB8IGJpdDQKICAqIC0tLS0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tLQotICogTU1DMAkgIE9GRgl8ICBPRkYgfCAgT04gIHwgIE9OICB8ICBYCi0gKiBNTUMxCSAgT04JfCAgT0ZGIHwgIE9OICB8ICBYICAgfCBPTgotICogU0RISTEgIE9GRgl8ICBPTiAgfCAgIFggIHwgIE9GRiB8IE9OCisgKiBNTUMwICAgT0ZGCXwgIE9GRiB8ICAgWCAgfCAgT04gIHwgIFggICAgICAgKFVzZSBNTUNJRikKKyAqIFNESEkxICBPRkYJfCAgT04gIHwgICBYICB8ICBPRkYgfCAgWCAgICAgICAoVXNlIE1GRF9TSF9NT0JJTEVfU0RISSkKICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzcyLmMKaW5kZXggOWFhOGQ2OC4uZTk3MzFiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Mi5jCkBAIC0yMzQsNyArMjM0LDkgQEAKIAogCXZhbHVlID0gX19yYXdfcmVhZGwoUExMQzJDUikgJiB+KDB4M2YgPDwgMjQpOwogCi0JX19yYXdfd3JpdGVsKCh2YWx1ZSAmIH4weDgwMDAwMDAwKSB8ICgoaWR4ICsgMTkpIDw8IDI0KSwgUExMQzJDUik7CisJX19yYXdfd3JpdGVsKHZhbHVlIHwgKChpZHggKyAxOSkgPDwgMjQpLCBQTExDMkNSKTsKKworCWNsay0+cmF0ZSA9IGNsay0+ZnJlcV90YWJsZVtpZHhdLmZyZXF1ZW5jeTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczYTAuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3M2EwLmMKaW5kZXggNzIwYTcxNC4uZGRkNGExYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczYTAuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzNhMC5jCkBAIC0xMTgsOCArMTE4LDE2IEBACiB7CiAJdW5zaWduZWQgbG9uZyBtdWx0ID0gMTsKIAotCWlmIChfX3Jhd19yZWFkbChQTExFQ1IpICYgKDEgPDwgY2xrLT5lbmFibGVfYml0KSkKKwlpZiAoX19yYXdfcmVhZGwoUExMRUNSKSAmICgxIDw8IGNsay0+ZW5hYmxlX2JpdCkpIHsKIAkJbXVsdCA9ICgoKF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZykgPj4gMjQpICYgMHgzZikgKyAxKTsKKwkJLyogaGFuZGxlIENGRyBiaXQgZm9yIFBMTDEgYW5kIFBMTDIgKi8KKwkJc3dpdGNoIChjbGstPmVuYWJsZV9iaXQpIHsKKwkJY2FzZSAxOgorCQljYXNlIDI6CisJCQlpZiAoX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKSAmICgxIDw8IDIwKSkKKwkJCQltdWx0ICo9IDI7CisJCX0KKwl9CiAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgKiBtdWx0OwogfQpAQCAtMjEyLDcgKzIyMCw3IEBACiBzdGF0aWMgc3RydWN0IGNsayBkaXY0X2Nsa3NbRElWNF9OUl0gPSB7CiAJW0RJVjRfSV0gPSBESVY0KEZSUUNSQSwgMjAsIDB4ZmZmLCBDTEtfRU5BQkxFX09OX0lOSVQpLAogCVtESVY0X1pHXSA9IERJVjQoRlJRQ1JBLCAxNiwgMHhiZmYsIENMS19FTkFCTEVfT05fSU5JVCksCi0JW0RJVjRfTTNdID0gRElWNChGUlFDUkEsIDgsIDB4ZmZmLCBDTEtfRU5BQkxFX09OX0lOSVQpLAorCVtESVY0X00zXSA9IERJVjQoRlJRQ1JBLCAxMiwgMHhmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfQl0gPSBESVY0KEZSUUNSQSwgOCwgMHhmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfTTFdID0gRElWNChGUlFDUkEsIDQsIDB4ZmZmLCAwKSwKIAlbRElWNF9NMl0gPSBESVY0KEZSUUNSQSwgMCwgMHhmZmYsIDApLApAQCAtMjU1LDEwICsyNjMsMTAgQEAKIH07CiAKIGVudW0geyBNU1RQMDAxLAotCU1TVFAxMjUsIE1TVFAxMTYsCisJTVNUUDEyNSwgTVNUUDExOCwgTVNUUDExNiwgTVNUUDEwMCwKIAlNU1RQMjE5LAogCU1TVFAyMDcsIE1TVFAyMDYsIE1TVFAyMDQsIE1TVFAyMDMsIE1TVFAyMDIsIE1TVFAyMDEsIE1TVFAyMDAsCi0JTVNUUDMzMSwgTVNUUDMyOSwgTVNUUDMyMywgTVNUUDMxMiwKKwlNU1RQMzMxLCBNU1RQMzI5LCBNU1RQMzI1LCBNU1RQMzIzLCBNU1RQMzEyLAogCU1TVFA0MTEsIE1TVFA0MTAsIE1TVFA0MDMsCiAJTVNUUF9OUiB9OwogCkBAIC0yNjgsNyArMjc2LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1zdHBfY2xrc1tNU1RQX05SXSA9IHsKIAlbTVNUUDAwMV0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9IUF0sIFNNU1RQQ1IwLCAxLCAwKSwgLyogSUlDMiAqLwogCVtNU1RQMTI1XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IxLCAyNSwgMCksIC8qIFRNVTAgKi8KKwlbTVNUUDExOF0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDE4LCAwKSwgLyogRFNJVFgwICovCiAJW01TVFAxMTZdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfSFBdLCBTTVNUUENSMSwgMTYsIDApLCAvKiBJSUMwICovCisJW01TVFAxMDBdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfQl0sIFNNU1RQQ1IxLCAwLCAwKSwgLyogTENEQzAgKi8KIAlbTVNUUDIxOV0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgMTksIDApLCAvKiBTQ0lGQTcgKi8KIAlbTVNUUDIwN10gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgNywgMCksIC8qIFNDSUZBNSAqLwogCVtNU1RQMjA2XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCA2LCAwKSwgLyogU0NJRkIgKi8KQEAgLTI3OSw2ICsyODksNyBAQAogCVtNU1RQMjAwXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCAwLCAwKSwgLyogU0NJRkE0ICovCiAJW01TVFAzMzFdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjMsIDMxLCAwKSwgLyogU0NJRkE2ICovCiAJW01TVFAzMjldID0gTVNUUCgmcl9jbGssIFNNU1RQQ1IzLCAyOSwgMCksIC8qIENNVDEwICovCisJW01TVFAzMjVdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjMsIDI1LCAwKSwgLyogSXJEQSAqLwogCVtNU1RQMzIzXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjMsIDIzLCAwKSwgLyogSUlDMSAqLwogCVtNU1RQMzEyXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjMsIDEyLCAwKSwgLyogTU1DSUYwICovCiAJW01TVFA0MTFdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfSFBdLCBTTVNUUENSNCwgMTEsIDApLCAvKiBJSUMzICovCkBAIC0yODgsMTYgKzI5OSwyNSBAQAogCiAjZGVmaW5lIENMS0RFVl9DT05fSUQoX2lkLCBfY2xrKSB7IC5jb25faWQgPSBfaWQsIC5jbGsgPSBfY2xrIH0KICNkZWZpbmUgQ0xLREVWX0RFVl9JRChfaWQsIF9jbGspIHsgLmRldl9pZCA9IF9pZCwgLmNsayA9IF9jbGsgfQorI2RlZmluZSBDTEtERVZfSUNLX0lEKF9jaWQsIF9kaWQsIF9jbGspIHsgLmNvbl9pZCA9IF9jaWQsIC5kZXZfaWQgPSBfZGlkLCAuY2xrID0gX2NsayB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CiAJLyogbWFpbiBjbG9ja3MgKi8KIAlDTEtERVZfQ09OX0lEKCJyX2NsayIsICZyX2NsayksCiAKKwkvKiBESVY2IGNsb2NrcyAqLworCUNMS0RFVl9JQ0tfSUQoImRzaXRfY2xrIiwgInNoLW1pcGktZHNpLjAiLCAmZGl2Nl9jbGtzW0RJVjZfRFNJVF0pLAorCUNMS0RFVl9JQ0tfSUQoImRzaXRfY2xrIiwgInNoLW1pcGktZHNpLjEiLCAmZGl2Nl9jbGtzW0RJVjZfRFNJVF0pLAorCUNMS0RFVl9JQ0tfSUQoImRzaTBwX2NsayIsICJzaC1taXBpLWRzaS4wIiwgJmRpdjZfY2xrc1tESVY2X0RTSTBQXSksCisJQ0xLREVWX0lDS19JRCgiZHNpMXBfY2xrIiwgInNoLW1pcGktZHNpLjEiLCAmZGl2Nl9jbGtzW0RJVjZfRFNJMVBdKSwKKwogCS8qIE1TVFAzMiBjbG9ja3MgKi8KIAlDTEtERVZfREVWX0lEKCJpMmMtc2hfbW9iaWxlLjIiLCAmbXN0cF9jbGtzW01TVFAwMDFdKSwgLyogSTJDMiAqLworCUNMS0RFVl9ERVZfSUQoInNoX21vYmlsZV9sY2RjX2ZiLjAiLCAmbXN0cF9jbGtzW01TVFAxMDBdKSwgLyogTENEQzAgKi8KIAlDTEtERVZfREVWX0lEKCJzaF90bXUuMCIsICZtc3RwX2Nsa3NbTVNUUDEyNV0pLCAvKiBUTVUwMCAqLwogCUNMS0RFVl9ERVZfSUQoInNoX3RtdS4xIiwgJm1zdHBfY2xrc1tNU1RQMTI1XSksIC8qIFRNVTAxICovCiAJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4wIiwgJm1zdHBfY2xrc1tNU1RQMTE2XSksIC8qIEkyQzAgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1taXBpLWRzaS4wIiwgJm1zdHBfY2xrc1tNU1RQMTE4XSksIC8qIERTSVRYICovCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjciLCAmbXN0cF9jbGtzW01TVFAyMTldKSwgLyogU0NJRkE3ICovCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjUiLCAmbXN0cF9jbGtzW01TVFAyMDddKSwgLyogU0NJRkE1ICovCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjgiLCAmbXN0cF9jbGtzW01TVFAyMDZdKSwgLyogU0NJRkIgKi8KQEAgLTMwOCw2ICszMjgsNyBAQAogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS40IiwgJm1zdHBfY2xrc1tNU1RQMjAwXSksIC8qIFNDSUZBNCAqLwogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS42IiwgJm1zdHBfY2xrc1tNU1RQMzMxXSksIC8qIFNDSUZBNiAqLwogCUNMS0RFVl9ERVZfSUQoInNoX2NtdC4xMCIsICZtc3RwX2Nsa3NbTVNUUDMyOV0pLCAvKiBDTVQxMCAqLworCUNMS0RFVl9ERVZfSUQoInNoX2lyZGEuMCIsICZtc3RwX2Nsa3NbTVNUUDMyNV0pLCAvKiBJckRBICovCiAJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4xIiwgJm1zdHBfY2xrc1tNU1RQMzIzXSksIC8qIEkyQzEgKi8KIAlDTEtERVZfREVWX0lEKCJzaF9tbWNpZi4wIiwgJm1zdHBfY2xrc1tNU1RQMzEyXSksIC8qIE1NQ0lGMCAqLwogCUNMS0RFVl9ERVZfSUQoImkyYy1zaF9tb2JpbGUuMyIsICZtc3RwX2Nsa3NbTVNUUDQxMV0pLCAvKiBJMkMzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzcyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzcyLmMKaW5kZXggZjc4YTFlYS4uY2E1ZjlkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczNzIuYwpAQCAtMzY1LDYgKzM2NSw3IEBACiAKIGVudW0gewogCVVOVVNFRF9JTlRDUyA9IDAsCisJRU5BQkxFRF9JTlRDUywKIAogCUlOVENTLAogCkBAIC00MTMsNyArNDE0LDcgQEAKIAlDTVQ0LAogCURTSVRYMV9EU0lUWDFfMCwKIAlEU0lUWDFfRFNJVFgxXzEsCi0JLyogTUZJUzIgKi8KKwlNRklTMl9JTlRDUywgLyogUHJpb3JpdHkgYWx3YXlzIGVuYWJsZWQgdXNpbmcgRU5BQkxFRF9JTlRDUyAqLwogCUNQT1JUUzJSLAogCS8qIENFQyAqLwogCUpQVTZFLApAQCAtNDc3LDcgKzQ3OCw3IEBACiAJSU5UQ1NfVkVDVChDTVQ0LCAweDE5ODApLAogCUlOVENTX1ZFQ1QoRFNJVFgxX0RTSVRYMV8wLCAweDE5YTApLAogCUlOVENTX1ZFQ1QoRFNJVFgxX0RTSVRYMV8xLCAweDE5YzApLAotCS8qIE1GSVMyICovCisJSU5UQ1NfVkVDVChNRklTMl9JTlRDUywgMHgxYTAwKSwKIAlJTlRDU19WRUNUKENQT1JUUzJSLCAweDFhMjApLAogCS8qIENFQyAqLwogCUlOVENTX1ZFQ1QoSlBVNkUsIDB4MWE4MCksCkBAIC01NDMsNyArNTQ0LDcgQEAKIAkgIHsgMCwgVE1VMV9UVU5JMiwgVE1VMV9UVU5JMSwgVE1VMV9UVU5JMCwKIAkgICAgQ01UNCwgRFNJVFgxX0RTSVRYMV8wLCBEU0lUWDFfRFNJVFgxXzEsIDAgfSB9LAogCXsgMHhmZmQ1MDE5YywgMHhmZmQ1MDFkYywgOCwgLyogSU1SN1NBMyAvIElNQ1I3U0EzICovCi0JICB7IDAsIENQT1JUUzJSLCAwLCAwLAorCSAgeyBNRklTMl9JTlRDUywgQ1BPUlRTMlIsIDAsIDAsCiAJICAgIEpQVTZFLCAwLCAwLCAwIH0gfSwKIAl7IDB4ZmZkMjAxMDQsIDAsIDE2LCAvKiBJTlRBTUFTSyAqLwogCSAgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLApAQCAtNTcxLDcgKzU3Miw4IEBACiAJeyAweGZmZDUwMDMwLCAwLCAxNiwgNCwgLyogSVBSTVMzICovIHsgVE1VMSwgMCwgMCwgMCB9IH0sCiAJeyAweGZmZDUwMDM0LCAwLCAxNiwgNCwgLyogSVBSTlMzICovIHsgQ01UNCwgRFNJVFgxX0RTSVRYMV8wLAogCQkJCQkgICAgICAgRFNJVFgxX0RTSVRYMV8xLCAwIH0gfSwKLQl7IDB4ZmZkNTAwMzgsIDAsIDE2LCA0LCAvKiBJUFJPUzMgKi8geyAwLCBDUE9SVFMyUiwgMCwgMCB9IH0sCisJeyAweGZmZDUwMDM4LCAwLCAxNiwgNCwgLyogSVBST1MzICovIHsgRU5BQkxFRF9JTlRDUywgQ1BPUlRTMlIsCisJCQkJCSAgICAgICAwLCAwIH0gfSwKIAl7IDB4ZmZkNTAwM2MsIDAsIDE2LCA0LCAvKiBJUFJQUzMgKi8geyBKUFU2RSwgMCwgMCwgMCB9IH0sCiB9OwogCkBAIC01OTAsNiArNTkyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBpbnRjX2Rlc2MgaW50Y3NfZGVzYyBfX2luaXRkYXRhID0gewogCS5uYW1lID0gInNoNzM3Mi1pbnRjcyIsCisJLmZvcmNlX2VuYWJsZSA9IEVOQUJMRURfSU5UQ1MsCiAJLnJlc291cmNlID0gaW50Y3NfcmVzb3VyY2VzLAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbnRjc19yZXNvdXJjZXMpLAogCS5odyA9IElOVENfSFdfREVTQyhpbnRjc192ZWN0b3JzLCBpbnRjc19ncm91cHMsIGludGNzX21hc2tfcmVnaXN0ZXJzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzNhMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzNhMC5jCmluZGV4IDMyMmQ4ZDUuLjVkMGUxNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczYTAuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3M2EwLmMKQEAgLTI1MiwxMCArMjUyLDExIEBACiAKIHZvaWQgX19pbml0IHNoNzNhMF9pbml0X2lycSh2b2lkKQogewotCXZvaWQgX19pb21lbSAqZ2ljX2Jhc2UgPSBfX2lvKDB4ZjAwMDEwMDApOworCXZvaWQgX19pb21lbSAqZ2ljX2Rpc3RfYmFzZSA9IF9faW8oMHhmMDAwMTAwMCk7CisJdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2UgPSBfX2lvKDB4ZjAwMDAxMDApOwogCXZvaWQgX19pb21lbSAqaW50ZXZ0c2EgPSBpb3JlbWFwX25vY2FjaGUoMHhmZmQyMDEwMCwgUEFHRV9TSVpFKTsKIAotCWdpY19pbml0KDAsIDI5LCBnaWNfYmFzZSwgZ2ljX2Jhc2UpOworCWdpY19pbml0KDAsIDI5LCBnaWNfZGlzdF9iYXNlLCBnaWNfY3B1X2Jhc2UpOwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjc19kZXNjKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvc3BlYXIzMjAuaCBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyMzIwLmgKaW5kZXggY2FjZjE3YS4uNTM2NzdlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvc3BlYXIzMjAuaAorKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9zcGVhcjMyMC5oCkBAIC02Miw3ICs2Miw3IEBACiAjZGVmaW5lIFNQRUFSMzIwX1NNSUkxX0JBU0UJCTB4QUIwMDAwMDAKICNkZWZpbmUgU1BFQVIzMjBfU01JSTFfU0laRQkJMHgwMTAwMDAwMAogCi0jZGVmaW5lIFNQRUFSMzIwX1NPQ19DT05GSUdfQkFTRQkweEI0MDAwMDAwCisjZGVmaW5lIFNQRUFSMzIwX1NPQ19DT05GSUdfQkFTRQkweEIzMDAwMDAwCiAjZGVmaW5lIFNQRUFSMzIwX1NPQ19DT05GSUdfU0laRQkweDAwMDAwMDcwCiAvKiBJbnRlcnJ1cHQgcmVnaXN0ZXJzIG9mZnNldHMgYW5kIG1hc2tzICovCiAjZGVmaW5lIElOVF9TVFNfTUFTS19SRUcJCTB4MDQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ncGlvLmMKaW5kZXggYmQwNjYyMC4uYWQ4MDQ4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ncGlvLmMKQEAgLTIwNyw5ICsyMDcsOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmx2bF9sb2NrW3BvcnRdLCBmbGFncyk7CiAKIAlpZiAodHlwZSAmIChJUlFfVFlQRV9MRVZFTF9MT1cgfCBJUlFfVFlQRV9MRVZFTF9ISUdIKSkKLQkJX19zZXRfaXJxX2hhbmRsZXJfdW5sb2NrZWQoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJX19zZXRfaXJxX2hhbmRsZXJfdW5sb2NrZWQoZC0+aXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAllbHNlIGlmICh0eXBlICYgKElSUV9UWVBFX0VER0VfRkFMTElORyB8IElSUV9UWVBFX0VER0VfUklTSU5HKSkKLQkJX19zZXRfaXJxX2hhbmRsZXJfdW5sb2NrZWQoaXJxLCBoYW5kbGVfZWRnZV9pcnEpOworCQlfX3NldF9pcnFfaGFuZGxlcl91bmxvY2tlZChkLT5pcnEsIGhhbmRsZV9lZGdlX2lycSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2Nsay5oIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xrLmgKaW5kZXggZDc3MjM5NS4uYTIxN2Y2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xrLmgKQEAgLTIwLDYgKzIwLDggQEAKICNpZm5kZWYgX19NQUNIX0NMS19ICiAjZGVmaW5lIF9fTUFDSF9DTEtfSAogCitzdHJ1Y3QgY2xrOworCiB2b2lkIHRlZ3JhX3BlcmlwaF9yZXNldF9kZWFzc2VydChzdHJ1Y3QgY2xrICpjKTsKIHZvaWQgdGVncmFfcGVyaXBoX3Jlc2V0X2Fzc2VydChzdHJ1Y3QgY2xrICpjKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xrZGV2LmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGtkZXYuaAppbmRleCA0MTJmNWM2Li42NmNkM2Y0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGtkZXYuaAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGtkZXYuaApAQCAtMjAsNiArMjAsOCBAQAogI2lmbmRlZiBfX01BQ0hfQ0xLREVWX0gKICNkZWZpbmUgX19NQUNIX0NMS0RFVl9ICiAKK3N0cnVjdCBjbGs7CisKIHN0YXRpYyBpbmxpbmUgaW50IF9fY2xrX2dldChzdHJ1Y3QgY2xrICpjbGspCiB7CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9rYmMuaCBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2tiYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0Yzc3OTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9rYmMuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogUGxhdGZvcm0gZGVmaW5pdGlvbnMgZm9yIHRlZ3JhLWtiYyBrZXlib2FyZCBpbnB1dCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSwgTlZJRElBIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEFTTUFSTV9BUkNIX1RFR1JBX0tCQ19ICisjZGVmaW5lIEFTTUFSTV9BUkNIX1RFR1JBX0tCQ19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKworI2lmZGVmIENPTkZJR19BUkNIX1RFR1JBXzJ4X1NPQworI2RlZmluZSBLQkNfTUFYX0dQSU8JMjQKKyNkZWZpbmUgS0JDX01BWF9LUEVOVAk4CisjZWxzZQorI2RlZmluZSBLQkNfTUFYX0dQSU8JMjAKKyNkZWZpbmUgS0JDX01BWF9LUEVOVAk3CisjZW5kaWYKKworI2RlZmluZSBLQkNfTUFYX1JPVwkxNgorI2RlZmluZSBLQkNfTUFYX0NPTAk4CisjZGVmaW5lIEtCQ19NQVhfS0VZCShLQkNfTUFYX1JPVyAqIEtCQ19NQVhfQ09MKQorCitzdHJ1Y3QgdGVncmFfa2JjX3Bpbl9jZmcgeworCWJvb2wgaXNfcm93OworCXVuc2lnbmVkIGNoYXIgbnVtOworfTsKKworc3RydWN0IHRlZ3JhX2tiY193YWtlX2tleSB7CisJdTggcm93OjQ7CisJdTggY29sOjQ7Cit9OworCitzdHJ1Y3QgdGVncmFfa2JjX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCBkZWJvdW5jZV9jbnQ7CisJdW5zaWduZWQgaW50IHJlcGVhdF9jbnQ7CisKKwl1bnNpZ25lZCBpbnQgd2FrZV9jbnQ7IC8qIDA6d2FrZSBvbiBhbnkga2V5ID4xOndha2Ugb24gd2FrZV9jZmcgKi8KKwljb25zdCBzdHJ1Y3QgdGVncmFfa2JjX3dha2Vfa2V5ICp3YWtlX2NmZzsKKworCXN0cnVjdCB0ZWdyYV9rYmNfcGluX2NmZyBwaW5fY2ZnW0tCQ19NQVhfR1BJT107CisJY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGE7CisKKwlib29sIHdha2V1cDsKKwlib29sIHVzZV9mbl9tYXA7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2lycS5jIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pcnEuYwppbmRleCBkZTdkZmFkLi4xN2M3NGQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaXJxLmMKQEAgLTQ2LDI0ICs0NiwyNCBAQAogI2RlZmluZSBJQ1RMUl9DT1BfSUVSX0NMUgkweDM4CiAjZGVmaW5lIElDVExSX0NPUF9JRVBfQ0xBU1MJMHgzYwogCi1zdGF0aWMgdm9pZCAoKmdpY19tYXNrX2lycSkoc3RydWN0IGlycV9kYXRhICpkKTsKLXN0YXRpYyB2b2lkICgqZ2ljX3VubWFza19pcnEpKHN0cnVjdCBpcnFfZGF0YSAqZCk7CitzdGF0aWMgdm9pZCAoKnRlZ3JhX2dpY19tYXNrX2lycSkoc3RydWN0IGlycV9kYXRhICpkKTsKK3N0YXRpYyB2b2lkICgqdGVncmFfZ2ljX3VubWFza19pcnEpKHN0cnVjdCBpcnFfZGF0YSAqZCk7CiAKLSNkZWZpbmUgaXJxX3RvX2ljdGxyKGlycSkgKCgoaXJxKS0zMikgPj4gNSkKKyNkZWZpbmUgaXJxX3RvX2ljdGxyKGlycSkgKCgoaXJxKSAtIDMyKSA+PiA1KQogc3RhdGljIHZvaWQgX19pb21lbSAqdGVncmFfaWN0bHJfYmFzZSA9IElPX0FERFJFU1MoVEVHUkFfUFJJTUFSWV9JQ1RMUl9CQVNFKTsKLSNkZWZpbmUgaWN0bHJfdG9fdmlydChpY3RscikgKHRlZ3JhX2ljdGxyX2Jhc2UgKyAoaWN0bHIpKjB4MTAwKQorI2RlZmluZSBpY3Rscl90b192aXJ0KGljdGxyKSAodGVncmFfaWN0bHJfYmFzZSArIChpY3RscikgKiAweDEwMCkKIAogc3RhdGljIHZvaWQgdGVncmFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdm9pZCBfX2lvbWVtICphZGRyID0gaWN0bHJfdG9fdmlydChpcnFfdG9faWN0bHIoZC0+aXJxKSk7Ci0JZ2ljX21hc2tfaXJxKGQpOwotCXdyaXRlbCgxPDwoZC0+aXJxJjMxKSwgYWRkcitJQ1RMUl9DUFVfSUVSX0NMUik7CisJdGVncmFfZ2ljX21hc2tfaXJxKGQpOworCXdyaXRlbCgxIDw8IChkLT5pcnEgJiAzMSksIGFkZHIrSUNUTFJfQ1BVX0lFUl9DTFIpOwogfQogCiBzdGF0aWMgdm9pZCB0ZWdyYV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXZvaWQgX19pb21lbSAqYWRkciA9IGljdGxyX3RvX3ZpcnQoaXJxX3RvX2ljdGxyKGQtPmlycSkpOwotCWdpY191bm1hc2tfaXJxKGQpOworCXRlZ3JhX2dpY191bm1hc2tfaXJxKGQpOwogCXdyaXRlbCgxPDwoZC0+aXJxJjMxKSwgYWRkcitJQ1RMUl9DUFVfSUVSX1NFVCk7CiB9CiAKQEAgLTk4LDggKzk4LDggQEAKIAkJIElPX0FERFJFU1MoVEVHUkFfQVJNX1BFUklGX0JBU0UgKyAweDEwMCkpOwogCiAJZ2ljID0gZ2V0X2lycV9jaGlwKDI5KTsKLQlnaWNfdW5tYXNrX2lycSA9IGdpYy0+aXJxX3VubWFzazsKLQlnaWNfbWFza19pcnEgPSBnaWMtPmlycV9tYXNrOworCXRlZ3JhX2dpY191bm1hc2tfaXJxID0gZ2ljLT5pcnFfdW5tYXNrOworCXRlZ3JhX2dpY19tYXNrX2lycSA9IGdpYy0+aXJxX21hc2s7CiAJdGVncmFfaXJxLmlycV9hY2sgPSBnaWMtPmlycV9hY2s7CiAjaWZkZWYgQ09ORklHX1NNUAogCXRlZ3JhX2lycS5pcnFfc2V0X2FmZmluaXR5ID0gZ2ljLT5pcnFfc2V0X2FmZmluaXR5OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL0tjb25maWcKaW5kZXggM2Y3YjVlOS4uOWNkZWM1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9LY29uZmlnCkBAIC0yLDE3ICsyLDE5IEBACiAJZGVwZW5kcyBvbiBBUkNIX1ZFUlNBVElMRQogCiBjb25maWcgQVJDSF9WRVJTQVRJTEVfUEIKLQlib29sICJTdXBwb3J0IFZlcnNhdGlsZS9QQiBwbGF0Zm9ybSIKKwlib29sICJTdXBwb3J0IFZlcnNhdGlsZSBQbGF0Zm9ybSBCYXNlYm9hcmQgZm9yIEFSTTkyNkVKLVMiCiAJc2VsZWN0IENQVV9BUk05MjZUCiAJc2VsZWN0IE1JR0hUX0hBVkVfUENJCiAJZGVmYXVsdCB5CiAJaGVscAotCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFZlcnNhdGlsZS9QQiBwbGF0Zm9ybS4KKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBWZXJzYXRpbGUgUGxhdGZvcm0gQmFzZWJvYXJkCisJICBmb3IgdGhlIEFSTTkyNkVKLVMuCiAKIGNvbmZpZyBNQUNIX1ZFUlNBVElMRV9BQgotCWJvb2wgIlN1cHBvcnQgVmVyc2F0aWxlL0FCIHBsYXRmb3JtIgorCWJvb2wgIlN1cHBvcnQgVmVyc2F0aWxlIEFwcGxpY2F0aW9uIEJhc2Vib2FyZCBmb3IgQVJNOTI2RUotUyIKIAlzZWxlY3QgQ1BVX0FSTTkyNlQKIAloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgVmVyc2F0aWxlL0FQIHBsYXRmb3JtLgorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFZlcnNhdGlsZSBBcHBsaWNhdGlvbiBCYXNlYm9hcmQKKwkgIGZvciB0aGUgQVJNOTI2RUotUy4KIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL3BsYXRzbXAuYwppbmRleCBiMTY4N2I2Li42MzRiZjFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL3BsYXRzbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL3BsYXRzbXAuYwpAQCAtMzksNyArMzksNyBAQAogICogb2JzZXJ2ZXJzLCBpcnJlc3BlY3RpdmUgb2Ygd2hldGhlciB0aGV5J3JlIHRha2luZyBwYXJ0IGluIGNvaGVyZW5jeQogICogb3Igbm90LiAgVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBob3RwbHVnIGNvZGUgdG8gd29yayByZWxpYWJseS4KICAqLwotc3RhdGljIHZvaWQgd3JpdGVfcGVuX3JlbGVhc2UoaW50IHZhbCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCB3cml0ZV9wZW5fcmVsZWFzZShpbnQgdmFsKQogewogCXBlbl9yZWxlYXNlID0gdmFsOwogCXNtcF93bWIoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL3YybS5jCmluZGV4IGE5ZWQzNDIuLjFlZGFlNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvYXJtX3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3RpbWVyLXNwLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3NwODEwLmg+CiAKICNpbmNsdWRlIDxtYWNoL21vdGhlcmJvYXJkLmg+CiAKQEAgLTUwLDggKzUxLDE2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCB2Mm1fdGltZXJfaW5pdCh2b2lkKQogeworCXUzMiBzY2N0cmw7CisKIAl2ZXJzYXRpbGVfc2NoZWRfY2xvY2tfaW5pdChNTUlPX1AyVihWMk1fU1lTXzI0TUhaKSwgMjQwMDAwMDApOwogCisJLyogU2VsZWN0IDFNSHogVElNQ0xLIGFzIHRoZSByZWZlcmVuY2UgY2xvY2sgZm9yIFNQODA0IHRpbWVycyAqLworCXNjY3RybCA9IHJlYWRsKE1NSU9fUDJWKFYyTV9TWVNDVEwgKyBTQ0NUUkwpKTsKKwlzY2N0cmwgfD0gU0NDVFJMX1RJTUVSRU4wU0VMX1RJTUNMSzsKKwlzY2N0cmwgfD0gU0NDVFJMX1RJTUVSRU4xU0VMX1RJTUNMSzsKKwl3cml0ZWwoc2NjdHJsLCBNTUlPX1AyVihWMk1fU1lTQ1RMICsgU0NDVFJMKSk7CisKIAl3cml0ZWwoMCwgTU1JT19QMlYoVjJNX1RJTUVSMCkgKyBUSU1FUl9DVFJMKTsKIAl3cml0ZWwoMCwgTU1JT19QMlYoVjJNX1RJTUVSMSkgKyBUSU1FUl9DVFJMKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggOWQzMGM2Zi4uZTQ1MDliYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC00MDUsNyArNDA1LDcgQEAKIGNvbmZpZyBDUFVfMzJ2NksKIAlib29sICJTdXBwb3J0IEFSTSBWNksgcHJvY2Vzc29yIGV4dGVuc2lvbnMiIGlmICFTTVAKIAlkZXBlbmRzIG9uIENQVV9WNiB8fCBDUFVfVjcKLQlkZWZhdWx0IHkgaWYgU01QICYmICEoQVJDSF9NWDMgfHwgQVJDSF9PTUFQMikKKwlkZWZhdWx0IHkgaWYgU01QCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3VyIEFSTXY2IHByb2Nlc3NvciBzdXBwb3J0cyB0aGUgJ0snIGV4dGVuc2lvbi4KIAkgIFRoaXMgZW5hYmxlcyB0aGUga2VybmVsIHRvIHVzZSBzb21lIGluc3RydWN0aW9ucyBub3QgcHJlc2VudApAQCAtNDE2LDcgKzQxNiw3IEBACiAjIEFSTXY3CiBjb25maWcgQ1BVX1Y3CiAJYm9vbCAiU3VwcG9ydCBBUk0gVjcgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQiB8fCBNQUNIX1JFQUxWSUVXX1BCWAotCXNlbGVjdCBDUFVfMzJ2NksgaWYgIUFSQ0hfT01BUDIKKwlzZWxlY3QgQ1BVXzMydjZLCiAJc2VsZWN0IENQVV8zMnY3CiAJc2VsZWN0IENQVV9BQlJUX0VWNwogCXNlbGVjdCBDUFVfUEFCUlRfVjcKQEAgLTY0NCw3ICs2NDQsNyBAQAogCiBjb25maWcgU1dQX0VNVUxBVEUKIAlib29sICJFbXVsYXRlIFNXUC9TV1BCIGluc3RydWN0aW9ucyIKLQlkZXBlbmRzIG9uIENQVV9WNyAmJiAhQ1BVX1Y2CisJZGVwZW5kcyBvbiAhQ1BVX1VTRV9ET01BSU5TICYmIENQVV9WNyAmJiAhQ1BVX1Y2CiAJc2VsZWN0IEhBVkVfUFJPQ19DUFUgaWYgUFJPQ19GUwogCWRlZmF1bHQgeSBpZiBTTVAKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMgYi9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMKaW5kZXggMTcwYzliYi4uZjJjZTM4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLWwyeDAuYwpAQCAtNDksNyArNDksMTMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZV9zeW5jKHZvaWQpCiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gbDJ4MF9iYXNlOworCisjaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNzUzOTcwCisJLyogd3JpdGUgdG8gYW4gdW5tbWFwcGVkIHJlZ2lzdGVyICovCisJd3JpdGVsX3JlbGF4ZWQoMCwgYmFzZSArIEwyWDBfRFVNTVlfUkVHKTsKKyNlbHNlCiAJd3JpdGVsX3JlbGF4ZWQoMCwgYmFzZSArIEwyWDBfQ0FDSEVfU1lOQyk7CisjZW5kaWYKIAljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0NBQ0hFX1NZTkMsIDEpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggNTE2NDA2OS4uY2RkZDY4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtMjk3LDYgKzI5NywxMiBAQAogCW1lbWJsb2NrX3Jlc2VydmUoX19wYShfc3RleHQpLCBfZW5kIC0gX3N0ZXh0KTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAorCWlmIChwaHlzX2luaXRyZF9zaXplICYmCisJICAgIG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChwaHlzX2luaXRyZF9zdGFydCwgcGh5c19pbml0cmRfc2l6ZSkpIHsKKwkJcHJfZXJyKCJJTklUUkQ6IDB4JTA4bHgrMHglMDhseCBvdmVybGFwcyBpbi11c2UgbWVtb3J5IHJlZ2lvbiAtIGRpc2FibGluZyBpbml0cmRcbiIsCisJCSAgICAgICBwaHlzX2luaXRyZF9zdGFydCwgcGh5c19pbml0cmRfc2l6ZSk7CisJCXBoeXNfaW5pdHJkX3N0YXJ0ID0gcGh5c19pbml0cmRfc2l6ZSA9IDA7CisJfQogCWlmIChwaHlzX2luaXRyZF9zaXplKSB7CiAJCW1lbWJsb2NrX3Jlc2VydmUocGh5c19pbml0cmRfc3RhcnQsIHBoeXNfaW5pdHJkX3NpemUpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXY3LlMgYi9hcmNoL2FybS9tbS9wcm9jLXY3LlMKaW5kZXggMGMxMTcyYi4uOGUzMzU2MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtdjcuUwpAQCAtMjY0LDYgKzI2NCwxMiBAQAogCW9ycmVxCXIxMCwgcjEwLCAjMSA8PCA2CQlAIHNldCBiaXQgIzYKIAltY3JlcQlwMTUsIDAsIHIxMCwgYzE1LCBjMCwgMQkJQCB3cml0ZSBkaWFnbm9zdGljIHJlZ2lzdGVyCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJNX0VSUkFUQV83NTE0NzIKKwljbXAJcjYsICMweDMwCQkJQCBwcmVzZW50IHByaW9yIHRvIHIzcDAKKwltcmNsdAlwMTUsIDAsIHIxMCwgYzE1LCBjMCwgMQkJQCByZWFkIGRpYWdub3N0aWMgcmVnaXN0ZXIKKwlvcnJsdAlyMTAsIHIxMCwgIzEgPDwgMTEJCUAgc2V0IGJpdCAjMTEKKwltY3JsdAlwMTUsIDAsIHIxMCwgYzE1LCBjMCwgMQkJQCB3cml0ZSBkaWFnbm9zdGljIHJlZ2lzdGVyCisjZW5kaWYKIAogMzoJbW92CXIxMCwgIzAKICNpZmRlZiBIQVJWQVJEX0NBQ0hFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9jb21tb24uYyBiL2FyY2gvYXJtL29wcm9maWxlL2NvbW1vbi5jCmluZGV4IDhhYTk3NDQuLmMwNzRlNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL29wcm9maWxlL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL2NvbW1vbi5jCkBAIC0xMCw4ICsxMCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L29wcm9maWxlLmg+CkBAIC00Niw2ICs0NCw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIH0KKyNlbmRpZgogCiBzdGF0aWMgaW50IHJlcG9ydF90cmFjZShzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWUsIHZvaWQgKmQpCiB7CkBAIC04NSw3ICs4NCw3IEBACiAKIAkvKiBmcmFtZSBwb2ludGVycyBzaG91bGQgc3RyaWN0bHkgcHJvZ3Jlc3MgYmFjayB1cCB0aGUgc3RhY2sKIAkgKiAodG93YXJkcyBoaWdoZXIgYWRkcmVzc2VzKSAqLwotCWlmICh0YWlsID49IGJ1ZnRhaWxbMF0uZnApCisJaWYgKHRhaWwgKyAxID49IGJ1ZnRhaWxbMF0uZnApCiAJCXJldHVybiBOVUxMOwogCiAJcmV0dXJuIGJ1ZnRhaWxbMF0uZnAtMTsKQEAgLTExMSw2ICsxMTAsNyBAQAogCiBpbnQgX19pbml0IG9wcm9maWxlX2FyY2hfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqb3BzKQogeworCS8qIHByb3ZpZGUgYmFja3RyYWNlIHN1cHBvcnQgYWxzbyBpbiB0aW1lciBtb2RlOiAqLwogCW9wcy0+YmFja3RyYWNlCQk9IGFybV9iYWNrdHJhY2U7CiAKIAlyZXR1cm4gb3Byb2ZpbGVfcGVyZl9pbml0KG9wcyk7CkBAIC0xMjAsMTEgKzEyMCwzIEBACiB7CiAJb3Byb2ZpbGVfcGVyZl9leGl0KCk7CiB9Ci0jZWxzZQotaW50IF9faW5pdCBvcHJvZmlsZV9hcmNoX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcykKLXsKLQlwcl9pbmZvKCJvcHJvZmlsZTogaGFyZHdhcmUgY291bnRlcnMgbm90IGF2YWlsYWJsZVxuIik7Ci0JcmV0dXJuIC1FTk9ERVY7Ci19Ci12b2lkIF9fZXhpdCBvcHJvZmlsZV9hcmNoX2V4aXQodm9pZCkge30KLSNlbmRpZiAvKiBDT05GSUdfSFdfUEVSRl9FVkVOVFMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCmluZGV4IDNhNzBlYmYuLmZmNDY5YzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtOTUsNiArOTUsNyBAQAogCWNhc2UgTUFDSF9UWVBFX01YMzVfM0RTOgogCWNhc2UgTUFDSF9UWVBFX1BDTTA0MzoKIAljYXNlIE1BQ0hfVFlQRV9MSUxMWTExMzE6CisJY2FzZSBNQUNIX1RZUEVfVlBSMjAwOgogCQl1YXJ0X2Jhc2UgPSBNWDNYX1VBUlQxX0JBU0VfQUREUjsKIAkJYnJlYWs7CiAJY2FzZSBNQUNIX1RZUEVfTUFHWF9aTjU6CkBAIC0xMDIsNiArMTAzLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBNQUNIX1RZUEVfTVg1MV9CQUJCQUdFOgogCWNhc2UgTUFDSF9UWVBFX0VVS1JFQV9DUFVJTVg1MVNEOgorCWNhc2UgTUFDSF9UWVBFX01YNTFfM0RTOgogCQl1YXJ0X2Jhc2UgPSBNWDUxX1VBUlQxX0JBU0VfQUREUjsKIAkJYnJlYWs7CiAJY2FzZSBNQUNIX1RZUEVfTVg1MF9SRFA6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCmluZGV4IDE4ZmUzY2IuLmI2MzMzYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCkBAIC0xNDQsMTIgKzE0NCw5IEBACiBjb25maWcgT01BUF9JT01NVV9JVkEyCiAJYm9vbAogCi1jaG9pY2UKLQlwcm9tcHQgIlN5c3RlbSB0aW1lciIKLQlkZWZhdWx0IE9NQVBfMzJLX1RJTUVSIGlmICFBUkNIX09NQVAxNVhYCi0KIGNvbmZpZyBPTUFQX01QVV9USU1FUgogCWJvb2wgIlVzZSBtcHUgdGltZXIiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxCiAJaGVscAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgT01BUCBtcHUgdGltZXIuIFRoaXMKIAkgIHRpbWVyIHByb3ZpZGVzIG1vcmUgaW50cmEtdGljayByZXNvbHV0aW9uIHRoYW4gdGhlIDMyS0h6IHRpbWVyLApAQCAtMTU4LDYgKzE1NSw3IEBACiBjb25maWcgT01BUF8zMktfVElNRVIKIAlib29sICJVc2UgMzJLSHogdGltZXIiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDJQTFVTCisJZGVmYXVsdCB5IGlmIChBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDJQTFVTKQogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhlIE9NQVAgMzJLSHogdGltZXIuCiAJICBUaGlzIHRpbWVyIHNhdmVzIHBvd2VyIGNvbXBhcmVkIHRvIHRoZSBPTUFQX01QVV9USU1FUiwgYW5kIGhhcwpAQCAtMTY1LDggKzE2Myw2IEBACiAJICBpbnRyYS10aWNrIHJlc29sdXRpb24gdGhhbiBPTUFQX01QVV9USU1FUi4gVGhlIDMyS0h6IHRpbWVyIGlzCiAJICBjdXJyZW50bHkgb25seSBhdmFpbGFibGUgZm9yIE9NQVAxNlhYLCAyNFhYLCAzNFhYIGFuZCBPTUFQNC4KIAotZW5kY2hvaWNlCi0KIGNvbmZpZyBPTUFQM19MMl9BVVhfU0VDVVJFX1NBVkVfUkVTVE9SRQogCWJvb2wgIk9NQVAzIEhTL0VNVSBzYXZlIGFuZCByZXN0b3JlIGZvciBMMiBBVVggY29udHJvbCByZWdpc3RlciIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgUE0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb3VudGVyXzMyay5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NvdW50ZXJfMzJrLmMKaW5kZXggZWE0NjQ0MC4uODYyZGRhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvdW50ZXJfMzJrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NvdW50ZXJfMzJrLmMKQEAgLTM2LDggKzM2LDYgQEAKIAogI2RlZmluZSBPTUFQMTZYWF9USU1FUl8zMktfU1lOQ0hST05JWkVECQkweGZmZmJjNDEwCiAKLSNpZiAhKGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkpCi0KICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogCiAvKgpAQCAtMTIyLDEyICsxMjAsMjQgQEAKICNkZWZpbmUgU0NfTVVMVAkJNDAwMDAwMDAwMHUKICNkZWZpbmUgU0NfU0hJRlQJMTcKIAotdW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugc2NoZWRfY2xvY2sodm9pZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2UgX29tYXBfMzJrX3NjaGVkX2Nsb2NrKHZvaWQpCiB7CiAJdTMyIGN5YyA9IGNsb2Nrc291cmNlXzMyay5yZWFkKCZjbG9ja3NvdXJjZV8zMmspOwogCXJldHVybiBjeWNfdG9fZml4ZWRfc2NoZWRfY2xvY2soJmNkLCBjeWMsICh1MzIpfjAsIFNDX01VTFQsIFNDX1NISUZUKTsKIH0KIAorI2lmbmRlZiBDT05GSUdfT01BUF9NUFVfVElNRVIKK3Vuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIHNjaGVkX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIF9vbWFwXzMya19zY2hlZF9jbG9jaygpOworfQorI2Vsc2UKK3Vuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIG9tYXBfMzJrX3NjaGVkX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIF9vbWFwXzMya19zY2hlZF9jbG9jaygpOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIG5vdHJhY2Ugb21hcF91cGRhdGVfc2NoZWRfY2xvY2sodm9pZCkKIHsKIAl1MzIgY3ljID0gY2xvY2tzb3VyY2VfMzJrLnJlYWQoJmNsb2Nrc291cmNlXzMyayk7CkBAIC0xNjAsNyArMTcwLDcgQEAKIAkqdHMgPSAqdHNwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXRfY2xvY2tzb3VyY2VfMzJrKHZvaWQpCitpbnQgX19pbml0IG9tYXBfaW5pdF9jbG9ja3NvdXJjZV8zMmsodm9pZCkKIHsKIAlzdGF0aWMgY2hhciBlcnJbXSBfX2luaXRkYXRhID0gS0VSTl9FUlIKIAkJCSIlczogY2FuJ3QgcmVnaXN0ZXIgY2xvY2tzb3VyY2UhXG4iOwpAQCAtMTk1LDcgKzIwNSwzIEBACiAJfQogCXJldHVybiAwOwogfQotYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfY2xvY2tzb3VyY2VfMzJrKTsKLQotI2VuZGlmCS8qICEoZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSkgKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCmluZGV4IGM0YjJiNDcuLjg1MzYzMDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKQEAgLTUzLDcgKzUzLDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIE9NQVBfRE1BX0FDVElWRQkJCTB4MDEKLSNkZWZpbmUgT01BUDJfRE1BX0NTUl9DTEVBUl9NQVNLCTB4ZmZlCisjZGVmaW5lIE9NQVAyX0RNQV9DU1JfQ0xFQVJfTUFTSwkweGZmZmZmZmZmCiAKICNkZWZpbmUgT01BUF9GVU5DX01VWF9BUk1fQkFTRQkJKDB4ZmZmZTEwMDAgKyAweGVjKQogCkBAIC0xODczLDcgKzE4NzMsNyBAQAogCQlwcmludGsoS0VSTl9JTkZPICJETUEgbWlzYWxpZ25lZCBlcnJvciB3aXRoIGRldmljZSAlZFxuIiwKIAkJICAgICAgIGRtYV9jaGFuW2NoXS5kZXZfaWQpOwogCi0JcC0+ZG1hX3dyaXRlKE9NQVAyX0RNQV9DU1JfQ0xFQVJfTUFTSywgQ1NSLCBjaCk7CisJcC0+ZG1hX3dyaXRlKHN0YXR1cywgQ1NSLCBjaCk7CiAJcC0+ZG1hX3dyaXRlKDEgPDwgY2gsIElSUVNUQVRVU19MMCwgY2gpOwogCS8qIHJlYWQgYmFjayB0aGUgcmVnaXN0ZXIgdG8gZmx1c2ggdGhlIHdyaXRlICovCiAJcC0+ZG1hX3JlYWQoSVJRU1RBVFVTX0wwLCBjaCk7CkBAIC0xODkzLDEwICsxODkzLDkgQEAKIAkJCU9NQVBfRE1BX0NIQUlOX0lOQ1FIRUFEKGNoYWluX2lkKTsKIAogCQlzdGF0dXMgPSBwLT5kbWFfcmVhZChDU1IsIGNoKTsKKwkJcC0+ZG1hX3dyaXRlKHN0YXR1cywgQ1NSLCBjaCk7CiAJfQogCi0JcC0+ZG1hX3dyaXRlKHN0YXR1cywgQ1NSLCBjaCk7Ci0KIAlpZiAobGlrZWx5KGRtYV9jaGFuW2NoXS5jYWxsYmFjayAhPSBOVUxMKSkKIAkJZG1hX2NoYW5bY2hdLmNhbGxiYWNrKGNoLCBzdGF0dXMsIGRtYV9jaGFuW2NoXS5kYXRhKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb21tb24uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY29tbW9uLmgKaW5kZXggNmI4MDg4ZS4uMjliMmFmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb21tb24uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbW1vbi5oCkBAIC0zNSw2ICszNSw5IEBACiAKIGV4dGVybiB2b2lkIG9tYXBfbWFwX2NvbW1vbl9pbyh2b2lkKTsKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIG9tYXBfdGltZXI7CitleHRlcm4gYm9vbCBvbWFwXzMya190aW1lcl9pbml0KHZvaWQpOworZXh0ZXJuIGludCBfX2luaXQgb21hcF9pbml0X2Nsb2Nrc291cmNlXzMyayh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBvbWFwXzMya19zY2hlZF9jbG9jayh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgb21hcF9yZXNlcnZlKHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYyBiL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCmluZGV4IGI3N2UwMTguLmE5YWE1YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCkBAIC0xMzksMTAgKzEzOSwxMSBAQAogI2RlZmluZSBtZnBfY29uZmlndXJlZChwKQkoKHApLT5jb25maWcgIT0gLTEpCiAKIC8qCi0gKiBwZXJmb3JtIGEgcmVhZC1iYWNrIG9mIGFueSBNRlBSIHJlZ2lzdGVyIHRvIG1ha2Ugc3VyZSB0aGUKKyAqIHBlcmZvcm0gYSByZWFkLWJhY2sgb2YgYW55IHZhbGlkIE1GUFIgcmVnaXN0ZXIgdG8gbWFrZSBzdXJlIHRoZQogICogcHJldmlvdXMgd3JpdGluZ3MgYXJlIGZpbmlzaGVkCiAgKi8KLSNkZWZpbmUgbWZwcl9zeW5jKCkJKHZvaWQpX19yYXdfcmVhZGwobWZwcl9tbWlvX2Jhc2UgKyAwKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbWZwcl9vZmZfcmVhZGJhY2s7CisjZGVmaW5lIG1mcHJfc3luYygpCSh2b2lkKV9fcmF3X3JlYWRsKG1mcHJfbW1pb19iYXNlICsgbWZwcl9vZmZfcmVhZGJhY2spCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21mcF9jb25maWdfcnVuKHN0cnVjdCBtZnBfcGluICpwKQogewpAQCAtMjQ4LDYgKzI0OSw5IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOwogCisJLyogbWZwIG9mZnNldCBmb3IgcmVhZGJhY2sgKi8KKwltZnByX29mZl9yZWFkYmFjayA9IG1hcFswXS5vZmZzZXQ7CisKIAlmb3IgKHAgPSBtYXA7IHAtPnN0YXJ0ICE9IE1GUF9QSU5fSU5WQUxJRDsgcCsrKSB7CiAJCW9mZnNldCA9IHAtPm9mZnNldDsKIAkJaSA9IHAtPnN0YXJ0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtczVwL0tjb25maWcKaW5kZXggZGViMzk5NS4uNTU3ZjhjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXAvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LXM1cC9LY29uZmlnCkBAIC0zNyw2ICszNywxNCBAQAogCWhlbHAKIAkgIENvbW1vbiBjb2RlIGZvciB0aGUgR1BJTyBpbnRlcnJ1cHRzIChvdGhlciB0aGFuIGV4dGVybmFsIGludGVycnVwdHMuKQogCitjb21tZW50ICJTeXN0ZW0gTU1VIgorCitjb25maWcgUzVQX1NZU1RFTV9NTVUKKwlib29sICJTNVAgU1lTVEVNIE1NVSIKKwlkZXBlbmRzIG9uIEFSQ0hfUzVQVjMxMAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIFN5c3RlbSBNTVUKKwogY29uZmlnIFM1UF9ERVZfRklNQzAKIAlib29sCiAJaGVscApAQCAtNjYsMTkgKzc0LDMgQEAKIAlib29sCiAJaGVscAogCSAgQ29tcGlsZSBpbiBwbGF0Zm9ybSBkZXZpY2UgZGVmaW5pdGlvbnMgZm9yIE1JUEktQ1NJUyBjaGFubmVsIDEKLQotbWVudWNvbmZpZyBTNVBfU1lTTU1VCi0JYm9vbCAiU1lTTU1VIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX1M1UFYzMTAKLQloZWxwCi0JICBUaGlzIGlzIGEgU3lzdGVtIE1NVSBkcml2ZXIgZm9yIFNhbXN1bmcgQVJNIGJhc2VkIFNvYy4KLQotaWYgUzVQX1NZU01NVQotCi1jb25maWcgUzVQX1NZU01NVV9ERUJVRwotCWJvb2wgIkVuYWJsZXMgZGVidWcgbWVzc2FnZXMiCi0JZGVwZW5kcyBvbiBTNVBfU1lTTU1VCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIFNZU01NVSBkcml2ZXIgZGVidWcgbWFzc2FnZXMuCi0KLWVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtczVwL01ha2VmaWxlCmluZGV4IDkyZWZlMWEuLjRiZDVjZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw3IEBACiBvYmoteQkJCQkrPSBpcnEubwogb2JqLSQoQ09ORklHX1M1UF9FWFRfSU5UKQkrPSBpcnEtZWludC5vCiBvYmotJChDT05GSUdfUzVQX0dQSU9fSU5UKQkrPSBpcnEtZ3Bpb2ludC5vCitvYmotJChDT05GSUdfUzVQX1NZU1RFTV9NTVUpCSs9IHN5c21tdS5vCiBvYmotJChDT05GSUdfUE0pCQkrPSBwbS5vCiBvYmotJChDT05GSUdfUE0pCQkrPSBpcnEtcG0ubwogCkBAIC0zMCw0ICszMSwzIEBACiBvYmotJChDT05GSUdfUzVQX0RFVl9PTkVOQU5EKQkrPSBkZXYtb25lbmFuZC5vCiBvYmotJChDT05GSUdfUzVQX0RFVl9DU0lTMCkJKz0gZGV2LWNzaXMwLm8KIG9iai0kKENPTkZJR19TNVBfREVWX0NTSVMxKQkrPSBkZXYtY3NpczEubwotb2JqLSQoQ09ORklHX1M1UF9TWVNNTVUpCSs9IHN5c21tdS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9kZXYtdWFydC5jIGIvYXJjaC9hcm0vcGxhdC1zNXAvZGV2LXVhcnQuYwppbmRleCA2YTczNDI4Li5hZmFmODdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cC9kZXYtdWFydC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL2Rldi11YXJ0LmMKQEAgLTI4LDcgKzI4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczVwX3VhcnQwX3Jlc291cmNlW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSBTNVBfUEFfVUFSVDAsCi0JCS5lbmQJPSBTNVBfUEFfVUFSVDAgKyBTNVBfU1pfVUFSVCwKKwkJLmVuZAk9IFM1UF9QQV9VQVJUMCArIFM1UF9TWl9VQVJUIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC01MSw3ICs1MSw3IEBACiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cF91YXJ0MV9yZXNvdXJjZVtdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0CT0gUzVQX1BBX1VBUlQxLAotCQkuZW5kCT0gUzVQX1BBX1VBUlQxICsgUzVQX1NaX1VBUlQsCisJCS5lbmQJPSBTNVBfUEFfVUFSVDEgKyBTNVBfU1pfVUFSVCAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewpAQCAtNzQsNyArNzQsNyBAQAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXBfdWFydDJfcmVzb3VyY2VbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAk9IFM1UF9QQV9VQVJUMiwKLQkJLmVuZAk9IFM1UF9QQV9VQVJUMiArIFM1UF9TWl9VQVJULAorCQkuZW5kCT0gUzVQX1BBX1VBUlQyICsgUzVQX1NaX1VBUlQgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTk4LDcgKzk4LDcgQEAKICNpZiBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFMgPiAzCiAJWzBdID0gewogCQkuc3RhcnQJPSBTNVBfUEFfVUFSVDMsCi0JCS5lbmQJPSBTNVBfUEFfVUFSVDMgKyBTNVBfU1pfVUFSVCwKKwkJLmVuZAk9IFM1UF9QQV9VQVJUMyArIFM1UF9TWl9VQVJUIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC0xMjMsNyArMTIzLDcgQEAKICNpZiBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFMgPiA0CiAJWzBdID0gewogCQkuc3RhcnQJPSBTNVBfUEFfVUFSVDQsCi0JCS5lbmQJPSBTNVBfUEFfVUFSVDQgKyBTNVBfU1pfVUFSVCwKKwkJLmVuZAk9IFM1UF9QQV9VQVJUNCArIFM1UF9TWl9VQVJUIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC0xNDgsNyArMTQ4LDcgQEAKICNpZiBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFMgPiA1CiAJWzBdID0gewogCQkuc3RhcnQJPSBTNVBfUEFfVUFSVDUsCi0JCS5lbmQJPSBTNVBfUEFfVUFSVDUgKyBTNVBfU1pfVUFSVCwKKwkJLmVuZAk9IFM1UF9QQV9VQVJUNSArIFM1UF9TWl9VQVJUIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvc3lzbW11LmggYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvc3lzbW11LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMjk4ZmMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L3N5c21tdS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L3N5c21tdS5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCi0gKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KLSAqCi0gKiBTYW1zdW5nIHN5c21tdSBkcml2ZXIKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2lmbmRlZiBfX0FTTV9QTEFUX1M1UF9TWVNNTVVfSAotI2RlZmluZSBfX0FTTV9QTEFUX1M1UF9TWVNNTVVfSCBfX0ZJTEVfXwotCi0vKiBkZWJ1ZyBtYWNybyAqLwotI2lmZGVmIENPTkZJR19TNVBfU1lTTU1VX0RFQlVHCi0jZGVmaW5lIHN5c21tdV9kZWJ1ZyhmbXQsIGFyZy4uLikJcHJpbnRrKEtFUk5fSU5GTyAiWyVzXSAiIGZtdCwgX19mdW5jX18sICMjIGFyZykKLSNlbHNlCi0jZGVmaW5lIHN5c21tdV9kZWJ1ZyhmbXQsIGFyZy4uLikJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0FTTV9QTEFUX1M1UF9TWVNNTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvc3lzbW11LmMgYi9hcmNoL2FybS9wbGF0LXM1cC9zeXNtbXUuYwppbmRleCBkODA0OTE0Li5mZmU4YTQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cC9zeXNtbXUuYworKysgYi9hcmNoL2FybS9wbGF0LXM1cC9zeXNtbXUuYwpAQCAtMTYsOCArMTYsNiBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1zeXNtbXUuaD4KICNpbmNsdWRlIDxtYWNoL3N5c21tdS5oPgogCi0jaW5jbHVkZSA8cGxhdC9zeXNtbXUuaD4KLQogc3RydWN0IHN5c21tdV9jb250cm9sbGVyIHM1cF9zeXNtbXVfY250bHJzW1M1UF9TWVNNTVVfVE9UQUxfSVBOVU1dOwogCiB2b2lkIHM1cF9zeXNtbXVfcmVnaXN0ZXIoc3RydWN0IHN5c21tdV9jb250cm9sbGVyICpzeXNtbXVjb25wKQpAQCAtMTIzLDcgKzEyMSw3IEBACiAJCTogIj1yIiAocGcpIDogOiAiY2MiKTsJCVwKIAkJcGcgJj0gfjB4M2ZmZjsKIAotCXN5c21tdV9kZWJ1ZygiQ1AxNSBUVEJSMCA6IDB4JXhcbiIsIHBnKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogQ1AxNSBUVEJSMCA6IDB4JXhcbiIsIF9fZnVuY19fLCBwZyk7CiAKIAkvKiBTZXQgc3lzbW11IHBhZ2UgdGFibGUgYmFzZSBhZGRyZXNzICovCiAJX19yYXdfd3JpdGVsKHBnLCBzeXNtbXVjb25wLT5yZWdzICsgUzVQX1BUX0JBU0VfQUREUik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LXRzLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LXRzLmMKaW5kZXggMjM2ZWY4NC4uM2U0YmQ4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi10cy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtdHMuYwpAQCAtNTgsNCArNTgsMyBAQAogCiAJczNjX2RldmljZV90cy5kZXYucGxhdGZvcm1fZGF0YSA9IG5wZDsKIH0KLUVYUE9SVF9TWU1CT0woczNjMjR4eF90c19zZXRfcGxhdGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9wbS5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9wbS5oCmluZGV4IGQ5MDI1ZTMuLjMwNTE4Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcG0uaAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3BtLmgKQEAgLTE3LDYgKzE3LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCitzdHJ1Y3Qgc3lzX2RldmljZTsKKwogI2lmZGVmIENPTkZJR19QTQogCiBleHRlcm4gX19pbml0IGludCBzM2NfcG1faW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaAppbmRleCA5OWJhNjc4Li42ZGQ0NTViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvdW5jb21wcmVzcy5oCkBAIC0yNCwxMCArMjQsMTAgQEAKIHsKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopU1BFQVJfREJHX1VBUlRfQkFTRTsKIAotCXdoaWxlIChyZWFkbChiYXNlICsgVUFSVDAxeF9GUikgJiBVQVJUMDF4X0ZSX1RYRkYpCisJd2hpbGUgKHJlYWRsX3JlbGF4ZWQoYmFzZSArIFVBUlQwMXhfRlIpICYgVUFSVDAxeF9GUl9UWEZGKQogCQliYXJyaWVyKCk7CiAKLQl3cml0ZWwoYywgYmFzZSArIFVBUlQwMXhfRFIpOworCXdyaXRlbF9yZWxheGVkKGMsIGJhc2UgKyBVQVJUMDF4X0RSKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC92bWFsbG9jLmggYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC92bWFsbG9jLmgKaW5kZXggMDllOTM3Mi4uOGM4YjI0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L3ZtYWxsb2MuaApAQCAtMTQsNiArMTQsNiBAQAogI2lmbmRlZiBfX1BMQVRfVk1BTExPQ19ICiAjZGVmaW5lIF9fUExBVF9WTUFMTE9DX0gKIAotI2RlZmluZSBWTUFMTE9DX0VORAkJMHhGMDAwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORAkJMHhGMDAwMDAwMFVMCiAKICNlbmRpZiAvKiBfX1BMQVRfVk1BTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwppbmRleCAyZmVhODk3Li45ZDZmZWFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCisrKyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTEyLDcgKzEyLDcgQEAKICMKICMgICBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL21hY2hpbmVzLz9hY3Rpb249bmV3CiAjCi0jIExhc3QgdXBkYXRlOiBTdW4gRGVjIDEyIDIzOjI0OjI3IDIwMTAKKyMgTGFzdCB1cGRhdGU6IE1vbiBGZWIgNyAwODo1OToyNyAyMDExCiAjCiAjIG1hY2hpbmVfaXNfeHh4CUNPTkZJR194eHh4CQlNQUNIX1RZUEVfeHh4CQludW1iZXIKICMKQEAgLTIyNDAsNyArMjI0MCw3IEBACiB2c192MjEwCQkJTUFDSF9WU19WMjEwCQlWU19WMjEwCQkJMjI1MgogdnNfdjIxMgkJCU1BQ0hfVlNfVjIxMgkJVlNfVjIxMgkJCTIyNTMKIGhtdAkJCU1BQ0hfSE1UCQlITVQJCQkyMjU0Ci1zdWVuMwkJCU1BQ0hfU1VFTjMJCVNVRU4zCQkJMjI1NQora21fa2lya3dvb2QJCU1BQ0hfS01fS0lSS1dPT0QJS01fS0lSS1dPT0QJCTIyNTUKIHZlc3BlcgkJCU1BQ0hfVkVTUEVSCQlWRVNQRVIJCQkyMjU2CiBzdHI5CQkJTUFDSF9TVFI5CQlTVFI5CQkJMjI1Nwogb21hcDNfd2xfZmYJCU1BQ0hfT01BUDNfV0xfRkYJT01BUDNfV0xfRkYJCTIyNTgKQEAgLTI5ODcsNyArMjk4Nyw3IEBACiBlYTIwCQkJTUFDSF9FQTIwCQlFQTIwCQkJMzAwMgogYXdtMgkJCU1BQ0hfQVdNMgkJQVdNMgkJCTMwMDMKIHRpODE0OGV2bQkJTUFDSF9USTgxNDhFVk0JCVRJODE0OEVWTQkJMzAwNAotdGVncmFfc2VhYm9hcmQJCU1BQ0hfVEVHUkFfU0VBQk9BUkQJVEVHUkFfU0VBQk9BUkQJCTMwMDUKK3NlYWJvYXJkCQlNQUNIX1NFQUJPQVJECQlTRUFCT0FSRAkJMzAwNQogbGlua3N0YXRpb25fY2hsdjIJTUFDSF9MSU5LU1RBVElPTl9DSExWMglMSU5LU1RBVElPTl9DSExWMgkzMDA2CiB0ZXJhX3BybzJfcmFjawkJTUFDSF9URVJBX1BSTzJfUkFDSwlURVJBX1BSTzJfUkFDSwkJMzAwNwogcnVieXMJCQlNQUNIX1JVQllTCQlSVUJZUwkJCTMwMDgKQEAgLTMxOTAsNyArMzE5MCw3IEBACiBpY3NfaWZfdm9pcAkJTUFDSF9JQ1NfSUZfVk9JUAlJQ1NfSUZfVk9JUAkJMzIwNgogd2xmX2NyYWdnXzY0MTAJCU1BQ0hfV0xGX0NSQUdHXzY0MTAJV0xGX0NSQUdHXzY0MTAJCTMyMDcKIHB1bmljYQkJCU1BQ0hfUFVOSUNBCQlQVU5JQ0EJCQkzMjA4Ci1zYmNfbnQyNTAJCU1BQ0hfU0JDX05UMjUwCQlTQkNfTlQyNTAJCTMyMDkKK3RyaW1zbGljZQkJTUFDSF9UUklNU0xJQ0UJCVRSSU1TTElDRQkJMzIwOQogbXgyN193bXVsdHJhCQlNQUNIX01YMjdfV01VTFRSQQlNWDI3X1dNVUxUUkEJCTMyMTAKIG1hY2tlcmVsCQlNQUNIX01BQ0tFUkVMCQlNQUNLRVJFTAkJMzIxMQogZmE5eDI3CQkJTUFDSF9GQTlYMjcJCUZBOVgyNwkJCTMyMTMKQEAgLTMyMTksMyArMzIxOSwxMDAgQEAKIHBjbTA0OAkJCU1BQ0hfUENNMDQ4CQlQQ00wNDgJCQkzMjM2CiBkZHMJCQlNQUNIX0REUwkJRERTCQkJMzIzNwogY2hhbHRlbl94YTEJCU1BQ0hfQ0hBTFRFTl9YQTEJQ0hBTFRFTl9YQTEJCTMyMzgKK3RzNDh4eAkJCU1BQ0hfVFM0OFhYCQlUUzQ4WFgJCQkzMjM5Cit0b25nYTJfdGZ0dGltZXIJCU1BQ0hfVE9OR0EyX1RGVFRJTUVSCVRPTkdBMl9URlRUSU1FUgkJMzI0MAord2hpc3RsZXIJCU1BQ0hfV0hJU1RMRVIJCVdISVNUTEVSCQkzMjQxCithc2xfcGhvZW5peAkJTUFDSF9BU0xfUEhPRU5JWAlBU0xfUEhPRU5JWAkJMzI0MgorYXQ5MXNhbTkyNjNvdGxpdGUJTUFDSF9BVDkxU0FNOTI2M09UTElURQlBVDkxU0FNOTI2M09UTElURQkzMjQzCitkZHBsdWcJCQlNQUNIX0REUExVRwkJRERQTFVHCQkJMzI0NAorZDJwbHVnCQkJTUFDSF9EMlBMVUcJCUQyUExVRwkJCTMyNDUKK2t6bTlkCQkJTUFDSF9LWk05RAkJS1pNOUQJCQkzMjQ2Cit2ZXJkaV9sdGUJCU1BQ0hfVkVSRElfTFRFCQlWRVJESV9MVEUJCTMyNDcKK25hbm96b29tCQlNQUNIX05BTk9aT09NCQlOQU5PWk9PTQkJMzI0OAorZG0zNzMwX3NvbV9sdgkJTUFDSF9ETTM3MzBfU09NX0xWCURNMzczMF9TT01fTFYJCTMyNDkKK2RtMzczMF90b3JwZWRvCQlNQUNIX0RNMzczMF9UT1JQRURPCURNMzczMF9UT1JQRURPCQkzMjUwCithbmNob3Z5CQkJTUFDSF9BTkNIT1ZZCQlBTkNIT1ZZCQkJMzI1MQorcmUycmV2MjAJCU1BQ0hfUkUyUkVWMjAJCVJFMlJFVjIwCQkzMjUzCityZTJyZXYyMQkJTUFDSF9SRTJSRVYyMQkJUkUyUkVWMjEJCTMyNTQKK2NuczIxeHgJCQlNQUNIX0NOUzIxWFgJCUNOUzIxWFgJCQkzMjU1CityaWRlcgkJCU1BQ0hfUklERVIJCVJJREVSCQkJMzI1NworbnNrMzMwCQkJTUFDSF9OU0szMzAJCU5TSzMzMAkJCTMyNTgKK2NuczIxMzNldmIJCU1BQ0hfQ05TMjEzM0VWQgkJQ05TMjEzM0VWQgkJMzI1OQorejNfODE2eF9tb2QJCU1BQ0hfWjNfODE2WF9NT0QJWjNfODE2WF9NT0QJCTMyNjAKK3ozXzgxNHhfbW9kCQlNQUNIX1ozXzgxNFhfTU9ECVozXzgxNFhfTU9ECQkzMjYxCitiZWVjdAkJCU1BQ0hfQkVFQ1QJCUJFRUNUCQkJMzI2MgorZG1hX3RodW5kZXJidWcJCU1BQ0hfRE1BX1RIVU5ERVJCVUcJRE1BX1RIVU5ERVJCVUcJCTMyNjMKK29tbl9hdDkxc2FtOWcyMAkJTUFDSF9PTU5fQVQ5MVNBTTlHMjAJT01OX0FUOTFTQU05RzIwCQkzMjY0CitteDI1X2Uyc191YwkJTUFDSF9NWDI1X0UyU19VQwlNWDI1X0UyU19VQwkJMzI2NQorbWlvbmUJCQlNQUNIX01JT05FCQlNSU9ORQkJCTMyNjYKK3RvcDkwMDBfdGN1CQlNQUNIX1RPUDkwMDBfVENVCVRPUDkwMDBfVENVCQkzMjY3Cit0b3A5MDAwX2JzbAkJTUFDSF9UT1A5MDAwX0JTTAlUT1A5MDAwX0JTTAkJMzI2OAora2luZ2RvbQkJCU1BQ0hfS0lOR0RPTQkJS0lOR0RPTQkJCTMyNjkKK2FybWFkaWxsbzQ2MAkJTUFDSF9BUk1BRElMTE80NjAJQVJNQURJTExPNDYwCQkzMjcwCitscTIJCQlNQUNIX0xRMgkJTFEyCQkJMzI3MQorc3dlZGFfdG1zMgkJTUFDSF9TV0VEQV9UTVMyCQlTV0VEQV9UTVMyCQkzMjcyCitteDUzX2xvY28JCU1BQ0hfTVg1M19MT0NPCQlNWDUzX0xPQ08JCTMyNzMKK2FjZXJfYTgJCQlNQUNIX0FDRVJfQTgJCUFDRVJfQTgJCQkzMjc1CithY2VyX2dhdWd1aW4JCU1BQ0hfQUNFUl9HQVVHVUlOCUFDRVJfR0FVR1VJTgkJMzI3NgorZ3VwcHkJCQlNQUNIX0dVUFBZCQlHVVBQWQkJCTMyNzcKK214NjFfYXJkCQlNQUNIX01YNjFfQVJECQlNWDYxX0FSRAkJMzI3OAordHg1MwkJCU1BQ0hfVFg1MwkJVFg1MwkJCTMyNzkKK29tYXBsMTM4X2Nhc2VfYTMJTUFDSF9PTUFQTDEzOF9DQVNFX0EzCU9NQVBMMTM4X0NBU0VfQTMJMzI4MAordWVtZAkJCU1BQ0hfVUVNRAkJVUVNRAkJCTMyODEKK2Njd214NTFtdXQJCU1BQ0hfQ0NXTVg1MU1VVAkJQ0NXTVg1MU1VVAkJMzI4Mgorcm9ja2hvcHBlcgkJTUFDSF9ST0NLSE9QUEVSCQlST0NLSE9QUEVSCQkzMjgzCitub29rY29sb3IJCU1BQ0hfTk9PS0NPTE9SCQlOT09LQ09MT1IJCTMyODQKK2hrZGtjMTAwCQlNQUNIX0hLREtDMTAwCQlIS0RLQzEwMAkJMzI4NQordHM0Mnh4CQkJTUFDSF9UUzQyWFgJCVRTNDJYWAkJCTMyODYKK2FlYmwJCQlNQUNIX0FFQkwJCUFFQkwJCQkzMjg3Cit3YXJpbwkJCU1BQ0hfV0FSSU8JCVdBUklPCQkJMzI4OAorZ2ZzX3NwbQkJCU1BQ0hfR0ZTX1NQTQkJR0ZTX1NQTQkJCTMyODkKK2NtX3QzNzMwCQlNQUNIX0NNX1QzNzMwCQlDTV9UMzczMAkJMzI5MAoraXNjMwkJCU1BQ0hfSVNDMwkJSVNDMwkJCTMyOTEKK3Jhc2NhbAkJCU1BQ0hfUkFTQ0FMCQlSQVNDQUwJCQkzMjkyCitocmVmdjYwCQkJTUFDSF9IUkVGVjYwCQlIUkVGVjYwCQkJMzI5MwordHB0XzJfMAkJCU1BQ0hfVFBUXzJfMAkJVFBUXzJfMAkJCTMyOTQKK3B5cmFtaWRfdGQJCU1BQ0hfUFlSQU1JRF9URAkJUFlSQU1JRF9URAkJMzI5NQorc3BsZW5kb3IJCU1BQ0hfU1BMRU5ET1IJCVNQTEVORE9SCQkzMjk2CitndWZfcGxhbmV0CQlNQUNIX0dVRl9QTEFORVQJCUdVRl9QTEFORVQJCTMyOTcKK21zbTh4NjBfcXQJCU1BQ0hfTVNNOFg2MF9RVAkJTVNNOFg2MF9RVAkJMzI5OAoraHRjX2hkX21pbmkJCU1BQ0hfSFRDX0hEX01JTkkJSFRDX0hEX01JTkkJCTMyOTkKK2F0aGVuZQkJCU1BQ0hfQVRIRU5FCQlBVEhFTkUJCQkzMzAwCitkZWVwX3JfZWtfMQkJTUFDSF9ERUVQX1JfRUtfMQlERUVQX1JfRUtfMQkJMzMwMQordml2b3dfY3QJCU1BQ0hfVklWT1dfQ1QJCVZJVk9XX0NUCQkzMzAyCituZXJ5XzEwMDAJCU1BQ0hfTkVSWV8xMDAwCQlORVJZXzEwMDAJCTMzMDMKK3JmbDEwOTE0NV9zc3J2CQlNQUNIX1JGTDEwOTE0NV9TU1JWCVJGTDEwOTE0NV9TU1JWCQkzMzA0CitubWgJCQlNQUNIX05NSAkJTk1ICQkJMzMwNQord244MDJ0CQkJTUFDSF9XTjgwMlQJCVdOODAyVAkJCTMzMDYKK2RyYWdvbmV0CQlNQUNIX0RSQUdPTkVUCQlEUkFHT05FVAkJMzMwNworZ2VuZXZhX2IJCU1BQ0hfR0VORVZBX0IJCUdFTkVWQV9CCQkzMzA4CithdDkxc2FtOTI2M2Rlc2sxNmwJTUFDSF9BVDkxU0FNOTI2M0RFU0sxNkwJQVQ5MVNBTTkyNjNERVNLMTZMCTMzMDkKK2JjbWhhbmFfc3YJCU1BQ0hfQkNNSEFOQV9TVgkJQkNNSEFOQV9TVgkJMzMxMAorYmNtaGFuYV90YWJsZXQJCU1BQ0hfQkNNSEFOQV9UQUJMRVQJQkNNSEFOQV9UQUJMRVQJCTMzMTEKK2tvaQkJCU1BQ0hfS09JCQlLT0kJCQkzMzEyCit0czQ4MDAJCQlNQUNIX1RTNDgwMAkJVFM0ODAwCQkJMzMxMwordHFtYTkyNjMJCU1BQ0hfVFFNQTkyNjMJCVRRTUE5MjYzCQkzMzE0Citob2xpZGF5CQkJTUFDSF9IT0xJREFZCQlIT0xJREFZCQkJMzMxNQorZG1hXzY0MTAJCU1BQ0hfRE1BNjQxMAkJRE1BNjQxMAkJCTMzMTYKK3BjYXRzX292ZXJsYXkJCU1BQ0hfUENBVFNfT1ZFUkxBWQlQQ0FUU19PVkVSTEFZCQkzMzE3Citod2d3NjQxMAkJTUFDSF9IV0dXNjQxMAkJSFdHVzY0MTAJCTMzMTgKK3NoZW56aG91CQlNQUNIX1NIRU5aSE9VCQlTSEVOWkhPVQkJMzMxOQorY3dtZTkyMTAJCU1BQ0hfQ1dNRTkyMTAJCUNXTUU5MjEwCQkzMzIwCitjd21lOTIxMGpzCQlNQUNIX0NXTUU5MjEwSlMJCUNXTUU5MjEwSlMJCTMzMjEKK3Bnc192MQkJCU1BQ0hfUEdTX1NJVEFSQQkJUEdTX1NJVEFSQQkJMzMyMgorY29saWJyaV90ZWdyYTIJCU1BQ0hfQ09MSUJSSV9URUdSQTIJQ09MSUJSSV9URUdSQTIJCTMzMjMKK3cyMQkJCU1BQ0hfVzIxCQlXMjEJCQkzMzI0Citwb2x5c2F0MQkJTUFDSF9QT0xZU0FUMQkJUE9MWVNBVDEJCTMzMjUKK2RhdGF3YXkJCQlNQUNIX0RBVEFXQVkJCURBVEFXQVkJCQkzMzI2Citjb2JyYWwxMzgJCU1BQ0hfQ09CUkFMMTM4CQlDT0JSQUwxMzgJCTMzMjcKK3JvdmVycGNzOAkJTUFDSF9ST1ZFUlBDUzgJCVJPVkVSUENTOAkJMzMyOAorbWFydmVsYwkJCU1BQ0hfTUFSVkVMQwkJTUFSVkVMQwkJCTMzMjkKK25hdmVmaWhpZAkJTUFDSF9OQVZFRklISUQJCU5BVkVGSUhJRAkJMzMzMAorZG0zNjVfY3YxMDAJCU1BQ0hfRE0zNjVfQ1YxMDAJRE0zNjVfQ1YxMDAJCTMzMzEKK2FibGUJCQlNQUNIX0FCTEUJCUFCTEUJCQkzMzMyCitsZWdhY3kJCQlNQUNIX0xFR0FDWQkJTEVHQUNZCQkJMzMzMworaWNvbmcJCQlNQUNIX0lDT05HCQlJQ09ORwkJCTMzMzQKK3JvdmVyX2c4CQlNQUNIX1JPVkVSX0c4CQlST1ZFUl9HOAkJMzMzNQordDUzODhwCQkJTUFDSF9UNTM4OFAJCVQ1Mzg4UAkJCTMzMzYKK2RpbmdvCQkJTUFDSF9ESU5HTwkJRElOR08JCQkzMzM3Citnb2ZsZXhob21lCQlNQUNIX0dPRkxFWEhPTUUJCUdPRkxFWEhPTUUJCTMzMzgKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvS2NvbmZpZyBiL2FyY2gvYXZyMzIvS2NvbmZpZwppbmRleCAzMTNiMTMwLi5jZDIwNjJmIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL0tjb25maWcKKysrIGIvYXJjaC9hdnIzMi9LY29uZmlnCkBAIC0xLDggKzEsOCBAQAogY29uZmlnIEFWUjMyCiAJZGVmX2Jvb2wgeQotCSMgV2l0aCBFTUJFRERFRD1uLCB3ZSBnZXQgbG90cyBvZiBzdHVmZiBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkCisJIyBXaXRoIEVYUEVSVD1uLCB3ZSBnZXQgbG90cyBvZiBzdHVmZiBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkCiAJIyB0aGF0IHdlIHVzdWFsbHkgZG9uJ3QgbmVlZCBvbiBBVlIzMi4KLQlzZWxlY3QgRU1CRURERUQKKwlzZWxlY3QgRVhQRVJUCiAJc2VsZWN0IEhBVkVfQ0xLCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKIAlzZWxlY3QgSEFWRV9LUFJPQkVTCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDkyZWNkODQuLmJjN2U4YWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcGdhbGxvYy5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC04LDYgKzgsNyBAQAogI2lmbmRlZiBfX0FTTV9BVlIzMl9QR0FMTE9DX0gKICNkZWZpbmUgX19BU01fQVZSMzJfUEdBTExPQ19ICiAKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3F1aWNrbGlzdC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZyBiL2FyY2gvYmxhY2tmaW4vS2NvbmZpZwppbmRleCAwYTIyMWQ0Li5jMDk1NzdkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL0tjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9LY29uZmlnCkBAIC0zMCw2ICszMCw5IEBACiAJc2VsZWN0IEhBVkVfS0VSTkVMX0xaTyBpZiBSQU1LRVJORUwKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQogCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgorCXNlbGVjdCBIQVZFX0dFTkVSSUNfSEFSRElSUVMKKwlzZWxlY3QgR0VORVJJQ19JUlFfUFJPQkUKKwlzZWxlY3QgSVJRX1BFUl9DUFUgaWYgU01QCiAKIGNvbmZpZyBHRU5FUklDX0NTVU0KIAlkZWZfYm9vbCB5CkBAIC00NCwxNSArNDcsNiBAQAogY29uZmlnIEdFTkVSSUNfRklORF9ORVhUX0JJVAogCWRlZl9ib29sIHkKIAotY29uZmlnIEdFTkVSSUNfSEFSRElSUVMKLQlkZWZfYm9vbCB5Ci0KLWNvbmZpZyBHRU5FUklDX0lSUV9QUk9CRQotCWRlZl9ib29sIHkKLQotY29uZmlnIEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQotCWRlZl9ib29sIHkKLQogY29uZmlnIEdFTkVSSUNfR1BJTwogCWRlZl9ib29sIHkKIApAQCAtMjU0LDExICsyNDgsNiBAQAogCWRlcGVuZHMgb24gU01QICYmIEhPVFBMVUcKIAlkZWZhdWx0IHkKIAotY29uZmlnIElSUV9QRVJfQ1BVCi0JYm9vbAotCWRlcGVuZHMgb24gU01QCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBIQVZFX0xFR0FDWV9QRVJfQ1BVX0FSRUEKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBTTVAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUxOEYtRVpCUkRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTE4Ri1FWkJSRF9kZWZjb25maWcKaW5kZXggYzBiOTg4ZS4uZGI4ZDM4YSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTE4Ri1FWkJSRF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTE4Ri1FWkJSRF9kZWZjb25maWcKQEAgLTUsNyArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNi1FWkJSRF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjYtRVpCUkRfZGVmY29uZmlnCmluZGV4IDg2NGFmNWIuLjNlNTBkNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNi1FWkJSRF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI2LUVaQlJEX2RlZmNvbmZpZwpAQCAtNSw3ICs1LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRlVURVggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUFENzE2MC1FVkFMX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1BRDcxNjAtRVZBTF9kZWZjb25maWcKaW5kZXggN2I2YTMzNy4uMzYyZjU5ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUFENzE2MC1FVkFMX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctQUQ3MTYwLUVWQUxfZGVmY29uZmlnCkBAIC01LDcgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BSU8gaXMgbm90IHNldAogQ09ORklHX1NMQUI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lULVYyX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVC1WMl9kZWZjb25maWcKaW5kZXggNGZhYTZiNC4uMDIzZmYwZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lULVYyX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVQtVjJfZGVmY29uZmlnCkBAIC01LDcgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lUX2RlZmNvbmZpZwppbmRleCA5ZDg5M2ViLi40ZTVhMTIxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVF9kZWZjb25maWcKQEAgLTUsNyArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1UTEw2NTI3TV9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctVExMNjUyN01fZGVmY29uZmlnCmluZGV4IDk3YTI3NjcuLmNkMDYzNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1UTEw2NTI3TV9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LVRMTDY1MjdNX2RlZmNvbmZpZwpAQCAtNiw3ICs2LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRlVURVggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1FWktJVF9kZWZjb25maWcKaW5kZXggZjg0Nzc0My4uOWY4ZmM4NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtRVpLSVRfZGVmY29uZmlnCkBAIC01LDcgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLVNUQU1QX2RlZmNvbmZpZwppbmRleCAwZTcyNjJjLi5jY2M0MzJiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1TVEFNUF9kZWZjb25maWcKQEAgLTUsNyArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzNy1TVEFNUF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzctU1RBTVBfZGVmY29uZmlnCmluZGV4IDRkMTRhMDAuLjU2NjY5NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzNy1TVEFNUF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM3LVNUQU1QX2RlZmNvbmZpZwpAQCAtNSw3ICs1LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRlVURVggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM4LUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzOC1FWktJVF9kZWZjb25maWcKaW5kZXggZmJlZTlkNy4uYWMyMjEyNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM4LUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzgtRVpLSVRfZGVmY29uZmlnCkBAIC01LDcgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NDgtRVpLSVRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZwppbmRleCAwNWRkMTFkLi45NDQ0MDRiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NDgtRVpLSVRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU0OC1FWktJVF9kZWZjb25maWcKQEAgLTUsNyArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1BQ1ZJTE9OX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1BQ1ZJTE9OX2RlZmNvbmZpZwppbmRleCBiY2IxNGQxLi5iN2M4NDUxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtQUNWSUxPTl9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUFDVklMT05fZGVmY29uZmlnCkBAIC01LDcgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVC1TTVBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lULVNNUF9kZWZjb25maWcKaW5kZXggNGNmNDUxMC4uN2U2N2JhMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lULVNNUF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lULVNNUF9kZWZjb25maWcKQEAgLTUsNyArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtRVpLSVRfZGVmY29uZmlnCmluZGV4IDg0M2FhYTUuLjE0MWU1OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lUX2RlZmNvbmZpZwpAQCAtNSw3ICs1LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRlVURVggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JsYWNrU3RhbXBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JsYWNrU3RhbXBfZGVmY29uZmlnCmluZGV4IGRhZTdhZGYuLjk3ZWJlMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CbGFja1N0YW1wX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQmxhY2tTdGFtcF9kZWZjb25maWcKQEAgLTYsNyArNiw3IEBACiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRlVURVggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTI3X2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUyN19kZWZjb25maWcKaW5kZXggZjM0MTQyNC4uYzI0NTc1NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTI3X2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MjdfZGVmY29uZmlnCkBAIC04LDcgKzgsNyBAQAogIyBDT05GSUdfUkRfR1pJUCBpcyBub3Qgc2V0CiBDT05GSUdfUkRfTFpNQT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzNfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTMzX2RlZmNvbmZpZwppbmRleCA4YzdlMDhmLi5iYWYxYzE1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzNfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzM19kZWZjb25maWcKQEAgLTcsNyArNyw3IEBACiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfUkRfR1pJUCBpcyBub3Qgc2V0CiBDT05GSUdfUkRfTFpNQT15Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdFX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN0VfZGVmY29uZmlnCmluZGV4IGJkM2NiNzYuLjcwN2NiZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN0VfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN0VfZGVmY29uZmlnCkBAIC04LDcgKzgsNyBAQAogIyBDT05GSUdfUkRfR1pJUCBpcyBub3Qgc2V0CiBDT05GSUdfUkRfTFpNQT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdVX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN1VfZGVmY29uZmlnCmluZGV4IDgyMjI0ZjMuLjQ1OTY5MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN1VfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN1VfZGVmY29uZmlnCkBAIC04LDcgKzgsNyBAQAogIyBDT05GSUdfUkRfR1pJUCBpcyBub3Qgc2V0CiBDT05GSUdfUkRfTFpNQT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NDhfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZwppbmRleCA0MzM1OThjLi5kZjI2NzU4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NDhfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU0OF9kZWZjb25maWcKQEAgLTgsNyArOCw3IEBACiAjIENPTkZJR19SRF9HWklQIGlzIG5vdCBzZXQKIENPTkZJR19SRF9MWk1BPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1VJRDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU2MV9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NjFfZGVmY29uZmlnCmluZGV4IGRlZDdkODQuLjZjN2IyMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU2MV9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTYxX2RlZmNvbmZpZwpAQCAtOCw3ICs4LDcgQEAKICMgQ09ORklHX1JEX0daSVAgaXMgbm90IHNldAogQ09ORklHX1JEX0xaTUE9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfVUlEMTYgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0ROUDUzNzBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0ROUDUzNzBfZGVmY29uZmlnCmluZGV4IDBlYmM3ZDkuLmY1MDMxMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9ETlA1MzcwX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvRE5QNTM3MF9kZWZjb25maWcKQEAgLTUsNyArNSw3IEBACiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19TTE9CPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9IODYwNl9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvSDg2MDZfZGVmY29uZmlnCmluZGV4IDcwMGZiNzAuLjc0NTAxMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9IODYwNl9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0g4NjA2X2RlZmNvbmZpZwpAQCAtMiw3ICsyLDcgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvSVAwWF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvSVAwWF9kZWZjb25maWcKaW5kZXggYjQwMTU2ZC4uNWU3OTdjZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0lQMFhfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9JUDBYX2RlZmNvbmZpZwpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvUE5BVi0xMF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvUE5BVi0xMF9kZWZjb25maWcKaW5kZXggYmU4NjZkOS4uYTU2NmEyZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL1BOQVYtMTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9QTkFWLTEwX2RlZmNvbmZpZwpAQCAtMiw3ICsyLDcgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvU1JWMV9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvU1JWMV9kZWZjb25maWcKaW5kZXggYjY0YmRmNy4uODUzODA5NSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL1NSVjFfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9TUlYxX2RlZmNvbmZpZwpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TX0FMTD15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvVENNLUJGNTE4X2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9UQ00tQkY1MThfZGVmY29uZmlnCmluZGV4IDFiY2NkOWEuLmQ0OTZhZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9UQ00tQkY1MThfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9UQ00tQkY1MThfZGVmY29uZmlnCkBAIC03LDcgKzcsNyBAQAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX1JEX0daSVAgaXMgbm90IHNldAogQ09ORklHX1JEX0xaTUE9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRlVURVggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL1RDTS1CRjUzN19kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvVENNLUJGNTM3X2RlZmNvbmZpZwppbmRleCAwMGNlODk5Li42NWY2NDIxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvVENNLUJGNTM3X2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvVENNLUJGNTM3X2RlZmNvbmZpZwpAQCAtOCw3ICs4LDcgQEAKICMgQ09ORklHX1JEX0daSVAgaXMgbm90IHNldAogQ09ORklHX1JEX0xaTUE9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfVUlEMTYgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NlcmlhbC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NlcmlhbC5oCmluZGV4IDFmZjlmMTQuLjdkYmM2NjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9zZXJpYWwuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fc2VyaWFsLmgKQEAgLTEwLDYgKzEwLDcgQEAKICNkZWZpbmUgX19CRklOX0FTTV9TRVJJQUxfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9hbm9tYWx5Lmg+CiAjaW5jbHVkZSA8bWFjaC9iZmluX3NlcmlhbC5oPgogCkBAIC00MSw2ICs0Miw3IEBACiAJc3RydWN0IGNpcmNfYnVmIHJ4X2RtYV9idWY7CiAJc3RydWN0IHRpbWVyX2xpc3QgcnhfZG1hX3RpbWVyOwogCWludCByeF9kbWFfbnJvd3M7CisJc3BpbmxvY2tfdCByeF9sb2NrOwogCXVuc2lnbmVkIGludCB0eF9kbWFfY2hhbm5lbDsKIAl1bnNpZ25lZCBpbnQgcnhfZG1hX2NoYW5uZWw7CiAJc3RydWN0IHdvcmtfc3RydWN0IHR4X2RtYV93b3JrcXVldWU7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvS2NvbmZpZyBiL2FyY2gvY3Jpcy9LY29uZmlnCmluZGV4IDYxM2U2MjguLjBhN2E0YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9LY29uZmlnCisrKyBiL2FyY2gvY3Jpcy9LY29uZmlnCkBAIC01NCw2ICs1NCw4IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCXNlbGVjdCBIQVZFX0lERQorCXNlbGVjdCBIQVZFX0dFTkVSSUNfSEFSRElSUVMKKwlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19ERVBSRUNBVEVECiAKIGNvbmZpZyBIWgogCWludApAQCAtNjcsMTAgKzY5LDYgQEAKIAogc291cmNlICJmcy9LY29uZmlnLmJpbmZtdCIKIAotY29uZmlnIEdFTkVSSUNfSEFSRElSUVMKLQlib29sCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBFVFJBWF9DTURMSU5FCiAJc3RyaW5nICJLZXJuZWwgY29tbWFuZCBsaW5lIgogCWRlZmF1bHQgInJvb3Q9L2Rldi9tdGRibG9jazMiCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2lycS5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9pcnEuYwppbmRleCBhMGMwZGY4Li43MzI4YTdjIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2lycS5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvaXJxLmMKQEAgLTEwNCw0MyArMTA0LDIxIEBACiAJSVJRMzFfaW50ZXJydXB0CiB9OwogCi1zdGF0aWMgdm9pZCBlbmFibGVfY3Jpc3YxMF9pcnEodW5zaWduZWQgaW50IGlycSk7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9jcmlzdjEwX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgZW5hYmxlX2NyaXN2MTBfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKLQllbmFibGVfY3Jpc3YxMF9pcnEoaXJxKTsKLQlyZXR1cm4gMDsKKwljcmlzdjEwX3VubWFza19pcnEoZGF0YS0+aXJxKTsKIH0KIAotI2RlZmluZSBzaHV0ZG93bl9jcmlzdjEwX2lycQlkaXNhYmxlX2NyaXN2MTBfaXJxCi0KLXN0YXRpYyB2b2lkIGVuYWJsZV9jcmlzdjEwX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgZGlzYWJsZV9jcmlzdjEwX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JY3Jpc3YxMF91bm1hc2tfaXJxKGlycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRpc2FibGVfY3Jpc3YxMF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQljcmlzdjEwX21hc2tfaXJxKGlycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFja19jcmlzdjEwX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotfQotCi1zdGF0aWMgdm9pZCBlbmRfY3Jpc3YxMF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKKwljcmlzdjEwX21hc2tfaXJxKGRhdGEtPmlycSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgY3Jpc3YxMF9pcnFfdHlwZSA9IHsKLQkubmFtZSA9ICAgICAgICAiQ1JJU3YxMCIsCi0JLnN0YXJ0dXAgPSAgICAgc3RhcnR1cF9jcmlzdjEwX2lycSwKLQkuc2h1dGRvd24gPSAgICBzaHV0ZG93bl9jcmlzdjEwX2lycSwKLQkuZW5hYmxlID0gICAgICBlbmFibGVfY3Jpc3YxMF9pcnEsCi0JLmRpc2FibGUgPSAgICAgZGlzYWJsZV9jcmlzdjEwX2lycSwKLQkuYWNrID0gICAgICAgICBhY2tfY3Jpc3YxMF9pcnEsCi0JLmVuZCA9ICAgICAgICAgZW5kX2NyaXN2MTBfaXJxLAotCS5zZXRfYWZmaW5pdHkgPSBOVUxMCisJLm5hbWUJCT0gIkNSSVN2MTAiLAorCS5pcnFfc2h1dGRvd24JPSBkaXNhYmxlX2NyaXN2MTBfaXJxLAorCS5pcnFfZW5hYmxlCT0gZW5hYmxlX2NyaXN2MTBfaXJxLAorCS5pcnFfZGlzYWJsZQk9IGRpc2FibGVfY3Jpc3YxMF9pcnEsCiB9OwogCiB2b2lkIHdlaXJkX2lycSh2b2lkKTsKQEAgLTIyMSw3ICsxOTksOCBAQAogCiAJLyogSW5pdGlhbGl6ZSBJUlEgaGFuZGxlciBkZXNjcmlwdG9ycy4gKi8KIAlmb3IoaSA9IDI7IGkgPCBOUl9JUlFTOyBpKyspIHsKLQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZjcmlzdjEwX2lycV90eXBlOworCQlzZXRfaXJxX2Rlc2NfYW5kX2hhbmRsZXIoaSwgJmNyaXN2MTBfaXJxX3R5cGUsCisJCQkJCSBoYW5kbGVfc2ltcGxlX2lycSk7CiAJCXNldF9pbnRfdmVjdG9yKGksIGludGVycnVwdFtpXSk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2lycS5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9pcnEuYwppbmRleCAyZWQ0OGFlM2QuLjBhZDlkYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9pcnEuYwpAQCAtMjkxLDU0ICsyOTEsMzMgQEAKIH0KIAogCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfY3Jpc3YzMl9pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGVuYWJsZV9jcmlzdjMyX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JY3Jpc3YzMl91bm1hc2tfaXJxKGlycSk7Ci0JcmV0dXJuIDA7CisJY3Jpc3YzMl91bm1hc2tfaXJxKGRhdGEtPmlycSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNodXRkb3duX2NyaXN2MzJfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBkaXNhYmxlX2NyaXN2MzJfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKLQljcmlzdjMyX21hc2tfaXJxKGlycSk7CisJY3Jpc3YzMl9tYXNrX2lycShkYXRhLT5pcnEpOwogfQogCi1zdGF0aWMgdm9pZCBlbmFibGVfY3Jpc3YzMl9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQljcmlzdjMyX3VubWFza19pcnEoaXJxKTsKLX0KLQotc3RhdGljIHZvaWQgZGlzYWJsZV9jcmlzdjMyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWNyaXN2MzJfbWFza19pcnEoaXJxKTsKLX0KLQotc3RhdGljIHZvaWQgYWNrX2NyaXN2MzJfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIGVuZF9jcmlzdjMyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotfQotCi1pbnQgc2V0X2FmZmluaXR5X2NyaXN2MzJfaXJxKHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQorc3RhdGljIGludCBzZXRfYWZmaW5pdHlfY3Jpc3YzMl9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqZGVzdCwgYm9vbCBmb3JjZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfbG9jaywgZmxhZ3MpOwotCWlycV9hbGxvY2F0aW9uc1tpcnEgLSBGSVJTVF9JUlFdLm1hc2sgPSAqZGVzdDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfbG9jaywgZmxhZ3MpOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9sb2NrLCBmbGFncyk7CisJaXJxX2FsbG9jYXRpb25zW2RhdGEtPmlycSAtIEZJUlNUX0lSUV0ubWFzayA9ICpkZXN0OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgY3Jpc3YzMl9pcnFfdHlwZSA9IHsKLQkubmFtZSA9ICAgICAgICAiQ1JJU3YzMiIsCi0JLnN0YXJ0dXAgPSAgICAgc3RhcnR1cF9jcmlzdjMyX2lycSwKLQkuc2h1dGRvd24gPSAgICBzaHV0ZG93bl9jcmlzdjMyX2lycSwKLQkuZW5hYmxlID0gICAgICBlbmFibGVfY3Jpc3YzMl9pcnEsCi0JLmRpc2FibGUgPSAgICAgZGlzYWJsZV9jcmlzdjMyX2lycSwKLQkuYWNrID0gICAgICAgICBhY2tfY3Jpc3YzMl9pcnEsCi0JLmVuZCA9ICAgICAgICAgZW5kX2NyaXN2MzJfaXJxLAotCS5zZXRfYWZmaW5pdHkgPSBzZXRfYWZmaW5pdHlfY3Jpc3YzMl9pcnEKKwkubmFtZQkJCT0gIkNSSVN2MzIiLAorCS5pcnFfc2h1dGRvd24JCT0gZGlzYWJsZV9jcmlzdjMyX2lycSwKKwkuaXJxX2VuYWJsZQkJPSBlbmFibGVfY3Jpc3YzMl9pcnEsCisJLmlycV9kaXNhYmxlCQk9IGRpc2FibGVfY3Jpc3YzMl9pcnEsCisJLmlycV9zZXRfYWZmaW5pdHkJPSBzZXRfYWZmaW5pdHlfY3Jpc3YzMl9pcnEsCiB9OwogCiB2b2lkCkBAIC00NzIsNyArNDUxLDggQEAKIAogCS8qIFBvaW50IGFsbCBJUlEncyB0byBiYWQgaGFuZGxlcnMuICovCiAJZm9yIChpID0gRklSU1RfSVJRLCBqID0gMDsgaiA8IE5SX0lSUVM7IGkrKywgaisrKSB7Ci0JCWlycV9kZXNjW2pdLmNoaXAgPSAmY3Jpc3YzMl9pcnFfdHlwZTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGosICZjcmlzdjMyX2lycV90eXBlLAorCQkJCQkgaGFuZGxlX3NpbXBsZV9pcnEpOwogCQlzZXRfZXhjZXB0aW9uX3ZlY3RvcihpLCBpbnRlcnJ1cHRbal0pOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2NvbmZpZ3MvYXJ0cGVjXzNfZGVmY29uZmlnIGIvYXJjaC9jcmlzL2NvbmZpZ3MvYXJ0cGVjXzNfZGVmY29uZmlnCmluZGV4IDU5MGY3MmMuLjcxODU0ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9jb25maWdzL2FydHBlY18zX2RlZmNvbmZpZworKysgYi9hcmNoL2NyaXMvY29uZmlncy9hcnRwZWNfM19kZWZjb25maWcKQEAgLTIsNyArMiw3IEBACiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9jb25maWdzL2V0cmF4LTEwMGx4X3YyX2RlZmNvbmZpZyBiL2FyY2gvY3Jpcy9jb25maWdzL2V0cmF4LTEwMGx4X3YyX2RlZmNvbmZpZwppbmRleCAxYjI4NTNlLi5hODVhYWJmIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvY29uZmlncy9ldHJheC0xMDBseF92Ml9kZWZjb25maWcKKysrIGIvYXJjaC9jcmlzL2NvbmZpZ3MvZXRyYXgtMTAwbHhfdjJfZGVmY29uZmlnCkBAIC0yLDcgKzIsNyBAQAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvY29uZmlncy9ldHJheGZzX2RlZmNvbmZpZyBiL2FyY2gvY3Jpcy9jb25maWdzL2V0cmF4ZnNfZGVmY29uZmlnCmluZGV4IGY3M2QzOGMuLjg3YzcyMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9jb25maWdzL2V0cmF4ZnNfZGVmY29uZmlnCisrKyBiL2FyY2gvY3Jpcy9jb25maWdzL2V0cmF4ZnNfZGVmY29uZmlnCkBAIC0yLDcgKzIsNyBAQAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL2lycS5jIGIvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYwppbmRleCA0NjlmN2Y5Li5jMzQ2OTUyIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKQEAgLTYyLDcgKzYyLDcgQEAKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAjZW5kaWYKLQkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lKTsKKwkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5pcnFfZGF0YS5jaGlwLT5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CiAKIAkJZm9yIChhY3Rpb249YWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKQEAgLTkzLDggKzkzLDggQEAKIAkJcHJpbnRrKCJkb19JUlE6IHN0YWNrIG92ZXJmbG93OiAlbFhcbiIsIHNwKTsKIAkJc2hvd19zdGFjayhOVUxMLCAodW5zaWduZWQgbG9uZyAqKXNwKTsKIAl9Ci0JX19kb19JUlEoaXJxKTsKLSAgICAgICAgaXJxX2V4aXQoKTsKKwlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKKwlpcnFfZXhpdCgpOwogCXNldF9pcnFfcmVncyhvbGRfcmVncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvY3Jpcy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA0NDIyMTg5Li5jNDliZTg0IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC03MiwxMSArNzIsNiBAQAogCUlOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKIAkuaW5pdC5kYXRhIDogeyBJTklUX0RBVEEgfQogCS5pbml0LnNldHVwIDogeyBJTklUX1NFVFVQKDE2KSB9Ci0jaWZkZWYgQ09ORklHX0VUUkFYX0FSQ0hfVjMyCi0JX19zdGFydF9fX3BhcmFtID0gLjsKLQlfX3BhcmFtIDogeyAqKF9fcGFyYW0pIH0KLQlfX3N0b3BfX19wYXJhbSA9IC47Ci0jZW5kaWYKIAkuaW5pdGNhbGwuaW5pdCA6IHsKIAkJSU5JVF9DQUxMUwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L0tjb25maWcgYi9hcmNoL2Zydi9LY29uZmlnCmluZGV4IGY2YmNiMDMuLjc0NzQ5OWEgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L0tjb25maWcKKysrIGIvYXJjaC9mcnYvS2NvbmZpZwpAQCAtNSw2ICs1LDcgQEAKIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwogCXNlbGVjdCBIQVZFX0lSUV9XT1JLCiAJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFMKKwlzZWxlY3QgSEFWRV9HRU5FUklDX0hBUkRJUlFTCiAKIGNvbmZpZyBaT05FX0RNQQogCWJvb2wKQEAgLTI5LDE0ICszMCw2IEBACiAJYm9vbAogCWRlZmF1bHQgbgogCi1jb25maWcgR0VORVJJQ19IQVJESVJRUwotCWJvb2wKLQlkZWZhdWx0IHkKLQotY29uZmlnIEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIFRJTUVfTE9XX1JFUwogCWJvb2wKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2RlZmNvbmZpZyBiL2FyY2gvZnJ2L2RlZmNvbmZpZwppbmRleCBiOGViZTllLi5iMWI3OTI2IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9kZWZjb25maWcKKysrIGIvYXJjaC9mcnYvZGVmY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKIENPTkZJR19GUlZfT1VUT0ZMSU5FX0FUT01JQ19PUFM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9LY29uZmlnIGIvYXJjaC9oODMwMC9LY29uZmlnCmluZGV4IDY1Zjg5N2Q4Li42ZGY2OTJkIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL0tjb25maWcKKysrIGIvYXJjaC9oODMwMC9LY29uZmlnCkBAIC0yLDYgKzIsOCBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAlzZWxlY3QgSEFWRV9JREUKKwlzZWxlY3QgSEFWRV9HRU5FUklDX0hBUkRJUlFTCisJc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fREVQUkVDQVRFRAogCiBjb25maWcgU1lNQk9MX1BSRUZJWAogCXN0cmluZwpAQCAtNDcsMTAgKzQ5LDYgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKLWNvbmZpZyBHRU5FUklDX0hBUkRJUlFTCi0JYm9vbAotCWRlZmF1bHQgeQotCiBjb25maWcgR0VORVJJQ19DQUxJQlJBVEVfREVMQVkKIAlib29sCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2RlZmNvbmZpZyBiL2FyY2gvaDgzMDAvZGVmY29uZmlnCmluZGV4IDM0MmY3NzcuLjA0MjQyNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvZGVmY29uZmlnCisrKyBiL2FyY2gvaDgzMDAvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogQ09ORklHX0VYUEVSSU1FTlRBTD15CiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfVUlEMTYgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9pcnEuYwppbmRleCBjMjVkYzJjLi43NjQzZDM5IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC9pcnEuYwpAQCAtMzgsMzQgKzM4LDMwIEBACiAJcmV0dXJuIChpcnEgPj0gRVhUX0lSUTAgJiYgaXJxIDw9IChFWFRfSVJRMCArIEVYVF9JUlFTKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGg4MzAwX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGg4MzAwX2VuYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewotCWlmIChpc19leHRfaXJxKGlycSkpCi0JCUlFUl9SRUdTIHw9IDEgPDwgKGlycSAtIEVYVF9JUlEwKTsKKwlpZiAoaXNfZXh0X2lycShkYXRhLT5pcnEpKQorCQlJRVJfUkVHUyB8PSAxIDw8IChkYXRhLT5pcnEgLSBFWFRfSVJRMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGg4MzAwX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBoODMwMF9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JaWYgKGlzX2V4dF9pcnEoaXJxKSkKLQkJSUVSX1JFR1MgJj0gfigxIDw8IChpcnEgLSBFWFRfSVJRMCkpOworCWlmIChpc19leHRfaXJxKGRhdGEtPmlycSkpCisJCUlFUl9SRUdTICY9IH4oMSA8PCAoZGF0YS0+aXJxIC0gRVhUX0lSUTApKTsKIH0KIAotc3RhdGljIHZvaWQgaDgzMDBfZW5kX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHVuc2lnbmVkIGludCBoODMwMF9zdGFydHVwX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaDgzMDBfc3RhcnR1cF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlpZiAoaXNfZXh0X2lycShpcnEpKQotCQlyZXR1cm4gaDgzMDBfZW5hYmxlX2lycV9waW4oaXJxKTsKKwlpZiAoaXNfZXh0X2lycShkYXRhLT5pcnEpKQorCQlyZXR1cm4gaDgzMDBfZW5hYmxlX2lycV9waW4oZGF0YS0+aXJxKTsKIAllbHNlCiAJCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBoODMwMF9zaHV0ZG93bl9pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGg4MzAwX3NodXRkb3duX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JaWYgKGlzX2V4dF9pcnEoaXJxKSkKLQkJaDgzMDBfZGlzYWJsZV9pcnFfcGluKGlycSk7CisJaWYgKGlzX2V4dF9pcnEoZGF0YS0+aXJxKSkKKwkJaDgzMDBfZGlzYWJsZV9pcnFfcGluKGRhdGEtPmlycSk7CiB9CiAKIC8qCkBAIC03MywxMiArNjksMTAgQEAKICAqLwogc3RydWN0IGlycV9jaGlwIGg4MzAwaXJxX2NoaXAgPSB7CiAJLm5hbWUJCT0gIkg4MzAwLUlOVEMiLAotCS5zdGFydHVwCT0gaDgzMDBfc3RhcnR1cF9pcnEsCi0JLnNodXRkb3duCT0gaDgzMDBfc2h1dGRvd25faXJxLAotCS5lbmFibGUJCT0gaDgzMDBfZW5hYmxlX2lycSwKLQkuZGlzYWJsZQk9IGg4MzAwX2Rpc2FibGVfaXJxLAotCS5hY2sJCT0gTlVMTCwKLQkuZW5kCQk9IGg4MzAwX2VuZF9pcnEsCisJLmlycV9zdGFydHVwCT0gaDgzMDBfc3RhcnR1cF9pcnEsCisJLmlycV9zaHV0ZG93bgk9IGg4MzAwX3NodXRkb3duX2lycSwKKwkuaXJxX2VuYWJsZQk9IGg4MzAwX2VuYWJsZV9pcnEsCisJLmlycV9kaXNhYmxlCT0gaDgzMDBfZGlzYWJsZV9pcnEsCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkFNS0VSTkVMKQpAQCAtMTYwLDE4ICsxNTQsMTQgQEAKIAogCXNldHVwX3ZlY3RvcigpOwogCi0JZm9yIChjID0gMDsgYyA8IE5SX0lSUVM7IGMrKykgewotCQlpcnFfZGVzY1tjXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JCWlycV9kZXNjW2NdLmFjdGlvbiA9IE5VTEw7Ci0JCWlycV9kZXNjW2NdLmRlcHRoID0gMTsKLQkJaXJxX2Rlc2NbY10uY2hpcCA9ICZoODMwMGlycV9jaGlwOwotCX0KKwlmb3IgKGMgPSAwOyBjIDwgTlJfSVJRUzsgYysrKQorCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoYywgJmg4MzAwaXJxX2NoaXAsIGhhbmRsZV9zaW1wbGVfaXJxKTsKIH0KIAogYXNtbGlua2FnZSB2b2lkIGRvX0lSUShpbnQgaXJxKQogewogCWlycV9lbnRlcigpOwotCV9fZG9fSVJRKGlycSk7CisJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CiAJaXJxX2V4aXQoKTsKIH0KIApAQCAtMTkyLDcgKzE4Miw3IEBACiAJCQlnb3RvIHVubG9jazsKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLGkpOwogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwotCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUpOworCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmlycV9kYXRhLmNoaXAtPm5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICItJS04cyIsIGlycV9kZXNjW2ldLm5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L0tjb25maWcgYi9hcmNoL2lhNjQvS2NvbmZpZwppbmRleCBlMGY1YjZkLi5mY2YzYjQzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvS2NvbmZpZworKysgYi9hcmNoL2lhNjQvS2NvbmZpZwpAQCAtMjIsNiArMjIsMTAgQEAKIAlzZWxlY3QgSEFWRV9LVk0KIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwogCXNlbGVjdCBIQVZFX0RNQV9BUElfREVCVUcKKwlzZWxlY3QgSEFWRV9HRU5FUklDX0hBUkRJUlFTCisJc2VsZWN0IEdFTkVSSUNfSVJRX1BST0JFCisJc2VsZWN0IEdFTkVSSUNfUEVORElOR19JUlEgaWYgU01QCisJc2VsZWN0IElSUV9QRVJfQ1BVCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhlIEl0YW5pdW0gUHJvY2Vzc29yIEZhbWlseSBpcyBJbnRlbCdzIDY0LWJpdCBzdWNjZXNzb3IgdG8KQEAgLTY3OCwyOCArNjgyLDYgQEAKIAogc291cmNlICJsaWIvS2NvbmZpZyIKIAotIwotIyBVc2UgdGhlIGdlbmVyaWMgaW50ZXJydXB0IGhhbmRsaW5nIGNvZGUgaW4ga2VybmVsL2lycS86Ci0jCi1jb25maWcgR0VORVJJQ19IQVJESVJRUwotCWRlZl9ib29sIHkKLQotY29uZmlnIEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQotCWRlZl9ib29sIHkKLQotY29uZmlnIEdFTkVSSUNfSVJRX1BST0JFCi0JYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgR0VORVJJQ19QRU5ESU5HX0lSUQotCWJvb2wKLQlkZXBlbmRzIG9uIEdFTkVSSUNfSEFSRElSUVMgJiYgU01QCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBJUlFfUEVSX0NQVQotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIElPTU1VX0hFTFBFUgogCWRlZl9ib29sIChJQTY0X0hQX1pYMSB8fCBJQTY0X0hQX1pYMV9TV0lPVExCIHx8IElBNjRfR0VORVJJQyB8fCBTV0lPVExCKQogCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvS2NvbmZpZyBiL2FyY2gvbTMyci9LY29uZmlnCmluZGV4IDVjMjkxZDYuLmVmNGMxZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9LY29uZmlnCisrKyBiL2FyY2gvbTMyci9LY29uZmlnCkBAIC03LDYgKzcsOSBAQAogCXNlbGVjdCBIQVZFX0tFUk5FTF9HWklQCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0xaTUEKKwlzZWxlY3QgSEFWRV9HRU5FUklDX0hBUkRJUlFTCisJc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fREVQUkVDQVRFRAorCXNlbGVjdCBHRU5FUklDX0lSUV9QUk9CRQogCiBjb25maWcgU0JVUwogCWJvb2wKQEAgLTE5LDE0ICsyMiw2IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCi1jb25maWcgR0VORVJJQ19IQVJESVJRUwotCWJvb2wKLQlkZWZhdWx0IHkKLQotY29uZmlnIEdFTkVSSUNfSVJRX1BST0JFCi0JYm9vbAotCWRlZmF1bHQgeQotCiBjb25maWcgTk9fSU9QT1JUCiAJZGVmX2Jvb2wgeQogCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvY29uZmlncy9tMzI3MDB1dC5zbXBfZGVmY29uZmlnIGIvYXJjaC9tMzJyL2NvbmZpZ3MvbTMyNzAwdXQuc21wX2RlZmNvbmZpZwppbmRleCA4MTZjM2VjLi5hM2Q3MjdlIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvY29uZmlncy9tMzI3MDB1dC5zbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvbTMyci9jb25maWdzL20zMjcwMHV0LnNtcF9kZWZjb25maWcKQEAgLTUsNyArNSw3IEBACiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2NvbmZpZ3MvbTMyNzAwdXQudXBfZGVmY29uZmlnIGIvYXJjaC9tMzJyL2NvbmZpZ3MvbTMyNzAwdXQudXBfZGVmY29uZmlnCmluZGV4IDg0Nzg1NjguLmI4MzM0MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9jb25maWdzL20zMjcwMHV0LnVwX2RlZmNvbmZpZworKysgYi9hcmNoL20zMnIvY29uZmlncy9tMzI3MDB1dC51cF9kZWZjb25maWcKQEAgLTUsNyArNSw3IEBACiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2NvbmZpZ3MvbWFwcGkubm9tbXVfZGVmY29uZmlnIGIvYXJjaC9tMzJyL2NvbmZpZ3MvbWFwcGkubm9tbXVfZGVmY29uZmlnCmluZGV4IDM1NGE5NjQuLjdjOTBjZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9jb25maWdzL21hcHBpLm5vbW11X2RlZmNvbmZpZworKysgYi9hcmNoL20zMnIvY29uZmlncy9tYXBwaS5ub21tdV9kZWZjb25maWcKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9jb25maWdzL21hcHBpLnNtcF9kZWZjb25maWcgYi9hcmNoL20zMnIvY29uZmlncy9tYXBwaS5zbXBfZGVmY29uZmlnCmluZGV4IDkwMjIzMDcuLjM2N2QwN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9jb25maWdzL21hcHBpLnNtcF9kZWZjb25maWcKKysrIGIvYXJjaC9tMzJyL2NvbmZpZ3MvbWFwcGkuc21wX2RlZmNvbmZpZwpAQCAtNSw3ICs1LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE1CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2NvbmZpZ3MvbWFwcGkudXBfZGVmY29uZmlnIGIvYXJjaC9tMzJyL2NvbmZpZ3MvbWFwcGkudXBfZGVmY29uZmlnCmluZGV4IDM3MjYwNjguLmNiMTEzODQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9jb25maWdzL21hcHBpLnVwX2RlZmNvbmZpZworKysgYi9hcmNoL20zMnIvY29uZmlncy9tYXBwaS51cF9kZWZjb25maWcKQEAgLTUsNyArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9jb25maWdzL21hcHBpMi5vcHNwX2RlZmNvbmZpZyBiL2FyY2gvbTMyci9jb25maWdzL21hcHBpMi5vcHNwX2RlZmNvbmZpZwppbmRleCA2MTM2ZmFkLi4zYmZmNzc5IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvY29uZmlncy9tYXBwaTIub3BzcF9kZWZjb25maWcKKysrIGIvYXJjaC9tMzJyL2NvbmZpZ3MvbWFwcGkyLm9wc3BfZGVmY29uZmlnCkBAIC00LDcgKzQsNyBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL20zMnIvY29uZmlncy9tYXBwaTIudmRlYzJfZGVmY29uZmlnIGIvYXJjaC9tMzJyL2NvbmZpZ3MvbWFwcGkyLnZkZWMyX2RlZmNvbmZpZwppbmRleCBkY2UxZmM3Li43NTI0NmM5IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvY29uZmlncy9tYXBwaTIudmRlYzJfZGVmY29uZmlnCisrKyBiL2FyY2gvbTMyci9jb25maWdzL21hcHBpMi52ZGVjMl9kZWZjb25maWcKQEAgLTQsNyArNCw3IEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9jb25maWdzL21hcHBpMy5zbXBfZGVmY29uZmlnIGIvYXJjaC9tMzJyL2NvbmZpZ3MvbWFwcGkzLnNtcF9kZWZjb25maWcKaW5kZXggYjIwNGUyZS4uMjdjZWZkNCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2NvbmZpZ3MvbWFwcGkzLnNtcF9kZWZjb25maWcKKysrIGIvYXJjaC9tMzJyL2NvbmZpZ3MvbWFwcGkzLnNtcF9kZWZjb25maWcKQEAgLTUsNyArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9jb25maWdzL29ha3MzMnJfZGVmY29uZmlnIGIvYXJjaC9tMzJyL2NvbmZpZ3Mvb2FrczMycl9kZWZjb25maWcKaW5kZXggNWFhNGVhOS4uNTA4N2E1MSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2NvbmZpZ3Mvb2FrczMycl9kZWZjb25maWcKKysrIGIvYXJjaC9tMzJyL2NvbmZpZ3Mvb2FrczMycl9kZWZjb25maWcKQEAgLTIsNyArMiw3IEBACiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2NvbmZpZ3Mvb3BzcHV0X2RlZmNvbmZpZyBiL2FyY2gvbTMyci9jb25maWdzL29wc3B1dF9kZWZjb25maWcKaW5kZXggODQ5NGM2YS4uNTBjNmY1MiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2NvbmZpZ3Mvb3BzcHV0X2RlZmNvbmZpZworKysgYi9hcmNoL20zMnIvY29uZmlncy9vcHNwdXRfZGVmY29uZmlnCkBAIC00LDcgKzQsNyBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL20zMnIvY29uZmlncy91c3J2X2RlZmNvbmZpZyBiL2FyY2gvbTMyci9jb25maWdzL3VzcnZfZGVmY29uZmlnCmluZGV4IDFkZjI5M2IuLmEzY2ZhYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9jb25maWdzL3VzcnZfZGVmY29uZmlnCisrKyBiL2FyY2gvbTMyci9jb25maWdzL3VzcnZfZGVmY29uZmlnCkBAIC01LDcgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfTU9EVUxFUz15CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL2lycS5jIGIvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYwppbmRleCA3ZGIyNmYxLi43NmVhZjM4IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL2lycS5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMKQEAgLTQwLDggKzQwLDEwIEBACiAJfQogCiAJaWYgKGkgPCBOUl9JUlFTKSB7Ci0JCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwotCQlhY3Rpb24gPSBpcnFfZGVzY1tpXS5hY3Rpb247CisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGkpOworCisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQlhY3Rpb24gPSBkZXNjLT5hY3Rpb247CiAJCWlmICghYWN0aW9uKQogCQkJZ290byBza2lwOwogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsaSk7CkBAIC01MSw3ICs1Myw3IEBACiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogI2VuZGlmCi0JCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSk7CisJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgZGVzYy0+aXJxX2RhdGEuY2hpcC0+bmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCiAJCWZvciAoYWN0aW9uPWFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCkBAIC01OSw3ICs2MSw3IEBACiAKIAkJc2VxX3B1dGMocCwgJ1xuJyk7CiBza2lwOgotCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTc4LDcgKzgwLDcgQEAKICNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVwogCS8qIEZJWE1FIE0zMlIgKi8KICNlbmRpZgotCV9fZG9fSVJRKGlycSk7CisJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CiAJaXJxX2V4aXQoKTsKIAlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOwogCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvcGxhdGZvcm1zL20zMjEwNHV0L3NldHVwLmMgYi9hcmNoL20zMnIvcGxhdGZvcm1zL20zMjEwNHV0L3NldHVwLmMKaW5kZXggNDAyYTU5ZC4uNGE2OTNkMCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL3BsYXRmb3Jtcy9tMzIxMDR1dC9zZXR1cC5jCisrKyBiL2FyY2gvbTMyci9wbGF0Zm9ybXMvbTMyMTA0dXQvc2V0dXAuYwpAQCAtMzksMzkgKzM5LDMwIEBACiAJb3V0bChkYXRhLCBwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX20zMjEwNHV0KHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtYXNrX20zMjEwNHV0X2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JZGlzYWJsZV9tMzIxMDR1dF9pcnEoaXJxKTsKKwlkaXNhYmxlX20zMjEwNHV0X2lycShkYXRhLT5pcnEpOwogfQogCi1zdGF0aWMgdm9pZCBlbmRfbTMyMTA0dXRfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCB1bm1hc2tfbTMyMTA0dXRfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKLQllbmFibGVfbTMyMTA0dXRfaXJxKGlycSk7CisJZW5hYmxlX20zMjEwNHV0X2lycShkYXRhLT5pcnEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfbTMyMTA0dXRfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBzaHV0ZG93bl9tMzIxMDR1dF9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewotCWVuYWJsZV9tMzIxMDR1dF9pcnEoaXJxKTsKLQlyZXR1cm4gKDApOwotfQorCXVuc2lnbmVkIGludCBpcnEgPSBkYXRhLT5pcnE7CisJdW5zaWduZWQgbG9uZyBwb3J0ID0gaXJxMnBvcnQoaXJxKTsKIAotc3RhdGljIHZvaWQgc2h1dGRvd25fbTMyMTA0dXRfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyBwb3J0OwotCi0JcG9ydCA9IGlycTJwb3J0KGlycSk7CiAJb3V0bChNMzJSX0lDVUNSX0lMRVZFTDcsIHBvcnQpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG0zMjEwNHV0X2lycV90eXBlID0KIHsKLQkubmFtZSA9ICJNMzIxMDRVVC1JUlEiLAotCS5zdGFydHVwID0gc3RhcnR1cF9tMzIxMDR1dF9pcnEsCi0JLnNodXRkb3duID0gc2h1dGRvd25fbTMyMTA0dXRfaXJxLAotCS5lbmFibGUgPSBlbmFibGVfbTMyMTA0dXRfaXJxLAotCS5kaXNhYmxlID0gZGlzYWJsZV9tMzIxMDR1dF9pcnEsCi0JLmFjayA9IG1hc2tfYW5kX2Fja19tMzIxMDR1dCwKLQkuZW5kID0gZW5kX20zMjEwNHV0X2lycQorCS5uYW1lCQk9ICJNMzIxMDRVVC1JUlEiLAorCS5pcnFfc2h1dGRvd24JPSBzaHV0ZG93bl9tMzIxMDR1dF9pcnEsCisJLmlycV91bm1hc2sJPSB1bm1hc2tfbTMyMTA0dXRfaXJxLAorCS5pcnFfbWFzawk9IG1hc2tfbTMyMTA0dXRfaXJxLAogfTsKIAogdm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCkKQEAgLTg1LDM2ICs3NiwyOSBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfU01DOTFYKQogCS8qIElOVCMwOiBMQU4gY29udHJvbGxlciBvbiBNMzIxMDRVVC1MQU4gKFNNQzkxQzExMSkqLwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDBdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9JTlQwXS5jaGlwID0gJm0zMjEwNHV0X2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDBdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMF0uZGVwdGggPSAxOwotCWljdV9kYXRhW00zMlJfSVJRX0lOVDBdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU4gfCBNMzJSX0lDVUNSX0lTTU9EMTE7IC8qICJIIiBsZXZlbCBzZW5zZSAqLworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9JTlQwLCAmbTMyMTA0dXRfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOworCS8qICJIIiBsZXZlbCBzZW5zZSAqLworCWN1X2RhdGFbTTMyUl9JUlFfSU5UMF0uaWN1Y3IgPSBNMzJSX0lDVUNSX0lFTiB8IE0zMlJfSUNVQ1JfSVNNT0QxMTsKIAlkaXNhYmxlX20zMjEwNHV0X2lycShNMzJSX0lSUV9JTlQwKTsKICNlbmRpZiAgLyogQ09ORklHX1NNQzkxWCAqLwogCiAJLyogTUZUMiA6IHN5c3RlbSB0aW1lciAqLwotCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5jaGlwID0gJm0zMjEwNHV0X2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9NRlQyLCAmbTMyMTA0dXRfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW00zMlJfSVJRX01GVDJdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU47CiAJZGlzYWJsZV9tMzIxMDR1dF9pcnEoTTMyUl9JUlFfTUZUMik7CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMX00zMlJfU0lPCiAJLyogU0lPMF9SIDogdWFydCByZWNlaXZlIGRhdGEgKi8KLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLmNoaXAgPSAmbTMyMTA0dXRfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9TSU8wX1IsICZtMzIxMDR1dF9pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMF9SXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOOwogCWRpc2FibGVfbTMyMTA0dXRfaXJxKE0zMlJfSVJRX1NJTzBfUik7CiAKIAkvKiBTSU8wX1MgOiB1YXJ0IHNlbmQgZGF0YSAqLwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uY2hpcCA9ICZtMzIxMDR1dF9pcnFfdHlwZTsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9TXS5kZXB0aCA9IDE7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKE0zMlJfSVJRX1NJTzBfUywgJm0zMjEwNHV0X2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8wX1NdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU47CiAJZGlzYWJsZV9tMzIxMDR1dF9pcnEoTTMyUl9JUlFfU0lPMF9TKTsKICNlbmRpZiAvKiBDT05GSUdfU0VSSUFMX00zMlJfU0lPICovCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvcGxhdGZvcm1zL20zMjcwMHV0L3NldHVwLmMgYi9hcmNoL20zMnIvcGxhdGZvcm1zL20zMjcwMHV0L3NldHVwLmMKaW5kZXggODBiMWEwMi4uMjA3NGJjYyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL3BsYXRmb3Jtcy9tMzI3MDB1dC9zZXR1cC5jCisrKyBiL2FyY2gvbTMyci9wbGF0Zm9ybXMvbTMyNzAwdXQvc2V0dXAuYwpAQCAtNDUsMzkgKzQ1LDMwIEBACiAJb3V0bChkYXRhLCBwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX20zMjcwMHV0KHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtYXNrX20zMjcwMHV0KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKLQlkaXNhYmxlX20zMjcwMHV0X2lycShpcnEpOworCWRpc2FibGVfbTMyNzAwdXRfaXJxKGRhdGEtPmlycSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVuZF9tMzI3MDB1dF9pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIHVubWFza19tMzI3MDB1dChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JZW5hYmxlX20zMjcwMHV0X2lycShpcnEpOworCWVuYWJsZV9tMzI3MDB1dF9pcnEoZGF0YS0+aXJxKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX20zMjcwMHV0X2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWVuYWJsZV9tMzI3MDB1dF9pcnEoaXJxKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgdm9pZCBzaHV0ZG93bl9tMzI3MDB1dF9pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIHNodXRkb3duX20zMjcwMHV0KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIHBvcnQ7CiAKLQlwb3J0ID0gaXJxMnBvcnQoaXJxKTsKKwlwb3J0ID0gaXJxMnBvcnQoZGF0YS0+aXJxKTsKIAlvdXRsKE0zMlJfSUNVQ1JfSUxFVkVMNywgcG9ydCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbTMyNzAwdXRfaXJxX3R5cGUgPQogewotCS5uYW1lID0gIk0zMjcwMFVULUlSUSIsCi0JLnN0YXJ0dXAgPSBzdGFydHVwX20zMjcwMHV0X2lycSwKLQkuc2h1dGRvd24gPSBzaHV0ZG93bl9tMzI3MDB1dF9pcnEsCi0JLmVuYWJsZSA9IGVuYWJsZV9tMzI3MDB1dF9pcnEsCi0JLmRpc2FibGUgPSBkaXNhYmxlX20zMjcwMHV0X2lycSwKLQkuYWNrID0gbWFza19hbmRfYWNrX20zMjcwMHV0LAotCS5lbmQgPSBlbmRfbTMyNzAwdXRfaXJxCisJLm5hbWUJCT0gIk0zMjcwMFVULUlSUSIsCisJLmlycV9zaHV0ZG93bgk9IHNodXRkb3duX20zMjcwMHV0LAorCS5pcnFfbWFzawk9IG1hc2tfbTMyNzAwdXQsCisJLmlycV91bm1hc2sJPSB1bm1hc2tfbTMyNzAwdXQKIH07CiAKIC8qCkBAIC05OSw3ICs5MCw2IEBACiAJdW5zaWduZWQgaW50IHBsZGlycTsKIAogCXBsZGlycSA9IGlycTJwbGRpcnEoaXJxKTsKLS8vCWRpc2FibGVfbTMyNzAwdXRfaXJxKE0zMlJfSVJRX0lOVDEpOwogCXBvcnQgPSBwbGRpcnEycG9ydChwbGRpcnEpOwogCWRhdGEgPSBwbGRfaWN1X2RhdGFbcGxkaXJxXS5pY3VjcnxQTERfSUNVQ1JfSUxFVkVMNzsKIAlvdXR3KGRhdGEsIHBvcnQpOwpAQCAtMTExLDUwICsxMDEsMzggQEAKIAl1bnNpZ25lZCBpbnQgcGxkaXJxOwogCiAJcGxkaXJxID0gaXJxMnBsZGlycShpcnEpOwotLy8JZW5hYmxlX20zMjcwMHV0X2lycShNMzJSX0lSUV9JTlQxKTsKIAlwb3J0ID0gcGxkaXJxMnBvcnQocGxkaXJxKTsKIAlkYXRhID0gcGxkX2ljdV9kYXRhW3BsZGlycV0uaWN1Y3J8UExEX0lDVUNSX0lFTnxQTERfSUNVQ1JfSUxFVkVMNjsKIAlvdXR3KGRhdGEsIHBvcnQpOwogfQogCi1zdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfbTMyNzAwdXRfcGxkKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtYXNrX20zMjcwMHV0X3BsZChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JZGlzYWJsZV9tMzI3MDB1dF9wbGRfaXJxKGlycSk7Ci0vLwltYXNrX2FuZF9hY2tfbTMyNzAwdXQoTTMyUl9JUlFfSU5UMSk7CisJZGlzYWJsZV9tMzI3MDB1dF9wbGRfaXJxKGRhdGEtPmlycSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVuZF9tMzI3MDB1dF9wbGRfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCB1bm1hc2tfbTMyNzAwdXRfcGxkKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKLQllbmFibGVfbTMyNzAwdXRfcGxkX2lycShpcnEpOwotCWVuZF9tMzI3MDB1dF9pcnEoTTMyUl9JUlFfSU5UMSk7CisJZW5hYmxlX20zMjcwMHV0X3BsZF9pcnEoZGF0YS0+aXJxKTsKKwllbmFibGVfbTMyNzAwdXRfaXJxKE0zMlJfSVJRX0lOVDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfbTMyNzAwdXRfcGxkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWVuYWJsZV9tMzI3MDB1dF9wbGRfaXJxKGlycSk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIHZvaWQgc2h1dGRvd25fbTMyNzAwdXRfcGxkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgc2h1dGRvd25fbTMyNzAwdXRfcGxkX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7CiAJdW5zaWduZWQgbG9uZyBwb3J0OwogCXVuc2lnbmVkIGludCBwbGRpcnE7CiAKLQlwbGRpcnEgPSBpcnEycGxkaXJxKGlycSk7Ci0vLwlzaHV0ZG93bl9tMzI3MDB1dF9pcnEoTTMyUl9JUlFfSU5UMSk7CisJcGxkaXJxID0gaXJxMnBsZGlycShkYXRhLT5pcnEpOwogCXBvcnQgPSBwbGRpcnEycG9ydChwbGRpcnEpOwogCW91dHcoUExEX0lDVUNSX0lMRVZFTDcsIHBvcnQpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG0zMjcwMHV0X3BsZF9pcnFfdHlwZSA9CiB7Ci0JLm5hbWUgPSAiTTMyNzAwVVQtUExELUlSUSIsCi0JLnN0YXJ0dXAgPSBzdGFydHVwX20zMjcwMHV0X3BsZF9pcnEsCi0JLnNodXRkb3duID0gc2h1dGRvd25fbTMyNzAwdXRfcGxkX2lycSwKLQkuZW5hYmxlID0gZW5hYmxlX20zMjcwMHV0X3BsZF9pcnEsCi0JLmRpc2FibGUgPSBkaXNhYmxlX20zMjcwMHV0X3BsZF9pcnEsCi0JLmFjayA9IG1hc2tfYW5kX2Fja19tMzI3MDB1dF9wbGQsCi0JLmVuZCA9IGVuZF9tMzI3MDB1dF9wbGRfaXJxCisJLm5hbWUJCT0gIk0zMjcwMFVULVBMRC1JUlEiLAorCS5pcnFfc2h1dGRvd24JPSBzaHV0ZG93bl9tMzI3MDB1dF9wbGRfaXJxLAorCS5pcnFfbWFzawk9IG1hc2tfbTMyNzAwdXRfcGxkLAorCS5pcnFfdW5tYXNrCT0gdW5tYXNrX20zMjcwMHV0X3BsZCwKIH07CiAKIC8qCkBAIC0xODgsNDIgKzE2NiwzMyBAQAogCW91dHcoZGF0YSwgcG9ydCk7CiB9CiAKLXN0YXRpYyB2b2lkIG1hc2tfYW5kX2Fja19tMzI3MDB1dF9sYW5wbGQodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIG1hc2tfbTMyNzAwdXRfbGFucGxkKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKLQlkaXNhYmxlX20zMjcwMHV0X2xhbnBsZF9pcnEoaXJxKTsKKwlkaXNhYmxlX20zMjcwMHV0X2xhbnBsZF9pcnEoZGF0YS0+aXJxKTsKIH0KIAotc3RhdGljIHZvaWQgZW5kX20zMjcwMHV0X2xhbnBsZF9pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIHVubWFza19tMzI3MDB1dF9sYW5wbGQoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewotCWVuYWJsZV9tMzI3MDB1dF9sYW5wbGRfaXJxKGlycSk7Ci0JZW5kX20zMjcwMHV0X2lycShNMzJSX0lSUV9JTlQwKTsKKwllbmFibGVfbTMyNzAwdXRfbGFucGxkX2lycShkYXRhLT5pcnEpOworCWVuYWJsZV9tMzI3MDB1dF9pcnEoTTMyUl9JUlFfSU5UMCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9tMzI3MDB1dF9sYW5wbGRfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JZW5hYmxlX20zMjcwMHV0X2xhbnBsZF9pcnEoaXJxKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgdm9pZCBzaHV0ZG93bl9tMzI3MDB1dF9sYW5wbGRfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBzaHV0ZG93bl9tMzI3MDB1dF9sYW5wbGQoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewogCXVuc2lnbmVkIGxvbmcgcG9ydDsKIAl1bnNpZ25lZCBpbnQgcGxkaXJxOwogCi0JcGxkaXJxID0gaXJxMmxhbnBsZGlycShpcnEpOworCXBsZGlycSA9IGlycTJsYW5wbGRpcnEoZGF0YS0+aXJxKTsKIAlwb3J0ID0gbGFucGxkaXJxMnBvcnQocGxkaXJxKTsKIAlvdXR3KFBMRF9JQ1VDUl9JTEVWRUw3LCBwb3J0KTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtMzI3MDB1dF9sYW5wbGRfaXJxX3R5cGUgPQogewotCS5uYW1lID0gIk0zMjcwMFVULVBMRC1MQU4tSVJRIiwKLQkuc3RhcnR1cCA9IHN0YXJ0dXBfbTMyNzAwdXRfbGFucGxkX2lycSwKLQkuc2h1dGRvd24gPSBzaHV0ZG93bl9tMzI3MDB1dF9sYW5wbGRfaXJxLAotCS5lbmFibGUgPSBlbmFibGVfbTMyNzAwdXRfbGFucGxkX2lycSwKLQkuZGlzYWJsZSA9IGRpc2FibGVfbTMyNzAwdXRfbGFucGxkX2lycSwKLQkuYWNrID0gbWFza19hbmRfYWNrX20zMjcwMHV0X2xhbnBsZCwKLQkuZW5kID0gZW5kX20zMjcwMHV0X2xhbnBsZF9pcnEKKwkubmFtZQkJPSAiTTMyNzAwVVQtUExELUxBTi1JUlEiLAorCS5pcnFfc2h1dGRvd24JPSBzaHV0ZG93bl9tMzI3MDB1dF9sYW5wbGQsCisJLmlycV9tYXNrCT0gbWFza19tMzI3MDB1dF9sYW5wbGQsCisJLmlycV91bm1hc2sJPSB1bm1hc2tfbTMyNzAwdXRfbGFucGxkLAogfTsKIAogLyoKQEAgLTI1NywxNDMgKzIyNiwxMTAgQEAKIAlvdXR3KGRhdGEsIHBvcnQpOwogfQogCi1zdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfbTMyNzAwdXRfbGNkcGxkKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtYXNrX20zMjcwMHV0X2xjZHBsZChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JZGlzYWJsZV9tMzI3MDB1dF9sY2RwbGRfaXJxKGlycSk7CisJZGlzYWJsZV9tMzI3MDB1dF9sY2RwbGRfaXJxKGRhdGEtPmlycSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVuZF9tMzI3MDB1dF9sY2RwbGRfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCB1bm1hc2tfbTMyNzAwdXRfbGNkcGxkKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKLQllbmFibGVfbTMyNzAwdXRfbGNkcGxkX2lycShpcnEpOwotCWVuZF9tMzI3MDB1dF9pcnEoTTMyUl9JUlFfSU5UMik7CisJZW5hYmxlX20zMjcwMHV0X2xjZHBsZF9pcnEoZGF0YS0+aXJxKTsKKwllbmFibGVfbTMyNzAwdXRfaXJxKE0zMlJfSVJRX0lOVDIpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfbTMyNzAwdXRfbGNkcGxkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWVuYWJsZV9tMzI3MDB1dF9sY2RwbGRfaXJxKGlycSk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIHZvaWQgc2h1dGRvd25fbTMyNzAwdXRfbGNkcGxkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgc2h1dGRvd25fbTMyNzAwdXRfbGNkcGxkKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIHBvcnQ7CiAJdW5zaWduZWQgaW50IHBsZGlycTsKIAotCXBsZGlycSA9IGlycTJsY2RwbGRpcnEoaXJxKTsKKwlwbGRpcnEgPSBpcnEybGNkcGxkaXJxKGRhdGEtPmlycSk7CiAJcG9ydCA9IGxjZHBsZGlycTJwb3J0KHBsZGlycSk7CiAJb3V0dyhQTERfSUNVQ1JfSUxFVkVMNywgcG9ydCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbTMyNzAwdXRfbGNkcGxkX2lycV90eXBlID0KIHsKLQkubmFtZSA9ICJNMzI3MDBVVC1QTEQtTENELUlSUSIsCi0JLnN0YXJ0dXAgPSBzdGFydHVwX20zMjcwMHV0X2xjZHBsZF9pcnEsCi0JLnNodXRkb3duID0gc2h1dGRvd25fbTMyNzAwdXRfbGNkcGxkX2lycSwKLQkuZW5hYmxlID0gZW5hYmxlX20zMjcwMHV0X2xjZHBsZF9pcnEsCi0JLmRpc2FibGUgPSBkaXNhYmxlX20zMjcwMHV0X2xjZHBsZF9pcnEsCi0JLmFjayA9IG1hc2tfYW5kX2Fja19tMzI3MDB1dF9sY2RwbGQsCi0JLmVuZCA9IGVuZF9tMzI3MDB1dF9sY2RwbGRfaXJxCisJLm5hbWUJCT0gIk0zMjcwMFVULVBMRC1MQ0QtSVJRIiwKKwkuaXJxX3NodXRkb3duCT0gc2h1dGRvd25fbTMyNzAwdXRfbGNkcGxkLAorCS5pcnFfbWFzawk9IG1hc2tfbTMyNzAwdXRfbGNkcGxkLAorCS5pcnFfdW5tYXNrCT0gdW5tYXNrX20zMjcwMHV0X2xjZHBsZCwKIH07CiAKIHZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfU01DOTFYKQogCS8qIElOVCMwOiBMQU4gY29udHJvbGxlciBvbiBNMzI3MDBVVC1MQU4gKFNNQzkxQzExMSkqLwotCWlycV9kZXNjW00zMjcwMFVUX0xBTl9JUlFfTEFOXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyNzAwVVRfTEFOX0lSUV9MQU5dLmNoaXAgPSAmbTMyNzAwdXRfbGFucGxkX2lycV90eXBlOwotCWlycV9kZXNjW00zMjcwMFVUX0xBTl9JUlFfTEFOXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW00zMjcwMFVUX0xBTl9JUlFfTEFOXS5kZXB0aCA9IDE7CS8qIGRpc2FibGUgbmVzdGVkIGlycSAqLworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzI3MDBVVF9MQU5fSVJRX0xBTiwKKwkJCQkgJm0zMjcwMHV0X2xhbnBsZF9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CiAJbGFucGxkX2ljdV9kYXRhW2lycTJsYW5wbGRpcnEoTTMyNzAwVVRfTEFOX0lSUV9MQU4pXS5pY3VjciA9IFBMRF9JQ1VDUl9JRU58UExEX0lDVUNSX0lTTU9EMDI7CS8qICJIIiBlZGdlIHNlbnNlICovCiAJZGlzYWJsZV9tMzI3MDB1dF9sYW5wbGRfaXJxKE0zMjcwMFVUX0xBTl9JUlFfTEFOKTsKICNlbmRpZiAgLyogQ09ORklHX1NNQzkxWCAqLwogCiAJLyogTUZUMiA6IHN5c3RlbSB0aW1lciAqLwotCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5jaGlwID0gJm0zMjcwMHV0X2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9NRlQyLCAmbTMyNzAwdXRfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW00zMlJfSVJRX01GVDJdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU47CiAJZGlzYWJsZV9tMzI3MDB1dF9pcnEoTTMyUl9JUlFfTUZUMik7CiAKIAkvKiBTSU8wIDogcmVjZWl2ZSAqLwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uY2hpcCA9ICZtMzI3MDB1dF9pcnFfdHlwZTsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5kZXB0aCA9IDE7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKE0zMlJfSVJRX1NJTzBfUiwgJm0zMjcwMHV0X2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8wX1JdLmljdWNyID0gMDsKIAlkaXNhYmxlX20zMjcwMHV0X2lycShNMzJSX0lSUV9TSU8wX1IpOwogCiAJLyogU0lPMCA6IHNlbmQgKi8KLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmNoaXAgPSAmbTMyNzAwdXRfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9TXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9TSU8wX1MsICZtMzI3MDB1dF9pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMF9TXS5pY3VjciA9IDA7CiAJZGlzYWJsZV9tMzI3MDB1dF9pcnEoTTMyUl9JUlFfU0lPMF9TKTsKIAogCS8qIFNJTzEgOiByZWNlaXZlICovCi0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5jaGlwID0gJm0zMjcwMHV0X2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uYWN0aW9uID0gMDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmRlcHRoID0gMTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoTTMyUl9JUlFfU0lPMV9SLCAmbTMyNzAwdXRfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW00zMlJfSVJRX1NJTzFfUl0uaWN1Y3IgPSAwOwogCWRpc2FibGVfbTMyNzAwdXRfaXJxKE0zMlJfSVJRX1NJTzFfUik7CiAKIAkvKiBTSU8xIDogc2VuZCAqLwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uY2hpcCA9ICZtMzI3MDB1dF9pcnFfdHlwZTsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5kZXB0aCA9IDE7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKE0zMlJfSVJRX1NJTzFfUywgJm0zMjcwMHV0X2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8xX1NdLmljdWNyID0gMDsKIAlkaXNhYmxlX20zMjcwMHV0X2lycShNMzJSX0lSUV9TSU8xX1MpOwogCiAJLyogRE1BMSA6ICovCi0JaXJxX2Rlc2NbTTMyUl9JUlFfRE1BMV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX0RNQTFdLmNoaXAgPSAmbTMyNzAwdXRfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfRE1BMV0uYWN0aW9uID0gMDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9ETUExXS5kZXB0aCA9IDE7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKE0zMlJfSVJRX0RNQTEsICZtMzI3MDB1dF9pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJaWN1X2RhdGFbTTMyUl9JUlFfRE1BMV0uaWN1Y3IgPSAwOwogCWRpc2FibGVfbTMyNzAwdXRfaXJxKE0zMlJfSVJRX0RNQTEpOwogCiAjaWZkZWYgQ09ORklHX1NFUklBTF9NMzJSX1BMRFNJTwogCS8qIElOVCMxOiBTSU8wIFJlY2VpdmUgb24gUExEICovCi0JaXJxX2Rlc2NbUExEX0lSUV9TSU8wX1JDVl0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW1BMRF9JUlFfU0lPMF9SQ1ZdLmNoaXAgPSAmbTMyNzAwdXRfcGxkX2lycV90eXBlOwotCWlycV9kZXNjW1BMRF9JUlFfU0lPMF9SQ1ZdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbUExEX0lSUV9TSU8wX1JDVl0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoUExEX0lSUV9TSU8wX1JDViwgJm0zMjcwMHV0X3BsZF9pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJcGxkX2ljdV9kYXRhW2lycTJwbGRpcnEoUExEX0lSUV9TSU8wX1JDVildLmljdWNyID0gUExEX0lDVUNSX0lFTnxQTERfSUNVQ1JfSVNNT0QwMzsKIAlkaXNhYmxlX20zMjcwMHV0X3BsZF9pcnEoUExEX0lSUV9TSU8wX1JDVik7CiAKIAkvKiBJTlQjMTogU0lPMCBTZW5kIG9uIFBMRCAqLwotCWlycV9kZXNjW1BMRF9JUlFfU0lPMF9TTkRdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tQTERfSVJRX1NJTzBfU05EXS5jaGlwID0gJm0zMjcwMHV0X3BsZF9pcnFfdHlwZTsKLQlpcnFfZGVzY1tQTERfSVJRX1NJTzBfU05EXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW1BMRF9JUlFfU0lPMF9TTkRdLmRlcHRoID0gMTsJLyogZGlzYWJsZSBuZXN0ZWQgaXJxICovCisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKFBMRF9JUlFfU0lPMF9TTkQsICZtMzI3MDB1dF9wbGRfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCXBsZF9pY3VfZGF0YVtpcnEycGxkaXJxKFBMRF9JUlFfU0lPMF9TTkQpXS5pY3VjciA9IFBMRF9JQ1VDUl9JRU58UExEX0lDVUNSX0lTTU9EMDM7CiAJZGlzYWJsZV9tMzI3MDB1dF9wbGRfaXJxKFBMRF9JUlFfU0lPMF9TTkQpOwogI2VuZGlmICAvKiBDT05GSUdfU0VSSUFMX00zMlJfUExEU0lPICovCiAKIAkvKiBJTlQjMTogQ0ZDIElSRVEgb24gUExEICovCi0JaXJxX2Rlc2NbUExEX0lSUV9DRklSRVFdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tQTERfSVJRX0NGSVJFUV0uY2hpcCA9ICZtMzI3MDB1dF9wbGRfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbUExEX0lSUV9DRklSRVFdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbUExEX0lSUV9DRklSRVFdLmRlcHRoID0gMTsJLyogZGlzYWJsZSBuZXN0ZWQgaXJxICovCisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKFBMRF9JUlFfQ0ZJUkVRLCAmbTMyNzAwdXRfcGxkX2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlwbGRfaWN1X2RhdGFbaXJxMnBsZGlycShQTERfSVJRX0NGSVJFUSldLmljdWNyID0gUExEX0lDVUNSX0lFTnxQTERfSUNVQ1JfSVNNT0QwMTsJLyogJ0wnIGxldmVsIHNlbnNlICovCiAJZGlzYWJsZV9tMzI3MDB1dF9wbGRfaXJxKFBMRF9JUlFfQ0ZJUkVRKTsKIAogCS8qIElOVCMxOiBDRkMgSW5zZXJ0IG9uIFBMRCAqLwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uY2hpcCA9ICZtMzI3MDB1dF9wbGRfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbUExEX0lSUV9DRkNfSU5TRVJUXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoUExEX0lSUV9DRkNfSU5TRVJULCAmbTMyNzAwdXRfcGxkX2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlwbGRfaWN1X2RhdGFbaXJxMnBsZGlycShQTERfSVJRX0NGQ19JTlNFUlQpXS5pY3VjciA9IFBMRF9JQ1VDUl9JRU58UExEX0lDVUNSX0lTTU9EMDA7CS8qICdMJyBlZGdlIHNlbnNlICovCiAJZGlzYWJsZV9tMzI3MDB1dF9wbGRfaXJxKFBMRF9JUlFfQ0ZDX0lOU0VSVCk7CiAKIAkvKiBJTlQjMTogQ0ZDIEVqZWN0IG9uIFBMRCAqLwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0VKRUNUXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbUExEX0lSUV9DRkNfRUpFQ1RdLmNoaXAgPSAmbTMyNzAwdXRfcGxkX2lycV90eXBlOwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0VKRUNUXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0VKRUNUXS5kZXB0aCA9IDE7CS8qIGRpc2FibGUgbmVzdGVkIGlycSAqLworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihQTERfSVJRX0NGQ19FSkVDVCwgJm0zMjcwMHV0X3BsZF9pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJcGxkX2ljdV9kYXRhW2lycTJwbGRpcnEoUExEX0lSUV9DRkNfRUpFQ1QpXS5pY3VjciA9IFBMRF9JQ1VDUl9JRU58UExEX0lDVUNSX0lTTU9EMDI7CS8qICdIJyBlZGdlIHNlbnNlICovCiAJZGlzYWJsZV9tMzI3MDB1dF9wbGRfaXJxKFBMRF9JUlFfQ0ZDX0VKRUNUKTsKIApAQCAtNDEzLDEzICszNDksMTEgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1VTQikKIAlvdXR3KFVTQkNSX09UR1MsIFVTQkNSKTsgCS8qIFVTQkNSOiBub24tT1RHICovCisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKE0zMjcwMFVUX0xDRF9JUlFfVVNCX0lOVDEsCisJCQkJICZtMzI3MDB1dF9sY2RwbGRfaXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEpOwogCi0gICAgaXJxX2Rlc2NbTTMyNzAwVVRfTENEX0lSUV9VU0JfSU5UMV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotICAgIGlycV9kZXNjW00zMjcwMFVUX0xDRF9JUlFfVVNCX0lOVDFdLmNoaXAgPSAmbTMyNzAwdXRfbGNkcGxkX2lycV90eXBlOwotICAgIGlycV9kZXNjW00zMjcwMFVUX0xDRF9JUlFfVVNCX0lOVDFdLmFjdGlvbiA9IDA7Ci0gICAgaXJxX2Rlc2NbTTMyNzAwVVRfTENEX0lSUV9VU0JfSU5UMV0uZGVwdGggPSAxOwotICAgIGxjZHBsZF9pY3VfZGF0YVtpcnEybGNkcGxkaXJxKE0zMjcwMFVUX0xDRF9JUlFfVVNCX0lOVDEpXS5pY3VjciA9IFBMRF9JQ1VDUl9JRU58UExEX0lDVUNSX0lTTU9EMDE7CS8qICJMIiBsZXZlbCBzZW5zZSAqLwotICAgIGRpc2FibGVfbTMyNzAwdXRfbGNkcGxkX2lycShNMzI3MDBVVF9MQ0RfSVJRX1VTQl9JTlQxKTsKKwlsY2RwbGRfaWN1X2RhdGFbaXJxMmxjZHBsZGlycShNMzI3MDBVVF9MQ0RfSVJRX1VTQl9JTlQxKV0uaWN1Y3IgPSBQTERfSUNVQ1JfSUVOfFBMRF9JQ1VDUl9JU01PRDAxOwkvKiAiTCIgbGV2ZWwgc2Vuc2UgKi8KKwlkaXNhYmxlX20zMjcwMHV0X2xjZHBsZF9pcnEoTTMyNzAwVVRfTENEX0lSUV9VU0JfSU5UMSk7CiAjZW5kaWYKIAkvKgogCSAqIElOVDIjIGlzIHVzZWQgZm9yIEJBVCwgVVNCLCBBVURJTwpAQCAtNDMyLDEwICszNjYsOCBAQAogCS8qCiAJICogSU5UMyMgaXMgdXNlZCBmb3IgQVIKIAkgKi8KLQlpcnFfZGVzY1tNMzJSX0lSUV9JTlQzXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfSU5UM10uY2hpcCA9ICZtMzI3MDB1dF9pcnFfdHlwZTsKLQlpcnFfZGVzY1tNMzJSX0lSUV9JTlQzXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDNdLmRlcHRoID0gMTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoTTMyUl9JUlFfSU5UMywgJm0zMjcwMHV0X2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9JTlQzXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOfE0zMlJfSUNVQ1JfSVNNT0QxMDsKIAlkaXNhYmxlX20zMjcwMHV0X2lycShNMzJSX0lSUV9JTlQzKTsKICNlbmRpZgkvKiBDT05GSUdfVklERU9fTTMyUl9BUiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL3BsYXRmb3Jtcy9tYXBwaS9zZXR1cC5jIGIvYXJjaC9tMzJyL3BsYXRmb3Jtcy9tYXBwaS9zZXR1cC5jCmluZGV4IGVhMDBjODQuLmNkZDhjNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9wbGF0Zm9ybXMvbWFwcGkvc2V0dXAuYworKysgYi9hcmNoL20zMnIvcGxhdGZvcm1zL21hcHBpL3NldHVwLmMKQEAgLTM4LDQwICszOCwzMCBAQAogCW91dGwoZGF0YSwgcG9ydCk7CiB9CiAKLXN0YXRpYyB2b2lkIG1hc2tfYW5kX2Fja19tYXBwaSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgbWFza19tYXBwaShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JZGlzYWJsZV9tYXBwaV9pcnEoaXJxKTsKKwlkaXNhYmxlX21hcHBpX2lycShkYXRhLT5pcnEpOwogfQogCi1zdGF0aWMgdm9pZCBlbmRfbWFwcGlfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCB1bm1hc2tfbWFwcGkoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewotCWlmICghKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTKSkpCi0JCWVuYWJsZV9tYXBwaV9pcnEoaXJxKTsKKwllbmFibGVfbWFwcGlfaXJxKGRhdGEtPmlycSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9tYXBwaV9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQllbmFibGVfbWFwcGlfaXJxKGlycSk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIHZvaWQgc2h1dGRvd25fbWFwcGlfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBzaHV0ZG93bl9tYXBwaShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7CiAJdW5zaWduZWQgbG9uZyBwb3J0OwogCi0JcG9ydCA9IGlycTJwb3J0KGlycSk7CisJcG9ydCA9IGlycTJwb3J0KGRhdGEtPmlycSk7CiAJb3V0bChNMzJSX0lDVUNSX0lMRVZFTDcsIHBvcnQpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1hcHBpX2lycV90eXBlID0KIHsKLQkubmFtZSA9ICJNQVBQSS1JUlEiLAotCS5zdGFydHVwID0gc3RhcnR1cF9tYXBwaV9pcnEsCi0JLnNodXRkb3duID0gc2h1dGRvd25fbWFwcGlfaXJxLAotCS5lbmFibGUgPSBlbmFibGVfbWFwcGlfaXJxLAotCS5kaXNhYmxlID0gZGlzYWJsZV9tYXBwaV9pcnEsCi0JLmFjayA9IG1hc2tfYW5kX2Fja19tYXBwaSwKLQkuZW5kID0gZW5kX21hcHBpX2lycQorCS5uYW1lCQk9ICJNQVBQSS1JUlEiLAorCS5pcnFfc2h1dGRvd24JPSBzaHV0ZG93bl9tYXBwaSwKKwkuaXJxX21hc2sJPSBtYXNrX21hcHBpLAorCS5pcnFfdW5tYXNrCT0gdW5tYXNrX21hcHBpLAogfTsKIAogdm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCkKQEAgLTg1LDcwICs3NSw1NCBAQAogCiAjaWZkZWYgQ09ORklHX05FMjAwMAogCS8qIElOVDAgOiBMQU4gY29udHJvbGxlciAoUlRMODAxOUFTKSAqLwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDBdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9JTlQwXS5jaGlwID0gJm1hcHBpX2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDBdLmFjdGlvbiA9IE5VTEw7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMF0uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9JTlQwLCAmbWFwcGlfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW00zMlJfSVJRX0lOVDBdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU58TTMyUl9JQ1VDUl9JU01PRDExOwogCWRpc2FibGVfbWFwcGlfaXJxKE0zMlJfSVJRX0lOVDApOwogI2VuZGlmIC8qIENPTkZJR19NMzJSX05FMjAwMCAqLwogCiAJLyogTUZUMiA6IHN5c3RlbSB0aW1lciAqLwotCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5jaGlwID0gJm1hcHBpX2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmFjdGlvbiA9IE5VTEw7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9NRlQyLCAmbWFwcGlfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW00zMlJfSVJRX01GVDJdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU47CiAJZGlzYWJsZV9tYXBwaV9pcnEoTTMyUl9JUlFfTUZUMik7CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMX00zMlJfU0lPCiAJLyogU0lPMF9SIDogdWFydCByZWNlaXZlIGRhdGEgKi8KLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLmNoaXAgPSAmbWFwcGlfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5hY3Rpb24gPSBOVUxMOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9TSU8wX1IsICZtYXBwaV9pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMF9SXS5pY3VjciA9IDA7CiAJZGlzYWJsZV9tYXBwaV9pcnEoTTMyUl9JUlFfU0lPMF9SKTsKIAogCS8qIFNJTzBfUyA6IHVhcnQgc2VuZCBkYXRhICovCi0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9TXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9TXS5jaGlwID0gJm1hcHBpX2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uYWN0aW9uID0gTlVMTDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmRlcHRoID0gMTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoTTMyUl9JUlFfU0lPMF9TLCAmbWFwcGlfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW00zMlJfSVJRX1NJTzBfU10uaWN1Y3IgPSAwOwogCWRpc2FibGVfbWFwcGlfaXJxKE0zMlJfSVJRX1NJTzBfUyk7CiAKIAkvKiBTSU8xX1IgOiB1YXJ0IHJlY2VpdmUgZGF0YSAqLwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uY2hpcCA9ICZtYXBwaV9pcnFfdHlwZTsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmFjdGlvbiA9IE5VTEw7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5kZXB0aCA9IDE7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKE0zMlJfSVJRX1NJTzFfUiwgJm1hcHBpX2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8xX1JdLmljdWNyID0gMDsKIAlkaXNhYmxlX21hcHBpX2lycShNMzJSX0lSUV9TSU8xX1IpOwogCiAJLyogU0lPMV9TIDogdWFydCBzZW5kIGRhdGEgKi8KLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLmNoaXAgPSAmbWFwcGlfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5hY3Rpb24gPSBOVUxMOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9TSU8xX1MsICZtYXBwaV9pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMV9TXS5pY3VjciA9IDA7CiAJZGlzYWJsZV9tYXBwaV9pcnEoTTMyUl9JUlFfU0lPMV9TKTsKICNlbmRpZiAvKiBDT05GSUdfU0VSSUFMX00zMlJfU0lPICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19NMzJSX1BDQykKIAkvKiBJTlQxIDogcGNjYXJkMCBpbnRlcnJ1cHQgKi8KLQlpcnFfZGVzY1tNMzJSX0lSUV9JTlQxXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMV0uY2hpcCA9ICZtYXBwaV9pcnFfdHlwZTsKLQlpcnFfZGVzY1tNMzJSX0lSUV9JTlQxXS5hY3Rpb24gPSBOVUxMOwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDFdLmRlcHRoID0gMTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoTTMyUl9JUlFfSU5UMSwgJm1hcHBpX2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9JTlQxXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOIHwgTTMyUl9JQ1VDUl9JU01PRDAwOwogCWRpc2FibGVfbWFwcGlfaXJxKE0zMlJfSVJRX0lOVDEpOwogCiAJLyogSU5UMiA6IHBjY2FyZDEgaW50ZXJydXB0ICovCi0JaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMl0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDJdLmNoaXAgPSAmbWFwcGlfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMl0uYWN0aW9uID0gTlVMTDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9JTlQyXS5kZXB0aCA9IDE7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKE0zMlJfSVJRX0lOVDIsICZtYXBwaV9pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJaWN1X2RhdGFbTTMyUl9JUlFfSU5UMl0uaWN1Y3IgPSBNMzJSX0lDVUNSX0lFTiB8IE0zMlJfSUNVQ1JfSVNNT0QwMDsKIAlkaXNhYmxlX21hcHBpX2lycShNMzJSX0lSUV9JTlQyKTsKICNlbmRpZiAvKiBDT05GSUdfTTMyUlBDQyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL3BsYXRmb3Jtcy9tYXBwaTIvc2V0dXAuYyBiL2FyY2gvbTMyci9wbGF0Zm9ybXMvbWFwcGkyL3NldHVwLmMKaW5kZXggYzA0OTM3Ni4uOTExN2MzMCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL3BsYXRmb3Jtcy9tYXBwaTIvc2V0dXAuYworKysgYi9hcmNoL20zMnIvcGxhdGZvcm1zL21hcHBpMi9zZXR1cC5jCkBAIC00NiwxMjYgKzQ2LDk3IEBACiAJb3V0bChkYXRhLCBwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX21hcHBpMih1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgbWFza19tYXBwaTIoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewotCWRpc2FibGVfbWFwcGkyX2lycShpcnEpOworCWRpc2FibGVfbWFwcGkyX2lycShkYXRhLT5pcnEpOwogfQogCi1zdGF0aWMgdm9pZCBlbmRfbWFwcGkyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgdW5tYXNrX21hcHBpMihzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JZW5hYmxlX21hcHBpMl9pcnEoaXJxKTsKKwllbmFibGVfbWFwcGkyX2lycShkYXRhLT5pcnEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfbWFwcGkyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWVuYWJsZV9tYXBwaTJfaXJxKGlycSk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIHZvaWQgc2h1dGRvd25fbWFwcGkyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgc2h1dGRvd25fbWFwcGkyKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIHBvcnQ7CiAKLQlwb3J0ID0gaXJxMnBvcnQoaXJxKTsKKwlwb3J0ID0gaXJxMnBvcnQoZGF0YS0+aXJxKTsKIAlvdXRsKE0zMlJfSUNVQ1JfSUxFVkVMNywgcG9ydCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbWFwcGkyX2lycV90eXBlID0KIHsKLQkubmFtZSA9ICJNQVBQSTItSVJRIiwKLQkuc3RhcnR1cCA9IHN0YXJ0dXBfbWFwcGkyX2lycSwKLQkuc2h1dGRvd24gPSBzaHV0ZG93bl9tYXBwaTJfaXJxLAotCS5lbmFibGUgPSBlbmFibGVfbWFwcGkyX2lycSwKLQkuZGlzYWJsZSA9IGRpc2FibGVfbWFwcGkyX2lycSwKLQkuYWNrID0gbWFza19hbmRfYWNrX21hcHBpMiwKLQkuZW5kID0gZW5kX21hcHBpMl9pcnEKKwkubmFtZQkJPSAiTUFQUEkyLUlSUSIsCisJLmlycV9zaHV0ZG93bgk9IHNodXRkb3duX21hcHBpMiwKKwkuaXJxX21hc2sJPSBtYXNrX21hcHBpMiwKKwkuaXJxX3VubWFzawk9IHVubWFza19tYXBwaTIsCiB9OwogCiB2b2lkIF9faW5pdCBpbml0X0lSUSh2b2lkKQogewogI2lmIGRlZmluZWQoQ09ORklHX1NNQzkxWCkKIAkvKiBJTlQwIDogTEFOIGNvbnRyb2xsZXIgKFNNQzkxMTExKSAqLwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDBdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9JTlQwXS5jaGlwID0gJm1hcHBpMl9pcnFfdHlwZTsKLQlpcnFfZGVzY1tNMzJSX0lSUV9JTlQwXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDBdLmRlcHRoID0gMTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoTTMyUl9JUlFfSU5UMCwgJm1hcHBpMl9pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJaWN1X2RhdGFbTTMyUl9JUlFfSU5UMF0uaWN1Y3IgPSBNMzJSX0lDVUNSX0lFTnxNMzJSX0lDVUNSX0lTTU9EMTA7CiAJZGlzYWJsZV9tYXBwaTJfaXJxKE0zMlJfSVJRX0lOVDApOwogI2VuZGlmICAvKiBDT05GSUdfU01DOTFYICovCiAKIAkvKiBNRlQyIDogc3lzdGVtIHRpbWVyICovCi0JaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmNoaXAgPSAmbWFwcGkyX2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9NRlQyLCAmbWFwcGkyX2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9NRlQyXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOOwogCWRpc2FibGVfbWFwcGkyX2lycShNMzJSX0lSUV9NRlQyKTsKIAogI2lmZGVmIENPTkZJR19TRVJJQUxfTTMyUl9TSU8KIAkvKiBTSU8wX1IgOiB1YXJ0IHJlY2VpdmUgZGF0YSAqLwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uY2hpcCA9ICZtYXBwaTJfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9TSU8wX1IsICZtYXBwaTJfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW00zMlJfSVJRX1NJTzBfUl0uaWN1Y3IgPSAwOwogCWRpc2FibGVfbWFwcGkyX2lycShNMzJSX0lSUV9TSU8wX1IpOwogCiAJLyogU0lPMF9TIDogdWFydCBzZW5kIGRhdGEgKi8KLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmNoaXAgPSAmbWFwcGkyX2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uYWN0aW9uID0gMDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmRlcHRoID0gMTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoTTMyUl9JUlFfU0lPMF9TLCAmbWFwcGkyX2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8wX1NdLmljdWNyID0gMDsKIAlkaXNhYmxlX21hcHBpMl9pcnEoTTMyUl9JUlFfU0lPMF9TKTsKIAkvKiBTSU8xX1IgOiB1YXJ0IHJlY2VpdmUgZGF0YSAqLwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uY2hpcCA9ICZtYXBwaTJfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9TSU8xX1IsICZtYXBwaTJfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW00zMlJfSVJRX1NJTzFfUl0uaWN1Y3IgPSAwOwogCWRpc2FibGVfbWFwcGkyX2lycShNMzJSX0lSUV9TSU8xX1IpOwogCiAJLyogU0lPMV9TIDogdWFydCBzZW5kIGRhdGEgKi8KLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLmNoaXAgPSAmbWFwcGkyX2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uYWN0aW9uID0gMDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLmRlcHRoID0gMTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoTTMyUl9JUlFfU0lPMV9TLCAmbWFwcGkyX2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8xX1NdLmljdWNyID0gMDsKIAlkaXNhYmxlX21hcHBpMl9pcnEoTTMyUl9JUlFfU0lPMV9TKTsKICNlbmRpZiAgLyogQ09ORklHX00zMlJfVVNFX0RCR19DT05TT0xFICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19VU0IpCiAJLyogSU5UMSA6IFVTQiBIb3N0IGNvbnRyb2xsZXIgaW50ZXJydXB0ICovCi0JaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDFdLmNoaXAgPSAmbWFwcGkyX2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDFdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMV0uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9JTlQxLCAmbWFwcGkyX2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9JTlQxXS5pY3VjciA9IE0zMlJfSUNVQ1JfSVNNT0QwMTsKIAlkaXNhYmxlX21hcHBpMl9pcnEoTTMyUl9JUlFfSU5UMSk7CiAjZW5kaWYgLyogQ09ORklHX1VTQiAqLwogCiAJLyogSUNVQ1I0MDogQ0ZDIElSRVEgKi8KLQlpcnFfZGVzY1tQTERfSVJRX0NGSVJFUV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZJUkVRXS5jaGlwID0gJm1hcHBpMl9pcnFfdHlwZTsKLQlpcnFfZGVzY1tQTERfSVJRX0NGSVJFUV0uYWN0aW9uID0gMDsKLQlpcnFfZGVzY1tQTERfSVJRX0NGSVJFUV0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoUExEX0lSUV9DRklSRVEsICZtYXBwaTJfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW1BMRF9JUlFfQ0ZJUkVRXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOfE0zMlJfSUNVQ1JfSVNNT0QwMTsKIAlkaXNhYmxlX21hcHBpMl9pcnEoUExEX0lSUV9DRklSRVEpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCiAJLyogSUNVQ1I0MTogQ0ZDIEluc2VydCAqLwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uY2hpcCA9ICZtYXBwaTJfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbUExEX0lSUV9DRkNfSU5TRVJUXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoUExEX0lSUV9DRkNfSU5TRVJULCAmbWFwcGkyX2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtQTERfSVJRX0NGQ19JTlNFUlRdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU58TTMyUl9JQ1VDUl9JU01PRDAwOwogCWRpc2FibGVfbWFwcGkyX2lycShQTERfSVJRX0NGQ19JTlNFUlQpOwogCiAJLyogSUNVQ1I0MjogQ0ZDIEVqZWN0ICovCi0JaXJxX2Rlc2NbUExEX0lSUV9DRkNfRUpFQ1RdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tQTERfSVJRX0NGQ19FSkVDVF0uY2hpcCA9ICZtYXBwaTJfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbUExEX0lSUV9DRkNfRUpFQ1RdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbUExEX0lSUV9DRkNfRUpFQ1RdLmRlcHRoID0gMTsJLyogZGlzYWJsZSBuZXN0ZWQgaXJxICovCisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKFBMRF9JUlFfQ0ZDX0VKRUNULCAmbWFwcGkyX2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtQTERfSVJRX0NGQ19FSkVDVF0uaWN1Y3IgPSBNMzJSX0lDVUNSX0lFTnxNMzJSX0lDVUNSX0lTTU9EMTA7CiAJZGlzYWJsZV9tYXBwaTJfaXJxKFBMRF9JUlFfQ0ZDX0VKRUNUKTsKICNlbmRpZiAvKiBDT05GSUdfTUFQUEkyX0NGQyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL3BsYXRmb3Jtcy9tYXBwaTMvc2V0dXAuYyBiL2FyY2gvbTMyci9wbGF0Zm9ybXMvbWFwcGkzL3NldHVwLmMKaW5kZXggODgyZGUyNS4uYjQ0ZjVkZSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL3BsYXRmb3Jtcy9tYXBwaTMvc2V0dXAuYworKysgYi9hcmNoL20zMnIvcGxhdGZvcm1zL21hcHBpMy9zZXR1cC5jCkBAIC00NiwxMjggKzQ2LDk4IEBACiAJb3V0bChkYXRhLCBwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX21hcHBpMyh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgbWFza19tYXBwaTMoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewotCWRpc2FibGVfbWFwcGkzX2lycShpcnEpOworCWRpc2FibGVfbWFwcGkzX2lycShkYXRhLT5pcnEpOwogfQogCi1zdGF0aWMgdm9pZCBlbmRfbWFwcGkzX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgdW5tYXNrX21hcHBpMyhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JZW5hYmxlX21hcHBpM19pcnEoaXJxKTsKKwllbmFibGVfbWFwcGkzX2lycShkYXRhLT5pcnEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfbWFwcGkzX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWVuYWJsZV9tYXBwaTNfaXJxKGlycSk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIHZvaWQgc2h1dGRvd25fbWFwcGkzX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgc2h1dGRvd25fbWFwcGkzKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIHBvcnQ7CiAKLQlwb3J0ID0gaXJxMnBvcnQoaXJxKTsKKwlwb3J0ID0gaXJxMnBvcnQoZGF0YS0+aXJxKTsKIAlvdXRsKE0zMlJfSUNVQ1JfSUxFVkVMNywgcG9ydCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbWFwcGkzX2lycV90eXBlID0KLXsKLQkubmFtZSA9ICJNQVBQSTMtSVJRIiwKLQkuc3RhcnR1cCA9IHN0YXJ0dXBfbWFwcGkzX2lycSwKLQkuc2h1dGRvd24gPSBzaHV0ZG93bl9tYXBwaTNfaXJxLAotCS5lbmFibGUgPSBlbmFibGVfbWFwcGkzX2lycSwKLQkuZGlzYWJsZSA9IGRpc2FibGVfbWFwcGkzX2lycSwKLQkuYWNrID0gbWFza19hbmRfYWNrX21hcHBpMywKLQkuZW5kID0gZW5kX21hcHBpM19pcnEKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbWFwcGkzX2lycV90eXBlID0geworCS5uYW1lCQk9ICJNQVBQSTMtSVJRIiwKKwkuaXJxX3NodXRkb3duCT0gc2h1dGRvd25fbWFwcGkzLAorCS5pcnFfbWFzawk9IG1hc2tfbWFwcGkzLAorCS5pcnFfdW5tYXNrCT0gdW5tYXNrX21hcHBpMywKIH07CiAKIHZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfU01DOTFYKQogCS8qIElOVDAgOiBMQU4gY29udHJvbGxlciAoU01DOTExMTEpICovCi0JaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMF0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDBdLmNoaXAgPSAmbWFwcGkzX2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDBdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMF0uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9JTlQwLCAmbWFwcGkzX2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9JTlQwXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOfE0zMlJfSUNVQ1JfSVNNT0QxMDsKIAlkaXNhYmxlX21hcHBpM19pcnEoTTMyUl9JUlFfSU5UMCk7CiAjZW5kaWYgIC8qIENPTkZJR19TTUM5MVggKi8KIAogCS8qIE1GVDIgOiBzeXN0ZW0gdGltZXIgKi8KLQlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uY2hpcCA9ICZtYXBwaTNfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uYWN0aW9uID0gMDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5kZXB0aCA9IDE7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKE0zMlJfSVJRX01GVDIsICZtYXBwaTNfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW00zMlJfSVJRX01GVDJdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU47CiAJZGlzYWJsZV9tYXBwaTNfaXJxKE0zMlJfSVJRX01GVDIpOwogCiAjaWZkZWYgQ09ORklHX1NFUklBTF9NMzJSX1NJTwogCS8qIFNJTzBfUiA6IHVhcnQgcmVjZWl2ZSBkYXRhICovCi0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5jaGlwID0gJm1hcHBpM19pcnFfdHlwZTsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5kZXB0aCA9IDE7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKE0zMlJfSVJRX1NJTzBfUiwgJm1hcHBpM19pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMF9SXS5pY3VjciA9IDA7CiAJZGlzYWJsZV9tYXBwaTNfaXJxKE0zMlJfSVJRX1NJTzBfUik7CiAKIAkvKiBTSU8wX1MgOiB1YXJ0IHNlbmQgZGF0YSAqLwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uY2hpcCA9ICZtYXBwaTNfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9TXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9TSU8wX1MsICZtYXBwaTNfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW00zMlJfSVJRX1NJTzBfU10uaWN1Y3IgPSAwOwogCWRpc2FibGVfbWFwcGkzX2lycShNMzJSX0lSUV9TSU8wX1MpOwogCS8qIFNJTzFfUiA6IHVhcnQgcmVjZWl2ZSBkYXRhICovCi0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5jaGlwID0gJm1hcHBpM19pcnFfdHlwZTsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5kZXB0aCA9IDE7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKE0zMlJfSVJRX1NJTzFfUiwgJm1hcHBpM19pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMV9SXS5pY3VjciA9IDA7CiAJZGlzYWJsZV9tYXBwaTNfaXJxKE0zMlJfSVJRX1NJTzFfUik7CiAKIAkvKiBTSU8xX1MgOiB1YXJ0IHNlbmQgZGF0YSAqLwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uY2hpcCA9ICZtYXBwaTNfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9TSU8xX1MsICZtYXBwaTNfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW00zMlJfSVJRX1NJTzFfU10uaWN1Y3IgPSAwOwogCWRpc2FibGVfbWFwcGkzX2lycShNMzJSX0lSUV9TSU8xX1MpOwogI2VuZGlmICAvKiBDT05GSUdfTTMyUl9VU0VfREJHX0NPTlNPTEUgKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX1VTQikKIAkvKiBJTlQxIDogVVNCIEhvc3QgY29udHJvbGxlciBpbnRlcnJ1cHQgKi8KLQlpcnFfZGVzY1tNMzJSX0lSUV9JTlQxXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMV0uY2hpcCA9ICZtYXBwaTNfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMV0uYWN0aW9uID0gMDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9JTlQxXS5kZXB0aCA9IDE7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKE0zMlJfSVJRX0lOVDEsICZtYXBwaTNfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW00zMlJfSVJRX0lOVDFdLmljdWNyID0gTTMyUl9JQ1VDUl9JU01PRDAxOwogCWRpc2FibGVfbWFwcGkzX2lycShNMzJSX0lSUV9JTlQxKTsKICNlbmRpZiAvKiBDT05GSUdfVVNCICovCiAKIAkvKiBDRkMgSVJFUSAqLwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZJUkVRXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbUExEX0lSUV9DRklSRVFdLmNoaXAgPSAmbWFwcGkzX2lycV90eXBlOwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZJUkVRXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZJUkVRXS5kZXB0aCA9IDE7CS8qIGRpc2FibGUgbmVzdGVkIGlycSAqLworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihQTERfSVJRX0NGSVJFUSwgJm1hcHBpM19pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJaWN1X2RhdGFbUExEX0lSUV9DRklSRVFdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU58TTMyUl9JQ1VDUl9JU01PRDAxOwogCWRpc2FibGVfbWFwcGkzX2lycShQTERfSVJRX0NGSVJFUSk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19NMzJSX0NGQykKIAkvKiBJQ1VDUjQxOiBDRkMgSW5zZXJ0ICYgZWplY3QgKi8KLQlpcnFfZGVzY1tQTERfSVJRX0NGQ19JTlNFUlRdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tQTERfSVJRX0NGQ19JTlNFUlRdLmNoaXAgPSAmbWFwcGkzX2lycV90eXBlOwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uYWN0aW9uID0gMDsKLQlpcnFfZGVzY1tQTERfSVJRX0NGQ19JTlNFUlRdLmRlcHRoID0gMTsJLyogZGlzYWJsZSBuZXN0ZWQgaXJxICovCisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKFBMRF9JUlFfQ0ZDX0lOU0VSVCwgJm1hcHBpM19pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJaWN1X2RhdGFbUExEX0lSUV9DRkNfSU5TRVJUXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOfE0zMlJfSUNVQ1JfSVNNT0QwMDsKIAlkaXNhYmxlX21hcHBpM19pcnEoUExEX0lSUV9DRkNfSU5TRVJUKTsKIAogI2VuZGlmIC8qIENPTkZJR19NMzJSX0NGQyAqLwogCiAJLyogSURFIElSRVEgKi8KLQlpcnFfZGVzY1tQTERfSVJRX0lERUlSRVFdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tQTERfSVJRX0lERUlSRVFdLmNoaXAgPSAmbWFwcGkzX2lycV90eXBlOwotCWlycV9kZXNjW1BMRF9JUlFfSURFSVJFUV0uYWN0aW9uID0gMDsKLQlpcnFfZGVzY1tQTERfSVJRX0lERUlSRVFdLmRlcHRoID0gMTsJLyogZGlzYWJsZSBuZXN0ZWQgaXJxICovCisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKFBMRF9JUlFfSURFSVJFUSwgJm1hcHBpM19pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJaWN1X2RhdGFbUExEX0lSUV9JREVJUkVRXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOfE0zMlJfSUNVQ1JfSVNNT0QxMDsKIAlkaXNhYmxlX21hcHBpM19pcnEoUExEX0lSUV9JREVJUkVRKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL3BsYXRmb3Jtcy9vYWtzMzJyL3NldHVwLmMgYi9hcmNoL20zMnIvcGxhdGZvcm1zL29ha3MzMnIvc2V0dXAuYwppbmRleCBkMTFkOTNiLi4xOWEwMmRiIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvcGxhdGZvcm1zL29ha3MzMnIvc2V0dXAuYworKysgYi9hcmNoL20zMnIvcGxhdGZvcm1zL29ha3MzMnIvc2V0dXAuYwpAQCAtMzcsMzkgKzM3LDMwIEBACiAJb3V0bChkYXRhLCBwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX21hcHBpKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtYXNrX29ha3MzMnIoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewotCWRpc2FibGVfb2FrczMycl9pcnEoaXJxKTsKKwlkaXNhYmxlX29ha3MzMnJfaXJxKGRhdGEtPmlycSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVuZF9vYWtzMzJyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgdW5tYXNrX29ha3MzMnIoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewotCWVuYWJsZV9vYWtzMzJyX2lycShpcnEpOworCWVuYWJsZV9vYWtzMzJyX2lycShkYXRhLT5pcnEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfb2FrczMycl9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQllbmFibGVfb2FrczMycl9pcnEoaXJxKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgdm9pZCBzaHV0ZG93bl9vYWtzMzJyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgc2h1dGRvd25fb2FrczMycihzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7CiAJdW5zaWduZWQgbG9uZyBwb3J0OwogCi0JcG9ydCA9IGlycTJwb3J0KGlycSk7CisJcG9ydCA9IGlycTJwb3J0KGRhdGEtPmlycSk7CiAJb3V0bChNMzJSX0lDVUNSX0lMRVZFTDcsIHBvcnQpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9ha3MzMnJfaXJxX3R5cGUgPQogewotCS5uYW1lID0gIk9BS1MzMlItSVJRIiwKLQkuc3RhcnR1cCA9IHN0YXJ0dXBfb2FrczMycl9pcnEsCi0JLnNodXRkb3duID0gc2h1dGRvd25fb2FrczMycl9pcnEsCi0JLmVuYWJsZSA9IGVuYWJsZV9vYWtzMzJyX2lycSwKLQkuZGlzYWJsZSA9IGRpc2FibGVfb2FrczMycl9pcnEsCi0JLmFjayA9IG1hc2tfYW5kX2Fja19tYXBwaSwKLQkuZW5kID0gZW5kX29ha3MzMnJfaXJxCisJLm5hbWUJCT0gIk9BS1MzMlItSVJRIiwKKwkuaXJxX3NodXRkb3duCT0gc2h1dGRvd25fb2FrczMyciwKKwkuaXJxX21hc2sJPSBtYXNrX29ha3MzMnIsCisJLmlycV91bm1hc2sJPSB1bm1hc2tfb2FrczMyciwKIH07CiAKIHZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpCkBAIC04Myw1MiArNzQsNDAgQEAKIAogI2lmZGVmIENPTkZJR19ORTIwMDAKIAkvKiBJTlQzIDogTEFOIGNvbnRyb2xsZXIgKFJUTDgwMTlBUykgKi8KLQlpcnFfZGVzY1tNMzJSX0lSUV9JTlQzXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfSU5UM10uY2hpcCA9ICZvYWtzMzJyX2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDNdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfSU5UM10uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9JTlQzLCAmb2FrczMycl9pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJaWN1X2RhdGFbTTMyUl9JUlFfSU5UM10uaWN1Y3IgPSBNMzJSX0lDVUNSX0lFTnxNMzJSX0lDVUNSX0lTTU9EMTA7CiAJZGlzYWJsZV9vYWtzMzJyX2lycShNMzJSX0lSUV9JTlQzKTsKICNlbmRpZiAvKiBDT05GSUdfTTMyUl9ORTIwMDAgKi8KIAogCS8qIE1GVDIgOiBzeXN0ZW0gdGltZXIgKi8KLQlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uY2hpcCA9ICZvYWtzMzJyX2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9NRlQyLCAmb2FrczMycl9pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJaWN1X2RhdGFbTTMyUl9JUlFfTUZUMl0uaWN1Y3IgPSBNMzJSX0lDVUNSX0lFTjsKIAlkaXNhYmxlX29ha3MzMnJfaXJxKE0zMlJfSVJRX01GVDIpOwogCiAjaWZkZWYgQ09ORklHX1NFUklBTF9NMzJSX1NJTwogCS8qIFNJTzBfUiA6IHVhcnQgcmVjZWl2ZSBkYXRhICovCi0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5jaGlwID0gJm9ha3MzMnJfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9TSU8wX1IsICZvYWtzMzJyX2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8wX1JdLmljdWNyID0gMDsKIAlkaXNhYmxlX29ha3MzMnJfaXJxKE0zMlJfSVJRX1NJTzBfUik7CiAKIAkvKiBTSU8wX1MgOiB1YXJ0IHNlbmQgZGF0YSAqLwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uY2hpcCA9ICZvYWtzMzJyX2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uYWN0aW9uID0gMDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmRlcHRoID0gMTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoTTMyUl9JUlFfU0lPMF9TLCAmb2FrczMycl9pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMF9TXS5pY3VjciA9IDA7CiAJZGlzYWJsZV9vYWtzMzJyX2lycShNMzJSX0lSUV9TSU8wX1MpOwogCiAJLyogU0lPMV9SIDogdWFydCByZWNlaXZlIGRhdGEgKi8KLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmNoaXAgPSAmb2FrczMycl9pcnFfdHlwZTsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5kZXB0aCA9IDE7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKE0zMlJfSVJRX1NJTzFfUiwgJm9ha3MzMnJfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW00zMlJfSVJRX1NJTzFfUl0uaWN1Y3IgPSAwOwogCWRpc2FibGVfb2FrczMycl9pcnEoTTMyUl9JUlFfU0lPMV9SKTsKIAogCS8qIFNJTzFfUyA6IHVhcnQgc2VuZCBkYXRhICovCi0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5jaGlwID0gJm9ha3MzMnJfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9TSU8xX1MsICZvYWtzMzJyX2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8xX1NdLmljdWNyID0gMDsKIAlkaXNhYmxlX29ha3MzMnJfaXJxKE0zMlJfSVJRX1NJTzFfUyk7CiAjZW5kaWYgLyogQ09ORklHX1NFUklBTF9NMzJSX1NJTyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL3BsYXRmb3Jtcy9vcHNwdXQvc2V0dXAuYyBiL2FyY2gvbTMyci9wbGF0Zm9ybXMvb3BzcHV0L3NldHVwLmMKaW5kZXggNWYzNDAyYS4uMTI3MzE1NCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL3BsYXRmb3Jtcy9vcHNwdXQvc2V0dXAuYworKysgYi9hcmNoL20zMnIvcGxhdGZvcm1zL29wc3B1dC9zZXR1cC5jCkBAIC00NiwzOSArNDYsMzAgQEAKIAlvdXRsKGRhdGEsIHBvcnQpOwogfQogCi1zdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfb3BzcHV0KHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtYXNrX29wc3B1dChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JZGlzYWJsZV9vcHNwdXRfaXJxKGlycSk7CisJZGlzYWJsZV9vcHNwdXRfaXJxKGRhdGEtPmlycSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVuZF9vcHNwdXRfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCB1bm1hc2tfb3BzcHV0KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKLQllbmFibGVfb3BzcHV0X2lycShpcnEpOworCWVuYWJsZV9vcHNwdXRfaXJxKGRhdGEtPmlycSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9vcHNwdXRfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JZW5hYmxlX29wc3B1dF9pcnEoaXJxKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgdm9pZCBzaHV0ZG93bl9vcHNwdXRfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBzaHV0ZG93bl9vcHNwdXQoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewogCXVuc2lnbmVkIGxvbmcgcG9ydDsKIAotCXBvcnQgPSBpcnEycG9ydChpcnEpOworCXBvcnQgPSBpcnEycG9ydChkYXRhLT5pcnEpOwogCW91dGwoTTMyUl9JQ1VDUl9JTEVWRUw3LCBwb3J0KTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBvcHNwdXRfaXJxX3R5cGUgPQogewotCS5uYW1lID0gIk9QU1BVVC1JUlEiLAotCS5zdGFydHVwID0gc3RhcnR1cF9vcHNwdXRfaXJxLAotCS5zaHV0ZG93biA9IHNodXRkb3duX29wc3B1dF9pcnEsCi0JLmVuYWJsZSA9IGVuYWJsZV9vcHNwdXRfaXJxLAotCS5kaXNhYmxlID0gZGlzYWJsZV9vcHNwdXRfaXJxLAotCS5hY2sgPSBtYXNrX2FuZF9hY2tfb3BzcHV0LAotCS5lbmQgPSBlbmRfb3BzcHV0X2lycQorCS5uYW1lCQk9ICJPUFNQVVQtSVJRIiwKKwkuaXJxX3NodXRkb3duCT0gc2h1dGRvd25fb3BzcHV0LAorCS5pcnFfbWFzawk9IG1hc2tfb3BzcHV0LAorCS5pcnFfdW5tYXNrCT0gdW5tYXNrX29wc3B1dCwKIH07CiAKIC8qCkBAIC0xMDAsNyArOTEsNiBAQAogCXVuc2lnbmVkIGludCBwbGRpcnE7CiAKIAlwbGRpcnEgPSBpcnEycGxkaXJxKGlycSk7Ci0vLwlkaXNhYmxlX29wc3B1dF9pcnEoTTMyUl9JUlFfSU5UMSk7CiAJcG9ydCA9IHBsZGlycTJwb3J0KHBsZGlycSk7CiAJZGF0YSA9IHBsZF9pY3VfZGF0YVtwbGRpcnFdLmljdWNyfFBMRF9JQ1VDUl9JTEVWRUw3OwogCW91dHcoZGF0YSwgcG9ydCk7CkBAIC0xMTIsNTAgKzEwMiwzOCBAQAogCXVuc2lnbmVkIGludCBwbGRpcnE7CiAKIAlwbGRpcnEgPSBpcnEycGxkaXJxKGlycSk7Ci0vLwllbmFibGVfb3BzcHV0X2lycShNMzJSX0lSUV9JTlQxKTsKIAlwb3J0ID0gcGxkaXJxMnBvcnQocGxkaXJxKTsKIAlkYXRhID0gcGxkX2ljdV9kYXRhW3BsZGlycV0uaWN1Y3J8UExEX0lDVUNSX0lFTnxQTERfSUNVQ1JfSUxFVkVMNjsKIAlvdXR3KGRhdGEsIHBvcnQpOwogfQogCi1zdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfb3BzcHV0X3BsZCh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgbWFza19vcHNwdXRfcGxkKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKLQlkaXNhYmxlX29wc3B1dF9wbGRfaXJxKGlycSk7Ci0vLwltYXNrX2FuZF9hY2tfb3BzcHV0KE0zMlJfSVJRX0lOVDEpOworCWRpc2FibGVfb3BzcHV0X3BsZF9pcnEoZGF0YS0+aXJxKTsKIH0KIAotc3RhdGljIHZvaWQgZW5kX29wc3B1dF9wbGRfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCB1bm1hc2tfb3BzcHV0X3BsZChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JZW5hYmxlX29wc3B1dF9wbGRfaXJxKGlycSk7Ci0JZW5kX29wc3B1dF9pcnEoTTMyUl9JUlFfSU5UMSk7CisJZW5hYmxlX29wc3B1dF9wbGRfaXJxKGRhdGEtPmlycSk7CisJZW5hYmxlX29wc3B1dF9pcnEoTTMyUl9JUlFfSU5UMSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9vcHNwdXRfcGxkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWVuYWJsZV9vcHNwdXRfcGxkX2lycShpcnEpOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNodXRkb3duX29wc3B1dF9wbGRfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBzaHV0ZG93bl9vcHNwdXRfcGxkKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIHBvcnQ7CiAJdW5zaWduZWQgaW50IHBsZGlycTsKIAotCXBsZGlycSA9IGlycTJwbGRpcnEoaXJxKTsKLS8vCXNodXRkb3duX29wc3B1dF9pcnEoTTMyUl9JUlFfSU5UMSk7CisJcGxkaXJxID0gaXJxMnBsZGlycShkYXRhLT5pcnEpOwogCXBvcnQgPSBwbGRpcnEycG9ydChwbGRpcnEpOwogCW91dHcoUExEX0lDVUNSX0lMRVZFTDcsIHBvcnQpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9wc3B1dF9wbGRfaXJxX3R5cGUgPQogewotCS5uYW1lID0gIk9QU1BVVC1QTEQtSVJRIiwKLQkuc3RhcnR1cCA9IHN0YXJ0dXBfb3BzcHV0X3BsZF9pcnEsCi0JLnNodXRkb3duID0gc2h1dGRvd25fb3BzcHV0X3BsZF9pcnEsCi0JLmVuYWJsZSA9IGVuYWJsZV9vcHNwdXRfcGxkX2lycSwKLQkuZGlzYWJsZSA9IGRpc2FibGVfb3BzcHV0X3BsZF9pcnEsCi0JLmFjayA9IG1hc2tfYW5kX2Fja19vcHNwdXRfcGxkLAotCS5lbmQgPSBlbmRfb3BzcHV0X3BsZF9pcnEKKwkubmFtZQkJPSAiT1BTUFVULVBMRC1JUlEiLAorCS5pcnFfc2h1dGRvd24JPSBzaHV0ZG93bl9vcHNwdXRfcGxkLAorCS5pcnFfbWFzawk9IG1hc2tfb3BzcHV0X3BsZCwKKwkuaXJxX3VubWFzawk9IHVubWFza19vcHNwdXRfcGxkLAogfTsKIAogLyoKQEAgLTE4OSw0MiArMTY3LDMzIEBACiAJb3V0dyhkYXRhLCBwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX29wc3B1dF9sYW5wbGQodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIG1hc2tfb3BzcHV0X2xhbnBsZChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JZGlzYWJsZV9vcHNwdXRfbGFucGxkX2lycShpcnEpOworCWRpc2FibGVfb3BzcHV0X2xhbnBsZF9pcnEoZGF0YS0+aXJxKTsKIH0KIAotc3RhdGljIHZvaWQgZW5kX29wc3B1dF9sYW5wbGRfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCB1bm1hc2tfb3BzcHV0X2xhbnBsZChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JZW5hYmxlX29wc3B1dF9sYW5wbGRfaXJxKGlycSk7Ci0JZW5kX29wc3B1dF9pcnEoTTMyUl9JUlFfSU5UMCk7CisJZW5hYmxlX29wc3B1dF9sYW5wbGRfaXJxKGRhdGEtPmlycSk7CisJZW5hYmxlX29wc3B1dF9pcnEoTTMyUl9JUlFfSU5UMCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9vcHNwdXRfbGFucGxkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWVuYWJsZV9vcHNwdXRfbGFucGxkX2lycShpcnEpOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNodXRkb3duX29wc3B1dF9sYW5wbGRfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBzaHV0ZG93bl9vcHNwdXRfbGFucGxkKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIHBvcnQ7CiAJdW5zaWduZWQgaW50IHBsZGlycTsKIAotCXBsZGlycSA9IGlycTJsYW5wbGRpcnEoaXJxKTsKKwlwbGRpcnEgPSBpcnEybGFucGxkaXJxKGRhdGEtPmlycSk7CiAJcG9ydCA9IGxhbnBsZGlycTJwb3J0KHBsZGlycSk7CiAJb3V0dyhQTERfSUNVQ1JfSUxFVkVMNywgcG9ydCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb3BzcHV0X2xhbnBsZF9pcnFfdHlwZSA9CiB7Ci0JLm5hbWUgPSAiT1BTUFVULVBMRC1MQU4tSVJRIiwKLQkuc3RhcnR1cCA9IHN0YXJ0dXBfb3BzcHV0X2xhbnBsZF9pcnEsCi0JLnNodXRkb3duID0gc2h1dGRvd25fb3BzcHV0X2xhbnBsZF9pcnEsCi0JLmVuYWJsZSA9IGVuYWJsZV9vcHNwdXRfbGFucGxkX2lycSwKLQkuZGlzYWJsZSA9IGRpc2FibGVfb3BzcHV0X2xhbnBsZF9pcnEsCi0JLmFjayA9IG1hc2tfYW5kX2Fja19vcHNwdXRfbGFucGxkLAotCS5lbmQgPSBlbmRfb3BzcHV0X2xhbnBsZF9pcnEKKwkubmFtZQkJPSAiT1BTUFVULVBMRC1MQU4tSVJRIiwKKwkuaXJxX3NodXRkb3duCT0gc2h1dGRvd25fb3BzcHV0X2xhbnBsZCwKKwkuaXJxX21hc2sJPSBtYXNrX29wc3B1dF9sYW5wbGQsCisJLmlycV91bm1hc2sJPSB1bm1hc2tfb3BzcHV0X2xhbnBsZCwKIH07CiAKIC8qCkBAIC0yNTgsMTQzICsyMjcsMTA5IEBACiAJb3V0dyhkYXRhLCBwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX29wc3B1dF9sY2RwbGQodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIG1hc2tfb3BzcHV0X2xjZHBsZChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JZGlzYWJsZV9vcHNwdXRfbGNkcGxkX2lycShpcnEpOworCWRpc2FibGVfb3BzcHV0X2xjZHBsZF9pcnEoZGF0YS0+aXJxKTsKIH0KIAotc3RhdGljIHZvaWQgZW5kX29wc3B1dF9sY2RwbGRfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCB1bm1hc2tfb3BzcHV0X2xjZHBsZChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JZW5hYmxlX29wc3B1dF9sY2RwbGRfaXJxKGlycSk7Ci0JZW5kX29wc3B1dF9pcnEoTTMyUl9JUlFfSU5UMik7CisJZW5hYmxlX29wc3B1dF9sY2RwbGRfaXJxKGRhdGEtPmlycSk7CisJZW5hYmxlX29wc3B1dF9pcnEoTTMyUl9JUlFfSU5UMik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9vcHNwdXRfbGNkcGxkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWVuYWJsZV9vcHNwdXRfbGNkcGxkX2lycShpcnEpOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNodXRkb3duX29wc3B1dF9sY2RwbGRfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBzaHV0ZG93bl9vcHNwdXRfbGNkcGxkKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIHBvcnQ7CiAJdW5zaWduZWQgaW50IHBsZGlycTsKIAotCXBsZGlycSA9IGlycTJsY2RwbGRpcnEoaXJxKTsKKwlwbGRpcnEgPSBpcnEybGNkcGxkaXJxKGRhdGEtPmlycSk7CiAJcG9ydCA9IGxjZHBsZGlycTJwb3J0KHBsZGlycSk7CiAJb3V0dyhQTERfSUNVQ1JfSUxFVkVMNywgcG9ydCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb3BzcHV0X2xjZHBsZF9pcnFfdHlwZSA9Ci17Ci0JIk9QU1BVVC1QTEQtTENELUlSUSIsCi0Jc3RhcnR1cF9vcHNwdXRfbGNkcGxkX2lycSwKLQlzaHV0ZG93bl9vcHNwdXRfbGNkcGxkX2lycSwKLQllbmFibGVfb3BzcHV0X2xjZHBsZF9pcnEsCi0JZGlzYWJsZV9vcHNwdXRfbGNkcGxkX2lycSwKLQltYXNrX2FuZF9hY2tfb3BzcHV0X2xjZHBsZCwKLQllbmRfb3BzcHV0X2xjZHBsZF9pcnEKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb3BzcHV0X2xjZHBsZF9pcnFfdHlwZSA9IHsKKwkubmFtZQkJPSAiT1BTUFVULVBMRC1MQ0QtSVJRIiwKKwkuaXJxX3NodXRkb3duCT0gc2h1dGRvd25fb3BzcHV0X2xjZHBsZCwKKwkuaXJxX21hc2sJPSBtYXNrX29wc3B1dF9sY2RwbGQsCisJLmlycV91bm1hc2sJPSB1bm1hc2tfb3BzcHV0X2xjZHBsZCwKIH07CiAKIHZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfU01DOTFYKQogCS8qIElOVCMwOiBMQU4gY29udHJvbGxlciBvbiBPUFNQVVQtTEFOIChTTUM5MUMxMTEpKi8KLQlpcnFfZGVzY1tPUFNQVVRfTEFOX0lSUV9MQU5dLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tPUFNQVVRfTEFOX0lSUV9MQU5dLmNoaXAgPSAmb3BzcHV0X2xhbnBsZF9pcnFfdHlwZTsKLQlpcnFfZGVzY1tPUFNQVVRfTEFOX0lSUV9MQU5dLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbT1BTUFVUX0xBTl9JUlFfTEFOXS5kZXB0aCA9IDE7CS8qIGRpc2FibGUgbmVzdGVkIGlycSAqLworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihPUFNQVVRfTEFOX0lSUV9MQU4sICZvcHNwdXRfbGFucGxkX2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlsYW5wbGRfaWN1X2RhdGFbaXJxMmxhbnBsZGlycShPUFNQVVRfTEFOX0lSUV9MQU4pXS5pY3VjciA9IFBMRF9JQ1VDUl9JRU58UExEX0lDVUNSX0lTTU9EMDI7CS8qICJIIiBlZGdlIHNlbnNlICovCiAJZGlzYWJsZV9vcHNwdXRfbGFucGxkX2lycShPUFNQVVRfTEFOX0lSUV9MQU4pOwogI2VuZGlmICAvKiBDT05GSUdfU01DOTFYICovCiAKIAkvKiBNRlQyIDogc3lzdGVtIHRpbWVyICovCi0JaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmNoaXAgPSAmb3BzcHV0X2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9NRlQyLCAmb3BzcHV0X2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9NRlQyXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOOwogCWRpc2FibGVfb3BzcHV0X2lycShNMzJSX0lSUV9NRlQyKTsKIAogCS8qIFNJTzAgOiByZWNlaXZlICovCi0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5jaGlwID0gJm9wc3B1dF9pcnFfdHlwZTsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5kZXB0aCA9IDE7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKE0zMlJfSVJRX1NJTzBfUiwgJm9wc3B1dF9pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMF9SXS5pY3VjciA9IDA7CiAJZGlzYWJsZV9vcHNwdXRfaXJxKE0zMlJfSVJRX1NJTzBfUik7CiAKIAkvKiBTSU8wIDogc2VuZCAqLwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uY2hpcCA9ICZvcHNwdXRfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9TXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9TSU8wX1MsICZvcHNwdXRfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW00zMlJfSVJRX1NJTzBfU10uaWN1Y3IgPSAwOwogCWRpc2FibGVfb3BzcHV0X2lycShNMzJSX0lSUV9TSU8wX1MpOwogCiAJLyogU0lPMSA6IHJlY2VpdmUgKi8KLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmNoaXAgPSAmb3BzcHV0X2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uYWN0aW9uID0gMDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmRlcHRoID0gMTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoTTMyUl9JUlFfU0lPMV9SLCAmb3BzcHV0X2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8xX1JdLmljdWNyID0gMDsKIAlkaXNhYmxlX29wc3B1dF9pcnEoTTMyUl9JUlFfU0lPMV9SKTsKIAogCS8qIFNJTzEgOiBzZW5kICovCi0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5jaGlwID0gJm9wc3B1dF9pcnFfdHlwZTsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5kZXB0aCA9IDE7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKE0zMlJfSVJRX1NJTzFfUywgJm9wc3B1dF9pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMV9TXS5pY3VjciA9IDA7CiAJZGlzYWJsZV9vcHNwdXRfaXJxKE0zMlJfSVJRX1NJTzFfUyk7CiAKIAkvKiBETUExIDogKi8KLQlpcnFfZGVzY1tNMzJSX0lSUV9ETUExXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfRE1BMV0uY2hpcCA9ICZvcHNwdXRfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfRE1BMV0uYWN0aW9uID0gMDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9ETUExXS5kZXB0aCA9IDE7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKE0zMlJfSVJRX0RNQTEsICZvcHNwdXRfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW00zMlJfSVJRX0RNQTFdLmljdWNyID0gMDsKIAlkaXNhYmxlX29wc3B1dF9pcnEoTTMyUl9JUlFfRE1BMSk7CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMX00zMlJfUExEU0lPCiAJLyogSU5UIzE6IFNJTzAgUmVjZWl2ZSBvbiBQTEQgKi8KLQlpcnFfZGVzY1tQTERfSVJRX1NJTzBfUkNWXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbUExEX0lSUV9TSU8wX1JDVl0uY2hpcCA9ICZvcHNwdXRfcGxkX2lycV90eXBlOwotCWlycV9kZXNjW1BMRF9JUlFfU0lPMF9SQ1ZdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbUExEX0lSUV9TSU8wX1JDVl0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoUExEX0lSUV9TSU8wX1JDViwgJm9wc3B1dF9wbGRfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCXBsZF9pY3VfZGF0YVtpcnEycGxkaXJxKFBMRF9JUlFfU0lPMF9SQ1YpXS5pY3VjciA9IFBMRF9JQ1VDUl9JRU58UExEX0lDVUNSX0lTTU9EMDM7CiAJZGlzYWJsZV9vcHNwdXRfcGxkX2lycShQTERfSVJRX1NJTzBfUkNWKTsKIAogCS8qIElOVCMxOiBTSU8wIFNlbmQgb24gUExEICovCi0JaXJxX2Rlc2NbUExEX0lSUV9TSU8wX1NORF0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW1BMRF9JUlFfU0lPMF9TTkRdLmNoaXAgPSAmb3BzcHV0X3BsZF9pcnFfdHlwZTsKLQlpcnFfZGVzY1tQTERfSVJRX1NJTzBfU05EXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW1BMRF9JUlFfU0lPMF9TTkRdLmRlcHRoID0gMTsJLyogZGlzYWJsZSBuZXN0ZWQgaXJxICovCisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKFBMRF9JUlFfU0lPMF9TTkQsICZvcHNwdXRfcGxkX2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlwbGRfaWN1X2RhdGFbaXJxMnBsZGlycShQTERfSVJRX1NJTzBfU05EKV0uaWN1Y3IgPSBQTERfSUNVQ1JfSUVOfFBMRF9JQ1VDUl9JU01PRDAzOwogCWRpc2FibGVfb3BzcHV0X3BsZF9pcnEoUExEX0lSUV9TSU8wX1NORCk7CiAjZW5kaWYgIC8qIENPTkZJR19TRVJJQUxfTTMyUl9QTERTSU8gKi8KIAogCS8qIElOVCMxOiBDRkMgSVJFUSBvbiBQTEQgKi8KLQlpcnFfZGVzY1tQTERfSVJRX0NGSVJFUV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZJUkVRXS5jaGlwID0gJm9wc3B1dF9wbGRfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbUExEX0lSUV9DRklSRVFdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbUExEX0lSUV9DRklSRVFdLmRlcHRoID0gMTsJLyogZGlzYWJsZSBuZXN0ZWQgaXJxICovCisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKFBMRF9JUlFfQ0ZJUkVRLCAmb3BzcHV0X3BsZF9pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJcGxkX2ljdV9kYXRhW2lycTJwbGRpcnEoUExEX0lSUV9DRklSRVEpXS5pY3VjciA9IFBMRF9JQ1VDUl9JRU58UExEX0lDVUNSX0lTTU9EMDE7CS8qICdMJyBsZXZlbCBzZW5zZSAqLwogCWRpc2FibGVfb3BzcHV0X3BsZF9pcnEoUExEX0lSUV9DRklSRVEpOwogCiAJLyogSU5UIzE6IENGQyBJbnNlcnQgb24gUExEICovCi0JaXJxX2Rlc2NbUExEX0lSUV9DRkNfSU5TRVJUXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbUExEX0lSUV9DRkNfSU5TRVJUXS5jaGlwID0gJm9wc3B1dF9wbGRfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbUExEX0lSUV9DRkNfSU5TRVJUXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoUExEX0lSUV9DRkNfSU5TRVJULCAmb3BzcHV0X3BsZF9pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJcGxkX2ljdV9kYXRhW2lycTJwbGRpcnEoUExEX0lSUV9DRkNfSU5TRVJUKV0uaWN1Y3IgPSBQTERfSUNVQ1JfSUVOfFBMRF9JQ1VDUl9JU01PRDAwOwkvKiAnTCcgZWRnZSBzZW5zZSAqLwogCWRpc2FibGVfb3BzcHV0X3BsZF9pcnEoUExEX0lSUV9DRkNfSU5TRVJUKTsKIAogCS8qIElOVCMxOiBDRkMgRWplY3Qgb24gUExEICovCi0JaXJxX2Rlc2NbUExEX0lSUV9DRkNfRUpFQ1RdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tQTERfSVJRX0NGQ19FSkVDVF0uY2hpcCA9ICZvcHNwdXRfcGxkX2lycV90eXBlOwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0VKRUNUXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0VKRUNUXS5kZXB0aCA9IDE7CS8qIGRpc2FibGUgbmVzdGVkIGlycSAqLworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihQTERfSVJRX0NGQ19FSkVDVCwgJm9wc3B1dF9wbGRfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCXBsZF9pY3VfZGF0YVtpcnEycGxkaXJxKFBMRF9JUlFfQ0ZDX0VKRUNUKV0uaWN1Y3IgPSBQTERfSUNVQ1JfSUVOfFBMRF9JQ1VDUl9JU01PRDAyOwkvKiAnSCcgZWRnZSBzZW5zZSAqLwogCWRpc2FibGVfb3BzcHV0X3BsZF9pcnEoUExEX0lSUV9DRkNfRUpFQ1QpOwogCkBAIC00MTMsMTQgKzM0OCwxMSBAQAogCWVuYWJsZV9vcHNwdXRfaXJxKE0zMlJfSVJRX0lOVDEpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCKQotCW91dHcoVVNCQ1JfT1RHUywgVVNCQ1IpOyAJLyogVVNCQ1I6IG5vbi1PVEcgKi8KLQotICAgIGlycV9kZXNjW09QU1BVVF9MQ0RfSVJRX1VTQl9JTlQxXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0gICAgaXJxX2Rlc2NbT1BTUFVUX0xDRF9JUlFfVVNCX0lOVDFdLmNoaXAgPSAmb3BzcHV0X2xjZHBsZF9pcnFfdHlwZTsKLSAgICBpcnFfZGVzY1tPUFNQVVRfTENEX0lSUV9VU0JfSU5UMV0uYWN0aW9uID0gMDsKLSAgICBpcnFfZGVzY1tPUFNQVVRfTENEX0lSUV9VU0JfSU5UMV0uZGVwdGggPSAxOwotICAgIGxjZHBsZF9pY3VfZGF0YVtpcnEybGNkcGxkaXJxKE9QU1BVVF9MQ0RfSVJRX1VTQl9JTlQxKV0uaWN1Y3IgPSBQTERfSUNVQ1JfSUVOfFBMRF9JQ1VDUl9JU01PRDAxOwkvKiAiTCIgbGV2ZWwgc2Vuc2UgKi8KLSAgICBkaXNhYmxlX29wc3B1dF9sY2RwbGRfaXJxKE9QU1BVVF9MQ0RfSVJRX1VTQl9JTlQxKTsKKwlvdXR3KFVTQkNSX09UR1MsIFVTQkNSKTsJLyogVVNCQ1I6IG5vbi1PVEcgKi8KKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoT1BTUFVUX0xDRF9JUlFfVVNCX0lOVDEsCisJCQkJICZvcHNwdXRfbGNkcGxkX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwlsY2RwbGRfaWN1X2RhdGFbaXJxMmxjZHBsZGlycShPUFNQVVRfTENEX0lSUV9VU0JfSU5UMSldLmljdWNyID0gUExEX0lDVUNSX0lFTnxQTERfSUNVQ1JfSVNNT0QwMTsJLyogIkwiIGxldmVsIHNlbnNlICovCisJZGlzYWJsZV9vcHNwdXRfbGNkcGxkX2lycShPUFNQVVRfTENEX0lSUV9VU0JfSU5UMSk7CiAjZW5kaWYKIAkvKgogCSAqIElOVDIjIGlzIHVzZWQgZm9yIEJBVCwgVVNCLCBBVURJTwpAQCAtNDMzLDEwICszNjUsOCBAQAogCS8qCiAJICogSU5UMyMgaXMgdXNlZCBmb3IgQVIKIAkgKi8KLQlpcnFfZGVzY1tNMzJSX0lSUV9JTlQzXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfSU5UM10uY2hpcCA9ICZvcHNwdXRfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfSU5UM10uYWN0aW9uID0gMDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9JTlQzXS5kZXB0aCA9IDE7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKE0zMlJfSVJRX0lOVDMsICZvcHNwdXRfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW00zMlJfSVJRX0lOVDNdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU58TTMyUl9JQ1VDUl9JU01PRDEwOwogCWRpc2FibGVfb3BzcHV0X2lycShNMzJSX0lSUV9JTlQzKTsKICNlbmRpZiAvKiBDT05GSUdfVklERU9fTTMyUl9BUiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL3BsYXRmb3Jtcy91c3J2L3NldHVwLmMgYi9hcmNoL20zMnIvcGxhdGZvcm1zL3VzcnYvc2V0dXAuYwppbmRleCAxYmVhYzdhLi5mM2NmZjI2IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvcGxhdGZvcm1zL3VzcnYvc2V0dXAuYworKysgYi9hcmNoL20zMnIvcGxhdGZvcm1zL3VzcnYvc2V0dXAuYwpAQCAtMzcsMzkgKzM3LDMwIEBACiAJb3V0bChkYXRhLCBwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX21hcHBpKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtYXNrX21hcHBpKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKLQlkaXNhYmxlX21hcHBpX2lycShpcnEpOworCWRpc2FibGVfbWFwcGlfaXJxKGRhdGEtPmlycSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVuZF9tYXBwaV9pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIHVubWFza19tYXBwaShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JZW5hYmxlX21hcHBpX2lycShpcnEpOworCWVuYWJsZV9tYXBwaV9pcnEoZGF0YS0+aXJxKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX21hcHBpX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWVuYWJsZV9tYXBwaV9pcnEoaXJxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc2h1dGRvd25fbWFwcGlfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBzaHV0ZG93bl9tYXBwaShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7CiAJdW5zaWduZWQgbG9uZyBwb3J0OwogCi0JcG9ydCA9IGlycTJwb3J0KGlycSk7CisJcG9ydCA9IGlycTJwb3J0KGRhdGEtPmlycSk7CiAJb3V0bChNMzJSX0lDVUNSX0lMRVZFTDcsIHBvcnQpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1hcHBpX2lycV90eXBlID0KIHsKLQkubmFtZSA9ICJNMzI3MDAtSVJRIiwKLQkuc3RhcnR1cCA9IHN0YXJ0dXBfbWFwcGlfaXJxLAotCS5zaHV0ZG93biA9IHNodXRkb3duX21hcHBpX2lycSwKLQkuZW5hYmxlID0gZW5hYmxlX21hcHBpX2lycSwKLQkuZGlzYWJsZSA9IGRpc2FibGVfbWFwcGlfaXJxLAotCS5hY2sgPSBtYXNrX2FuZF9hY2tfbWFwcGksCi0JLmVuZCA9IGVuZF9tYXBwaV9pcnEKKwkubmFtZQkJPSAiTTMyNzAwLUlSUSIsCisJLmlycV9zaHV0ZG93bgk9IHNodXRkb3duX21hcHBpLAorCS5pcnFfbWFzawk9IG1hc2tfbWFwcGksCisJLmlycV91bm1hc2sJPSB1bm1hc2tfbWFwcGksCiB9OwogCiAvKgpAQCAtMTA3LDQyICs5OCwzMyBAQAogCW91dHcoZGF0YSwgcG9ydCk7CiB9CiAKLXN0YXRpYyB2b2lkIG1hc2tfYW5kX2Fja19tMzI3MDB1dF9wbGQodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIG1hc2tfbTMyNzAwdXRfcGxkKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKLQlkaXNhYmxlX20zMjcwMHV0X3BsZF9pcnEoaXJxKTsKKwlkaXNhYmxlX20zMjcwMHV0X3BsZF9pcnEoZGF0YS0+aXJxKTsKIH0KIAotc3RhdGljIHZvaWQgZW5kX20zMjcwMHV0X3BsZF9pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIHVubWFza19tMzI3MDB1dF9wbGQoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewotCWVuYWJsZV9tMzI3MDB1dF9wbGRfaXJxKGlycSk7Ci0JZW5kX21hcHBpX2lycShNMzJSX0lSUV9JTlQxKTsKKwllbmFibGVfbTMyNzAwdXRfcGxkX2lycShkYXRhLT5pcnEpOworCWVuYWJsZV9tYXBwaV9pcnEoTTMyUl9JUlFfSU5UMSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9tMzI3MDB1dF9wbGRfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JZW5hYmxlX20zMjcwMHV0X3BsZF9pcnEoaXJxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc2h1dGRvd25fbTMyNzAwdXRfcGxkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgc2h1dGRvd25fbTMyNzAwdXRfcGxkKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIHBvcnQ7CiAJdW5zaWduZWQgaW50IHBsZGlycTsKIAotCXBsZGlycSA9IGlycTJwbGRpcnEoaXJxKTsKKwlwbGRpcnEgPSBpcnEycGxkaXJxKGRhdGEtPmlycSk7CiAJcG9ydCA9IHBsZGlycTJwb3J0KHBsZGlycSk7CiAJb3V0dyhQTERfSUNVQ1JfSUxFVkVMNywgcG9ydCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbTMyNzAwdXRfcGxkX2lycV90eXBlID0KIHsKLQkubmFtZSA9ICJVU1JWLVBMRC1JUlEiLAotCS5zdGFydHVwID0gc3RhcnR1cF9tMzI3MDB1dF9wbGRfaXJxLAotCS5zaHV0ZG93biA9IHNodXRkb3duX20zMjcwMHV0X3BsZF9pcnEsCi0JLmVuYWJsZSA9IGVuYWJsZV9tMzI3MDB1dF9wbGRfaXJxLAotCS5kaXNhYmxlID0gZGlzYWJsZV9tMzI3MDB1dF9wbGRfaXJxLAotCS5hY2sgPSBtYXNrX2FuZF9hY2tfbTMyNzAwdXRfcGxkLAotCS5lbmQgPSBlbmRfbTMyNzAwdXRfcGxkX2lycQorCS5uYW1lCQk9ICJVU1JWLVBMRC1JUlEiLAorCS5pcnFfc2h1dGRvd24JPSBzaHV0ZG93bl9tMzI3MDB1dF9wbGQsCisJLmlycV9tYXNrCT0gbWFza19tMzI3MDB1dF9wbGQsCisJLmlycV91bm1hc2sJPSB1bm1hc2tfbTMyNzAwdXRfcGxkLAogfTsKIAogdm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCkKQEAgLTE1Niw1MyArMTM4LDQyIEBACiAJCW9uY2UrKzsKIAogCS8qIE1GVDIgOiBzeXN0ZW0gdGltZXIgKi8KLQlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uY2hpcCA9ICZtYXBwaV9pcnFfdHlwZTsKLQlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmRlcHRoID0gMTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoTTMyUl9JUlFfTUZUMiwgJm1hcHBpX2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9NRlQyXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOOwogCWRpc2FibGVfbWFwcGlfaXJxKE0zMlJfSVJRX01GVDIpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX00zMlJfU0lPKQogCS8qIFNJTzBfUiA6IHVhcnQgcmVjZWl2ZSBkYXRhICovCi0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5jaGlwID0gJm1hcHBpX2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uYWN0aW9uID0gMDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLmRlcHRoID0gMTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoTTMyUl9JUlFfU0lPMF9SLCAmbWFwcGlfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW00zMlJfSVJRX1NJTzBfUl0uaWN1Y3IgPSAwOwogCWRpc2FibGVfbWFwcGlfaXJxKE0zMlJfSVJRX1NJTzBfUik7CiAKIAkvKiBTSU8wX1MgOiB1YXJ0IHNlbmQgZGF0YSAqLwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uY2hpcCA9ICZtYXBwaV9pcnFfdHlwZTsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9TXS5kZXB0aCA9IDE7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKE0zMlJfSVJRX1NJTzBfUywgJm1hcHBpX2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8wX1NdLmljdWNyID0gMDsKIAlkaXNhYmxlX21hcHBpX2lycShNMzJSX0lSUV9TSU8wX1MpOwogCiAJLyogU0lPMV9SIDogdWFydCByZWNlaXZlIGRhdGEgKi8KLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmNoaXAgPSAmbWFwcGlfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5hY3Rpb24gPSAwOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uZGVwdGggPSAxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihNMzJSX0lSUV9TSU8xX1IsICZtYXBwaV9pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMV9SXS5pY3VjciA9IDA7CiAJZGlzYWJsZV9tYXBwaV9pcnEoTTMyUl9JUlFfU0lPMV9SKTsKIAogCS8qIFNJTzFfUyA6IHVhcnQgc2VuZCBkYXRhICovCi0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5jaGlwID0gJm1hcHBpX2lycV90eXBlOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uYWN0aW9uID0gMDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLmRlcHRoID0gMTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoTTMyUl9JUlFfU0lPMV9TLCAmbWFwcGlfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCWljdV9kYXRhW00zMlJfSVJRX1NJTzFfU10uaWN1Y3IgPSAwOwogCWRpc2FibGVfbWFwcGlfaXJxKE0zMlJfSVJRX1NJTzFfUyk7CiAjZW5kaWYgIC8qIENPTkZJR19TRVJJQUxfTTMyUl9TSU8gKi8KIAogCS8qIElOVCM2Ny0jNzE6IENGQyMwIElSRVEgb24gUExEICovCiAJZm9yIChpID0gMCA7IGkgPCBDT05GSUdfTTMyUl9DRkNfTlVNIDsgaSsrICkgewotCQlpcnFfZGVzY1tQTERfSVJRX0NGMCArIGldLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQkJaXJxX2Rlc2NbUExEX0lSUV9DRjAgKyBpXS5jaGlwID0gJm0zMjcwMHV0X3BsZF9pcnFfdHlwZTsKLQkJaXJxX2Rlc2NbUExEX0lSUV9DRjAgKyBpXS5hY3Rpb24gPSAwOwotCQlpcnFfZGVzY1tQTERfSVJRX0NGMCArIGldLmRlcHRoID0gMTsJLyogZGlzYWJsZSBuZXN0ZWQgaXJxICovCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihQTERfSVJRX0NGMCArIGksCisJCQkJCSAmbTMyNzAwdXRfcGxkX2lycV90eXBlLAorCQkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJCXBsZF9pY3VfZGF0YVtpcnEycGxkaXJxKFBMRF9JUlFfQ0YwICsgaSldLmljdWNyCiAJCQk9IFBMRF9JQ1VDUl9JU01PRDAxOwkvKiAnTCcgbGV2ZWwgc2Vuc2UgKi8KIAkJZGlzYWJsZV9tMzI3MDB1dF9wbGRfaXJxKFBMRF9JUlFfQ0YwICsgaSk7CkBAIC0yMTAsMTkgKzE4MSwxNSBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTApIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwX01PRFVMRSkKIAkvKiBJTlQjNzY6IDE2NTUyRCMwIElSRVEgb24gUExEICovCi0JaXJxX2Rlc2NbUExEX0lSUV9VQVJUMF0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW1BMRF9JUlFfVUFSVDBdLmNoaXAgPSAmbTMyNzAwdXRfcGxkX2lycV90eXBlOwotCWlycV9kZXNjW1BMRF9JUlFfVUFSVDBdLmFjdGlvbiA9IDA7Ci0JaXJxX2Rlc2NbUExEX0lSUV9VQVJUMF0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoUExEX0lSUV9VQVJUMCwgJm0zMjcwMHV0X3BsZF9pcnFfdHlwZSwKKwkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAJcGxkX2ljdV9kYXRhW2lycTJwbGRpcnEoUExEX0lSUV9VQVJUMCldLmljdWNyCiAJCT0gUExEX0lDVUNSX0lTTU9EMDM7CS8qICdIJyBsZXZlbCBzZW5zZSAqLwogCWRpc2FibGVfbTMyNzAwdXRfcGxkX2lycShQTERfSVJRX1VBUlQwKTsKIAogCS8qIElOVCM3NzogMTY1NTJEIzEgSVJFUSBvbiBQTEQgKi8KLQlpcnFfZGVzY1tQTERfSVJRX1VBUlQxXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbUExEX0lSUV9VQVJUMV0uY2hpcCA9ICZtMzI3MDB1dF9wbGRfaXJxX3R5cGU7Ci0JaXJxX2Rlc2NbUExEX0lSUV9VQVJUMV0uYWN0aW9uID0gMDsKLQlpcnFfZGVzY1tQTERfSVJRX1VBUlQxXS5kZXB0aCA9IDE7CS8qIGRpc2FibGUgbmVzdGVkIGlycSAqLworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihQTERfSVJRX1VBUlQxLCAmbTMyNzAwdXRfcGxkX2lycV90eXBlLAorCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlwbGRfaWN1X2RhdGFbaXJxMnBsZGlycShQTERfSVJRX1VBUlQxKV0uaWN1Y3IKIAkJPSBQTERfSUNVQ1JfSVNNT0QwMzsJLyogJ0gnIGxldmVsIHNlbnNlICovCiAJZGlzYWJsZV9tMzI3MDB1dF9wbGRfaXJxKFBMRF9JUlFfVUFSVDEpOwpAQCAtMjMwLDEwICsxOTcsOCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfSURDX0FLNDUyNCkgfHwgZGVmaW5lZChDT05GSUdfSURDX0FLNDUyNF9NT0RVTEUpCiAJLyogSU5UIzgwOiBBSzQ1MjQgSVJFUSBvbiBQTEQgKi8KLQlpcnFfZGVzY1tQTERfSVJRX1NORElOVF0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW1BMRF9JUlFfU05ESU5UXS5jaGlwID0gJm0zMjcwMHV0X3BsZF9pcnFfdHlwZTsKLQlpcnFfZGVzY1tQTERfSVJRX1NORElOVF0uYWN0aW9uID0gMDsKLQlpcnFfZGVzY1tQTERfSVJRX1NORElOVF0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoUExEX0lSUV9TTkRJTlQsICZtMzI3MDB1dF9wbGRfaXJxX3R5cGUsCisJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCXBsZF9pY3VfZGF0YVtpcnEycGxkaXJxKFBMRF9JUlFfU05ESU5UKV0uaWN1Y3IKIAkJPSBQTERfSUNVQ1JfSVNNT0QwMTsJLyogJ0wnIGxldmVsIHNlbnNlICovCiAJZGlzYWJsZV9tMzI3MDB1dF9wbGRfaXJxKFBMRF9JUlFfU05ESU5UKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYyBiL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYwppbmRleCBiMTU3N2Y3Li44MmE0YmI1IDEwMDY0NAotLS0gYS9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jCkBAIC02MTAsMTcgKzYxMCwxNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhbWlnYV9zYXZla21zZ19zZXR1cChjaGFyICphcmcpCiB7Ci0Jc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkZWJ1Z19yZXMgPSB7IC5uYW1lID0gIkRlYnVnIiB9OwotCiAJaWYgKCFNQUNIX0lTX0FNSUdBIHx8IHN0cmNtcChhcmcsICJtZW0iKSkKLQkJZ290byBkb25lOworCQlyZXR1cm4gMDsKIAotCWlmICghQU1JR0FIV19QUkVTRU5UKENISVBfUkFNKSkgewotCQlwcmludGsoIldhcm5pbmc6IG5vIGNoaXByYW0gcHJlc2VudCBmb3IgZGVidWdnaW5nXG4iKTsKLQkJZ290byBkb25lOworCWlmIChhbWlnYV9jaGlwX3NpemUgPCBTQVZFS01TR19NQVhNRU0pIHsKKwkJcHJfZXJyKCJOb3QgZW5vdWdoIGNoaXByYW0gZm9yIGRlYnVnZ2luZ1xuIik7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXNhdmVrbXNnID0gYW1pZ2FfY2hpcF9hbGxvY19yZXMoU0FWRUtNU0dfTUFYTUVNLCAmZGVidWdfcmVzKTsKKwkvKiBKdXN0IHN0ZWFsIHRoZSBibG9jaywgdGhlIGNoaXByYW0gYWxsb2NhdG9yIGlzbid0IGZ1bmN0aW9uYWwgeWV0ICovCisJYW1pZ2FfY2hpcF9zaXplIC09IFNBVkVLTVNHX01BWE1FTTsKKwlzYXZla21zZyA9ICh2b2lkICopWlRXT19WQUREUihDSElQX1BIWVNBRERSICsgYW1pZ2FfY2hpcF9zaXplKTsKIAlzYXZla21zZy0+bWFnaWMxID0gU0FWRUtNU0dfTUFHSUMxOwogCXNhdmVrbXNnLT5tYWdpYzIgPSBTQVZFS01TR19NQUdJQzI7CiAJc2F2ZWttc2ctPm1hZ2ljcHRyID0gWlRXT19QQUREUihzYXZla21zZyk7CkBAIC02MjgsOCArNjI4LDYgQEAKIAogCWFtaWdhX2NvbnNvbGVfZHJpdmVyLndyaXRlID0gYW1pZ2FfbWVtX2NvbnNvbGVfd3JpdGU7CiAJcmVnaXN0ZXJfY29uc29sZSgmYW1pZ2FfY29uc29sZV9kcml2ZXIpOwotCi1kb25lOgogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvYXRhaW50cy5jIGIvYXJjaC9tNjhrL2F0YXJpL2F0YWludHMuYwppbmRleCAzOTQ3OGRkLi4yNmE4MDRlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvYXRhaW50cy5jCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9hdGFpbnRzLmMKQEAgLTM4OCw5ICszODgsOSBAQAogCX0KIAogCWlmIChBVEFSSUhXX1BSRVNFTlQoU0NDKSAmJiAhYXRhcmlfU0NDX3Jlc2V0X2RvbmUpIHsKLQkJc2NjLmNoYV9hX2N0cmwgPSA5OworCQlhdGFyaV9zY2MuY2hhX2FfY3RybCA9IDk7CiAJCU1GUERFTEFZKCk7Ci0JCXNjYy5jaGFfYV9jdHJsID0gKGNoYXIpIDB4YzA7IC8qIGhhcmR3YXJlIHJlc2V0ICovCisJCWF0YXJpX3NjYy5jaGFfYV9jdHJsID0gKGNoYXIpIDB4YzA7IC8qIGhhcmR3YXJlIHJlc2V0ICovCiAJfQogCiAJaWYgKEFUQVJJSFdfUFJFU0VOVChTQ1UpKSB7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvY29uZmlnLmMgYi9hcmNoL202OGsvYXRhcmkvY29uZmlnLmMKaW5kZXggYWUyZDk2ZS4uNDIwM2QxMCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYwpAQCAtMzE1LDcgKzMxNSw3IEBACiAJCUFUQVJJSFdfU0VUKFNDQ19ETUEpOwogCQlwcmludGsoIlNDQ19ETUEgIik7CiAJfQotCWlmIChzY2NfdGVzdCgmc2NjLmNoYV9hX2N0cmwpKSB7CisJaWYgKHNjY190ZXN0KCZhdGFyaV9zY2MuY2hhX2FfY3RybCkpIHsKIAkJQVRBUklIV19TRVQoU0NDKTsKIAkJcHJpbnRrKCJTQ0MgIik7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL2RlYnVnLmMgYi9hcmNoL202OGsvYXRhcmkvZGVidWcuYwppbmRleCAyOGVmZGMzLi41YTQ4NDI0IDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvZGVidWcuYworKysgYi9hcmNoL202OGsvYXRhcmkvZGVidWcuYwpAQCAtNTMsOSArNTMsOSBAQAogewogCWRvIHsKIAkJTUZQREVMQVkoKTsKLQl9IHdoaWxlICghKHNjYy5jaGFfYl9jdHJsICYgMHgwNCkpOyAvKiB3YWl0IGZvciB0eCBidWYgZW1wdHkgKi8KKwl9IHdoaWxlICghKGF0YXJpX3NjYy5jaGFfYl9jdHJsICYgMHgwNCkpOyAvKiB3YWl0IGZvciB0eCBidWYgZW1wdHkgKi8KIAlNRlBERUxBWSgpOwotCXNjYy5jaGFfYl9kYXRhID0gYzsKKwlhdGFyaV9zY2MuY2hhX2JfZGF0YSA9IGM7CiB9CiAKIHN0YXRpYyB2b2lkIGF0YXJpX3NjY19jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLApAQCAtMTQwLDkgKzE0MCw5IEBACiB7CiAJZG8gewogCQlNRlBERUxBWSgpOwotCX0gd2hpbGUgKCEoc2NjLmNoYV9iX2N0cmwgJiAweDAxKSk7IC8qIHdhaXQgZm9yIHJ4IGJ1ZiBmaWxsZWQgKi8KKwl9IHdoaWxlICghKGF0YXJpX3NjYy5jaGFfYl9jdHJsICYgMHgwMSkpOyAvKiB3YWl0IGZvciByeCBidWYgZmlsbGVkICovCiAJTUZQREVMQVkoKTsKLQlyZXR1cm4gc2NjLmNoYV9iX2RhdGE7CisJcmV0dXJuIGF0YXJpX3NjYy5jaGFfYl9kYXRhOwogfQogCiBpbnQgYXRhcmlfbWlkaV9jb25zb2xlX3dhaXRfa2V5KHN0cnVjdCBjb25zb2xlICpjbykKQEAgLTE4NSw5ICsxODUsOSBAQAogCiAjZGVmaW5lIFNDQ19XUklURShyZWcsIHZhbCkJCQkJXAogCWRvIHsJCQkJCQlcCi0JCXNjYy5jaGFfYl9jdHJsID0gKHJlZyk7CQkJXAorCQlhdGFyaV9zY2MuY2hhX2JfY3RybCA9IChyZWcpOwkJXAogCQlNRlBERUxBWSgpOwkJCQlcCi0JCXNjYy5jaGFfYl9jdHJsID0gKHZhbCk7CQkJXAorCQlhdGFyaV9zY2MuY2hhX2JfY3RybCA9ICh2YWwpOwkJXAogCQlNRlBERUxBWSgpOwkJCQlcCiAJfSB3aGlsZSAoMCkKIApAQCAtMjQwLDcgKzI0MCw3IEBACiAJcmVnMyA9IChjZmxhZyAmIENTSVpFKSA9PSBDUzggPyAweGMwIDogMHg0MDsKIAlyZWc1ID0gKGNmbGFnICYgQ1NJWkUpID09IENTOCA/IDB4NjAgOiAweDIwIHwgMHg4MiAvKiBhc3NlcnQgRFRSL1JUUyAqLzsKIAotCSh2b2lkKXNjYy5jaGFfYl9jdHJsOwkJLyogcmVzZXQgcmVnIHBvaW50ZXIgKi8KKwkodm9pZClhdGFyaV9zY2MuY2hhX2JfY3RybDsJLyogcmVzZXQgcmVnIHBvaW50ZXIgKi8KIAlTQ0NfV1JJVEUoOSwgMHhjMCk7CQkvKiByZXNldCAqLwogCUxPTkdfREVMQVkoKTsJCQkvKiBleHRyYSBkZWxheSBhZnRlciBXUjkgYWNjZXNzICovCiAJU0NDX1dSSVRFKDQsIChjZmxhZyAmIFBBUkVOQikgPyAoKGNmbGFnICYgUEFST0REKSA/IDB4MDEgOiAweDAzKQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpaHcuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaWh3LmgKaW5kZXggYTcxNGUxYS4uZjUxZjcwOSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpaHcuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlody5oCkBAIC00NDksNyArNDQ5LDcgQEAKICAgdV9jaGFyIGNoYXJfZHVtbXkzOwogICB1X2NoYXIgY2hhX2JfZGF0YTsKICB9OwotIyBkZWZpbmUgc2NjICgoKih2b2xhdGlsZSBzdHJ1Y3QgU0NDKilTQ0NfQkFTKSkKKyMgZGVmaW5lIGF0YXJpX3NjYyAoKCoodm9sYXRpbGUgc3RydWN0IFNDQyopU0NDX0JBUykpCiAKIC8qIFRoZSBFU0NDIChaODUyMzApIGluIGFuIEF0YXJpIFNULiBUaGUgY2hhbm5lbHMgYXJlIHJldmVyc2VkISAqLwogIyBkZWZpbmUgc3RfZXNjYyAoKCoodm9sYXRpbGUgc3RydWN0IFNDQyopMHhmZmZmZmEzMSkpCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3RyaW5nLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc3RyaW5nLmgKaW5kZXggMjkzNmRkYS4uMzIxOTg0NSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N0cmluZy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zdHJpbmcuaApAQCAtODEsMTggKzgxLDYgQEAKIAlzdHJjcHkoX19kICsgc3RybGVuKF9fZCksIChzKSk7CQlcCiB9KQogCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkNIUgotc3RhdGljIGlubGluZSBjaGFyICpzdHJjaHIoY29uc3QgY2hhciAqcywgaW50IGMpCi17Ci0JY2hhciBzYywgY2ggPSBjOwotCi0JZm9yICg7IChzYyA9ICpzKyspICE9IGNoOyApIHsKLQkJaWYgKCFzYykKLQkJCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gKGNoYXIgKilzIC0gMTsKLX0KLQogI2lmbmRlZiBDT05GSUdfQ09MREZJUkUKICNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ01QCiBzdGF0aWMgaW5saW5lIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KQpAQCAtMTExLDE0ICs5OSwxMiBAQAogCQk6ICIrYSIgKGNzKSwgIithIiAoY3QpLCAiPWQiIChyZXMpKTsKIAlyZXR1cm4gcmVzOwogfQorI2VuZGlmIC8qIENPTkZJR19DT0xERklSRSAqLwogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTU1PVkUKIGV4dGVybiB2b2lkICptZW1tb3ZlKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBfX2tlcm5lbF9zaXplX3QpOwogCi0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNNUAotZXh0ZXJuIGludCBtZW1jbXAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIF9fa2VybmVsX3NpemVfdCk7CiAjZGVmaW5lIG1lbWNtcChkLCBzLCBuKSBfX2J1aWx0aW5fbWVtY21wKGQsIHMsIG4pCi0jZW5kaWYgLyogQ09ORklHX0NPTERGSVJFICovCiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0VUCiBleHRlcm4gdm9pZCAqbWVtc2V0KHZvaWQgKiwgaW50LCBfX2tlcm5lbF9zaXplX3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2xpYi9zdHJpbmcuYyBiL2FyY2gvbTY4ay9saWIvc3RyaW5nLmMKaW5kZXggNDI1M2Y4Ny4uZDM5OWM1ZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2xpYi9zdHJpbmcuYworKysgYi9hcmNoL202OGsvbGliL3N0cmluZy5jCkBAIC0yNDMsMTQgKzI0MywzIEBACiAJcmV0dXJuIHhkZXN0OwogfQogRVhQT1JUX1NZTUJPTChtZW1tb3ZlKTsKLQotaW50IG1lbWNtcChjb25zdCB2b2lkICpjcywgY29uc3Qgdm9pZCAqY3QsIHNpemVfdCBjb3VudCkKLXsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpzdTEsICpzdTI7Ci0KLQlmb3IgKHN1MSA9IGNzLCBzdTIgPSBjdDsgY291bnQgPiAwOyArK3N1MSwgKytzdTIsIGNvdW50LS0pCi0JCWlmICgqc3UxICE9ICpzdTIpCi0JCQlyZXR1cm4gKnN1MSA8ICpzdTIgPyAtMSA6ICsxOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChtZW1jbXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZyBiL2FyY2gvbTY4a25vbW11L0tjb25maWcKaW5kZXggNzA0ZTdiOS4uOGI5ZGFjYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZworKysgYi9hcmNoL202OGtub21tdS9LY29uZmlnCkBAIC0yLDYgKzIsNyBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAlzZWxlY3QgSEFWRV9JREUKKwlzZWxlY3QgSEFWRV9HRU5FUklDX0hBUkRJUlFTCiAKIGNvbmZpZyBNTVUKIAlib29sCkBAIC00OCwxNCArNDksNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEdFTkVSSUNfSEFSRElSUVMKLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKLQlib29sCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBHRU5FUklDX0NBTElCUkFURV9ERUxBWQogCWJvb2wKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2NvbmZpZ3MvbTUyMDhldmJfZGVmY29uZmlnIGIvYXJjaC9tNjhrbm9tbXUvY29uZmlncy9tNTIwOGV2Yl9kZWZjb25maWcKaW5kZXggNmFjMjk4MS4uMmY1NjU1YyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvY29uZmlncy9tNTIwOGV2Yl9kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrbm9tbXUvY29uZmlncy9tNTIwOGV2Yl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2NvbmZpZ3MvbTUyNDlldmJfZGVmY29uZmlnIGIvYXJjaC9tNjhrbm9tbXUvY29uZmlncy9tNTI0OWV2Yl9kZWZjb25maWcKaW5kZXggMTQ5MzRmZi4uMTZkZjcyYiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvY29uZmlncy9tNTI0OWV2Yl9kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrbm9tbXUvY29uZmlncy9tNTI0OWV2Yl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2NvbmZpZ3MvbTUyNzJjM19kZWZjb25maWcgYi9hcmNoL202OGtub21tdS9jb25maWdzL201MjcyYzNfZGVmY29uZmlnCmluZGV4IDU5ODVhM2IuLjRlNmVhNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2NvbmZpZ3MvbTUyNzJjM19kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrbm9tbXUvY29uZmlncy9tNTI3MmMzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogIyBDT05GSUdfRlVURVggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvY29uZmlncy9tNTI3NWV2Yl9kZWZjb25maWcgYi9hcmNoL202OGtub21tdS9jb25maWdzL201Mjc1ZXZiX2RlZmNvbmZpZwppbmRleCA1YTc4NTdlLi5mM2RkNzQxIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9jb25maWdzL201Mjc1ZXZiX2RlZmNvbmZpZworKysgYi9hcmNoL202OGtub21tdS9jb25maWdzL201Mjc1ZXZiX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogIyBDT05GSUdfRlVURVggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvY29uZmlncy9tNTMwN2MzX2RlZmNvbmZpZyBiL2FyY2gvbTY4a25vbW11L2NvbmZpZ3MvbTUzMDdjM19kZWZjb25maWcKaW5kZXggZTgxMDIwMS4uYmNlMGEyMCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvY29uZmlncy9tNTMwN2MzX2RlZmNvbmZpZworKysgYi9hcmNoL202OGtub21tdS9jb25maWdzL201MzA3YzNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9jb25maWdzL201NDA3YzNfZGVmY29uZmlnIGIvYXJjaC9tNjhrbm9tbXUvY29uZmlncy9tNTQwN2MzX2RlZmNvbmZpZwppbmRleCA1YzEyNGE3Li42MThjYzMyIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9jb25maWdzL201NDA3YzNfZGVmY29uZmlnCisrKyBiL2FyY2gvbTY4a25vbW11L2NvbmZpZ3MvbTU0MDdjM19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2RlZmNvbmZpZyBiL2FyY2gvbTY4a25vbW11L2RlZmNvbmZpZwppbmRleCA2YWMyOTgxLi4yZjU2NTVjIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrbm9tbXUvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGVmMzMyMTMuLjQ3ZTE1ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xNDEsNiArMTQxLDEyIEBACiAJCSooX19wYXJhbSkKIAkJX19zdG9wX19fcGFyYW0gPSAuOwogCisJCS8qIEJ1aWx0LWluIG1vZHVsZSB2ZXJzaW9ucyAqLworCQkuID0gQUxJR04oNCkgOworCQlfX3N0YXJ0X19fbW9kdmVyID0gLjsKKwkJKihfX21vZHZlcikKKwkJX19zdG9wX19fbW9kdmVyID0gLjsKKwogCQkuID0gQUxJR04oNCkgOwogCQlfZXRleHQgPSAuIDsKIAl9ID4gVEVYVApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvbGliL01ha2VmaWxlIGIvYXJjaC9tNjhrbm9tbXUvbGliL01ha2VmaWxlCmluZGV4IGQ5NGQ3MDkuLjMyZDg1MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL202OGtub21tdS9saWIvTWFrZWZpbGUKQEAgLTQsNCArNCw0IEBACiAKIGxpYi15CTo9IGFzaGxkaTMubyBhc2hyZGkzLm8gbHNocmRpMy5vIFwKIAkgICBtdWxkaTMubyBtdWxzaTMubyBkaXZzaTMubyB1ZGl2c2kzLm8gbW9kc2kzLm8gdW1vZHNpMy5vIFwKLQkgICBjaGVja3N1bS5vIG1lbWNweS5vIG1lbXNldC5vIGRlbGF5Lm8KKwkgICBjaGVja3N1bS5vIG1lbWNweS5vIG1lbW1vdmUubyBtZW1zZXQubyBkZWxheS5vCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9saWIvbWVtbW92ZS5jIGIvYXJjaC9tNjhrbm9tbXUvbGliL21lbW1vdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2RjZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrbm9tbXUvbGliL21lbW1vdmUuYwpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjZGVmaW5lIF9fSU5fU1RSSU5HX0MKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCit2b2lkICptZW1tb3ZlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCit7CisJdm9pZCAqeGRlc3QgPSBkZXN0OworCXNpemVfdCB0ZW1wOworCisJaWYgKCFuKQorCQlyZXR1cm4geGRlc3Q7CisKKwlpZiAoZGVzdCA8IHNyYykgeworCQlpZiAoKGxvbmcpZGVzdCAmIDEpIHsKKwkJCWNoYXIgKmNkZXN0ID0gZGVzdDsKKwkJCWNvbnN0IGNoYXIgKmNzcmMgPSBzcmM7CisJCQkqY2Rlc3QrKyA9ICpjc3JjKys7CisJCQlkZXN0ID0gY2Rlc3Q7CisJCQlzcmMgPSBjc3JjOworCQkJbi0tOworCQl9CisJCWlmIChuID4gMiAmJiAobG9uZylkZXN0ICYgMikgeworCQkJc2hvcnQgKnNkZXN0ID0gZGVzdDsKKwkJCWNvbnN0IHNob3J0ICpzc3JjID0gc3JjOworCQkJKnNkZXN0KysgPSAqc3NyYysrOworCQkJZGVzdCA9IHNkZXN0OworCQkJc3JjID0gc3NyYzsKKwkJCW4gLT0gMjsKKwkJfQorCQl0ZW1wID0gbiA+PiAyOworCQlpZiAodGVtcCkgeworCQkJbG9uZyAqbGRlc3QgPSBkZXN0OworCQkJY29uc3QgbG9uZyAqbHNyYyA9IHNyYzsKKwkJCXRlbXAtLTsKKwkJCWRvCisJCQkJKmxkZXN0KysgPSAqbHNyYysrOworCQkJd2hpbGUgKHRlbXAtLSk7CisJCQlkZXN0ID0gbGRlc3Q7CisJCQlzcmMgPSBsc3JjOworCQl9CisJCWlmIChuICYgMikgeworCQkJc2hvcnQgKnNkZXN0ID0gZGVzdDsKKwkJCWNvbnN0IHNob3J0ICpzc3JjID0gc3JjOworCQkJKnNkZXN0KysgPSAqc3NyYysrOworCQkJZGVzdCA9IHNkZXN0OworCQkJc3JjID0gc3NyYzsKKwkJfQorCQlpZiAobiAmIDEpIHsKKwkJCWNoYXIgKmNkZXN0ID0gZGVzdDsKKwkJCWNvbnN0IGNoYXIgKmNzcmMgPSBzcmM7CisJCQkqY2Rlc3QgPSAqY3NyYzsKKwkJfQorCX0gZWxzZSB7CisJCWRlc3QgPSAoY2hhciAqKWRlc3QgKyBuOworCQlzcmMgPSAoY29uc3QgY2hhciAqKXNyYyArIG47CisJCWlmICgobG9uZylkZXN0ICYgMSkgeworCQkJY2hhciAqY2Rlc3QgPSBkZXN0OworCQkJY29uc3QgY2hhciAqY3NyYyA9IHNyYzsKKwkJCSotLWNkZXN0ID0gKi0tY3NyYzsKKwkJCWRlc3QgPSBjZGVzdDsKKwkJCXNyYyA9IGNzcmM7CisJCQluLS07CisJCX0KKwkJaWYgKG4gPiAyICYmIChsb25nKWRlc3QgJiAyKSB7CisJCQlzaG9ydCAqc2Rlc3QgPSBkZXN0OworCQkJY29uc3Qgc2hvcnQgKnNzcmMgPSBzcmM7CisJCQkqLS1zZGVzdCA9ICotLXNzcmM7CisJCQlkZXN0ID0gc2Rlc3Q7CisJCQlzcmMgPSBzc3JjOworCQkJbiAtPSAyOworCQl9CisJCXRlbXAgPSBuID4+IDI7CisJCWlmICh0ZW1wKSB7CisJCQlsb25nICpsZGVzdCA9IGRlc3Q7CisJCQljb25zdCBsb25nICpsc3JjID0gc3JjOworCQkJdGVtcC0tOworCQkJZG8KKwkJCQkqLS1sZGVzdCA9ICotLWxzcmM7CisJCQl3aGlsZSAodGVtcC0tKTsKKwkJCWRlc3QgPSBsZGVzdDsKKwkJCXNyYyA9IGxzcmM7CisJCX0KKwkJaWYgKG4gJiAyKSB7CisJCQlzaG9ydCAqc2Rlc3QgPSBkZXN0OworCQkJY29uc3Qgc2hvcnQgKnNzcmMgPSBzcmM7CisJCQkqLS1zZGVzdCA9ICotLXNzcmM7CisJCQlkZXN0ID0gc2Rlc3Q7CisJCQlzcmMgPSBzc3JjOworCQl9CisJCWlmIChuICYgMSkgeworCQkJY2hhciAqY2Rlc3QgPSBkZXN0OworCQkJY29uc3QgY2hhciAqY3NyYyA9IHNyYzsKKwkJCSotLWNkZXN0ID0gKi0tY3NyYzsKKwkJfQorCX0KKwlyZXR1cm4geGRlc3Q7Cit9CitFWFBPUlRfU1lNQk9MKG1lbW1vdmUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI0OS9pbnRjMi5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI0OS9pbnRjMi5jCmluZGV4IGQwOWQ5ZGEuLmM1MTUxZjggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyNDkvaW50YzIuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjQ5L2ludGMyLmMKQEAgLTUwLDggKzUwLDEwIEBACiAJaW50IGlycTsKIAogCS8qIEdQSU8gaW50ZXJydXB0IHNvdXJjZXMgKi8KLQlmb3IgKGlycSA9IE1DRklOVEMyX0dQSU9JUlEwOyAoaXJxIDw9IE1DRklOVEMyX0dQSU9JUlE3KTsgaXJxKyspCisJZm9yIChpcnEgPSBNQ0ZJTlRDMl9HUElPSVJRMDsgKGlycSA8PSBNQ0ZJTlRDMl9HUElPSVJRNyk7IGlycSsrKSB7CiAJCWlycV9kZXNjW2lycV0uY2hpcCA9ICZpbnRjMl9pcnFfZ3Bpb19jaGlwOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfZWRnZV9pcnEpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2VudHJ5LlMKaW5kZXggMjQwYTdhNi4uNjc2OTYwYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvZW50cnkuUworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9lbnRyeS5TCkBAIC0xMDgsNyArMTA4LDYgQEAKIAltb3ZlbAklZDEsJWEyCiAxOgogCW1vdmUJJWEyQChUSV9GTEFHUyksJWQxCS8qIHRocmVhZF9pbmZvLT5mbGFncyAqLwotCWFuZGwJI19USUZfV09SS19NQVNLLCVkMQogCWpuZQlMd29ya190b19kbwogCVJFU1RPUkVfQUxMCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2NvbW1wcm9jLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9jb21tcHJvYy5jCmluZGV4IGYyN2U2ODguLjhlNGUxMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2NvbW1wcm9jLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvY29tbXByb2MuYwpAQCAtMjEwLDcgKzIxMCw3IEBACiBjcG1faW5zdGFsbF9oYW5kbGVyKGludCB2ZWMsIHZvaWQgKCpoYW5kbGVyKSgpLCB2b2lkICpkZXZfaWQpCiB7CiAKLQlyZXF1ZXN0X2lycSh2ZWMsIGhhbmRsZXIsIElSUV9GTEdfTE9DSywgInRpbWVyIiwgZGV2X2lkKTsKKwlyZXF1ZXN0X2lycSh2ZWMsIGhhbmRsZXIsIDAsICJ0aW1lciIsIGRldl9pZCk7CiAKIC8qIAlpZiAoY3BtX3ZlY3NbdmVjXS5oYW5kbGVyICE9IDApICovCiAvKiAJCXByaW50ayhLRVJOX0lORk8gIkNQTSBpbnRlcnJ1cHQgJXggcmVwbGFjaW5nICV4XG4iLCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9jb25maWcuYwppbmRleCBhYzYyOWZhMy4uOWRkNWJjYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvY29uZmlnLmMKQEAgLTc1LDcgKzc1LDcgQEAKICAgLyogU2V0IGNvbXBhcmUgcmVnaXN0ZXIgIDMyS2h6IC8gMzIgLyAxMCA9IDEwMCAqLwogICBUQ01QID0gMTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIAotICByZXF1ZXN0X2lycShJUlFfTUFDSFNQRUMgfCAxLCB0aW1lcl9yb3V0aW5lLCBJUlFfRkxHX0xPQ0ssICJ0aW1lciIsIE5VTEwpOworICByZXF1ZXN0X2lycShJUlFfTUFDSFNQRUMgfCAxLCB0aW1lcl9yb3V0aW5lLCAwLCAidGltZXIiLCBOVUxMKTsKICNlbmRpZgogCiAgIC8qIEdlbmVyYWwgcHVycG9zZSBxdWljYyB0aW1lcnM6IE1DNjgzNjBVTSBwNy0yMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2VudHJ5LlMKaW5kZXggOGEyODc4OC4uNDZjMWIxOCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvZW50cnkuUworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9lbnRyeS5TCkBAIC0xMDQsNyArMTA0LDYgQEAKIAltb3ZlbAklZDEsJWEyCiAxOgogCW1vdmUJJWEyQChUSV9GTEFHUyksJWQxCS8qIHRocmVhZF9pbmZvLT5mbGFncyAqLwotCWFuZGwJI19USUZfV09SS19NQVNLLCVkMQogCWpuZQlMd29ya190b19kbwogCVJFU1RPUkVfQUxMCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2ludHMuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2ludHMuYwppbmRleCBhZDk2YWIxLi5hMjkwNDFjIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9pbnRzLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvaW50cy5jCkBAIC0xMzIsOCArMTMyLDggQEAKIAlwcXVpY2MtPmludHJfY2ltciA9IDB4MDAwMDAwMDA7CiAKIAlmb3IgKGkgPSAwOyAoaSA8IE5SX0lSUVMpOyBpKyspIHsKLQkJc2V0X2lycV9jaGlwKGlycSwgJmludGNfaXJxX2NoaXApOwotCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJc2V0X2lycV9jaGlwKGksICZpbnRjX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2VudHJ5LlMKaW5kZXggNGRkZmMzZGEuLjU4MzdjZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2VudHJ5LlMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvZW50cnkuUwpAQCAtMTM4LDcgKzEzOCw2IEBACiAJYW5kbAkjLVRIUkVBRF9TSVpFLCVkMQkvKiBhdCBiYXNlIG9mIGtlcm5lbCBzdGFjayAqLwogCW1vdmVsCSVkMSwlYTAKIAltb3ZlbAklYTBAKFRJX0ZMQUdTKSwlZDEJLyogZ2V0IHRocmVhZF9pbmZvLT5mbGFncyAqLwotCWFuZGwJIzB4ZWZmZiwlZDEKIAlqbmUJTHdvcmtfdG9fZG8JCS8qIHN0aWxsIHdvcmsgdG8gZG8gKi8KIAogTHJldHVybjoKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnIGIvYXJjaC9taWNyb2JsYXplL0tjb25maWcKaW5kZXggNWY1MDE4YS4uMzE2ODAwMyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL0tjb25maWcKKysrIGIvYXJjaC9taWNyb2JsYXplL0tjb25maWcKQEAgLTE1LDYgKzE1LDggQEAKIAlzZWxlY3QgVFJBQ0lOR19TVVBQT1JUCiAJc2VsZWN0IE9GCiAJc2VsZWN0IE9GX0VBUkxZX0ZMQVRUUkVFCisJc2VsZWN0IEhBVkVfR0VORVJJQ19IQVJESVJRUworCXNlbGVjdCBHRU5FUklDX0lSUV9QUk9CRQogCiBjb25maWcgU1dBUAogCWRlZl9ib29sIG4KQEAgLTM3LDEyICszOSw2IEBACiBjb25maWcgR0VORVJJQ19IV0VJR0hUCiAJZGVmX2Jvb2wgeQogCi1jb25maWcgR0VORVJJQ19IQVJESVJRUwotCWRlZl9ib29sIHkKLQotY29uZmlnIEdFTkVSSUNfSVJRX1BST0JFCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgR0VORVJJQ19DQUxJQlJBVEVfREVMQVkKIAlkZWZfYm9vbCB5CiAKQEAgLTUyLDkgKzQ4LDYgQEAKIGNvbmZpZyBHRU5FUklDX0NMT0NLRVZFTlRTCiAJZGVmX2Jvb2wgeQogCi1jb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgR0VORVJJQ19HUElPCiAJZGVmX2Jvb2wgeQogCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvY29uZmlncy9tbXVfZGVmY29uZmlnIGIvYXJjaC9taWNyb2JsYXplL2NvbmZpZ3MvbW11X2RlZmNvbmZpZwppbmRleCBhYjhmYmU3Li5iM2Y1ZWVjIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvY29uZmlncy9tbXVfZGVmY29uZmlnCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9jb25maWdzL21tdV9kZWZjb25maWcKQEAgLTcsNyArNyw3IEBACiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0icm9vdGZzLmNwaW8iCiBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0daSVA9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9jb25maWdzL25vbW11X2RlZmNvbmZpZyBiL2FyY2gvbWljcm9ibGF6ZS9jb25maWdzL25vbW11X2RlZmNvbmZpZwppbmRleCBlYmMxNDNjLi4wMjQ5ZTRiIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvY29uZmlncy9ub21tdV9kZWZjb25maWcKKysrIGIvYXJjaC9taWNyb2JsYXplL2NvbmZpZ3Mvbm9tbXVfZGVmY29uZmlnCkBAIC02LDcgKzYsNyBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCmluZGV4IDVmZDMxOTAuLmM0NTMyZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcmVnaXN0ZXJzLmg+CiAKLSNpZmRlZiBDT05GSUdfWElMSU5YX01JQ1JPQkxBWkUwX1VTRV9NU1JfSU5TVFIKKyNpZiBDT05GSUdfWElMSU5YX01JQ1JPQkxBWkUwX1VTRV9NU1JfSU5TVFIKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFyY2hfbG9jYWxfaXJxX3NhdmUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGIyM2Y2ODAuLjg4NTU3NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtNDExLDIwICs0MTEsMTkgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfdXBkYXRlKHB0ZV90ICpwLCB1bnNpZ25lZCBsb25nIGNsciwKIAkJCQl1bnNpZ25lZCBsb25nIHNldCkKIHsKLQl1bnNpZ25lZCBsb25nIG9sZCwgdG1wLCBtc3I7CisJdW5zaWduZWQgbG9uZyBmbGFncywgb2xkLCB0bXA7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiXAotCW1zcmNscgklMiwgMHgyXG5cCi0Jbm9wXG5cCi0JbHcJJTAsICU0LCByMFxuXAotCWFuZG4JJTEsICUwLCAlNVxuXAotCW9yCSUxLCAlMSwgJTZcblwKLQlzdwklMSwgJTQsIHIwXG5cCi0JbXRzICAgICBybXNyLCAlMlxuXAotCW5vcCIKLQk6ICI9JnIiIChvbGQpLCAiPSZyIiAodG1wKSwgIj0mciIgKG1zciksICI9bSIgKCpwKQotCTogInIiICgodW5zaWduZWQgbG9uZykocCArIDEpIC0gNCksICJyIiAoY2xyKSwgInIiIChzZXQpLCAibSIgKCpwKQotCTogImNjIik7CisJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAkibHcJJTAsICUyLCByMAlcbiIKKwkJCQkiYW5kbgklMSwgJTAsICUzCVxuIgorCQkJCSJvcgklMSwgJTEsICU0CVxuIgorCQkJCSJzdwklMSwgJTIsIHIwCVxuIgorCQkJOiAiPSZyIiAob2xkKSwgIj0mciIgKHRtcCkKKwkJCTogInIiICgodW5zaWduZWQgbG9uZykocCArIDEpIC0gNCksICJyIiAoY2xyKSwgInIiIChzZXQpCisJCQk6ICJjYyIpOworCisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiBvbGQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9wdnIuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L3B2ci5jCmluZGV4IGUwMWFmYTYuLjQ4OGMxZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L3B2ci5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L3B2ci5jCkBAIC0yNyw3ICsyNyw3IEBACiAJcmVnaXN0ZXIgdW5zaWduZWQgdG1wIF9fYXNtX18oInIzIik7CQkJXAogCXRtcCA9IDB4MDsJLyogUHJldmVudCB3YXJuaW5nIGFib3V0IHVudXNlZCAqLwlcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJXAotCQkJIm1mcwklMCwgcnB2ciIgI3B2cmlkICI7IglcCisJCQkibWZzCSUwLCBycHZyIiAjcHZyaWQgIjsiCQlcCiAJCQk6ICI9ciIgKHRtcCkgOiA6ICJtZW1vcnkiKTsgCQlcCiAJdmFsID0gdG1wOwkJCQkJCVwKIH0KQEAgLTU0LDcgKzU0LDcgQEAKIAlpZiAoIShmbGFncyAmIFBWUl9NU1JfQklUKSkKIAkJcmV0dXJuIDA7CiAKLQlnZXRfc2luZ2xlX3B2cigweDAwLCBwdnIwKTsKKwlnZXRfc2luZ2xlX3B2cigwLCBwdnIwKTsKIAlwcl9kZWJ1ZygiJXM6IHB2cjAgaXMgMHglMDh4XG4iLCBfX2Z1bmNfXywgcHZyMCk7CiAKIAlpZiAocHZyMCAmIFBWUjBfUFZSX0ZVTExfTUFTSykKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaGVhZC5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9oZWFkLlMKaW5kZXggNDI0MzQwMC4uNzc4YTVjZSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9oZWFkLlMKQEAgLTYyLDIzICs2MiwzMiBAQAogCWFuZGkJcjEsIHIxLCB+MgogCW10cwlybXNyLCByMQogLyoKLSAqIEhlcmUgaXMgY2hlY2tpbmcgbWVjaGFuaXNtIHdoaWNoIGNoZWNrIGlmIE1pY3JvYmxhemUgaGFzIG1zciBpbnN0cnVjdGlvbnMKLSAqIFdlIGxvYWQgbXNyIGFuZCBjb21wYXJlIGl0IHdpdGggcHJldmlvdXMgcjEgdmFsdWUgLSBpZiBpcyB0aGUgc2FtZSwKLSAqIG1zciBpbnN0cnVjdGlvbnMgd29ya3MgaWYgbm90IC0gY3B1IGRvbid0IGhhdmUgdGhlbS4KKyAqIEFjY29yZGluZyB0byBYaWxpbngsIG1zcmNsciBpbnN0cnVjdGlvbiBiZWhhdmVzIGxpa2UgJ21mcyByWCxycGMnCisgKiBpZiB0aGUgbXNyY2xyIGluc3RydWN0aW9uIGlzIG5vdCBlbmFibGVkLiBXZSB1c2UgdGhpcyB0byBkZXRlY3QKKyAqIGlmIHRoZSBvcGNvZGUgaXMgYXZhaWxhYmxlLCBieSBpc3N1aW5nIG1zcmNsciBhbmQgdGhlbiB0ZXN0aW5nIHRoZSByZXN1bHQuCisgKiByOCA9PSAwIC0gbXNyIGluc3RydWN0aW9ucyBhcmUgaW1wbGVtZW50ZWQKKyAqIHI4ICE9IDAgLSBtc3IgaW5zdHJ1Y3Rpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQKICAqLwotCS8qIHI4PTAgLSBJIGhhdmUgbXNyIGluc3RyLCAxIC0gSSBkb24ndCBoYXZlIHRoZW0gKi8KLQlyc3ViaQlyMCwgcjAsIDEJLyogc2V0IHRoZSBjYXJyeSBiaXQgKi8KLQltc3JjbHIJcjAsIDB4NAkJLyogdHJ5IHRvIGNsZWFyIGl0ICovCi0JLyogcmVhZCB0aGUgY2FycnkgYml0LCByOCB3aWxsIGJlICcwJyBpZiBtc3JjbHIgZXhpc3RzICovCi0JYWRkaWsJcjgsIHIwLCAwCisJbXNyY2xyCXI4LCAwIC8qIGNsZWFyIG5vdGhpbmcgLSBqdXN0IHJlYWQgbXNyIGZvciB0ZXN0ICovCisJY21wdQlyOCwgcjgsIHIxIC8qIHIxIG11c3QgY29udGFpbiBtc3IgcmVnIGNvbnRlbnQgKi8KIAogLyogcjcgbWF5IHBvaW50IHRvIGFuIEZEVCwgb3IgdGhlcmUgbWF5IGJlIG9uZSBsaW5rZWQgaW4uCiAgICBpZiBpdCdzIGluIHI3LCB3ZSd2ZSBnb3QgdG8gc2F2ZSBpdCBhd2F5IEFTQVAuCiAgICBXZSBlbnN1cmUgcjcgcG9pbnRzIHRvIGEgdmFsaWQgRkRULCBqdXN0IGluIGNhc2UgdGhlIGJvb3Rsb2FkZXIKICAgIGlzIGJyb2tlbiBvciBub24tZXhpc3RlbnQgKi8KIAliZXFpCXI3LCBub19mZHRfYXJnCQkJLyogTlVMTCBwb2ludGVyPyAgZG9uJ3QgY29weSAqLwotCWx3CXIxMSwgcjAsIHI3CQkJLyogRG9lcyByNyBwb2ludCB0byBhICovCi0JcnN1YmkJcjExLCByMTEsIE9GX0RUX0hFQURFUgkJLyogdmFsaWQgRkRUPyAqLworLyogRG9lcyByNyBwb2ludCB0byBhIHZhbGlkIEZEVD8gTG9hZCBIRUFERVIgbWFnaWMgbnVtYmVyICovCisJLyogUnVuIHRpbWUgQmlnL0xpdHRsZSBlbmRpYW4gcGxhdGZvcm0gKi8KKwkvKiBTYXZlIDEgYXMgd29yZCBhbmQgbG9hZCBieXRlIC0gMCAtIEJJRywgMSAtIExJVFRMRSAqLworCWFkZGlrCXIxMSwgcjAsIDB4MSAvKiBCSUcvTElUVExFIGNoZWNraW5nIHZhbHVlICovCisJLyogX19ic3Nfc3RhcnQgd2lsbCBiZSB6ZXJvZWQgbGF0ZXIgLSBpdCBpcyBqdXN0IHRlbXAgbG9jYXRpb24gKi8KKwlzd2kJcjExLCByMCwgVE9QSFlTKF9fYnNzX3N0YXJ0KQorCWxidWkJcjExLCByMCwgVE9QSFlTKF9fYnNzX3N0YXJ0KQorCWJlcWlkCXIxMSwgYmlnX2VuZGlhbiAvKiBETyBOT1QgYnJlYWsgZGVsYXkgc3RvcCBkZXBlbmRlbmN5ICovCisJbHcJcjExLCByMCwgcjcgLyogQmlnIGVuZGlhbiBsb2FkIGluIGRlbGF5IHNsb3QgKi8KKwlsd3IJcjExLCByMCwgcjcgLyogTGl0dGxlIGVuZGlhbiBsb2FkICovCitiaWdfZW5kaWFuOgorCXJzdWJpCXIxMSwgcjExLCBPRl9EVF9IRUFERVIJLyogQ2hlY2sgRkRUIGhlYWRlciAqLwogCWJlcWkJcjExLCBfcHJlcGFyZV9jb3B5X2ZkdAogCW9yCXI3LCByMCwgcjAJCS8qIGNsZWFyIFI3IHdoZW4gbm90IHZhbGlkIERUQiAqLwogCWJuZWkJcjExLCBub19mZHRfYXJnCQkJLyogTm8gLSBnZXQgb3V0IG9mIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaHdfZXhjZXB0aW9uX2hhbmRsZXIuUyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaHdfZXhjZXB0aW9uX2hhbmRsZXIuUwppbmRleCAyNWY2ZTA3Li43ODI2ODBkIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2h3X2V4Y2VwdGlvbl9oYW5kbGVyLlMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TCkBAIC0xNDcsMTAgKzE0Nyw2IEBACiAJI2lmIENPTkZJR19YSUxJTlhfTUlDUk9CTEFaRTBfVVNFX0JBUlJFTCA+IDAKIAkjZGVmaW5lIEJTUkxJKHJELCByQSwgaW1tKQlcCiAJCWJzcmxpIHJELCByQSwgaW1tCi0JI2VsaWYgQ09ORklHX1hJTElOWF9NSUNST0JMQVpFMF9VU0VfRElWID4gMAotCSNkZWZpbmUgQlNSTEkockQsIHJBLCBpbW0pCVwKLQkJb3JpIHJELCByMCwgKDEgPDwgaW1tKTsJXAotCQlpZGl2dSByRCwgckQsIHJBCiAJI2Vsc2UKIAkjZGVmaW5lIEJTUkxJKHJELCByQSwgaW1tKSBCU1JMSSAjIyBpbW0gKHJELCByQSkKIAkvKiBPbmx5IHRoZSB1c2VkIHNoaWZ0IGNvbnN0YW50cyBkZWZpbmVkIGhlcmUgLSBhZGQgbW9yZSBpZiBuZWVkZWQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc2V0dXAuYwppbmRleCBiYjE1NThlLi45MzEyZmJiIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zZXR1cC5jCkBAIC0xNjEsMTEgKzE2MSwxMSBAQAogI2lmIENPTkZJR19YSUxJTlhfTUlDUk9CTEFaRTBfVVNFX01TUl9JTlNUUgogCWlmIChtc3IpCiAJCWVwcmludGsoIiEhIVlvdXIga2VybmVsIGhhcyBzZXR1cCBNU1IgaW5zdHJ1Y3Rpb24gYnV0ICIKLQkJCQkiQ1BVIGRvbid0IGhhdmUgaXQgJWRcbiIsIG1zcik7CisJCQkJIkNQVSBkb24ndCBoYXZlIGl0ICV4XG4iLCBtc3IpOwogI2Vsc2UKIAlpZiAoIW1zcikKIAkJZXByaW50aygiISEhWW91ciBrZXJuZWwgbm90IHNldHVwIE1TUiBpbnN0cnVjdGlvbiBidXQgIgotCQkJCSJDUFUgaGF2ZSBpdCAlZFxuIiwgbXNyKTsKKwkJCQkiQ1BVIGhhdmUgaXQgJXhcbiIsIG1zcik7CiAjZW5kaWYKIAogCWZvciAoc3JjID0gX19pdnRfc3RhcnQ7IHNyYyA8IF9faXZ0X2VuZDsgc3JjKyssIGRzdCsrKQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2xpYi9mYXN0Y29weS5TIGIvYXJjaC9taWNyb2JsYXplL2xpYi9mYXN0Y29weS5TCmluZGV4IGZkYzQ4YmIuLjYyMDIxZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9saWIvZmFzdGNvcHkuUworKysgYi9hcmNoL21pY3JvYmxhemUvbGliL2Zhc3Rjb3B5LlMKQEAgLTI5LDYgKzI5LDEwIEBACiAgKgliZXR3ZWVuIG1lbSBsb2NhdGlvbnMgd2l0aCBzaXplIG9mIHhmZXIgc3BlYydkIGluIGJ5dGVzCiAgKi8KIAorI2lmZGVmIF9fTUlDUk9CTEFaRUVMX18KKyNlcnJvciBNaWNyb2JsYXplIExFIG5vdCBzdXBwb3J0IEFTTSBvcHRpbWl6ZWQgbGliIGZ1bmMuIERpc2FibGUgT1BUX0xJQl9BU00uCisjZW5kaWYKKwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIAkudGV4dAogCS5nbG9ibAltZW1jcHkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggNTQ4ZTZjYy4uZjVlY2MwNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTc5Myw5ICs3OTMsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQotCWRlZl9ib29sIHkKLQogIwogIyBTZWxlY3Qgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXV0b21hdGljYWxseSBiYXNlZCBvbiB1c2VyIHNlbGVjdGlvbnMuCiAjCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvbWlwcy9LY29uZmlnLmRlYnVnCmluZGV4IGY0MzdjZDEuLjUzNThmOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnLmRlYnVnCkBAIC03LDcgKzcsNyBAQAogc291cmNlICJsaWIvS2NvbmZpZy5kZWJ1ZyIKIAogY29uZmlnIEVBUkxZX1BSSU5USwotCWJvb2wgIkVhcmx5IHByaW50ayIgaWYgRU1CRURERUQKKwlib29sICJFYXJseSBwcmludGsiIGlmIEVYUEVSVAogCWRlcGVuZHMgb24gU1lTX0hBU19FQVJMWV9QUklOVEsKIAlkZWZhdWx0IHkKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9hcjdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvYXI3X2RlZmNvbmZpZwppbmRleCBjNzhjN2U3Li42Y2Q1YTUxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9hcjdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2FyN19kZWZjb25maWcKQEAgLTE0LDcgKzE0LDcgQEAKIENPTkZJR19SRUxBWT15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX1JEX0xaTUE9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2JjbTQ3eHhfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvYmNtNDd4eF9kZWZjb25maWcKaW5kZXggOTI3ZDU4Yi4uMjJmZGYyZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvYmNtNDd4eF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvYmNtNDd4eF9kZWZjb25maWcKQEAgLTIxLDcgKzIxLDcgQEAKIENPTkZJR19SRUxBWT15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX1JEX0xaTUE9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvYmNtNjN4eF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9iY202M3h4X2RlZmNvbmZpZwppbmRleCBiODA2YTRlLi45MTkwMDUxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9iY202M3h4X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9iY202M3h4X2RlZmNvbmZpZwpAQCAtMTAsNyArMTAsNyBAQAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfVElOWV9SQ1U9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnCmluZGV4IDk3NDliYzguLjFjZGZmNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZwpAQCAtMjYsNyArMjYsNyBAQAogQ09ORklHX05FVF9OUz15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2NhcGNlbGxhX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2NhcGNlbGxhX2RlZmNvbmZpZwppbmRleCA1MDJhOGU5Li41MTM1ZGMwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9jYXBjZWxsYV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvY2FwY2VsbGFfZGVmY29uZmlnCkBAIC00LDcgKzQsNyBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2Nhdml1bS1vY3Rlb25fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvY2F2aXVtLW9jdGVvbl9kZWZjb25maWcKaW5kZXggMzU2N2I2Zi4uNzUxNjVkZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvY2F2aXVtLW9jdGVvbl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvY2F2aXVtLW9jdGVvbl9kZWZjb25maWcKQEAgLTE1LDcgKzE1LDcgQEAKIENPTkZJR19SRUxBWT15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9jb2JhbHRfZGVmY29uZmlnCmluZGV4IDZjNGY3ZTkuLjU0MTlhZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvY29iYWx0X2RlZmNvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfUkVMQVk9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcKaW5kZXggZGRhMTU4Yi4uNDA0NGM5ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnCkBAIC0xMSw3ICsxMSw3IEBACiBDT05GSUdfVElOWV9SQ1U9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZwppbmRleCA3ZTRmYzc2Li5jNmI0OTkzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcKQEAgLTExLDcgKzExLDcgQEAKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogQ09ORklHX1RJTllfUkNVPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcKaW5kZXggNmZlMjA1Zi4uMWY2OTI0OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnCkBAIC0xMiw3ICsxMiw3IEBACiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19USU5ZX1JDVT15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCmluZGV4IGE3NDFjNTU0Li5iNmUyMWM3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcKQEAgLTEwLDcgKzEwLDcgQEAKIENPTkZJR19LRVJORUxfTFpNQT15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnCmluZGV4IGNkMzJkZDguLjc5OGE1NTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZwpAQCAtMTEsNyArMTEsNyBAQAogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfVElOWV9SQ1U9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnCmluZGV4IGIxNWJmZDEuLjg3ZDAzNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnCkBAIC00LDcgKzQsNyBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogQ09ORklHX1NMQUI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZTU1X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2U1NV9kZWZjb25maWcKaW5kZXggMGI2MGMwNi4uMDEyNmU2NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZTU1X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9lNTVfZGVmY29uZmlnCkBAIC00LDcgKzQsNyBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZnVsb29uZzJlX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2Z1bG9vbmcyZV9kZWZjb25maWcKaW5kZXggNjM5NDRhMS4uZTViNzNkZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZnVsb29uZzJlX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9mdWxvb25nMmVfZGVmY29uZmlnCkBAIC0xNyw3ICsxNyw3IEBACiBDT05GSUdfVVNFUl9OUz15CiBDT05GSUdfUElEX05TPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2dwcl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ncHJfZGVmY29uZmlnCmluZGV4IDUzZWRjMTMuLjQ4YTQwYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2dwcl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZ3ByX2RlZmNvbmZpZwpAQCAtMTEsNyArMTEsNyBAQAogQ09ORklHX1JFTEFZPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWcKaW5kZXggMzZkZTE5OS4uZDE2MDY1NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWcKQEAgLTE3LDcgKzE3LDcgQEAKIENPTkZJR19VU0VSX05TPXkKIENPTkZJR19QSURfTlM9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCmluZGV4IDRiMTZjNDguLjBlMzZhYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCkBAIC0xNSw3ICsxNSw3IEBACiBDT05GSUdfQ1BVU0VUUz15CiBDT05GSUdfUkVMQVk9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjhfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyOF9kZWZjb25maWcKaW5kZXggOThmMmM3Ny4uNGRiZjYyNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAyOF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyOF9kZWZjb25maWcKQEAgLTgsNyArOCw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1JFTEFZPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAzMl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZwppbmRleCA1YmVhOTliLi43YmJkNTIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZwpAQCAtMTAsNyArMTAsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19SRUxBWT15Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19PUFJPRklMRT1tCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9qYXp6X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2phenpfZGVmY29uZmlnCmluZGV4IDZhZTQ2YmMuLjkyYTYwYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2phenpfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2phenpfZGVmY29uZmlnCkBAIC0xMCw3ICsxMCw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1JFTEFZPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcKaW5kZXggYmYyNGU5My4uZGI1NzA1ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcKQEAgLTQsNyArNCw3IEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX1NMQUI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbGFzYXRfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbGFzYXRfZGVmY29uZmlnCmluZGV4IDY0NDcyNjEuLmQ5ZjNkYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2xhc2F0X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9sYXNhdF9kZWZjb25maWcKQEAgLTgsNyArOCw3IEBACiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2xlbW90ZTJmX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2xlbW90ZTJmX2RlZmNvbmZpZwppbmRleCBmNzAzM2YzLi4xNjdjMWQwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbGVtb3RlMmZfZGVmY29uZmlnCkBAIC0yMSw3ICsyMSw3IEBACiBDT05GSUdfUkRfQlpJUDI9eQogQ09ORklHX1JEX0xaTUE9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfT1BST0ZJTEU9bQogQ09ORklHX01PRFVMRVM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnCmluZGV4IDlkMDNiNjguLjcyNzBmMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcKQEAgLTE1LDcgKzE1LDcgQEAKIENPTkZJR19JUENfTlM9eQogQ09ORklHX1BJRF9OUz15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21hcmtlaW5zX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hcmtlaW5zX2RlZmNvbmZpZwppbmRleCA4NmJmMDAxLi45YzlhMTIzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9tYXJrZWluc19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFya2VpbnNfZGVmY29uZmlnCkBAIC05LDcgKzksNyBAQAogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21pcHNzaW1fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcKaW5kZXggNDkyNWY1MC4uYjVhZDczOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcKQEAgLTcsNyArNyw3IEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbXBjMzB4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21wYzMweF9kZWZjb25maWcKaW5kZXggZWZiNzc5Zi4uYzE2ZGU5OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbXBjMzB4X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9tcGMzMHhfZGVmY29uZmlnCkBAIC01LDcgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19SRUxBWT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tc3A3MXh4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21zcDcxeHhfZGVmY29uZmlnCmluZGV4IGFiMDUxNDUuLmQxMTQyZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21zcDcxeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21zcDcxeHhfZGVmY29uZmlnCkBAIC04LDcgKzgsNyBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWcKaW5kZXggODE0Njk5Ny4uYTk3YTQyYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWcKQEAgLTExLDcgKzExLDcgQEAKIENPTkZJR19SRUxBWT15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NMQUI9eQogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfT1BST0ZJTEU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcKaW5kZXggMTU5N2FhMS4uNzVlYjFiMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnCkBAIC0xMSw3ICsxMSw3IEBACiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19USU5ZX1JDVT15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjEyMDBfZGVmY29uZmlnCmluZGV4IDk2ZjBkNDMuLmRjYmUyNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMjAwX2RlZmNvbmZpZwpAQCAtMTIsNyArMTIsNyBAQAogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfVElOWV9SQ1U9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZwppbmRleCBiNGJmZDQ4Li5mYTAwNDg3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKQEAgLTExLDcgKzExLDcgQEAKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogQ09ORklHX1RJTllfUkNVPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcKaW5kZXggNWE2NjAwMi4uZTgzZDY0OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnCkBAIC0xMSw3ICsxMSw3IEBACiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19USU5ZX1JDVT15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BueDgzMzUtc3RiMjI1X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDgzMzUtc3RiMjI1X2RlZmNvbmZpZwppbmRleCAzOTkyNmExLi5mMjkyNTc2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wbng4MzM1LXN0YjIyNV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODMzNS1zdGIyMjVfZGVmY29uZmlnCkBAIC0xMSw3ICsxMSw3IEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1qYnNfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1qYnNfZGVmY29uZmlnCmluZGV4IDMzNzZiYzguLjFkMWYyMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtamJzX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLWpic19kZWZjb25maWcKQEAgLTYsNyArNiw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtc3RiODEwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtc3RiODEwX2RlZmNvbmZpZwppbmRleCA2NTE0ZjFiLi4xNWM2NmE1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXN0YjgxMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1zdGI4MTBfZGVmY29uZmlnCkBAIC02LDcgKzYsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3Bvd2VydHZfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG93ZXJ0dl9kZWZjb25maWcKaW5kZXggZjFmNThlOTEuLjNiMGI2ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3Bvd2VydHZfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3Bvd2VydHZfZGVmY29uZmlnCkBAIC0xNCw3ICsxNCw3IEBACiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfUkRfR1pJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKICMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9yYjUzMl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9yYjUzMl9kZWZjb25maWcKaW5kZXggZDY0NTdiYy4uNTU5MDJkOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcmI1MzJfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JiNTMyX2RlZmNvbmZpZwpAQCAtMTMsNyArMTMsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9yYnR4NDl4eF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9yYnR4NDl4eF9kZWZjb25maWcKaW5kZXggMjlhY2ZhYi4uOWNiYTg1NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcmJ0eDQ5eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JidHg0OXh4X2RlZmNvbmZpZwpAQCAtMTIsNyArMTIsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcKaW5kZXggMmIzZTQ3Ni4uMmMwMjMwZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZwpAQCAtMTIsNyArMTIsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19SRUxBWT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9zYjEyNTAtc3dhcm1fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvc2IxMjUwLXN3YXJtX2RlZmNvbmZpZwppbmRleCA2NDg0MGQ3Li41YjA0NjNlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9zYjEyNTAtc3dhcm1fZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3NiMTI1MC1zd2FybV9kZWZjb25maWcKQEAgLTE1LDcgKzE1LDcgQEAKIENPTkZJR19OQU1FU1BBQ0VTPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDIxOV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy90YjAyMTlfZGVmY29uZmlnCmluZGV4IGQ5YmUzN2YuLjMwMDM2YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDIxOV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjE5X2RlZmNvbmZpZwpAQCAtNSw3ICs1LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI2X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyNl9kZWZjb25maWcKaW5kZXggM2QyNWRkMC4uODFiZmExZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI2X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy90YjAyMjZfZGVmY29uZmlnCkBAIC01LDcgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15CiBDT05GSUdfTU9EVUxFUz15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy90YjAyODdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjg3X2RlZmNvbmZpZwppbmRleCBiZTY5N2M5Li5jNDE1YzRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy90YjAyODdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDI4N19kZWZjb25maWcKQEAgLTQsNyArNCw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3dvcmtwYWRfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvd29ya3BhZF9kZWZjb25maWcKaW5kZXggN2VjOTI4Ny4uZWU0YjJiZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvd29ya3BhZF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvd29ya3BhZF9kZWZjb25maWcKQEAgLTQsNyArNCw3IEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvd3JwcG1jX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3dycHBtY19kZWZjb25maWcKaW5kZXggYTIzMWI3My4uNDRhNDUxYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvd3JwcG1jX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy93cnBwbWNfZGVmY29uZmlnCkBAIC03LDcgKzcsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy95b3NlbWl0ZV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy95b3NlbWl0ZV9kZWZjb25maWcKaW5kZXggYWIzYTNkYy4uZjcyZDMwNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MveW9zZW1pdGVfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3lvc2VtaXRlX2RlZmNvbmZpZwpAQCAtOCw3ICs4LDcgQEAKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfUkVMQVk9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL0tjb25maWcgYi9hcmNoL21uMTAzMDAvS2NvbmZpZwppbmRleCA4ZWQ0MWNmLi4yNDNiZmEyIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvS2NvbmZpZworKysgYi9hcmNoL21uMTAzMDAvS2NvbmZpZwpAQCAtMSw2ICsxLDcgQEAKIGNvbmZpZyBNTjEwMzAwCiAJZGVmX2Jvb2wgeQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCisJc2VsZWN0IEdFTkVSSUNfSEFSRElSUVMKIAogY29uZmlnIEFNMzNfMgogCWRlZl9ib29sIG4KQEAgLTM0LDkgKzM1LDYgQEAKIGNvbmZpZyBSV1NFTV9YQ0hHQUREX0FMR09SSVRITQogCWJvb2wKIAotY29uZmlnIEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQotCWRlZl9ib29sIHkKLQogY29uZmlnIEdFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZCiAJZGVmX2Jvb2wgeQogCkBAIC03OSwxMCArNzcsNiBAQAogY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1UzMgogCWRlZl9ib29sIHkKIAotIyBVc2UgdGhlIGdlbmVyaWMgaW50ZXJydXB0IGhhbmRsaW5nIGNvZGUgaW4ga2VybmVsL2lycS8KLWNvbmZpZyBHRU5FUklDX0hBUkRJUlFTCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgSE9UUExVR19DUFUKIAlkZWZfYm9vbCBuCiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9jb25maWdzL2FzYjIzMDNfZGVmY29uZmlnIGIvYXJjaC9tbjEwMzAwL2NvbmZpZ3MvYXNiMjMwM19kZWZjb25maWcKaW5kZXggM2Y3NDliNi4uMWZkNDFlYyAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2NvbmZpZ3MvYXNiMjMwM19kZWZjb25maWcKKysrIGIvYXJjaC9tbjEwMzAwL2NvbmZpZ3MvYXNiMjMwM19kZWZjb25maWcKQEAgLTQsNyArNCw3IEBACiBDT05GSUdfVElOWV9SQ1U9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2NvbmZpZ3MvYXNiMjM2NF9kZWZjb25maWcgYi9hcmNoL21uMTAzMDAvY29uZmlncy9hc2IyMzY0X2RlZmNvbmZpZwppbmRleCA4M2NlMmYyLi4zMWQ3NjI2IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvY29uZmlncy9hc2IyMzY0X2RlZmNvbmZpZworKysgYi9hcmNoL21uMTAzMDAvY29uZmlncy9hc2IyMzY0X2RlZmNvbmZpZwpAQCAtMTUsNyArMTUsNyBAQAogQ09ORklHX1JFU09VUkNFX0NPVU5URVJTPXkKIENPTkZJR19SRUxBWT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9LY29uZmlnIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwppbmRleCAwODg4Njc1Li5mZWQyOTQ2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9LY29uZmlnCisrKyBiL2FyY2gvcGFyaXNjL0tjb25maWcKQEAgLTEyLDcgKzEyLDEwIEBACiAJc2VsZWN0IEhBVkVfSVJRX1dPUksKIAlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUwogCXNlbGVjdCBHRU5FUklDX0FUT01JQzY0IGlmICE2NEJJVAotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKKwlzZWxlY3QgSEFWRV9HRU5FUklDX0hBUkRJUlFTCisJc2VsZWN0IEdFTkVSSUNfSVJRX1BST0JFCisJc2VsZWN0IElSUV9QRVJfQ1BVCisKIAloZWxwCiAJICBUaGUgUEEtUklTQyBtaWNyb3Byb2Nlc3NvciBpcyBkZXNpZ25lZCBieSBIZXdsZXR0LVBhY2thcmQgYW5kIHVzZWQKIAkgIGluIG1hbnkgb2YgdGhlaXIgd29ya3N0YXRpb25zICYgc2VydmVycyAoSFA5MDAwIDcwMCBhbmQgODAwIHNlcmllcywKQEAgLTY2LDIyICs2OSw5IEBACiAJZGVwZW5kcyBvbiBTTVAKIAlkZWZhdWx0IHkKIAotY29uZmlnIEdFTkVSSUNfSEFSRElSUVMKLQlkZWZfYm9vbCB5Ci0KLWNvbmZpZyBHRU5FUklDX0lSUV9QUk9CRQotCWRlZl9ib29sIHkKLQogY29uZmlnIEhBVkVfTEFURU5DWVRPUF9TVVBQT1JUCiAgICAgICAgIGRlZl9ib29sIHkKIAotY29uZmlnIElSUV9QRVJfQ1BVCi0JYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCi0JZGVmX2Jvb2wgeQotCiAjIHVubGVzcyB5b3Ugd2FudCB0byBpbXBsZW1lbnQgQUNQSSBvbiBQQS1SSVNDIC4uLiA7LSkKIGNvbmZpZyBQTQogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2NvbmZpZ3MvYTUwMF9kZWZjb25maWcgYi9hcmNoL3BhcmlzYy9jb25maWdzL2E1MDBfZGVmY29uZmlnCmluZGV4IGY5MzA1ZjMuLmI2NDdiMTggMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2NvbmZpZ3MvYTUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wYXJpc2MvY29uZmlncy9hNTAwX2RlZmNvbmZpZwpAQCAtOCw3ICs4LDcgQEAKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19QUk9GSUxJTkc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvY29uZmlncy9jMzAwMF9kZWZjb25maWcgYi9hcmNoL3BhcmlzYy9jb25maWdzL2MzMDAwX2RlZmNvbmZpZwppbmRleCA2MjhkM2UwLi4zMTFjYTM2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9jb25maWdzL2MzMDAwX2RlZmNvbmZpZworKysgYi9hcmNoL3BhcmlzYy9jb25maWdzL2MzMDAwX2RlZmNvbmZpZwpAQCAtNiw3ICs2LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE2CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19QUk9GSUxJTkc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jb25zLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGRjX2NvbnMuYwppbmRleCAxMWJkZDY4Li5mYzc3MGJlIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGRjX2NvbnMuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGRjX2NvbnMuYwpAQCAtMTY5LDExICsxNjksMTEgQEAKIAogCXN0cnVjdCBjb25zb2xlICp0bXA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZm9yX2VhY2hfY29uc29sZSh0bXApCiAJCWlmICh0bXAgPT0gJnBkY19jb25zKQogCQkJYnJlYWs7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlpZiAoIXRtcCkgewogCQlwcmludGsoS0VSTl9JTkZPICJQREMgY29uc29sZSBkcml2ZXIgbm90IHJlZ2lzdGVyZWQgYW55bW9yZSwgbm90IGNyZWF0aW5nICVzXG4iLCBwZGNfY29ucy5uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggOTU5ZjM4Yy4uN2Q2OWU5YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTM2LDI0ICszNiwxMiBAQAogY29uZmlnIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBHRU5FUklDX0hBUkRJUlFTCi0JYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCi0JYm9vbAotCWRlZmF1bHQgeQotCiBjb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKIAlkZWZfYm9vbCBQUEM2NAogCiBjb25maWcgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LCiAJZGVmX2Jvb2wgUFBDNjQKIAotY29uZmlnIElSUV9QRVJfQ1BVCi0JYm9vbAotCWRlZmF1bHQgeQotCiBjb25maWcgTlJfSVJRUwogCWludCAiTnVtYmVyIG9mIHZpcnR1YWwgaW50ZXJydXB0IG51bWJlcnMiCiAJcmFuZ2UgMzIgMzI3NjgKQEAgLTE0Myw2ICsxMzEsOSBAQAogCXNlbGVjdCBIQVZFX1BFUkZfRVZFTlRTCiAJc2VsZWN0IEhBVkVfUkVHU19BTkRfU1RBQ0tfQUNDRVNTX0FQSQogCXNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQgaWYgUEVSRl9FVkVOVFMgJiYgUFBDX0JPT0szU182NAorCXNlbGVjdCBIQVZFX0dFTkVSSUNfSEFSRElSUVMKKwlzZWxlY3QgSEFWRV9TUEFSU0VfSVJRCisJc2VsZWN0IElSUV9QRVJfQ1BVCiAKIGNvbmZpZyBFQVJMWV9QUklOVEsKIAlib29sCkBAIC0zOTIsMTkgKzM4Myw2IEBACiAJICBDUFUuICBHZW5lcmFsbHkgc2F5aW5nIFkgaXMgc2FmZSwgYWx0aG91Z2ggc29tZSBwcm9ibGVtcyBoYXZlIGJlZW4KIAkgIHJlcG9ydGVkIHdpdGggU01QIFBvd2VyIE1hY2ludG9zaGVzIHdpdGggdGhpcyBvcHRpb24gZW5hYmxlZC4KIAotY29uZmlnIFNQQVJTRV9JUlEKLQlib29sICJTdXBwb3J0IHNwYXJzZSBpcnEgbnVtYmVyaW5nIgotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzcGFyc2UgaXJxcy4gVGhpcyBpcyB1c2VmdWwgZm9yIGRpc3RybwotCSAga2VybmVscyB0aGF0IHdhbnQgdG8gZGVmaW5lIGEgaGlnaCBDT05GSUdfTlJfQ1BVUyB2YWx1ZSBidXQgc3RpbGwKLQkgIHdhbnQgdG8gaGF2ZSBsb3cga2VybmVsIG1lbW9yeSBmb290cHJpbnQgb24gc21hbGxlciBtYWNoaW5lcy4KLQotCSAgKCBTcGFyc2UgSVJRcyBjYW4gYWxzbyBiZSBiZW5lZmljaWFsIG9uIE5VTUEgYm94ZXMsIGFzIHRoZXkgc3ByZWFkCi0JICAgIG91dCB0aGUgaXJxX2Rlc2NbXSBhcnJheSBpbiBhIG1vcmUgTlVNQS1mcmllbmRseSB3YXkuICkKLQotCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KLQogY29uZmlnIE5VTUEKIAlib29sICJOVU1BIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQUEM2NApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQppbmRleCA5NmRlZWM2Li44OTE3ODE2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQpAQCAtMzY4LDcgKzM2OCw3IEBACiBleHRyYS1pbnN0YWxsZWQJCTo9ICQocGF0c3Vic3QgJChvYmopLyUsICQoREVTVERJUikkKFdSQVBQRVJfT0JKRElSKS8lLCAkKGV4dHJhLXkpKQogaG9zdHByb2dzLWluc3RhbGxlZAk6PSAkKHBhdHN1YnN0ICUsICQoREVTVERJUikkKFdSQVBQRVJfQklORElSKS8lLCAkKGhvc3Rwcm9ncy15KSkKIHdyYXBwZXItaW5zdGFsbGVkCTo9ICQoREVTVERJUikkKFdSQVBQRVJfQklORElSKS93cmFwcGVyCi1kdHMtaW5zdGFsbGVkCQk6PSAkKHBhdHN1YnN0ICQob2JqKS9kdHMvJSwgJChERVNURElSKSQoV1JBUFBFUl9EVFNESVIpLyUsICQod2lsZGNhcmQgJChvYmopL2R0cy8qLmR0cykpCitkdHMtaW5zdGFsbGVkCQk6PSAkKHBhdHN1YnN0ICQoZHRzdHJlZSkvJSwgJChERVNURElSKSQoV1JBUFBFUl9EVFNESVIpLyUsICQod2lsZGNhcmQgJChkdHN0cmVlKS8qLmR0cykpCiAKIGFsbC1pbnN0YWxsZWQJCTo9ICQoZXh0cmEtaW5zdGFsbGVkKSAkKGhvc3Rwcm9ncy1pbnN0YWxsZWQpICQod3JhcHBlci1pbnN0YWxsZWQpICQoZHRzLWluc3RhbGxlZCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMDhyZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMDhyZGIuZHRzCmluZGV4IGQzZGIwMmYuLmEwYmQxODggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzA4cmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMwOHJkYi5kdHMKQEAgLTEwOSw3ICsxMDksNyBAQAogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCWRldmljZV90eXBlID0gInNvYyI7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTUtaW1tciIsICJzaW1wbGUtYnVzIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMwOC1pbW1yIiwgInNpbXBsZS1idXMiOwogCQlyYW5nZXMgPSA8MCAweGUwMDAwMDAwIDB4MDAxMDAwMDA+OwogCQlyZWcgPSA8MHhlMDAwMDAwMCAweDAwMDAwMjAwPjsKIAkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMmRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMmRzLmR0cwppbmRleCAyYmJlY2JiLi42OTQyMmViIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDEwMjJkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AxMDIyZHMuZHRzCkBAIC0yOTEsMTMgKzI5MSwxMyBAQAogCQkJcmFuZ2VzID0gPDB4MCAweGMxMDAgMHgyMDA+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRtYTAwOiBkbWEtY2hhbm5lbEAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxzc2ktZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDAgMHg4MD47CiAJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDc2IDI+OwogCQkJfTsKIAkJCWRtYTAxOiBkbWEtY2hhbm5lbEA4MCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsc3NpLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKIAkJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJCWludGVycnVwdHMgPSA8NzcgMj47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvYWNhZGlhX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9hY2FkaWFfZGVmY29uZmlnCmluZGV4IDk3ZmVkY2UuLjQxODJjNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9hY2FkaWFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9hY2FkaWFfZGVmY29uZmlnCkBAIC01LDcgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9lcDQwNV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvZXA0MDVfZGVmY29uZmlnCmluZGV4IDMzYjNjMjQuLjJkYmIyOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9lcDQwNV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2VwNDA1X2RlZmNvbmZpZwpAQCAtNSw3ICs1LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfTU9EVUxFUz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvaGN1NF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvaGN1NF9kZWZjb25maWcKaW5kZXggNDYxMzA3OS4uZWJlYjRhYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2hjdTRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9oY3U0X2RlZmNvbmZpZwpAQCAtNSw3ICs1LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfTU9EVUxFUz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgva2lsYXVlYV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgva2lsYXVlYV9kZWZjb25maWcKaW5kZXggMzRiOGMxYS4uNTMyZWE5ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2tpbGF1ZWFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9raWxhdWVhX2RlZmNvbmZpZwpAQCAtNSw3ICs1LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfTU9EVUxFUz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvbWFrYWx1X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9tYWthbHVfZGVmY29uZmlnCmluZGV4IDY1MWJlMDkuLjNjMTQyYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9tYWthbHVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9tYWthbHVfZGVmY29uZmlnCkBAIC01LDcgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC93YWxudXRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L3dhbG51dF9kZWZjb25maWcKaW5kZXggZGVkNDU1ZS4uZmY1N2Q0OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L3dhbG51dF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L3dhbG51dF9kZWZjb25maWcKQEAgLTUsNyArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQogQ09ORklHX01PRFVMRVM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FyY2hlc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYXJjaGVzX2RlZmNvbmZpZwppbmRleCA2Mzc0NmEwLi4zZWQxNmQ1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYXJjaGVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYXJjaGVzX2RlZmNvbmZpZwpAQCAtNSw3ICs1LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2JhbWJvb19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYmFtYm9vX2RlZmNvbmZpZwppbmRleCBmNWYyYTRlLi5iMWI3ZDJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYmFtYm9vX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYmFtYm9vX2RlZmNvbmZpZwpAQCAtNSw3ICs1LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2JsdWVzdG9uZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYmx1ZXN0b25lX2RlZmNvbmZpZwppbmRleCBhYzY1YjQ4Li4zMGEwYThlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYmx1ZXN0b25lX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYmx1ZXN0b25lX2RlZmNvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfUVVJUktTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25sYW5kc19kZWZjb25maWcKaW5kZXggMTdlNGRkOS4uYTQ2OTQyYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvY2FueW9ubGFuZHNfZGVmY29uZmlnCkBAIC01LDcgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvZWJvbnlfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2Vib255X2RlZmNvbmZpZwppbmRleCBmZWRkMDNmLi4wN2Q3N2U1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvZWJvbnlfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9lYm9ueV9kZWZjb25maWcKQEAgLTUsNyArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQogQ09ORklHX01PRFVMRVM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2VpZ2VyX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9laWdlcl9kZWZjb25maWcKaW5kZXggZWJmZjcwMS4uMmNlN2U5YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2VpZ2VyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvZWlnZXJfZGVmY29uZmlnCkBAIC01LDcgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvaWNvbl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvaWNvbl9kZWZjb25maWcKaW5kZXggODY1ZTkzZi4uMTg3MzBmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2ljb25fZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9pY29uX2RlZmNvbmZpZwpAQCAtNiw3ICs2LDcgQEAKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvaXNzNDc2LXNtcF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvaXNzNDc2LXNtcF9kZWZjb25maWcKaW5kZXggOGVjZTRjNy4uOTJmODYzYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2lzczQ3Ni1zbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9pc3M0NzYtc21wX2RlZmNvbmZpZwpAQCAtNyw3ICs3LDcgQEAKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENPTkZJR19QUk9GSUxJTkc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2thdG1haV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgva2F0bWFpX2RlZmNvbmZpZwppbmRleCA0Y2E5YjQ4Li4zNGMwOTE0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgva2F0bWFpX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgva2F0bWFpX2RlZmNvbmZpZwpAQCAtNSw3ICs1LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JhaW5pZXJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JhaW5pZXJfZGVmY29uZmlnCmluZGV4IGUzYjY1ZDIuLjIxYzMzZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yYWluaWVyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvcmFpbmllcl9kZWZjb25maWcKQEAgLTUsNyArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yZWR3b29kX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yZWR3b29kX2RlZmNvbmZpZwppbmRleCA2NGNkMGYzLi4wMWNjMmIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvcmVkd29vZF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JlZHdvb2RfZGVmY29uZmlnCkBAIC01LDcgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvc2FtNDQwZXBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3NhbTQ0MGVwX2RlZmNvbmZpZwppbmRleCAwMWQwMzM2Li5kZmNmZmVkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvc2FtNDQwZXBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zYW00NDBlcF9kZWZjb25maWcKQEAgLTYsNyArNiw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zZXF1b2lhX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zZXF1b2lhX2RlZmNvbmZpZwppbmRleCA4OWIyZjk2Li40N2UzOTlmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvc2VxdW9pYV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3NlcXVvaWFfZGVmY29uZmlnCkBAIC01LDcgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvdGFpc2hhbl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvdGFpc2hhbl9kZWZjb25maWcKaW5kZXggZTMzODZjZi4uYTZhMDAyZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3RhaXNoYW5fZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC90YWlzaGFuX2RlZmNvbmZpZwpAQCAtNSw3ICs1LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3dhcnBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3dhcnBfZGVmY29uZmlnCmluZGV4IDljMTNiOWQuLjZjZjlkNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC93YXJwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvd2FycF9kZWZjb25maWcKQEAgLTgsNyArOCw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZwppbmRleCBmMjM0YzRkLi42OWI1N2RhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2NtNTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9jbTUyMDBfZGVmY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2xpdGU1MjAwYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2xpdGU1MjAwYl9kZWZjb25maWcKaW5kZXggYTRhNzk1Yy4uZjM2MzhhZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9saXRlNTIwMGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbGl0ZTUyMDBiX2RlZmNvbmZpZwpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9tb3Rpb25wcm9fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9tb3Rpb25wcm9fZGVmY29uZmlnCmluZGV4IDIwZDUzYTEuLjY4MjhlZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbW90aW9ucHJvX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L21vdGlvbnByb19kZWZjb25maWcKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZwppbmRleCA2YmQ1ODMzLi43ZjdlNGE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9wY20wMzBfZGVmY29uZmlnCkBAIC04LDcgKzgsNyBAQAogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3RxbTUyMDBfZGVmY29uZmlnCmluZGV4IDNhMWY3MDIuLjk1OWNkMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC90cW01MjAwX2RlZmNvbmZpZwpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9hc3A4MzQ3X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25maWcKaW5kZXggZWVkNDJkOC4uZDI3NjJkOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9hc3A4MzQ3X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2FzcDgzNDdfZGVmY29uZmlnCkBAIC00LDcgKzQsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2ttZXRlcjFfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9rbWV0ZXIxX2RlZmNvbmZpZwppbmRleCBlNDNlY2IyLi43YTdiNzMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2ttZXRlcjFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgva21ldGVyMV9kZWZjb25maWcKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzEzX3JkYl9kZWZjb25maWcKaW5kZXggYzJlNmFiNS4uYzY4M2JjZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzEzX3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzEzX3JkYl9kZWZjb25maWcKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKaW5kZXggMWQzYjIwMC4uYTcyMWNkMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKaW5kZXggOTFmZTczYi4uYTU2OTlhMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcKaW5kZXggNmQzMDBmMi4uYjRkYTFhNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eF9kZWZjb25maWcKaW5kZXggYjIzNmE2Ny4uMjkxZjgyMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eF9kZWZjb25maWcKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhncF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4Z3BfZGVmY29uZmlnCmluZGV4IDAwMWRlYWQuLmY4YjIyOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhncF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZwpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZwppbmRleCA5ZGNjZWZjLi45OTY2MGMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZwpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZwppbmRleCBkNGIxNjVkLi4xMGI1YzRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZwpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfcmRrX2RlZmNvbmZpZwppbmRleCA4OWJhNjcyLi40NTkyNWQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfcmRrX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfcmRrX2RlZmNvbmZpZwpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfbWRzX2RlZmNvbmZpZwppbmRleCAyZWE2YjQwLi5mMzY3OTg1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfbWRzX2RlZmNvbmZpZwpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X3JkYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfcmRiX2RlZmNvbmZpZwppbmRleCBiZmZlM2M3Li40MTRlZGEzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfcmRiX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfcmRiX2RlZmNvbmZpZwpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcKaW5kZXggZmE1YzllZS4uNmQ2NDYzZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15CiBDT05GSUdfTU9EVUxFUz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2tzaTg1NjBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9rc2k4NTYwX2RlZmNvbmZpZwppbmRleCAzODViMWFmLi44ZjdjMTA2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2tzaTg1NjBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgva3NpODU2MF9kZWZjb25maWcKQEAgLTQsNyArNCw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKIENPTkZJR19LU0k4NTYwPXkKIENPTkZJR19DUE0yPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU0MF9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKaW5kZXggMjIyYjcwNC4uNTVlMDcyNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKQEAgLTQsNyArNCw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKIENPTkZJR19NUEM4NTQwX0FEUz15CiBDT05GSUdfTk9fSFo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTYwX2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NjBfYWRzX2RlZmNvbmZpZwppbmRleCA2MTk3MDJkLi5kNzI0MDk1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NjBfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NjBfYWRzX2RlZmNvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogQ09ORklHX01QQzg1NjBfQURTPXkKIENPTkZJR19CSU5GTVRfTUlTQz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1eHhfY2RzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODV4eF9jZHNfZGVmY29uZmlnCmluZGV4IDZiZjU2ZTguLjRiNDRiZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODV4eF9jZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODV4eF9jZHNfZGVmY29uZmlnCkBAIC00LDcgKzQsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiBDT05GSUdfTVBDODV4eF9DRFM9eQogQ09ORklHX05PX0haPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU0OF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NDhfZGVmY29uZmlnCmluZGV4IGE5YTE3ZDAuLjViMmI2NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU0OF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTQ4X2RlZmNvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogQ09ORklHX1NCQzg1NDg9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTYwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU2MF9kZWZjb25maWcKaW5kZXggODIwZTMyZC4uZjdmZGIwMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTYwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NjBfZGVmY29uZmlnCkBAIC00LDcgKzQsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiBDT05GSUdfU0JDODU2MD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnCmluZGV4IGI2ZGIzZjQuLjc3NTA2YjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnCkBAIC00LDcgKzQsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc3R4X2dwM19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3N0eF9ncDNfZGVmY29uZmlnCmluZGV4IDMzM2E0MWJkMi4uNWQ0ZGIxNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zdHhfZ3AzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3N0eF9ncDNfZGVmY29uZmlnCkBAIC00LDcgKzQsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MF9kZWZjb25maWcKaW5kZXggMzNkYjM1Mi4uZGRjYjlmMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDBfZGVmY29uZmlnCkBAIC00LDcgKzQsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDFfZGVmY29uZmlnCmluZGV4IGYwYzIwZGYuLjk4MWFiZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQxX2RlZmNvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQ4X2RlZmNvbmZpZwppbmRleCBhODgzNDUwLi4zN2IzZDcyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0OF9kZWZjb25maWcKQEAgLTQsNyArNCw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU1NV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NTVfZGVmY29uZmlnCmluZGV4IGZmOTVmOTAuLjM1OTNiMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU1NV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTU1X2RlZmNvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NjBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTYwX2RlZmNvbmZpZwppbmRleCA4ZDZjOTBlLi5kZTQxM2FjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NjBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU2MF9kZWZjb25maWcKQEAgLTQsNyArNCw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3hlc19tcGM4NXh4X2RlZmNvbmZpZwppbmRleCBmNTNlZmU0Li41ZWEzMTI0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3hlc19tcGM4NXh4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3hlc19tcGM4NXh4X2RlZmNvbmZpZwpAQCAtMTEsNyArMTEsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZwppbmRleCA0MzJlYmMyLi40YjI0NDEyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnCkBAIC0xMSw3ICsxMSw3IEBACiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmMzMTBfZGVmY29uZmlnCmluZGV4IGNlNWU5MTkuLmEzNjBiYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjMzEwX2RlZmNvbmZpZwpAQCAtMTEsNyArMTEsNyBAQAogQ09ORklHX1JFTEFZPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZwppbmRleCA1ODllNzFlLi5iZTI4MjlkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcKQEAgLTExLDcgKzExLDcgQEAKIENPTkZJR19SRUxBWT15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnCmluZGV4IDMyMWZiNDcuLjAzNmJmYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODYxMF9ocGNkX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2MTBfaHBjZF9kZWZjb25maWcKQEAgLTYsNyArNiw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZwppbmRleCBiNWU0NjM5Li4wYzljN2VkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjQxX2hwY25fZGVmY29uZmlnCkBAIC0xMCw3ICsxMCw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQogQ09ORklHX01PRFVMRVM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9zYmM4NjQxZF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L3NiYzg2NDFkX2RlZmNvbmZpZwppbmRleCA3MTE0NWMzLi4wYTkyY2EwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L3NiYzg2NDFkX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L3NiYzg2NDFkX2RlZmNvbmZpZwpAQCAtMTEsNyArMTEsNyBAQAogQ09ORklHX1JFTEFZPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9hZGRlcjg3NV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9hZGRlcjg3NV9kZWZjb25maWcKaW5kZXggY2E4NGM3Zi4uNjkxMjg3NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYWRkZXI4NzVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2FkZGVyODc1X2RlZmNvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZTU1eHhfc21wX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2U1NXh4X3NtcF9kZWZjb25maWcKaW5kZXggOTRkMTIwZS4uMDZmOTU0OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZTU1eHhfc21wX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lNTV4eF9zbXBfZGVmY29uZmlnCkBAIC0xMiw3ICsxMiw3IEBACiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfTU9EVUxFUz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnCmluZGV4IDI2NzdiMDguLmZjZWZmYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnCkBAIC0yLDcgKzIsNyBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODh4Y19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDg4eGNfZGVmY29uZmlnCmluZGV4IGY5YTMxMTIuLjIxOWZkNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODh4Y19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4OHhjX2RlZmNvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZ2FtZWN1YmVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZ2FtZWN1YmVfZGVmY29uZmlnCmluZGV4IGZjZjBhMzkuLmU3NGQzYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2dhbWVjdWJlX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9nYW1lY3ViZV9kZWZjb25maWcKQEAgLTYsNyArNiw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QRVJGX0NPVU5URVJTPXkKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2hvbGx5X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2hvbGx5X2RlZmNvbmZpZwppbmRleCBiOWI2M2E2Li45NGViZmVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9ob2xseV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvaG9sbHlfZGVmY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ2NvZ2VfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdjb2dlX2RlZmNvbmZpZwppbmRleCBjNGVkMjU1Li4zOTUxOGU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ2NvZ2VfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21nY29nZV9kZWZjb25maWcKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdzdXZkX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21nc3V2ZF9kZWZjb25maWcKaW5kZXggZjI3NmM3Yy4uMmE0OTA2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdzdXZkX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ3N1dmRfZGVmY29uZmlnCkBAIC00LDcgKzQsNyBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogIyBDT05GSUdfQlVHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzc0NDhfaHBjMl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnCmluZGV4IDNiOTQ3MDguLjc1ZjBiYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzc0NDhfaHBjMl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNzQ0OF9ocGMyX2RlZmNvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnCmluZGV4IGM3ZDY4ZmYuLjZhMjI0MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgyNzJfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MjcyX2Fkc19kZWZjb25maWcKQEAgLTIsNyArMiw3IEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODN4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4M3h4X2RlZmNvbmZpZwppbmRleCA1YjFiMTBmLi41YWFjOWE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4M3h4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4M3h4X2RlZmNvbmZpZwpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZwppbmRleCAzYWViNTk0Li45OWExOWQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZwpAQCAtMTAsNyArMTAsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfc21wX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfc21wX2RlZmNvbmZpZwppbmRleCBkNjJjODAxLi5jNjM2ZjIzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9zbXBfZGVmY29uZmlnCkBAIC0xMiw3ICsxMiw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQogQ09ORklHX01PRFVMRVM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY2X2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZwppbmRleCA2NjgyMTVjLi41YzI1ODgyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JVRyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4Nnh4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCmluZGV4IDYzYjkwZDQuLjU1YjU0MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCkBAIC0xMCw3ICsxMCw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQogQ09ORklHX01PRFVMRVM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZwppbmRleCBmOWI4MzQ4Li45ZTE0NmNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNDB4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzQweF9kZWZjb25maWcKaW5kZXggOTNkNzQyNS4uYmZkNjM0YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNDB4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM0MHhfZGVmY29uZmlnCkBAIC01LDcgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENPTkZJR19NT0RVTEVTPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzQ0eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM0NHhfZGVmY29uZmlnCmluZGV4IDJmYTA1ZjcuLjQ3MTMzMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzQ0eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNDR4X2RlZmNvbmZpZwpAQCAtNSw3ICs1LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfTU9EVUxFUz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCmluZGV4IGE0MzUzYmUuLmJhYWQ4ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnCmluZGV4IDQ5Y2ZmZTAuLmNhYmE5MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZwpAQCAtOCw3ICs4LDcgQEAKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogQ09ORklHX05BTUVTUEFDRVM9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKICMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwppbmRleCBmODdmMGUxLi45YzNmMjJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwpAQCAtMiw3ICsyLDcgQEAKIENPTkZJR19BTFRJVkVDPXkKIENPTkZJR19WU1g9eQogQ09ORklHX1NNUD15Ci1DT05GSUdfTlJfQ1BVUz0xMjgKK0NPTkZJR19OUl9DUFVTPTEwMjQKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CkBAIC00NSw2ICs0NSw4IEBACiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKIENPTkZJR19NRU1PUllfSE9UUExVRz15CiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfUFBDXzY0S19QQUdFUz15CitDT05GSUdfUFBDX1NVQlBBR0VfUFJPVD15CiBDT05GSUdfU0NIRURfU01UPXkKIENPTkZJR19IT1RQTFVHX1BDST1tCiBDT05GSUdfSE9UUExVR19QQ0lfUlBBPW0KQEAgLTE4NCw2ICsxODYsNyBAQAogQ09ORklHX0UxMDAwPXkKIENPTkZJR19FMTAwMEU9eQogQ09ORklHX1RJR09OMz15CitDT05GSUdfQk5YMj1tCiBDT05GSUdfQ0hFTFNJT19UMT1tCiBDT05GSUdfQ0hFTFNJT19UMz1tCiBDT05GSUdfRUhFQT15CkBAIC0zMTEsOSArMzE0LDcgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogQ09ORklHX0xBVEVOQ1lUT1A9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19JUlFTT0ZGX1RSQUNFUj15CiBDT05GSUdfU0NIRURfVFJBQ0VSPXkKLUNPTkZJR19TVEFDS19UUkFDRVI9eQogQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQogQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3N0b3JjZW50ZXJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcKaW5kZXggNGYwYzEwYS4uZWJiMmE2NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy90cW04eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvdHFtOHh4X2RlZmNvbmZpZwppbmRleCBkMGE1YjY3Li44NjE2ZmRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy90cW04eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3RxbTh4eF9kZWZjb25maWcKQEAgLTUsNyArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3dpaV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy93aWlfZGVmY29uZmlnCmluZGV4IGJiOGJhNzUuLjE3NTI5NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3dpaV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvd2lpX2RlZmNvbmZpZwpAQCAtNyw3ICs3LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BFUkZfQ09VTlRFUlM9eQogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZlYXR1cmUtZml4dXBzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmVhdHVyZS1maXh1cHMuaAppbmRleCA5NmE3ZDA2Li45MjFhODQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmVhdHVyZS1maXh1cHMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmVhdHVyZS1maXh1cHMuaApAQCAtMzcsMTggKzM3LDIxIEBACiAJLmFsaWduIDI7CQkJCQlcCiBsYWJlbCMjMzoKIAotI2RlZmluZSBNQUtFX0ZUUl9TRUNUSU9OX0VOVFJZKG1zaywgdmFsLCBsYWJlbCwgc2VjdCkJXAotbGFiZWwjIzQ6CQkJCQkJXAotCS5wb3BzZWN0aW9uOwkJCQkJXAotCS5wdXNoc2VjdGlvbiBzZWN0LCJhIjsJCQkJXAotCS5hbGlnbiAzOwkJCQkJXAotbGFiZWwjIzU6CQkJCQkgICAgICAgCVwKLQlGVFJfRU5UUllfTE9ORyBtc2s7CQkJCVwKLQlGVFJfRU5UUllfTE9ORyB2YWw7CQkJCVwKLQlGVFJfRU5UUllfT0ZGU0VUIGxhYmVsIyMxYi1sYWJlbCMjNWI7CQlcCi0JRlRSX0VOVFJZX09GRlNFVCBsYWJlbCMjMmItbGFiZWwjIzViOwkgCVwKLQlGVFJfRU5UUllfT0ZGU0VUIGxhYmVsIyMzYi1sYWJlbCMjNWI7CQlcCi0JRlRSX0VOVFJZX09GRlNFVCBsYWJlbCMjNGItbGFiZWwjIzViOwkgCVwKKyNkZWZpbmUgTUFLRV9GVFJfU0VDVElPTl9FTlRSWShtc2ssIHZhbCwgbGFiZWwsIHNlY3QpCQlcCitsYWJlbCMjNDoJCQkJCQkJXAorCS5wb3BzZWN0aW9uOwkJCQkJCVwKKwkucHVzaHNlY3Rpb24gc2VjdCwiYSI7CQkJCQlcCisJLmFsaWduIDM7CQkJCQkJXAorbGFiZWwjIzU6CQkJCQkJCVwKKwlGVFJfRU5UUllfTE9ORyBtc2s7CQkJCQlcCisJRlRSX0VOVFJZX0xPTkcgdmFsOwkJCQkJXAorCUZUUl9FTlRSWV9PRkZTRVQgbGFiZWwjIzFiLWxhYmVsIyM1YjsJCQlcCisJRlRSX0VOVFJZX09GRlNFVCBsYWJlbCMjMmItbGFiZWwjIzViOwkJCVwKKwlGVFJfRU5UUllfT0ZGU0VUIGxhYmVsIyMzYi1sYWJlbCMjNWI7CQkJXAorCUZUUl9FTlRSWV9PRkZTRVQgbGFiZWwjIzRiLWxhYmVsIyM1YjsJCQlcCisJLmlmZ3QgKGxhYmVsIyM0Yi1sYWJlbCMjM2IpLShsYWJlbCMjMmItbGFiZWwjIzFiKTsJXAorCS5lcnJvciAiRmVhdHVyZSBzZWN0aW9uIGVsc2UgY2FzZSBsYXJnZXIgdGhhbiBib2R5IjsJXAorCS5lbmRpZjsJCQkJCQkJXAogCS5wb3BzZWN0aW9uOwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pbW1hcF9xZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ltbWFwX3FlLmgKaW5kZXggNGUxMGY1MC4uMGVkYjY4NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ltbWFwX3FlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ltbWFwX3FlLmgKQEAgLTQ2NywxMyArNDY3LDIyIEBACiBleHRlcm4gc3RydWN0IHFlX2ltbWFwIF9faW9tZW0gKnFlX2ltbXI7CiBleHRlcm4gcGh5c19hZGRyX3QgZ2V0X3FlX2Jhc2Uodm9pZCk7CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpbW1yYmFyX3ZpcnRfdG9fcGh5cyh2b2lkICphZGRyZXNzKQorLyoKKyAqIFJldHVybnMgdGhlIG9mZnNldCB3aXRoaW4gdGhlIFFFIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIGdpdmVuIHBvaW50ZXIuCisgKgorICogTm90ZSB0aGF0IHRoZSBRRSBkb2VzIG5vdCBzdXBwb3J0IDM2LWJpdCBwaHlzaWNhbCBhZGRyZXNzZXMsIHNvIGlmCisgKiBnZXRfcWVfYmFzZSgpIHJldHVybnMgYSBudW1iZXIgYWJvdmUgNEdCLCB0aGUgY2FsbGVyIHdpbGwgcHJvYmFibHkgZmFpbC4KKyAqLworc3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCBpbW1yYmFyX3ZpcnRfdG9fcGh5cyh2b2lkICphZGRyZXNzKQogewotCWlmICggKCh1MzIpYWRkcmVzcyA+PSAodTMyKXFlX2ltbXIpICYmCi0JCQkoKHUzMilhZGRyZXNzIDwgKCh1MzIpcWVfaW1tciArIFFFX0lNTUFQX1NJWkUpKSApCi0JCXJldHVybiAodW5zaWduZWQgbG9uZykoYWRkcmVzcyAtICh1MzIpcWVfaW1tciArCi0JCQkJKHUzMilnZXRfcWVfYmFzZSgpKTsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpdmlydF90b19waHlzKGFkZHJlc3MpOworCXZvaWQgKnEgPSAodm9pZCAqKXFlX2ltbXI7CisKKwkvKiBJcyBpdCBhIE1VUkFNIGFkZHJlc3M/ICovCisJaWYgKChhZGRyZXNzID49IHEpICYmIChhZGRyZXNzIDwgKHEgKyBRRV9JTU1BUF9TSVpFKSkpCisJCXJldHVybiBnZXRfcWVfYmFzZSgpICsgKGFkZHJlc3MgLSBxKTsKKworCS8qIEl0J3MgYW4gYWRkcmVzcyByZXR1cm5lZCBieSBrbWFsbG9jICovCisJcmV0dXJuIHZpcnRfdG9fcGh5cyhhZGRyZXNzKTsKIH0KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pcnFmbGFncy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKaW5kZXggYjg1ZDhkZC4uYjBiMDZkOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKQEAgLTEyLDI0ICsxMiw0NCBAQAogCiAjZWxzZQogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUworI2lmZGVmIENPTkZJR19JUlFTT0ZGX1RSQUNFUgorLyoKKyAqIFNpbmNlIHRoZSBmdHJhY2UgaXJxc29mZiBsYXRlbmN5IHRyYWNlIGNoZWNrcyBDQUxMRVJfQUREUjEsCisgKiB3aGljaCBpcyB0aGUgc3RhY2sgZnJhbWUgaGVyZSwgd2UgbmVlZCB0byBmb3JjZSBhIHN0YWNrIGZyYW1lCisgKiBpbiBjYXNlIHdlIGNhbWUgZnJvbSB1c2VyIHNwYWNlLgorICovCisjZGVmaW5lIFRSQUNFX1dJVEhfRlJBTUVfQlVGRkVSKGZ1bmMpCQlcCisJbWZscglyMDsJCQkJXAorCXN0ZHUJcjEsIC0zMihyMSk7CQkJXAorCXN0ZAlyMCwgMTYocjEpOwkJCVwKKwlzdGR1CXIxLCAtMzIocjEpOwkJCVwKKwlibCBmdW5jOwkJCQlcCisJbGQJcjEsIDAocjEpOwkJCVwKKwlsZAlyMSwgMChyMSk7CisjZWxzZQorI2RlZmluZSBUUkFDRV9XSVRIX0ZSQU1FX0JVRkZFUihmdW5jKQkJXAorCWJsIGZ1bmM7CisjZW5kaWYKKwogLyoKICAqIE1vc3Qgb2YgdGhlIENQVSdzIElSUS1zdGF0ZSB0cmFjaW5nIGlzIGRvbmUgZnJvbSBhc3NlbWJseSBjb2RlOyB3ZQogICogaGF2ZSB0byBjYWxsIGEgQyBmdW5jdGlvbiBzbyBjYWxsIGEgd3JhcHBlciB0aGF0IHNhdmVzIGFsbCB0aGUKICAqIEMtY2xvYmJlcmVkIHJlZ2lzdGVycy4KICAqLwotI2RlZmluZSBUUkFDRV9FTkFCTEVfSU5UUwlibCAudHJhY2VfaGFyZGlycXNfb24KLSNkZWZpbmUgVFJBQ0VfRElTQUJMRV9JTlRTCWJsIC50cmFjZV9oYXJkaXJxc19vZmYKLSNkZWZpbmUgVFJBQ0VfQU5EX1JFU1RPUkVfSVJRX1BBUlRJQUwoZW4sc2tpcCkJXAotCWNtcGRpCWVuLDA7CQkJCVwKLQlibmUJOTVmOwkJCQlcCi0Jc3RiCWVuLFBBQ0FTT0ZUSVJRRU4ocjEzKTsJCVwKLQlibAkudHJhY2VfaGFyZGlycXNfb2ZmOwkJXAotCWIJc2tpcDsJCQkJXAotOTU6CWJsCS50cmFjZV9oYXJkaXJxc19vbjsJCVwKKyNkZWZpbmUgVFJBQ0VfRU5BQkxFX0lOVFMJVFJBQ0VfV0lUSF9GUkFNRV9CVUZGRVIoLnRyYWNlX2hhcmRpcnFzX29uKQorI2RlZmluZSBUUkFDRV9ESVNBQkxFX0lOVFMJVFJBQ0VfV0lUSF9GUkFNRV9CVUZGRVIoLnRyYWNlX2hhcmRpcnFzX29mZikKKworI2RlZmluZSBUUkFDRV9BTkRfUkVTVE9SRV9JUlFfUEFSVElBTChlbixza2lwKQkJXAorCWNtcGRpCWVuLDA7CQkJCQlcCisJYm5lCTk1ZjsJCQkJCVwKKwlzdGIJZW4sUEFDQVNPRlRJUlFFTihyMTMpOwkJCVwKKwlUUkFDRV9XSVRIX0ZSQU1FX0JVRkZFUigudHJhY2VfaGFyZGlycXNfb2ZmKQlcCisJYglza2lwOwkJCQkJXAorOTU6CVRSQUNFX1dJVEhfRlJBTUVfQlVGRkVSKC50cmFjZV9oYXJkaXJxc19vbikJXAogCWxpCWVuLDE7CiAjZGVmaW5lIFRSQUNFX0FORF9SRVNUT1JFX0lSUShlbikJCVwKIAlUUkFDRV9BTkRfUkVTVE9SRV9JUlFfUEFSVElBTChlbiw5NmYpOwlcCi0Jc3RiCWVuLFBBQ0FTT0ZUSVJRRU4ocjEzKTsJICAgICAgICBcCisJc3RiCWVuLFBBQ0FTT0ZUSVJRRU4ocjEzKTsJCVwKIDk2OgogI2Vsc2UKICNkZWZpbmUgVFJBQ0VfRU5BQkxFX0lOVFMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaGRlcC5oCmluZGV4IDg0MzNkMzYuLjk5MWQ1OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaApAQCAtMTE2LDkgKzExNiw2IEBACiAJICogSWYgZm9yIHNvbWUgcmVhc29uIHRoZXJlIGlzIG5vIGlycSwgYnV0IHRoZSBpbnRlcnJ1cHQKIAkgKiBzaG91bGRuJ3QgYmUgY291bnRlZCBhcyBzcHVyaW91cywgcmV0dXJuIE5PX0lSUV9JR05PUkUuICovCiAJdW5zaWduZWQgaW50CSgqZ2V0X2lycSkodm9pZCk7Ci0jaWZkZWYgQ09ORklHX0tFWEVDCi0Jdm9pZAkJKCprZXhlY19jcHVfZG93bikoaW50IGNyYXNoX3NodXRkb3duLCBpbnQgc2Vjb25kYXJ5KTsKLSNlbmRpZgogCiAJLyogUENJIHN0dWZmICovCiAJLyogQ2FsbGVkIGFmdGVyIHNjYW5uaW5nIHRoZSBidXMsIGJlZm9yZSBhbGxvY2F0aW5nIHJlc291cmNlcyAqLwpAQCAtMjM1LDExICsyMzIsNyBAQAogCXZvaWQgKCptYWNoaW5lX3NodXRkb3duKSh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19LRVhFQwotCS8qIENhbGxlZCB0byBkbyB0aGUgbWluaW1hbCBzaHV0ZG93biBuZWVkZWQgdG8gcnVuIGEga2V4ZWMnZCBrZXJuZWwKLQkgKiB0byBydW4gc3VjY2Vzc2Z1bGx5LgotCSAqIFhYWCBTaG91bGQgd2UgbW92ZSB0aGlzIG9uZSBvdXQgb2Yga2V4ZWMgc2NvcGU/Ci0JICovCi0Jdm9pZCAoKm1hY2hpbmVfY3Jhc2hfc2h1dGRvd24pKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwl2b2lkICgqa2V4ZWNfY3B1X2Rvd24pKGludCBjcmFzaF9zaHV0ZG93biwgaW50IHNlY29uZGFyeSk7CiAKIAkvKiBDYWxsZWQgdG8gZG8gd2hhdCBldmVyeSBzZXR1cCBpcyBuZWVkZWQgb24gaW1hZ2UgYW5kIHRoZQogCSAqIHJlYm9vdCBjb2RlIGJ1ZmZlci4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCkBAIC0yNDcsMTUgKzI0MCw2IEBACiAJICogY2xhaW1zIHRvIHN1cHBvcnQga2V4ZWMuCiAJICovCiAJaW50ICgqbWFjaGluZV9rZXhlY19wcmVwYXJlKShzdHJ1Y3Qga2ltYWdlICppbWFnZSk7Ci0KLQkvKiBDYWxsZWQgdG8gaGFuZGxlIGFueSBtYWNoaW5lIHNwZWNpZmljIGNsZWFudXAgb24gaW1hZ2UgKi8KLQl2b2lkICgqbWFjaGluZV9rZXhlY19jbGVhbnVwKShzdHJ1Y3Qga2ltYWdlICppbWFnZSk7Ci0KLQkvKiBDYWxsZWQgdG8gcGVyZm9ybSB0aGUgX3JlYWxfIGtleGVjLgotCSAqIERvIE5PVCBhbGxvY2F0ZSBtZW1vcnkgb3IgZmFpbCBoZXJlLiBXZSBhcmUgcGFzdCB0aGUgcG9pbnQgb2YKLQkgKiBubyByZXR1cm4uCi0JICovCi0Jdm9pZCAoKm1hY2hpbmVfa2V4ZWMpKHN0cnVjdCBraW1hZ2UgKmltYWdlKTsKICNlbmRpZiAvKiBDT05GSUdfS0VYRUMgKi8KIAogI2lmZGVmIENPTkZJR19TVVNQRU5ECmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWJvb2szZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1ib29rM2UuaAppbmRleCA4ZWFlZDgxLi4xNzE5NGZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWJvb2szZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtYm9vazNlLmgKQEAgLTQwLDggKzQwLDggQEAKIAogLyogTUFTIHJlZ2lzdGVycyBiaXQgZGVmaW5pdGlvbnMgKi8KIAotI2RlZmluZSBNQVMwX1RMQlNFTCh4KQkJKCh4IDw8IDI4KSAmIDB4MzAwMDAwMDApCi0jZGVmaW5lIE1BUzBfRVNFTCh4KQkJKCh4IDw8IDE2KSAmIDB4MEZGRjAwMDApCisjZGVmaW5lIE1BUzBfVExCU0VMKHgpCQkoKCh4KSA8PCAyOCkgJiAweDMwMDAwMDAwKQorI2RlZmluZSBNQVMwX0VTRUwoeCkJCSgoKHgpIDw8IDE2KSAmIDB4MEZGRjAwMDApCiAjZGVmaW5lIE1BUzBfTlYoeCkJCSgoeCkgJiAweDAwMDAwRkZGKQogI2RlZmluZSBNQVMwX0hFUwkJMHgwMDAwNDAwMAogI2RlZmluZSBNQVMwX1dRX0FMTFdBWVMJCTB4MDAwMDAwMDAKQEAgLTUwLDEyICs1MCwxMiBAQAogCiAjZGVmaW5lIE1BUzFfVkFMSUQJCTB4ODAwMDAwMDAKICNkZWZpbmUgTUFTMV9JUFJPVAkJMHg0MDAwMDAwMAotI2RlZmluZSBNQVMxX1RJRCh4KQkJKCh4IDw8IDE2KSAmIDB4M0ZGRjAwMDApCisjZGVmaW5lIE1BUzFfVElEKHgpCQkoKCh4KSA8PCAxNikgJiAweDNGRkYwMDAwKQogI2RlZmluZSBNQVMxX0lORAkJMHgwMDAwMjAwMAogI2RlZmluZSBNQVMxX1RTCQkJMHgwMDAwMTAwMAogI2RlZmluZSBNQVMxX1RTSVpFX01BU0sJCTB4MDAwMDBmODAKICNkZWZpbmUgTUFTMV9UU0laRV9TSElGVAk3Ci0jZGVmaW5lIE1BUzFfVFNJWkUoeCkJCSgoeCA8PCBNQVMxX1RTSVpFX1NISUZUKSAmIE1BUzFfVFNJWkVfTUFTSykKKyNkZWZpbmUgTUFTMV9UU0laRSh4KQkJKCgoeCkgPDwgTUFTMV9UU0laRV9TSElGVCkgJiBNQVMxX1RTSVpFX01BU0spCiAKICNkZWZpbmUgTUFTMl9FUE4JCTB4RkZGRkYwMDAKICNkZWZpbmUgTUFTMl9YMAkJCTB4MDAwMDAwNDAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDUzYjY0YmUuLmRhNGIyMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTAxLDcgKzEwMSw3IEBACiAKICNpZmRlZiBDT05GSUdfRkxBVE1FTQogI2RlZmluZSBBUkNIX1BGTl9PRkZTRVQJCShNRU1PUllfU1RBUlQgPj4gUEFHRV9TSElGVCkKLSNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgocGZuKSA+PSBBUkNIX1BGTl9PRkZTRVQgJiYgKHBmbikgPCAoQVJDSF9QRk5fT0ZGU0VUICsgbWF4X21hcG5yKSkKKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgocGZuKSA+PSBBUkNIX1BGTl9PRkZTRVQgJiYgKHBmbikgPCBtYXhfbWFwbnIpCiAjZW5kaWYKIAogI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmgKaW5kZXggZmYwMDA1ZWVjLi4xMjVmYzFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oCkBAIC0yODMsNiArMjgzLDcgQEAKICNkZWZpbmUgSElEMF9OT1BUSQkoMTw8MCkJCS8qIE5vLW9wIGRjYnQgYW5kIGRjYnN0IGluc3RyLiAqLwogCiAjZGVmaW5lIFNQUk5fSElEMQkweDNGMQkJLyogSGFyZHdhcmUgSW1wbGVtZW50YXRpb24gUmVnaXN0ZXIgMSAqLworI2lmZGVmIENPTkZJR182eHgKICNkZWZpbmUgSElEMV9FTUNQCSgxPDwzMSkJCS8qIDc0NTAgTWFjaGluZSBDaGVjayBQaW4gRW5hYmxlICovCiAjZGVmaW5lIEhJRDFfREZTCSgxPDwyMikJCS8qIDc0NDdBIER5bmFtaWMgRnJlcXVlbmN5IFNjYWxpbmcgKi8KICNkZWZpbmUgSElEMV9QQzAJKDE8PDE2KQkJLyogNzQ1MCBQTExfQ0ZHWzBdICovCkBAIC0yOTIsNiArMjkzLDcgQEAKICNkZWZpbmUgSElEMV9TWU5DQkUJKDE8PDExKQkJLyogNzQ1MCBBQkUgZm9yIHN5bmMsIGVpZWlvICovCiAjZGVmaW5lIEhJRDFfQUJFCSgxPDwxMCkJCS8qIDc0NTAgQWRkcmVzcyBCcm9hZGNhc3QgRW5hYmxlICovCiAjZGVmaW5lIEhJRDFfUFMJCSgxPDwxNikJCS8qIDc1MEZYIFBMTCBzZWxlY3Rpb24gKi8KKyNlbmRpZgogI2RlZmluZSBTUFJOX0hJRDIJMHgzRjgJCS8qIEhhcmR3YXJlIEltcGxlbWVudGF0aW9uIFJlZ2lzdGVyIDIgKi8KICNkZWZpbmUgU1BSTl9ISUQyX0dFS0tPCTB4Mzk4CQkvKiBHZWtrbyBISUQyIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNQUk5fSUFCUgkweDNGMgkvKiBJbnN0cnVjdGlvbiBBZGRyZXNzIEJyZWFrcG9pbnQgUmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaAppbmRleCA2NjdhNDk4Li5lNjhjNjliIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCkBAIC0yNDYsNiArMjQ2LDIwIEBACiAJCQkJCXN0b3JlIG9yIGNhY2hlIGxpbmUgcHVzaCAqLwogI2VuZGlmCiAKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIEhJRDEgKi8KKyNpZmRlZiBDT05GSUdfRTUwMAorLyogZTUwMHYxL3YyICovCisjZGVmaW5lIEhJRDFfUExMX0NGR19NQVNLIDB4ZmMwMDAwMDAJLyogUExMX0NGRyBpbnB1dCBwaW5zICovCisjZGVmaW5lIEhJRDFfUkZYRQkweDAwMDIwMDAwCS8qIFJlYWQgZmF1bHQgZXhjZXB0aW9uIGVuYWJsZSAqLworI2RlZmluZSBISUQxX1IxRFBFCTB4MDAwMDgwMDAJLyogUjEgZGF0YSBidXMgcGFyaXR5IGVuYWJsZSAqLworI2RlZmluZSBISUQxX1IyRFBFCTB4MDAwMDQwMDAJLyogUjIgZGF0YSBidXMgcGFyaXR5IGVuYWJsZSAqLworI2RlZmluZSBISUQxX0FTVE1FCTB4MDAwMDIwMDAJLyogQWRkcmVzcyBidXMgc3RyZWFtaW5nIG1vZGUgZW5hYmxlICovCisjZGVmaW5lIEhJRDFfQUJFCTB4MDAwMDEwMDAJLyogQWRkcmVzcyBicm9hZGNhc3QgZW5hYmxlICovCisjZGVmaW5lIEhJRDFfTVBYVFQJMHgwMDAwMDQwMAkvKiBNUFggcmUtbWFwIHRyYW5zZmVyIHR5cGUgKi8KKyNkZWZpbmUgSElEMV9BVFMJMHgwMDAwMDA4MAkvKiBBdG9taWMgc3RhdHVzICovCisjZGVmaW5lIEhJRDFfTUlEX01BU0sJMHgwMDAwMDAwZgkvKiBNSUQgaW5wdXQgcGlucyAqLworI2VuZGlmCisKIC8qIEJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIERCU1IuICovCiAvKgogICogREJTUiBiaXRzIHdoaWNoIGhhdmUgY29uZmxpY3RpbmcgZGVmaW5pdGlvbnMgb24gdHJ1ZSBCb29rIEUgdmVyc3VzIElCTSA0MHguCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmgKaW5kZXggMGFiOGQ4NjkuLjBjOGIzNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmgKQEAgLTIwMywxNCArMjAzLDYgQEAKIHZvaWQgc3B1X3NldHVwX2tlcm5lbF9zbGJzKHN0cnVjdCBzcHUgKnNwdSwgc3RydWN0IHNwdV9sc2NzYSAqbHNjc2EsCiAJCXZvaWQgKmNvZGUsIGludCBjb2RlX3NpemUpOwogCi0jaWZkZWYgQ09ORklHX0tFWEVDCi12b2lkIGNyYXNoX3JlZ2lzdGVyX3NwdXMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGNyYXNoX3JlZ2lzdGVyX3NwdXMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKLXsKLX0KLSNlbmRpZgotCiBleHRlcm4gdm9pZCBzcHVfaW52YWxpZGF0ZV9zbGJzKHN0cnVjdCBzcHUgKnNwdSk7CiBleHRlcm4gdm9pZCBzcHVfYXNzb2NpYXRlX21tKHN0cnVjdCBzcHUgKnNwdSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogaW50IHNwdV82NGtfcGFnZXNfYXZhaWxhYmxlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF82eHguUwppbmRleCA1NWNiYTRhLi5mOGNkOWZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF82eHguUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF82eHguUwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS9tbXUuaD4KIAogX0dMT0JBTChfX3NldHVwX2NwdV82MDMpCi0JbWZscglyNAorCW1mbHIJcjUKIEJFR0lOX01NVV9GVFJfU0VDVElPTgogCWxpCXIxMCwwCiAJbXRzcHIJU1BSTl9TUFJHXzYwM19MUlUscjEwCQkvKiBpbml0IFNXIExSVSB0cmFja2luZyAqLwpAQCAtMjcsNjAgKzI3LDYwIEBACiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIEVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX0ZQVV9VTkFWQUlMQUJMRSkKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCi0JbXRscglyNAorCW10bHIJcjUKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNjA0KQotCW1mbHIJcjQKKwltZmxyCXI1CiAJYmwJc2V0dXBfY29tbW9uX2NhY2hlcwogCWJsCXNldHVwXzYwNF9oaWQwCi0JbXRscglyNAorCW10bHIJcjUKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNzUwKQotCW1mbHIJcjQKKwltZmxyCXI1CiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNzUwXzc0MDBfaGlkMAotCW10bHIJcjQKKwltdGxyCXI1CiAJYmxyCiBfR0xPQkFMKF9fc2V0dXBfY3B1Xzc1MGN4KQotCW1mbHIJcjQKKwltZmxyCXI1CiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNzUwXzc0MDBfaGlkMAogCWJsCXNldHVwXzc1MGN4Ci0JbXRscglyNAorCW10bHIJcjUKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNzUwZngpCi0JbWZscglyNAorCW1mbHIJcjUKIAlibAlfX2luaXRfZnB1X3JlZ2lzdGVycwogCWJsCXNldHVwX2NvbW1vbl9jYWNoZXMKIAlibAlzZXR1cF83NTBfNzQwMF9oaWQwCiAJYmwJc2V0dXBfNzUwZngKLQltdGxyCXI0CisJbXRscglyNQogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV83NDAwKQotCW1mbHIJcjQKKwltZmxyCXI1CiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIAlibAlzZXR1cF83NDAwX3dvcmthcm91bmRzCiAJYmwJc2V0dXBfY29tbW9uX2NhY2hlcwogCWJsCXNldHVwXzc1MF83NDAwX2hpZDAKLQltdGxyCXI0CisJbXRscglyNQogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV83NDEwKQotCW1mbHIJcjQKKwltZmxyCXI1CiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIAlibAlzZXR1cF83NDEwX3dvcmthcm91bmRzCiAJYmwJc2V0dXBfY29tbW9uX2NhY2hlcwogCWJsCXNldHVwXzc1MF83NDAwX2hpZDAKIAlsaQlyMywwCiAJbXRzcHIJU1BSTl9MMkNSMixyMwotCW10bHIJcjQKKwltdGxyCXI1CiAJYmxyCiBfR0xPQkFMKF9fc2V0dXBfY3B1Xzc0NXgpCi0JbWZscglyNAorCW1mbHIJcjUKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNzQ1eF9zcGVjaWZpY3MKLQltdGxyCXI0CisJbXRscglyNQogCWJscgogCiAvKiBFbmFibGUgY2FjaGVzIGZvciA2MDMncywgNjA0LCA3NTAgJiA3NDAwICovCkBAIC0xOTQsMTAgKzE5NCwxMCBAQAogCWNyb3IJNCpjcjArZXEsNCpjcjArZXEsNCpjcjErZXEKIAljcm9yCTQqY3IwK2VxLDQqY3IwK2VxLDQqY3IyK2VxCiAJYm5lbHIKLQlsd3oJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjUpCisJbHd6CXI2LENQVV9TUEVDX0ZFQVRVUkVTKHI0KQogCWxpCXI3LENQVV9GVFJfQ0FOX05BUAogCWFuZGMJcjYscjYscjcKLQlzdHcJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjUpCisJc3R3CXI2LENQVV9TUEVDX0ZFQVRVUkVTKHI0KQogCWJscgogCiAvKiA3NTBmeCBzcGVjaWZpYwpAQCAtMjI1LDEyICsyMjUsMTIgQEAKIAlhbmRpcy4JcjExLHIxMSxMM0NSX0wzRUBoCiAJYmVxCTFmCiBFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9MM0NSKQotCWx3eglyNixDUFVfU1BFQ19GRUFUVVJFUyhyNSkKKwlsd3oJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjQpCiAJYW5kaS4JcjAscjYsQ1BVX0ZUUl9MM19ESVNBQkxFX05BUAogCWJlcQkxZgogCWxpCXI3LENQVV9GVFJfQ0FOX05BUAogCWFuZGMJcjYscjYscjcKLQlzdHcJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjUpCisJc3R3CXI2LENQVV9TUEVDX0ZFQVRVUkVTKHI0KQogMToKIAltZnNwcglyMTEsU1BSTl9ISUQwCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfZnNsX2Jvb2tlLlMKaW5kZXggODk0ZTY0Zi4uNWM1MThhZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfZnNsX2Jvb2tlLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfZnNsX2Jvb2tlLlMKQEAgLTY0LDYgKzY0LDEyIEBACiAJYmwJX19lNTAwX2ljYWNoZV9zZXR1cAogCWJsCV9fZTUwMF9kY2FjaGVfc2V0dXAKIAlibAlfX3NldHVwX2U1MDBfaXZvcnMKKyNpZmRlZiBDT05GSUdfUkFQSURJTworCS8qIEVuc3VyZSB0aGF0IFJGWEUgaXMgc2V0ICovCisJbWZzcHIJcjMsU1BSTl9ISUQxCisJb3JpcwlyMyxyMyxISUQxX1JGWEVAaAorCW10c3ByCVNQUk5fSElEMSxyMworI2VuZGlmCiAJbXRscglyNAogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV9lNTAwbWMpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKaW5kZXggYmU1YWIxOC4uZThlOTE1YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwpAQCAtMTE2LDcgKzExNiw2IEBACiAJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0lCTSwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYzY0L3Bvd2VyMyIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9SUzY0LAotCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicG93ZXIzIiwKIAl9LAogCXsJLyogUG93ZXIzKyAqLwpAQCAtMTMyLDcgKzEzMSw2IEBACiAJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0lCTSwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYzY0L3Bvd2VyMyIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9SUzY0LAotCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicG93ZXIzIiwKIAl9LAogCXsJLyogTm9ydGhzdGFyICovCkBAIC0xNDgsNyArMTQ2LDYgQEAKIAkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjNjQvcnM2NCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9SUzY0LAotCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicnM2NCIsCiAJfSwKIAl7CS8qIFB1bHNhciAqLwpAQCAtMTY0LDcgKzE2MSw2IEBACiAJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0lCTSwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYzY0L3JzNjQiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfUlM2NCwKLQkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInJzNjQiLAogCX0sCiAJewkvKiBJLXN0YXIgKi8KQEAgLTE4MCw3ICsxNzYsNiBAQAogCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19JQk0sCiAJCS5vcHJvZmlsZV9jcHVfdHlwZQk9ICJwcGM2NC9yczY0IiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX1JTNjQsCi0JCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJyczY0IiwKIAl9LAogCXsJLyogUy1zdGFyICovCkBAIC0xOTYsNyArMTkxLDYgQEAKIAkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjNjQvcnM2NCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9SUzY0LAotCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicnM2NCIsCiAJfSwKIAl7CS8qIFBvd2VyNCAqLwpAQCAtMjEyLDcgKzIwNiw2IEBACiAJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0lCTSwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYzY0L3Bvd2VyNCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9QT1dFUjQsCi0JCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwb3dlcjQiLAogCX0sCiAJewkvKiBQb3dlcjQrICovCkBAIC0yMjgsNyArMjIxLDYgQEAKIAkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjNjQvcG93ZXI0IiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX1BPV0VSNCwKLQkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBvd2VyNCIsCiAJfSwKIAl7CS8qIFBQQzk3MCAqLwpAQCAtMjQ3LDcgKzIzOSw2IEBACiAJCS5jcHVfcmVzdG9yZQkJPSBfX3Jlc3RvcmVfY3B1X3BwYzk3MCwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYzY0Lzk3MCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9QT1dFUjQsCi0JCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM5NzAiLAogCX0sCiAJewkvKiBQUEM5NzBGWCAqLwpAQCAtMjY2LDcgKzI1Nyw2IEBACiAJCS5jcHVfcmVzdG9yZQkJPSBfX3Jlc3RvcmVfY3B1X3BwYzk3MCwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYzY0Lzk3MCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9QT1dFUjQsCi0JCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM5NzAiLAogCX0sCiAJewkvKiBQUEM5NzBNUCBERDEuMCAtIG5vIERFRVBOQVAsIHVzZSByZWd1bGFyIDk3MCBpbml0ICovCkBAIC0yODUsNyArMjc1LDYgQEAKIAkJLmNwdV9yZXN0b3JlCQk9IF9fcmVzdG9yZV9jcHVfcHBjOTcwLAogCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjNjQvOTcwTVAiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfUE9XRVI0LAotCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicHBjOTcwIiwKIAl9LAogCXsJLyogUFBDOTcwTVAgKi8KQEAgLTMwNCw3ICsyOTMsNiBAQAogCQkuY3B1X3Jlc3RvcmUJCT0gX19yZXN0b3JlX2NwdV9wcGM5NzAsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZQk9ICJwcGM2NC85NzBNUCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9QT1dFUjQsCi0JCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM5NzAiLAogCX0sCiAJewkvKiBQUEM5NzBHWCAqLwpAQCAtMzIyLDcgKzMxMCw2IEBACiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfcHBjOTcwLAogCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjNjQvOTcwIiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX1BPV0VSNCwKLQkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzk3MCIsCiAJfSwKIAl7CS8qIFBvd2VyNSBHUiAqLwpAQCAtMzQzLDcgKzMzMCw2IEBACiAJCSAqLwogCQkub3Byb2ZpbGVfbW1jcmFfc2lodgk9IE1NQ1JBX1NJSFYsCiAJCS5vcHJvZmlsZV9tbWNyYV9zaXByCT0gTU1DUkFfU0lQUiwKLQkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBvd2VyNSIsCiAJfSwKIAl7CS8qIFBvd2VyNSsrICovCkBAIC0zNjAsNyArMzQ2LDYgQEAKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX1BPV0VSNCwKIAkJLm9wcm9maWxlX21tY3JhX3NpaHYJPSBNTUNSQV9TSUhWLAogCQkub3Byb2ZpbGVfbW1jcmFfc2lwcgk9IE1NQ1JBX1NJUFIsCi0JCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwb3dlcjUrIiwKIAl9LAogCXsJLyogUG93ZXI1IEdTICovCkBAIC0zNzgsNyArMzYzLDYgQEAKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX1BPV0VSNCwKIAkJLm9wcm9maWxlX21tY3JhX3NpaHYJPSBNTUNSQV9TSUhWLAogCQkub3Byb2ZpbGVfbW1jcmFfc2lwcgk9IE1NQ1JBX1NJUFIsCi0JCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwb3dlcjUrIiwKIAl9LAogCXsJLyogUE9XRVI2IGluIFA1KyBtb2RlOyAyLjA0LWNvbXBsaWFudCBwcm9jZXNzb3IgKi8KQEAgLTM5MCw3ICszNzQsNiBAQAogCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfSFBURV9UQUJMRSwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAotCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZQk9ICJwcGM2NC9pYm0tY29tcGF0LXYxIiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX1BPV0VSNCwKIAkJLnBsYXRmb3JtCQk9ICJwb3dlcjUrIiwKQEAgLTQxMyw3ICszOTYsNiBAQAogCQkub3Byb2ZpbGVfbW1jcmFfc2lwcgk9IFBPV0VSNl9NTUNSQV9TSVBSLAogCQkub3Byb2ZpbGVfbW1jcmFfY2xlYXIJPSBQT1dFUjZfTU1DUkFfVEhSTSB8CiAJCQlQT1dFUjZfTU1DUkFfT1RIRVIsCi0JCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwb3dlcjZ4IiwKIAl9LAogCXsJLyogMi4wNS1jb21wbGlhbnQgcHJvY2Vzc29yLCBpLmUuIFBvd2VyNiAiYXJjaGl0ZWN0ZWQiIG1vZGUgKi8KQEAgLTQyNSw3ICs0MDcsNiBAQAogCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfSFBURV9UQUJMRSwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAotCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZQk9ICJwcGM2NC9pYm0tY29tcGF0LXYxIiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX1BPV0VSNCwKIAkJLnBsYXRmb3JtCQk9ICJwb3dlcjYiLApAQCAtNDQwLDcgKzQyMSw2IEBACiAJCQlNTVVfRlRSX1RMQklFXzIwNiwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAotCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9QT1dFUjQsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZQk9ICJwcGM2NC9pYm0tY29tcGF0LXYxIiwKIAkJLnBsYXRmb3JtCQk9ICJwb3dlcjciLApAQCAtNDkyLDcgKzQ3Miw2IEBACiAJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0lCTSwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYzY0L2NlbGwtYmUiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfQ0VMTCwKLQkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYy1jZWxsLWJlIiwKIAl9LAogCXsJLyogUEEgU2VtaSBQQTZUICovCkBAIC01MTAsNyArNDg5LDYgQEAKIAkJLmNwdV9yZXN0b3JlCQk9IF9fcmVzdG9yZV9jcHVfcGE2dCwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYzY0L3BhNnQiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfUEE2VCwKLQkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBhNnQiLAogCX0sCiAJewkvKiBkZWZhdWx0IG1hdGNoICovCkBAIC01MjQsNyArNTAyLDYgQEAKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5udW1fcG1jcwkJPSA2LAogCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19JQk0sCi0JCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwb3dlcjQiLAogCX0KICNlbmRpZgkvKiBDT05GSUdfUFBDX0JPT0szU182NCAqLwpAQCAtMjA5OSw4ICsyMDc2LDggQEAKIAkgKiBwb2ludGVyIG9uIHBwYzY0IGFuZCBib29rZSBhcyB3ZSBhcmUgcnVubmluZyBhdCAwIGluIHJlYWwgbW9kZQogCSAqIG9uIHBwYzY0IGFuZCByZWxvY19vZmZzZXQgaXMgYWx3YXlzIDAgb24gYm9va2UuCiAJICovCi0JaWYgKHMtPmNwdV9zZXR1cCkgewotCQlzLT5jcHVfc2V0dXAob2Zmc2V0LCBzKTsKKwlpZiAodC0+Y3B1X3NldHVwKSB7CisJCXQtPmNwdV9zZXR1cChvZmZzZXQsIHQpOwogCX0KICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgfHwgQ09ORklHX0JPT0tFICovCiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoLmMKaW5kZXggODMyYzhjNC4uM2Q1NjllMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2guYwpAQCAtNDgsNyArNDgsNyBAQAogc3RhdGljIGNwdW1hc2tfdCBjcHVzX2luX2NyYXNoID0gQ1BVX01BU0tfTk9ORTsKIGNwdW1hc2tfdCBjcHVzX2luX3NyID0gQ1BVX01BU0tfTk9ORTsKIAotI2RlZmluZSBDUkFTSF9IQU5ETEVSX01BWCAyCisjZGVmaW5lIENSQVNIX0hBTkRMRVJfTUFYIDMKIC8qIE5VTEwgdGVybWluYXRlZCBsaXN0IG9mIHNodXRkb3duIGhhbmRsZXMgKi8KIHN0YXRpYyBjcmFzaF9zaHV0ZG93bl90IGNyYXNoX3NodXRkb3duX2hhbmRsZXNbQ1JBU0hfSEFORExFUl9NQVgrMV07CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNyYXNoX2hhbmRsZXJzX2xvY2spOwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJc21wX3dtYigpOwogCiAJLyoKLQkgKiBGSVhNRTogVW50aWwgd2Ugd2lsbCBoYXZlIHRoZSB3YXkgdG8gc3RvcCBvdGhlciBDUFVTcyByZWxpYWJhbGx5LAorCSAqIEZJWE1FOiBVbnRpbCB3ZSB3aWxsIGhhdmUgdGhlIHdheSB0byBzdG9wIG90aGVyIENQVXMgcmVsaWFibHksCiAJICogdGhlIGNyYXNoIENQVSB3aWxsIHNlbmQgYW4gSVBJIGFuZCB3YWl0IGZvciBvdGhlciBDUFVzIHRvCiAJICogcmVzcG9uZC4KIAkgKiBEZWxheSBvZiBhdCBsZWFzdCAxMCBzZWNvbmRzLgpAQCAtMjU0LDcyICsyNTQsNiBAQAogCWNwdXNfaW5fc3IgPSBDUFVfTUFTS19OT05FOwogfQogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NQVV9CQVNFCi0KLSNpbmNsdWRlIDxhc20vc3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3NwdV9wcml2MS5oPgotCi1zdHJ1Y3QgY3Jhc2hfc3B1X2luZm8gewotCXN0cnVjdCBzcHUgKnNwdTsKLQl1MzIgc2F2ZWRfc3B1X3J1bmNudGxfUlc7Ci0JdTMyIHNhdmVkX3NwdV9zdGF0dXNfUjsKLQl1MzIgc2F2ZWRfc3B1X25wY19SVzsKLQl1NjQgc2F2ZWRfbWZjX3NyMV9SVzsKLQl1NjQgc2F2ZWRfbWZjX2RhcjsKLQl1NjQgc2F2ZWRfbWZjX2RzaXNyOwotfTsKLQotI2RlZmluZSBDUkFTSF9OVU1fU1BVUwkxNgkvKiBFbm91Z2ggZm9yIGN1cnJlbnQgaGFyZHdhcmUgKi8KLXN0YXRpYyBzdHJ1Y3QgY3Jhc2hfc3B1X2luZm8gY3Jhc2hfc3B1X2luZm9bQ1JBU0hfTlVNX1NQVVNdOwotCi1zdGF0aWMgdm9pZCBjcmFzaF9rZXhlY19zdG9wX3NwdXModm9pZCkKLXsKLQlzdHJ1Y3Qgc3B1ICpzcHU7Ci0JaW50IGk7Ci0JdTY0IHRtcDsKLQotCWZvciAoaSA9IDA7IGkgPCBDUkFTSF9OVU1fU1BVUzsgaSsrKSB7Ci0JCWlmICghY3Jhc2hfc3B1X2luZm9baV0uc3B1KQotCQkJY29udGludWU7Ci0KLQkJc3B1ID0gY3Jhc2hfc3B1X2luZm9baV0uc3B1OwotCi0JCWNyYXNoX3NwdV9pbmZvW2ldLnNhdmVkX3NwdV9ydW5jbnRsX1JXID0KLQkJCWluX2JlMzIoJnNwdS0+cHJvYmxlbS0+c3B1X3J1bmNudGxfUlcpOwotCQljcmFzaF9zcHVfaW5mb1tpXS5zYXZlZF9zcHVfc3RhdHVzX1IgPQotCQkJaW5fYmUzMigmc3B1LT5wcm9ibGVtLT5zcHVfc3RhdHVzX1IpOwotCQljcmFzaF9zcHVfaW5mb1tpXS5zYXZlZF9zcHVfbnBjX1JXID0KLQkJCWluX2JlMzIoJnNwdS0+cHJvYmxlbS0+c3B1X25wY19SVyk7Ci0KLQkJY3Jhc2hfc3B1X2luZm9baV0uc2F2ZWRfbWZjX2RhciAgICA9IHNwdV9tZmNfZGFyX2dldChzcHUpOwotCQljcmFzaF9zcHVfaW5mb1tpXS5zYXZlZF9tZmNfZHNpc3IgID0gc3B1X21mY19kc2lzcl9nZXQoc3B1KTsKLQkJdG1wID0gc3B1X21mY19zcjFfZ2V0KHNwdSk7Ci0JCWNyYXNoX3NwdV9pbmZvW2ldLnNhdmVkX21mY19zcjFfUlcgPSB0bXA7Ci0KLQkJdG1wICY9IH5NRkNfU1RBVEUxX01BU1RFUl9SVU5fQ09OVFJPTF9NQVNLOwotCQlzcHVfbWZjX3NyMV9zZXQoc3B1LCB0bXApOwotCi0JCV9fZGVsYXkoMjAwKTsKLQl9Ci19Ci0KLXZvaWQgY3Jhc2hfcmVnaXN0ZXJfc3B1cyhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQotewotCXN0cnVjdCBzcHUgKnNwdTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoc3B1LCBsaXN0LCBmdWxsX2xpc3QpIHsKLQkJaWYgKFdBUk5fT04oc3B1LT5udW1iZXIgPj0gQ1JBU0hfTlVNX1NQVVMpKQotCQkJY29udGludWU7Ci0KLQkJY3Jhc2hfc3B1X2luZm9bc3B1LT5udW1iZXJdLnNwdSA9IHNwdTsKLQl9Ci19Ci0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfa2V4ZWNfc3RvcF9zcHVzKHZvaWQpCi17Ci19Ci0jZW5kaWYgLyogQ09ORklHX1NQVV9CQVNFICovCiAKIC8qCiAgKiBSZWdpc3RlciBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBzaHV0ZG93bi4gIE9ubHkgdXNlIHRoaXMgaWYgeW91CkBAIC00MzksOCArMzczLDYgQEAKIAljcmFzaF9zaHV0ZG93bl9jcHUgPSAtMTsKIAlfX2RlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIgPSBvbGRfaGFuZGxlcjsKIAotCWNyYXNoX2tleGVjX3N0b3Bfc3B1cygpOwotCiAJaWYgKHBwY19tZC5rZXhlY19jcHVfZG93bikKIAkJcHBjX21kLmtleGVjX2NwdV9kb3duKDEsIDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TCmluZGV4IGMyMmRjMWUuLjU2MjEyYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMKQEAgLTg4MCw3ICs4ODAsMTggQEAKIAkgKi8KIAlhbmRpLglyMTAscjksTVNSX0VFCiAJYmVxCTFmCisJLyoKKwkgKiBTaW5jZSB0aGUgZnRyYWNlIGlycXNvZmYgbGF0ZW5jeSB0cmFjZSBjaGVja3MgQ0FMTEVSX0FERFIxLAorCSAqIHdoaWNoIGlzIHRoZSBzdGFjayBmcmFtZSBoZXJlLCB3ZSBuZWVkIHRvIGZvcmNlIGEgc3RhY2sgZnJhbWUKKwkgKiBpbiBjYXNlIHdlIGNhbWUgZnJvbSB1c2VyIHNwYWNlLgorCSAqLworCXN0d3UJcjEsLTMyKHIxKQorCW1mbHIJcjAKKwlzdHcJcjAsNChyMSkKKwlzdHd1CXIxLC0zMihyMSkKIAlibAl0cmFjZV9oYXJkaXJxc19vbgorCWx3eglyMSwwKHIxKQorCWx3eglyMSwwKHIxKQogCWx3eglyOSxfTVNSKHIxKQogMToKICNlbmRpZiAvKiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlYy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKaW5kZXggZGY3ZTIwYy4uNDlhMTcwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CkBAIC00NCwxMCArNDUsNyBAQAogCiB2b2lkIG1hY2hpbmVfY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JaWYgKHBwY19tZC5tYWNoaW5lX2NyYXNoX3NodXRkb3duKQotCQlwcGNfbWQubWFjaGluZV9jcmFzaF9zaHV0ZG93bihyZWdzKTsKLQllbHNlCi0JCWRlZmF1bHRfbWFjaGluZV9jcmFzaF9zaHV0ZG93bihyZWdzKTsKKwlkZWZhdWx0X21hY2hpbmVfY3Jhc2hfc2h1dGRvd24ocmVncyk7CiB9CiAKIC8qCkBAIC02NSw4ICs2Myw2IEBACiAKIHZvaWQgbWFjaGluZV9rZXhlY19jbGVhbnVwKHN0cnVjdCBraW1hZ2UgKmltYWdlKQogewotCWlmIChwcGNfbWQubWFjaGluZV9rZXhlY19jbGVhbnVwKQotCQlwcGNfbWQubWFjaGluZV9rZXhlY19jbGVhbnVwKGltYWdlKTsKIH0KIAogdm9pZCBhcmNoX2NyYXNoX3NhdmVfdm1jb3JlaW5mbyh2b2lkKQpAQCAtODcsMTAgKzgzLDEzIEBACiAgKi8KIHZvaWQgbWFjaGluZV9rZXhlYyhzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIHsKLQlpZiAocHBjX21kLm1hY2hpbmVfa2V4ZWMpCi0JCXBwY19tZC5tYWNoaW5lX2tleGVjKGltYWdlKTsKLQllbHNlCi0JCWRlZmF1bHRfbWFjaGluZV9rZXhlYyhpbWFnZSk7CisJaW50IHNhdmVfZnRyYWNlX2VuYWJsZWQ7CisKKwlzYXZlX2Z0cmFjZV9lbmFibGVkID0gX19mdHJhY2VfZW5hYmxlZF9zYXZlKCk7CisKKwlkZWZhdWx0X21hY2hpbmVfa2V4ZWMoaW1hZ2UpOworCisJX19mdHJhY2VfZW5hYmxlZF9yZXN0b3JlKHNhdmVfZnRyYWNlX2VuYWJsZWQpOwogCiAJLyogRmFsbCBiYWNrIHRvIG5vcm1hbCByZXN0YXJ0IGlmIHdlJ3JlIHN0aWxsIGFsaXZlLiAqLwogCW1hY2hpbmVfcmVzdGFydChOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudF9mc2xfZW1iLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnRfZnNsX2VtYi5jCmluZGV4IDRkY2Y1ZjguLmIwZGM4ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudF9mc2xfZW1iLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50X2ZzbF9lbWIuYwpAQCAtNTk2LDYgKzU5Niw3IEBACiAJCQlpZiAobGVmdCA8PSAwKQogCQkJCWxlZnQgPSBwZXJpb2Q7CiAJCQlyZWNvcmQgPSAxOworCQkJZXZlbnQtPmh3Lmxhc3RfcGVyaW9kID0gZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2Q7CiAJCX0KIAkJaWYgKGxlZnQgPCAweDgwMDAwMDAwTEwpCiAJCQl2YWwgPSAweDgwMDAwMDAwTEwgLSBsZWZ0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwppbmRleCA4NDkwNmQzLi43YTFkNWNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwpAQCAtNjMxLDcgKzYzMSw3IEBACiAjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogCQlwcmludGsoIkRFQVI6ICJSRUciLCBFU1I6ICJSRUciXG4iLCByZWdzLT5kYXIsIHJlZ3MtPmRzaXNyKTsKICNlbHNlCi0JCXByaW50aygiREFSOiAiUkVHIiwgRFNJU1I6ICJSRUciXG4iLCByZWdzLT5kYXIsIHJlZ3MtPmRzaXNyKTsKKwkJcHJpbnRrKCJEQVI6ICJSRUciLCBEU0lTUjogJTA4bHhcbiIsIHJlZ3MtPmRhciwgcmVncy0+ZHNpc3IpOwogI2VuZGlmCiAJcHJpbnRrKCJUQVNLID0gJXBbJWRdICclcycgVEhSRUFEOiAlcCIsCiAJICAgICAgIGN1cnJlbnQsIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBjdXJyZW50LT5jb21tLCB0YXNrX3RocmVhZF9pbmZvKGN1cnJlbnQpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhc19mbGFzaC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX2ZsYXNoLmMKaW5kZXggMmI0NDJlNi4uYmY1ZjVjZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX2ZsYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX2ZsYXNoLmMKQEAgLTI1NiwzMSArMjU2LDE2IEBACiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcCA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlzdHJ1Y3QgcnRhc191cGRhdGVfZmxhc2hfdCAqdWY7CiAJY2hhciBtc2dbUlRBU19NU0dfTUFYTEVOXTsKLQlpbnQgbXNnbGVuOwogCi0JdWYgPSAoc3RydWN0IHJ0YXNfdXBkYXRlX2ZsYXNoX3QgKikgZHAtPmRhdGE7CisJdWYgPSBkcC0+ZGF0YTsKIAogCWlmICghc3RyY21wKGRwLT5uYW1lLCBGSVJNV0FSRV9GTEFTSF9OQU1FKSkgewogCQlnZXRfZmxhc2hfc3RhdHVzX21zZyh1Zi0+c3RhdHVzLCBtc2cpOwogCX0gZWxzZSB7CSAgIC8qIEZJUk1XQVJFX1VQREFURV9OQU1FICovCiAJCXNwcmludGYobXNnLCAiJWRcbiIsIHVmLT5zdGF0dXMpOwogCX0KLQltc2dsZW4gPSBzdHJsZW4obXNnKTsKLQlpZiAobXNnbGVuID4gY291bnQpCi0JCW1zZ2xlbiA9IGNvdW50OwogCi0JaWYgKHBwb3MgJiYgKnBwb3MgIT0gMCkKLQkJcmV0dXJuIDA7CS8qIGJlIGNoZWFwICovCi0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZiwgbXNnbGVuKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoY29weV90b191c2VyKGJ1ZiwgbXNnLCBtc2dsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChwcG9zKQotCQkqcHBvcyA9IG1zZ2xlbjsKLQlyZXR1cm4gbXNnbGVuOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwcG9zLCBtc2csIHN0cmxlbihtc2cpKTsKIH0KIAogLyogY29uc3RydWN0b3IgZm9yIGZsYXNoX2Jsb2NrX2NhY2hlICovCkBAIC0zOTQsMjYgKzM3OSwxMyBAQAogCWNoYXIgbXNnW1JUQVNfTVNHX01BWExFTl07CiAJaW50IG1zZ2xlbjsKIAotCWFyZ3NfYnVmID0gKHN0cnVjdCBydGFzX21hbmFnZV9mbGFzaF90ICopIGRwLT5kYXRhOworCWFyZ3NfYnVmID0gZHAtPmRhdGE7CiAJaWYgKGFyZ3NfYnVmID09IE5VTEwpCiAJCXJldHVybiAwOwogCiAJbXNnbGVuID0gc3ByaW50Zihtc2csICIlZFxuIiwgYXJnc19idWYtPnN0YXR1cyk7Ci0JaWYgKG1zZ2xlbiA+IGNvdW50KQotCQltc2dsZW4gPSBjb3VudDsKIAotCWlmIChwcG9zICYmICpwcG9zICE9IDApCi0JCXJldHVybiAwOwkvKiBiZSBjaGVhcCAqLwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWYsIG1zZ2xlbikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGNvcHlfdG9fdXNlcihidWYsIG1zZywgbXNnbGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAocHBvcykKLQkJKnBwb3MgPSBtc2dsZW47Ci0JcmV0dXJuIG1zZ2xlbjsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgbXNnLCBtc2dsZW4pOwogfQogCiBzdGF0aWMgc3NpemVfdCBtYW5hZ2VfZmxhc2hfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCkBAIC00OTUsMjQgKzQ2NywxMSBAQAogCWNoYXIgbXNnW1JUQVNfTVNHX01BWExFTl07CiAJaW50IG1zZ2xlbjsKIAotCWFyZ3NfYnVmID0gKHN0cnVjdCBydGFzX3ZhbGlkYXRlX2ZsYXNoX3QgKikgZHAtPmRhdGE7CisJYXJnc19idWYgPSBkcC0+ZGF0YTsKIAotCWlmIChwcG9zICYmICpwcG9zICE9IDApCi0JCXJldHVybiAwOwkvKiBiZSBjaGVhcCAqLwotCQogCW1zZ2xlbiA9IGdldF92YWxpZGF0ZV9mbGFzaF9tc2coYXJnc19idWYsIG1zZyk7Ci0JaWYgKG1zZ2xlbiA+IGNvdW50KQotCQltc2dsZW4gPSBjb3VudDsKIAotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgYnVmLCBtc2dsZW4pKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBtc2csIG1zZ2xlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKHBwb3MpCi0JCSpwcG9zID0gbXNnbGVuOwotCXJldHVybiBtc2dsZW47CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgY291bnQsIHBwb3MsIG1zZywgbXNnbGVuKTsKIH0KIAogc3RhdGljIHNzaXplX3QgdmFsaWRhdGVfZmxhc2hfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNkLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNkLmMKaW5kZXggMDQzOGY4MS4uMDQ5ZGJlYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhc2QuYwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJLyogcnRhcyBmaXhlZCBoZWFkZXIgKi8KIAlsZW4gPSA4OwogCWVyciA9IChzdHJ1Y3QgcnRhc19lcnJvcl9sb2cgKilidWY7Ci0JaWYgKGVyci0+ZXh0ZW5kZWRfbG9nX2xlbmd0aCkgeworCWlmIChlcnItPmV4dGVuZGVkICYmIGVyci0+ZXh0ZW5kZWRfbG9nX2xlbmd0aCkgewogCiAJCS8qIGV4dGVuZGVkIGhlYWRlciAqLwogCQlsZW4gKz0gZXJyLT5leHRlbmRlZF9sb2dfbGVuZ3RoOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwppbmRleCAwOWU0ZGVhLi4wOWQzMWRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwpAQCAtMjY1LDExICsyNjUsMjYgQEAKIHsKIAl1NjQgc3N0LCB1c3Q7CiAKLQlzc3QgPSBzY2FuX2Rpc3BhdGNoX2xvZyhnZXRfcGFjYSgpLT5zdGFydHRpbWVfdXNlcik7Ci0JdXN0ID0gc2Nhbl9kaXNwYXRjaF9sb2coZ2V0X3BhY2EoKS0+c3RhcnR0aW1lKTsKLQlnZXRfcGFjYSgpLT5zeXN0ZW1fdGltZSAtPSBzc3Q7Ci0JZ2V0X3BhY2EoKS0+dXNlcl90aW1lIC09IHVzdDsKLQlnZXRfcGFjYSgpLT5zdG9sZW5fdGltZSArPSB1c3QgKyBzc3Q7CisJdTggc2F2ZV9zb2Z0X2VuYWJsZWQgPSBsb2NhbF9wYWNhLT5zb2Z0X2VuYWJsZWQ7CisJdTggc2F2ZV9oYXJkX2VuYWJsZWQgPSBsb2NhbF9wYWNhLT5oYXJkX2VuYWJsZWQ7CisKKwkvKiBXZSBhcmUgY2FsbGVkIGVhcmx5IGluIHRoZSBleGNlcHRpb24gZW50cnksIGJlZm9yZQorCSAqIHNvZnQvaGFyZF9lbmFibGVkIGFyZSBzeW5jJ2VkIHRvIHRoZSBleHBlY3RlZCBzdGF0ZQorCSAqIGZvciB0aGUgZXhjZXB0aW9uLiBXZSBhcmUgaGFyZCBkaXNhYmxlZCBidXQgdGhlIFBBQ0EKKwkgKiBuZWVkcyB0byByZWZsZWN0IHRoYXQgc28gdmFyaW91cyBkZWJ1ZyBzdHVmZiBkb2Vzbid0CisJICogY29tcGxhaW4KKwkgKi8KKwlsb2NhbF9wYWNhLT5zb2Z0X2VuYWJsZWQgPSAwOworCWxvY2FsX3BhY2EtPmhhcmRfZW5hYmxlZCA9IDA7CisKKwlzc3QgPSBzY2FuX2Rpc3BhdGNoX2xvZyhsb2NhbF9wYWNhLT5zdGFydHRpbWVfdXNlcik7CisJdXN0ID0gc2Nhbl9kaXNwYXRjaF9sb2cobG9jYWxfcGFjYS0+c3RhcnR0aW1lKTsKKwlsb2NhbF9wYWNhLT5zeXN0ZW1fdGltZSAtPSBzc3Q7CisJbG9jYWxfcGFjYS0+dXNlcl90aW1lIC09IHVzdDsKKwlsb2NhbF9wYWNhLT5zdG9sZW5fdGltZSArPSB1c3QgKyBzc3Q7CisKKwlsb2NhbF9wYWNhLT5zb2Z0X2VuYWJsZWQgPSBzYXZlX3NvZnRfZW5hYmxlZDsKKwlsb2NhbF9wYWNhLT5oYXJkX2VuYWJsZWQgPSBzYXZlX2hhcmRfZW5hYmxlZDsKIH0KIAogc3RhdGljIGlubGluZSB1NjQgY2FsY3VsYXRlX3N0b2xlbl90aW1lKHU2NCBzdG9wX3RiKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCmluZGV4IDFiMmNkYzguLmJkNzRmYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKQEAgLTYyNiwxMiArNjI2LDYgQEAKIAlpZiAocmVjb3ZlciA+IDApCiAJCXJldHVybjsKIAotCWlmICh1c2VyX21vZGUocmVncykpIHsKLQkJcmVncy0+bXNyIHw9IE1TUl9SSTsKLQkJX2V4Y2VwdGlvbihTSUdCVVMsIHJlZ3MsIEJVU19BRFJFUlIsIHJlZ3MtPm5pcCk7Ci0JCXJldHVybjsKLQl9Ci0KICNpZiBkZWZpbmVkKENPTkZJR184eHgpICYmIGRlZmluZWQoQ09ORklHX1BDSSkKIAkvKiB0aGUgcXNwYW4gcGNpIHJlYWQgcm91dGluZXMgY2FuIGNhdXNlIG1hY2hpbmUgY2hlY2tzIC0tIENvcnQKIAkgKgpAQCAtNjQzLDE2ICs2MzcsMTIgQEAKIAlyZXR1cm47CiAjZW5kaWYKIAotCWlmIChkZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyKHJlZ3MpKSB7Ci0JCXJlZ3MtPm1zciB8PSBNU1JfUkk7CisJaWYgKGRlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIocmVncykpCiAJCXJldHVybjsKLQl9CiAKIAlpZiAoY2hlY2tfaW9fYWNjZXNzKHJlZ3MpKQogCQlyZXR1cm47CiAKLQlpZiAoZGVidWdnZXJfZmF1bHRfaGFuZGxlcihyZWdzKSkKLQkJcmV0dXJuOwogCWRpZSgiTWFjaGluZSBjaGVjayIsIHJlZ3MsIFNJR0JVUyk7CiAKIAkvKiBNdXN0IGRpZSBpZiB0aGUgaW50ZXJydXB0IGlzIG5vdCByZWNvdmVyYWJsZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9mZWF0dXJlLWZpeHVwcy10ZXN0LlMgYi9hcmNoL3Bvd2VycGMvbGliL2ZlYXR1cmUtZml4dXBzLXRlc3QuUwppbmRleCBjYjczNzQ4Li5mNDYxMzExIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL2ZlYXR1cmUtZml4dXBzLXRlc3QuUworKysgYi9hcmNoL3Bvd2VycGMvbGliL2ZlYXR1cmUtZml4dXBzLXRlc3QuUwpAQCAtMTcyLDYgKzE3MiwyNSBAQAogMzoJb3IJMywzLDMKIAogCisjaWYgMAorLyogVGVzdCB0aGF0IGlmIHdlIGhhdmUgYSBsYXJnZXIgZWxzZSBjYXNlIHRoZSBhc3NlbWJsZXIgc3BvdHMgaXQgYW5kCisgKiByZXBvcnRzIGFuIGVycm9yLiAjaWYgMCdlZCBzbyBhcyBub3QgdG8gYnJlYWsgdGhlIGJ1aWxkIG5vcm1hbGx5LgorICovCitmdHJfZml4dXBfdGVzdDc6CisJb3IJMSwxLDEKK0JFR0lOX0ZUUl9TRUNUSU9OCisJb3IJMiwyLDIKKwlvcgkyLDIsMgorCW9yCTIsMiwyCitGVFJfU0VDVElPTl9FTFNFCisJb3IJMywzLDMKKwlvcgkzLDMsMworCW9yCTMsMywzCisJb3IJMywzLDMKK0FMVF9GVFJfU0VDVElPTl9FTkQoMCwgMSkKKwlvcgkxLDEsMQorI2VuZGlmCisKICNkZWZpbmUJTUFLRV9NQUNST19URVNUKFRZUEUpCQkJCQkJXAogZ2xvYmwoZnRyX2ZpeHVwX3Rlc3RfICMjVFlQRSMjX21hY3JvcykJCQkJCVwKIAlvcgkxLDEsMTsJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL251bWEuYyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKaW5kZXggYmY1Y2I5MS4uZmQ0ODEyMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL251bWEuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCkBAIC0xODYsNyArMTg2LDcgQEAKIAlkYmcoInJlbW92aW5nIGNwdSAlbHUgZnJvbSBub2RlICVkXG4iLCBjcHUsIG5vZGUpOwogCiAJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdKSkgewotCQljcHVtYXNrX3NldF9jcHUoY3B1LCBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdKTsKKwkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkc6IGNwdSAlbHUgbm90IGZvdW5kIGluIG5vZGUgJWRcbiIsCiAJCSAgICAgICBjcHUsIG5vZGUpOwpAQCAtMTI4OSwxMCArMTI4OSw5IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCiAKLS8qIFZydHVhbCBQcm9jZXNzb3IgSG9tZSBOb2RlIChWUEhOKSBzdXBwb3J0ICovCisvKiBWaXJ0dWFsIFByb2Nlc3NvciBIb21lIE5vZGUgKFZQSE4pIHN1cHBvcnQgKi8KICNpZmRlZiBDT05GSUdfUFBDX1NQTFBBUgotI2RlZmluZSBWUEhOX05SX0NIQU5HRV9DVFJTICg4KQotc3RhdGljIHU4IHZwaG5fY3B1X2NoYW5nZV9jb3VudHNbTlJfQ1BVU11bVlBITl9OUl9DSEFOR0VfQ1RSU107CitzdGF0aWMgdTggdnBobl9jcHVfY2hhbmdlX2NvdW50c1tOUl9DUFVTXVtNQVhfRElTVEFOQ0VfUkVGX1BPSU5UU107CiBzdGF0aWMgY3B1bWFza190IGNwdV9hc3NvY2lhdGl2aXR5X2NoYW5nZXNfbWFzazsKIHN0YXRpYyBpbnQgdnBobl9lbmFibGVkOwogc3RhdGljIHZvaWQgc2V0X3RvcG9sb2d5X3RpbWVyKHZvaWQpOwpAQCAtMTMwMywxNiArMTMwMiwxOCBAQAogICovCiBzdGF0aWMgdm9pZCBzZXR1cF9jcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VfY291bnRlcnModm9pZCkKIHsKLQlpbnQgY3B1ID0gMDsKKwlpbnQgY3B1OworCisJLyogVGhlIFZQSE4gZmVhdHVyZSBzdXBwb3J0cyBhIG1heGltdW0gb2YgOCByZWZlcmVuY2UgcG9pbnRzICovCisJQlVJTERfQlVHX09OKE1BWF9ESVNUQU5DRV9SRUZfUE9JTlRTID4gOCk7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCWludCBpID0gMDsKKwkJaW50IGk7CiAJCXU4ICpjb3VudHMgPSB2cGhuX2NwdV9jaGFuZ2VfY291bnRzW2NwdV07CiAJCXZvbGF0aWxlIHU4ICpoeXBlcnZpc29yX2NvdW50cyA9IGxwcGFjYVtjcHVdLnZwaG5fYXNzb2NfY291bnRzOwogCi0JCWZvciAoaSA9IDA7IGkgPCBWUEhOX05SX0NIQU5HRV9DVFJTOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGRpc3RhbmNlX3JlZl9wb2ludHNfZGVwdGg7IGkrKykKIAkJCWNvdW50c1tpXSA9IGh5cGVydmlzb3JfY291bnRzW2ldOwotCQl9CiAJfQogfQogCkBAIC0xMzI5LDcgKzEzMzAsNyBAQAogICovCiBzdGF0aWMgaW50IHVwZGF0ZV9jcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VzX21hc2sodm9pZCkKIHsKLQlpbnQgY3B1ID0gMCwgbnJfY3B1cyA9IDA7CisJaW50IGNwdSwgbnJfY3B1cyA9IDA7CiAJY3B1bWFza190ICpjaGFuZ2VzID0gJmNwdV9hc3NvY2lhdGl2aXR5X2NoYW5nZXNfbWFzazsKIAogCWNwdW1hc2tfY2xlYXIoY2hhbmdlcyk7CkBAIC0xMzM5LDggKzEzNDAsOCBAQAogCQl1OCAqY291bnRzID0gdnBobl9jcHVfY2hhbmdlX2NvdW50c1tjcHVdOwogCQl2b2xhdGlsZSB1OCAqaHlwZXJ2aXNvcl9jb3VudHMgPSBscHBhY2FbY3B1XS52cGhuX2Fzc29jX2NvdW50czsKIAotCQlmb3IgKGkgPSAwOyBpIDwgVlBITl9OUl9DSEFOR0VfQ1RSUzsgaSsrKSB7Ci0JCQlpZiAoaHlwZXJ2aXNvcl9jb3VudHNbaV0gPiBjb3VudHNbaV0pIHsKKwkJZm9yIChpID0gMDsgaSA8IGRpc3RhbmNlX3JlZl9wb2ludHNfZGVwdGg7IGkrKykgeworCQkJaWYgKGh5cGVydmlzb3JfY291bnRzW2ldICE9IGNvdW50c1tpXSkgewogCQkJCWNvdW50c1tpXSA9IGh5cGVydmlzb3JfY291bnRzW2ldOwogCQkJCWNoYW5nZWQgPSAxOwogCQkJfQpAQCAtMTM1NCw4ICsxMzU1LDExIEBACiAJcmV0dXJuIG5yX2NwdXM7CiB9CiAKLS8qIDYgNjQtYml0IHJlZ2lzdGVycyB1bnBhY2tlZCBpbnRvIDEyIDMyLWJpdCBhc3NvY2lhdGl2aXR5IHZhbHVlcyAqLwotI2RlZmluZSBWUEhOX0FTU09DX0JVRlNJWkUgKDYqc2l6ZW9mKHU2NCkvc2l6ZW9mKHUzMikpCisvKgorICogNiA2NC1iaXQgcmVnaXN0ZXJzIHVucGFja2VkIGludG8gMTIgMzItYml0IGFzc29jaWF0aXZpdHkgdmFsdWVzLiBUbyBmb3JtCisgKiB0aGUgY29tcGxldGUgcHJvcGVydHkgd2UgaGF2ZSB0byBhZGQgdGhlIGxlbmd0aCBpbiB0aGUgZmlyc3QgY2VsbC4KKyAqLworI2RlZmluZSBWUEhOX0FTU09DX0JVRlNJWkUgKDYqc2l6ZW9mKHU2NCkvc2l6ZW9mKHUzMikgKyAxKQogCiAvKgogICogQ29udmVydCB0aGUgYXNzb2NpYXRpdml0eSBkb21haW4gbnVtYmVycyByZXR1cm5lZCBmcm9tIHRoZSBoeXBlcnZpc29yCkBAIC0xMzYzLDE1ICsxMzY3LDE0IEBACiAgKi8KIHN0YXRpYyBpbnQgdnBobl91bnBhY2tfYXNzb2NpYXRpdml0eShjb25zdCBsb25nICpwYWNrZWQsIHVuc2lnbmVkIGludCAqdW5wYWNrZWQpCiB7Ci0JaW50IGkgPSAwOwotCWludCBucl9hc3NvY19kb21zID0gMDsKKwlpbnQgaSwgbnJfYXNzb2NfZG9tcyA9IDA7CiAJY29uc3QgdTE2ICpmaWVsZCA9IChjb25zdCB1MTYqKSBwYWNrZWQ7CiAKICNkZWZpbmUgVlBITl9GSUVMRF9VTlVTRUQJKDB4ZmZmZikKICNkZWZpbmUgVlBITl9GSUVMRF9NU0IJCSgweDgwMDApCiAjZGVmaW5lIFZQSE5fRklFTERfTUFTSwkJKH5WUEhOX0ZJRUxEX01TQikKIAotCWZvciAoaSA9IDA7IGkgPCBWUEhOX0FTU09DX0JVRlNJWkU7IGkrKykgeworCWZvciAoaSA9IDE7IGkgPCBWUEhOX0FTU09DX0JVRlNJWkU7IGkrKykgewogCQlpZiAoKmZpZWxkID09IFZQSE5fRklFTERfVU5VU0VEKSB7CiAJCQkvKiBBbGwgc2lnbmlmaWNhbnQgZmllbGRzIHByb2Nlc3NlZCwgYW5kIHJlbWFpbmluZwogCQkJICogZmllbGRzIGNvbnRhaW4gdGhlIHJlc2VydmVkIHZhbHVlIG9mIGFsbCAxJ3MuCkBAIC0xMzc5LDE0ICsxMzgyLDEyIEBACiAJCQkgKi8KIAkJCXVucGFja2VkW2ldID0gKigodTMyKilmaWVsZCk7CiAJCQlmaWVsZCArPSAyOwotCQl9Ci0JCWVsc2UgaWYgKCpmaWVsZCAmIFZQSE5fRklFTERfTVNCKSB7CisJCX0gZWxzZSBpZiAoKmZpZWxkICYgVlBITl9GSUVMRF9NU0IpIHsKIAkJCS8qIERhdGEgaXMgaW4gdGhlIGxvd2VyIDE1IGJpdHMgb2YgdGhpcyBmaWVsZCAqLwogCQkJdW5wYWNrZWRbaV0gPSAqZmllbGQgJiBWUEhOX0ZJRUxEX01BU0s7CiAJCQlmaWVsZCsrOwogCQkJbnJfYXNzb2NfZG9tcysrOwotCQl9Ci0JCWVsc2UgeworCQl9IGVsc2UgewogCQkJLyogRGF0YSBpcyBpbiB0aGUgbG93ZXIgMTUgYml0cyBvZiB0aGlzIGZpZWxkCiAJCQkgKiBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgbmV4dCAxNiBiaXQgZmllbGQKIAkJCSAqLwpAQCAtMTM5Niw2ICsxMzk3LDkgQEAKIAkJfQogCX0KIAorCS8qIFRoZSBmaXJzdCBjZWxsIGNvbnRhaW5zIHRoZSBsZW5ndGggb2YgdGhlIHByb3BlcnR5ICovCisJdW5wYWNrZWRbMF0gPSBucl9hc3NvY19kb21zOworCiAJcmV0dXJuIG5yX2Fzc29jX2RvbXM7CiB9CiAKQEAgLTE0MDUsNyArMTQwOSw3IEBACiAgKi8KIHN0YXRpYyBsb25nIGhjYWxsX3ZwaG4odW5zaWduZWQgbG9uZyBjcHUsIHVuc2lnbmVkIGludCAqYXNzb2NpYXRpdml0eSkKIHsKLQlsb25nIHJjID0gMDsKKwlsb25nIHJjOwogCWxvbmcgcmV0YnVmW1BMUEFSX0hDQUxMOV9CVUZTSVpFXSA9IHswfTsKIAl1NjQgZmxhZ3MgPSAxOwogCWludCBod2NwdSA9IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoY3B1KTsKQEAgLTE0MTksNyArMTQyMyw3IEBACiBzdGF0aWMgbG9uZyB2cGhuX2dldF9hc3NvY2lhdGl2aXR5KHVuc2lnbmVkIGxvbmcgY3B1LAogCQkJCQl1bnNpZ25lZCBpbnQgKmFzc29jaWF0aXZpdHkpCiB7Ci0JbG9uZyByYyA9IDA7CisJbG9uZyByYzsKIAogCXJjID0gaGNhbGxfdnBobihjcHUsIGFzc29jaWF0aXZpdHkpOwogCkBAIC0xNDQ1LDkgKzE0NDksOSBAQAogICovCiBpbnQgYXJjaF91cGRhdGVfY3B1X3RvcG9sb2d5KHZvaWQpCiB7Ci0JaW50IGNwdSA9IDAsIG5pZCA9IDAsIG9sZF9uaWQgPSAwOworCWludCBjcHUsIG5pZCwgb2xkX25pZDsKIAl1bnNpZ25lZCBpbnQgYXNzb2NpYXRpdml0eVtWUEhOX0FTU09DX0JVRlNJWkVdID0gezB9OwotCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYgPSBOVUxMOworCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXY7CiAKIAlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIGNwdV9hc3NvY2lhdGl2aXR5X2NoYW5nZXNfbWFzaykgewogCQl2cGhuX2dldF9hc3NvY2lhdGl2aXR5KGNwdSwgYXNzb2NpYXRpdml0eSk7CkBAIC0xNTEyLDcgKzE1MTYsOCBAQAogewogCWludCByYyA9IDA7CiAKLQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9WUEhOKSkgeworCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX1ZQSE4pICYmCisJICAgIGdldF9scHBhY2EoKS0+c2hhcmVkX3Byb2MpIHsKIAkJdnBobl9lbmFibGVkID0gMTsKIAkJc2V0dXBfY3B1X2Fzc29jaWF0aXZpdHlfY2hhbmdlX2NvdW50ZXJzKCk7CiAJCWluaXRfdGltZXJfZGVmZXJyYWJsZSgmdG9wb2xvZ3lfdGltZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMHhfcmRiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMweF9yZGIuYwppbmRleCA2NjFkMzU0Li5kMGM0ZTE1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMweF9yZGIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMweF9yZGIuYwpAQCAtNTcsMTIgKzU3LDEyIEBACiAJaXBpY19zZXRfZGVmYXVsdF9wcmlvcml0eSgpOwogfQogCi1zdHJ1Y3QgY29uc3QgY2hhciAqYm9hcmRbXSBfX2luaXRkYXRhID0geworc3RhdGljIGNvbnN0IGNoYXIgKmJvYXJkW10gX19pbml0ZGF0YSA9IHsKIAkiTVBDODMwOFJEQiIsCiAJImZzbCxtcGM4MzA4cmRiIiwKIAkiZGVueCxtcGM4MzA4X3AxbSIsCiAJTlVMTAotfQorfTsKIAogLyoKICAqIENhbGxlZCB2ZXJ5IGVhcmx5LCBNTVUgaXMgb2ZmLCBkZXZpY2UtdHJlZSBpc24ndCB1bmZsYXR0ZW5lZApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMXhfcmRiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMxeF9yZGIuYwppbmRleCBiNTRjZDczLi5mODU5ZWFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMxeF9yZGIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMxeF9yZGIuYwpAQCAtNjAsMTEgKzYwLDExIEBACiAJaXBpY19zZXRfZGVmYXVsdF9wcmlvcml0eSgpOwogfQogCi1zdHJ1Y3QgY29uc3QgY2hhciAqYm9hcmRbXSBfX2luaXRkYXRhID0geworc3RhdGljIGNvbnN0IGNoYXIgKmJvYXJkW10gX19pbml0ZGF0YSA9IHsKIAkiTVBDODMxM0VSREIiLAogCSJmc2wsbXBjODMxNWVyZGIiLAogCU5VTEwKLX0KK307CiAKIC8qCiAgKiBDYWxsZWQgdmVyeSBlYXJseSwgTU1VIGlzIG9mZiwgZGV2aWNlLXRyZWUgaXNuJ3QgdW5mbGF0dGVuZWQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4M3h4LmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODN4eC5oCmluZGV4IDBmZWE4ODEuLjgyYTQzNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4M3h4LmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzeHguaApAQCAtMzUsNiArMzUsOCBAQAogCiAvKiBzeXN0ZW0gaS9vIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaGlnaCAqLwogI2RlZmluZSBNUEM4M1hYX1NJQ1JIX09GRlMgICAgICAgICAweDExOAorI2RlZmluZSBNUEM4MzA4X1NJQ1JIX1VTQl9NQVNLICAgICAweDAwMGMwMDAwCisjZGVmaW5lIE1QQzgzMDhfU0lDUkhfVVNCX1VMUEkgICAgIDB4MDAwNDAwMDAKICNkZWZpbmUgTVBDODM0WF9TSUNSSF9VU0JfVVRNSSAgICAgMHgwMDAyMDAwMAogI2RlZmluZSBNUEM4MzFYX1NJQ1JIX1VTQl9NQVNLICAgICAweDAwMDAwMGUwCiAjZGVmaW5lIE1QQzgzMVhfU0lDUkhfVVNCX1VMUEkgICAgIDB4MDAwMDAwYTAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC91c2IuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC91c2IuYwppbmRleCAzYmE0YmI3Li4yYzY0MTY0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvdXNiLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3VzYi5jCkBAIC0xMjcsNyArMTI3LDggQEAKIAogCS8qIENvbmZpZ3VyZSBjbG9jayAqLwogCWltbXJfbm9kZSA9IG9mX2dldF9wYXJlbnQobnApOwotCWlmIChpbW1yX25vZGUgJiYgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoaW1tcl9ub2RlLCAiZnNsLG1wYzgzMTUtaW1tciIpKQorCWlmIChpbW1yX25vZGUgJiYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGltbXJfbm9kZSwgImZzbCxtcGM4MzE1LWltbXIiKSB8fAorCQkJb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoaW1tcl9ub2RlLCAiZnNsLG1wYzgzMDgtaW1tciIpKSkKIAkJY2xyc2V0Yml0c19iZTMyKGltbWFwICsgTVBDODNYWF9TQ0NSX09GRlMsCiAJCSAgICAgICAgICAgICAgICBNUEM4MzE1X1NDQ1JfVVNCX01BU0ssCiAJCSAgICAgICAgICAgICAgICBNUEM4MzE1X1NDQ1JfVVNCX0RSQ01fMDEpOwpAQCAtMTM4LDcgKzEzOSwxMSBAQAogCiAJLyogQ29uZmlndXJlIHBpbiBtdXggZm9yIFVMUEkuICBUaGVyZSBpcyBubyBwaW4gbXV4IGZvciBVVE1JICovCiAJaWYgKHByb3AgJiYgIXN0cmNtcChwcm9wLCAidWxwaSIpKSB7Ci0JCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShpbW1yX25vZGUsICJmc2wsbXBjODMxNS1pbW1yIikpIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGltbXJfbm9kZSwgImZzbCxtcGM4MzA4LWltbXIiKSkgeworCQkJY2xyc2V0Yml0c19iZTMyKGltbWFwICsgTVBDODNYWF9TSUNSSF9PRkZTLAorCQkJCQlNUEM4MzA4X1NJQ1JIX1VTQl9NQVNLLAorCQkJCQlNUEM4MzA4X1NJQ1JIX1VTQl9VTFBJKTsKKwkJfSBlbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShpbW1yX25vZGUsICJmc2wsbXBjODMxNS1pbW1yIikpIHsKIAkJCWNscnNldGJpdHNfYmUzMihpbW1hcCArIE1QQzgzWFhfU0lDUkxfT0ZGUywKIAkJCQkJTVBDODMxNV9TSUNSTF9VU0JfTUFTSywKIAkJCQkJTVBDODMxNV9TSUNSTF9VU0JfVUxQSSk7CkBAIC0xNzMsNiArMTc4LDkgQEAKIAkJICAgICAhc3RyY21wKHByb3AsICJ1dG1pIikpKSB7CiAJCXUzMiByZWZzZWw7CiAKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGltbXJfbm9kZSwgImZzbCxtcGM4MzA4LWltbXIiKSkKKwkJCWdvdG8gb3V0OworCiAJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShpbW1yX25vZGUsICJmc2wsbXBjODMxNS1pbW1yIikpCiAJCQlyZWZzZWwgPSBDT05UUk9MX1JFRlNFTF8yNE1IWjsKIAkJZWxzZQpAQCAtMTg2LDkgKzE5NCwxMSBAQAogCQl0ZW1wID0gQ09OVFJPTF9QSFlfQ0xLX1NFTF9VTFBJOwogI2lmZGVmIENPTkZJR19VU0JfT1RHCiAJCS8qIFNldCBPVEdfUE9SVCAqLwotCQlkcl9tb2RlID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZHJfbW9kZSIsIE5VTEwpOwotCQlpZiAoZHJfbW9kZSAmJiAhc3RyY21wKGRyX21vZGUsICJvdGciKSkKLQkJCXRlbXAgfD0gQ09OVFJPTF9PVEdfUE9SVDsKKwkJaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShpbW1yX25vZGUsICJmc2wsbXBjODMwOC1pbW1yIikpIHsKKwkJCWRyX21vZGUgPSBvZl9nZXRfcHJvcGVydHkobnAsICJkcl9tb2RlIiwgTlVMTCk7CisJCQlpZiAoZHJfbW9kZSAmJiAhc3RyY21wKGRyX21vZGUsICJvdGciKSkKKwkJCQl0ZW1wIHw9IENPTlRST0xfT1RHX1BPUlQ7CisJCX0KICNlbmRpZiAvKiBDT05GSUdfVVNCX09URyAqLwogCQlvdXRfYmUzMih1c2JfcmVncyArIEZTTF9VU0IyX0NPTlRST0xfT0ZGUywgdGVtcCk7CiAJfSBlbHNlIHsKQEAgLTE5Niw2ICsyMDYsNyBAQAogCQlyZXQgPSAtRUlOVkFMOwogCX0KIAorb3V0OgogCWlvdW5tYXAodXNiX3JlZ3MpOwogCW9mX25vZGVfcHV0KG5wKTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NwdWZyZXFfc3B1ZGVtYW5kLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY3B1ZnJlcV9zcHVkZW1hbmQuYwppbmRleCA5NjhjMWMwLi5kODA5ODM2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY3B1ZnJlcV9zcHVkZW1hbmQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY3B1ZnJlcV9zcHVkZW1hbmQuYwpAQCAtMzksOCArMzksNiBAQAogfTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc3B1X2dvdl9pbmZvX3N0cnVjdCwgc3B1X2dvdl9pbmZvKTsKIAotc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprc3B1Z292X3dxOwotCiBzdGF0aWMgaW50IGNhbGNfZnJlcShzdHJ1Y3Qgc3B1X2dvdl9pbmZvX3N0cnVjdCAqaW5mbykKIHsKIAlpbnQgY3B1OwpAQCAtNzEsMTQgKzY5LDE0IEBACiAJX19jcHVmcmVxX2RyaXZlcl90YXJnZXQoaW5mby0+cG9saWN5LCB0YXJnZXRfZnJlcSwgQ1BVRlJFUV9SRUxBVElPTl9IKTsKIAogCWRlbGF5ID0gdXNlY3NfdG9famlmZmllcyhpbmZvLT5wb2xsX2ludCk7Ci0JcXVldWVfZGVsYXllZF93b3JrX29uKGluZm8tPnBvbGljeS0+Y3B1LCBrc3B1Z292X3dxLCAmaW5mby0+d29yaywgZGVsYXkpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihpbmZvLT5wb2xpY3ktPmNwdSwgJmluZm8tPndvcmssIGRlbGF5KTsKIH0KIAogc3RhdGljIHZvaWQgc3B1X2dvdl9pbml0X3dvcmsoc3RydWN0IHNwdV9nb3ZfaW5mb19zdHJ1Y3QgKmluZm8pCiB7CiAJaW50IGRlbGF5ID0gdXNlY3NfdG9famlmZmllcyhpbmZvLT5wb2xsX2ludCk7CiAJSU5JVF9ERUxBWUVEX1dPUktfREVGRVJSQUJMRSgmaW5mby0+d29yaywgc3B1X2dvdl93b3JrKTsKLQlxdWV1ZV9kZWxheWVkX3dvcmtfb24oaW5mby0+cG9saWN5LT5jcHUsIGtzcHVnb3Zfd3EsICZpbmZvLT53b3JrLCBkZWxheSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGluZm8tPnBvbGljeS0+Y3B1LCAmaW5mby0+d29yaywgZGVsYXkpOwogfQogCiBzdGF0aWMgdm9pZCBzcHVfZ292X2NhbmNlbF93b3JrKHN0cnVjdCBzcHVfZ292X2luZm9fc3RydWN0ICppbmZvKQpAQCAtMTUyLDI3ICsxNTAsMTUgQEAKIHsKIAlpbnQgcmV0OwogCi0Ja3NwdWdvdl93cSA9IGNyZWF0ZV93b3JrcXVldWUoImtzcHVnb3YiKTsKLQlpZiAoIWtzcHVnb3Zfd3EpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjcmVhdGlvbiBvZiBrc3B1Z292IGZhaWxlZFxuIik7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0OwotCX0KLQogCXJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfZ292ZXJub3IoJnNwdV9nb3Zlcm5vcik7Ci0JaWYgKHJldCkgeworCWlmIChyZXQpCiAJCXByaW50ayhLRVJOX0VSUiAicmVnaXN0cmF0aW9uIG9mIGdvdmVybm9yIGZhaWxlZFxuIik7Ci0JCWRlc3Ryb3lfd29ya3F1ZXVlKGtzcHVnb3Zfd3EpOwotCQlnb3RvIG91dDsKLQl9Ci1vdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNwdV9nb3ZfZXhpdCh2b2lkKQogewogCWNwdWZyZXFfdW5yZWdpc3Rlcl9nb3Zlcm5vcigmc3B1X2dvdmVybm9yKTsKLQlkZXN0cm95X3dvcmtxdWV1ZShrc3B1Z292X3dxKTsKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcXBhY2Vfc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9xcGFjZV9zZXR1cC5jCmluZGV4IDFiNTc0OTAuLmQzMWM1OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9xcGFjZV9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9xcGFjZV9zZXR1cC5jCkBAIC0xNDUsOSArMTQ1LDQgQEAKIAkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKIAkucHJvZ3Jlc3MJCT0gcXBhY2VfcHJvZ3Jlc3MsCiAJLmluaXRfSVJRCQk9IGlpY19pbml0X0lSUSwKLSNpZmRlZiBDT05GSUdfS0VYRUMKLQkubWFjaGluZV9rZXhlYwkJPSBkZWZhdWx0X21hY2hpbmVfa2V4ZWMsCi0JLm1hY2hpbmVfa2V4ZWNfcHJlcGFyZQk9IGRlZmF1bHRfbWFjaGluZV9rZXhlY19wcmVwYXJlLAotCS5tYWNoaW5lX2NyYXNoX3NodXRkb3duCT0gZGVmYXVsdF9tYWNoaW5lX2NyYXNoX3NodXRkb3duLAotI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2Jhc2UuYwppbmRleCA4NTQ3ZTg2Li5hY2ZhY2NlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2Jhc2UuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2Jhc2UuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGFzbS9zcHVfY3NhLmg+CiAjaW5jbHVkZSA8YXNtL3htb24uaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9rZXhlYy5oPgogCiBjb25zdCBzdHJ1Y3Qgc3B1X21hbmFnZW1lbnRfb3BzICpzcHVfbWFuYWdlbWVudF9vcHM7CiBFWFBPUlRfU1lNQk9MX0dQTChzcHVfbWFuYWdlbWVudF9vcHMpOwpAQCAtNzI3LDYgKzcyOCw3NSBAQAogCiBzdGF0aWMgU1lTREVWX0FUVFIoc3RhdCwgMDY0NCwgc3B1X3N0YXRfc2hvdywgTlVMTCk7CiAKKyNpZmRlZiBDT05GSUdfS0VYRUMKKworc3RydWN0IGNyYXNoX3NwdV9pbmZvIHsKKwlzdHJ1Y3Qgc3B1ICpzcHU7CisJdTMyIHNhdmVkX3NwdV9ydW5jbnRsX1JXOworCXUzMiBzYXZlZF9zcHVfc3RhdHVzX1I7CisJdTMyIHNhdmVkX3NwdV9ucGNfUlc7CisJdTY0IHNhdmVkX21mY19zcjFfUlc7CisJdTY0IHNhdmVkX21mY19kYXI7CisJdTY0IHNhdmVkX21mY19kc2lzcjsKK307CisKKyNkZWZpbmUgQ1JBU0hfTlVNX1NQVVMJMTYJLyogRW5vdWdoIGZvciBjdXJyZW50IGhhcmR3YXJlICovCitzdGF0aWMgc3RydWN0IGNyYXNoX3NwdV9pbmZvIGNyYXNoX3NwdV9pbmZvW0NSQVNIX05VTV9TUFVTXTsKKworc3RhdGljIHZvaWQgY3Jhc2hfa2V4ZWNfc3RvcF9zcHVzKHZvaWQpCit7CisJc3RydWN0IHNwdSAqc3B1OworCWludCBpOworCXU2NCB0bXA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ1JBU0hfTlVNX1NQVVM7IGkrKykgeworCQlpZiAoIWNyYXNoX3NwdV9pbmZvW2ldLnNwdSkKKwkJCWNvbnRpbnVlOworCisJCXNwdSA9IGNyYXNoX3NwdV9pbmZvW2ldLnNwdTsKKworCQljcmFzaF9zcHVfaW5mb1tpXS5zYXZlZF9zcHVfcnVuY250bF9SVyA9CisJCQlpbl9iZTMyKCZzcHUtPnByb2JsZW0tPnNwdV9ydW5jbnRsX1JXKTsKKwkJY3Jhc2hfc3B1X2luZm9baV0uc2F2ZWRfc3B1X3N0YXR1c19SID0KKwkJCWluX2JlMzIoJnNwdS0+cHJvYmxlbS0+c3B1X3N0YXR1c19SKTsKKwkJY3Jhc2hfc3B1X2luZm9baV0uc2F2ZWRfc3B1X25wY19SVyA9CisJCQlpbl9iZTMyKCZzcHUtPnByb2JsZW0tPnNwdV9ucGNfUlcpOworCisJCWNyYXNoX3NwdV9pbmZvW2ldLnNhdmVkX21mY19kYXIgICAgPSBzcHVfbWZjX2Rhcl9nZXQoc3B1KTsKKwkJY3Jhc2hfc3B1X2luZm9baV0uc2F2ZWRfbWZjX2RzaXNyICA9IHNwdV9tZmNfZHNpc3JfZ2V0KHNwdSk7CisJCXRtcCA9IHNwdV9tZmNfc3IxX2dldChzcHUpOworCQljcmFzaF9zcHVfaW5mb1tpXS5zYXZlZF9tZmNfc3IxX1JXID0gdG1wOworCisJCXRtcCAmPSB+TUZDX1NUQVRFMV9NQVNURVJfUlVOX0NPTlRST0xfTUFTSzsKKwkJc3B1X21mY19zcjFfc2V0KHNwdSwgdG1wKTsKKworCQlfX2RlbGF5KDIwMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjcmFzaF9yZWdpc3Rlcl9zcHVzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IHNwdSAqc3B1OworCWludCByZXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNwdSwgbGlzdCwgZnVsbF9saXN0KSB7CisJCWlmIChXQVJOX09OKHNwdS0+bnVtYmVyID49IENSQVNIX05VTV9TUFVTKSkKKwkJCWNvbnRpbnVlOworCisJCWNyYXNoX3NwdV9pbmZvW3NwdS0+bnVtYmVyXS5zcHUgPSBzcHU7CisJfQorCisJcmV0ID0gY3Jhc2hfc2h1dGRvd25fcmVnaXN0ZXIoJmNyYXNoX2tleGVjX3N0b3Bfc3B1cyk7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgcmVnaXN0ZXIgU1BVIGNyYXNoIGhhbmRsZXIiKTsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcmFzaF9yZWdpc3Rlcl9zcHVzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBfX2luaXQgaW5pdF9zcHVfYmFzZSh2b2lkKQogewogCWludCBpLCByZXQgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKaW5kZXggMDJmN2IxMS4uM2M3YzNmOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCkBAIC0yMTksMjQgKzIxOSwxNyBAQAogCWxvZmZfdCBwb3MgPSAqcHBvczsKIAlpbnQgcmV0OwogCi0JaWYgKHBvcyA8IDApCi0JCXJldHVybiAtRUlOVkFMOwogCWlmIChwb3MgPiBMU19TSVpFKQogCQlyZXR1cm4gLUVGQklHOwotCWlmIChzaXplID4gTFNfU0laRSAtIHBvcykKLQkJc2l6ZSA9IExTX1NJWkUgLSBwb3M7CiAKIAlyZXQgPSBzcHVfYWNxdWlyZShjdHgpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAlsb2NhbF9zdG9yZSA9IGN0eC0+b3BzLT5nZXRfbHMoY3R4KTsKLQlyZXQgPSBjb3B5X2Zyb21fdXNlcihsb2NhbF9zdG9yZSArIHBvcywgYnVmZmVyLCBzaXplKTsKKwlzaXplID0gc2ltcGxlX3dyaXRlX3RvX2J1ZmZlcihsb2NhbF9zdG9yZSwgTFNfU0laRSwgcHBvcywgYnVmZmVyLCBzaXplKTsKIAlzcHVfcmVsZWFzZShjdHgpOwogCi0JaWYgKHJldCkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JKnBwb3MgPSBwb3MgKyBzaXplOwogCXJldHVybiBzaXplOwogfQogCkBAIC01NzQsMTggKzU2NywxNSBAQAogCWlmICgqcG9zID49IHNpemVvZihsc2NzYS0+Z3BycykpCiAJCXJldHVybiAtRUZCSUc7CiAKLQlzaXplID0gbWluX3Qoc3NpemVfdCwgc2l6ZW9mKGxzY3NhLT5ncHJzKSAtICpwb3MsIHNpemUpOwotCSpwb3MgKz0gc2l6ZTsKLQogCXJldCA9IHNwdV9hY3F1aXJlX3NhdmVkKGN0eCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IGNvcHlfZnJvbV91c2VyKChjaGFyICopbHNjc2EtPmdwcnMgKyAqcG9zIC0gc2l6ZSwKLQkJCSAgICAgYnVmZmVyLCBzaXplKSA/IC1FRkFVTFQgOiBzaXplOworCXNpemUgPSBzaW1wbGVfd3JpdGVfdG9fYnVmZmVyKGxzY3NhLT5ncHJzLCBzaXplb2YobHNjc2EtPmdwcnMpLCBwb3MsCisJCQkJCWJ1ZmZlciwgc2l6ZSk7CiAKIAlzcHVfcmVsZWFzZV9zYXZlZChjdHgpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIHNpemU7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwdWZzX3JlZ3NfZm9wcyA9IHsKQEAgLTYzMCwxOCArNjIwLDE1IEBACiAJaWYgKCpwb3MgPj0gc2l6ZW9mKGxzY3NhLT5mcGNyKSkKIAkJcmV0dXJuIC1FRkJJRzsKIAotCXNpemUgPSBtaW5fdChzc2l6ZV90LCBzaXplb2YobHNjc2EtPmZwY3IpIC0gKnBvcywgc2l6ZSk7Ci0KIAlyZXQgPSBzcHVfYWNxdWlyZV9zYXZlZChjdHgpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQkqcG9zICs9IHNpemU7Ci0JcmV0ID0gY29weV9mcm9tX3VzZXIoKGNoYXIgKikmbHNjc2EtPmZwY3IgKyAqcG9zIC0gc2l6ZSwKLQkJCSAgICAgYnVmZmVyLCBzaXplKSA/IC1FRkFVTFQgOiBzaXplOworCXNpemUgPSBzaW1wbGVfd3JpdGVfdG9fYnVmZmVyKCZsc2NzYS0+ZnBjciwgc2l6ZW9mKGxzY3NhLT5mcGNyKSwgcG9zLAorCQkJCQlidWZmZXIsIHNpemUpOwogCiAJc3B1X3JlbGVhc2Vfc2F2ZWQoY3R4KTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBzaXplOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcHVmc19mcGNyX2ZvcHMgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2dhbWVjdWJlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2dhbWVjdWJlLmMKaW5kZXggMTEwNmZkOS4uYTEzOGUxNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9nYW1lY3ViZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvZ2FtZWN1YmUuYwpAQCAtNzUsMTQgKzc1LDYgQEAKIAlmbGlwcGVyX3F1aWVzY2UoKTsKIH0KIAotI2lmZGVmIENPTkZJR19LRVhFQwotc3RhdGljIGludCBnYW1lY3ViZV9rZXhlY19wcmVwYXJlKHN0cnVjdCBraW1hZ2UgKmltYWdlKQotewotCXJldHVybiAwOwotfQotI2VuZGlmIC8qIENPTkZJR19LRVhFQyAqLwotCi0KIGRlZmluZV9tYWNoaW5lKGdhbWVjdWJlKSB7CiAJLm5hbWUJCQk9ICJnYW1lY3ViZSIsCiAJLnByb2JlCQkJPSBnYW1lY3ViZV9wcm9iZSwKQEAgLTk1LDkgKzg3LDYgQEAKIAkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKIAkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKIAkubWFjaGluZV9zaHV0ZG93bgk9IGdhbWVjdWJlX3NodXRkb3duLAotI2lmZGVmIENPTkZJR19LRVhFQwotCS5tYWNoaW5lX2tleGVjX3ByZXBhcmUJPSBnYW1lY3ViZV9rZXhlY19wcmVwYXJlLAotI2VuZGlmCiB9OwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvd2lpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L3dpaS5jCmluZGV4IDY0OTQ3M2EuLjFiNWRjMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvd2lpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC93aWkuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogI2luY2x1ZGUgPG1tL21tdV9kZWNsLmg+CkBAIC0yMjYsMTMgKzIyNSw2IEBACiAJZmxpcHBlcl9xdWllc2NlKCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfS0VYRUMKLXN0YXRpYyBpbnQgd2lpX21hY2hpbmVfa2V4ZWNfcHJlcGFyZShzdHJ1Y3Qga2ltYWdlICppbWFnZSkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfS0VYRUMgKi8KLQogZGVmaW5lX21hY2hpbmUod2lpKSB7CiAJLm5hbWUJCQk9ICJ3aWkiLAogCS5wcm9iZQkJCT0gd2lpX3Byb2JlLApAQCAtMjQ2LDkgKzIzOCw2IEBACiAJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCiAJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCiAJLm1hY2hpbmVfc2h1dGRvd24JPSB3aWlfc2h1dGRvd24sCi0jaWZkZWYgQ09ORklHX0tFWEVDCi0JLm1hY2hpbmVfa2V4ZWNfcHJlcGFyZQk9IHdpaV9tYWNoaW5lX2tleGVjX3ByZXBhcmUsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHdpaV9vZl9idXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL0tjb25maWcKaW5kZXggNDdhMjBjZi4uZTViYzlmNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL0tjb25maWcKQEAgLTIsNyArMiw3IEBACiAJYm9vbCAiSUJNIExlZ2FjeSBpU2VyaWVzIgogCWRlcGVuZHMgb24gUFBDNjQgJiYgUFBDX0JPT0szUwogCXNlbGVjdCBQUENfSU5ESVJFQ1RfSU8KLQlzZWxlY3QgUFBDX1BDSV9DSE9JQ0UgaWYgRU1CRURERUQKKwlzZWxlY3QgUFBDX1BDSV9DSE9JQ0UgaWYgRVhQRVJUCiAKIG1lbnUgImlTZXJpZXMgZGV2aWNlIGRyaXZlcnMiCiAJZGVwZW5kcyBvbiBQUENfSVNFUklFUwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZwppbmRleCA1ZDFiNzQzLi41YjNkYTRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZwpAQCAtMTAsNyArMTAsNyBAQAogCXNlbGVjdCBSVEFTX0VSUk9SX0xPR0dJTkcKIAlzZWxlY3QgUFBDX1VEQkdfMTY1NTAKIAlzZWxlY3QgUFBDX05BVElWRQotCXNlbGVjdCBQUENfUENJX0NIT0lDRSBpZiBFTUJFRERFRAorCXNlbGVjdCBQUENfUENJX0NIT0lDRSBpZiBFWFBFUlQKIAlkZWZhdWx0IHkKIAogY29uZmlnIFBQQ19TUExQQVIKQEAgLTI0LDkgKzI0LDkgQEAKIAkgIHR3byBvciBtb3JlIHBhcnRpdGlvbnMuCiAKIGNvbmZpZyBFRUgKLQlib29sICJQQ0kgRXh0ZW5kZWQgRXJyb3IgSGFuZGxpbmcgKEVFSCkiIGlmIEVNQkVEREVECisJYm9vbCAiUENJIEV4dGVuZGVkIEVycm9yIEhhbmRsaW5nIChFRUgpIiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIFBQQ19QU0VSSUVTICYmIFBDSQotCWRlZmF1bHQgeSBpZiAhRU1CRURERUQKKwlkZWZhdWx0IHkgaWYgIUVYUEVSVAogCiBjb25maWcgUFNFUklFU19NU0kKICAgICAgICBib29sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMva2V4ZWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9rZXhlYy5jCmluZGV4IDUzY2JkNTMuLjc3ZDM4YTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9rZXhlYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9rZXhlYy5jCkBAIC02MSwxMyArNjEsMyBAQAogewogCXBwY19tZC5rZXhlY19jcHVfZG93biA9IHBzZXJpZXNfa2V4ZWNfY3B1X2Rvd25feGljczsKIH0KLQotc3RhdGljIGludCBfX2luaXQgcHNlcmllc19rZXhlY19zZXR1cCh2b2lkKQotewotCXBwY19tZC5tYWNoaW5lX2tleGVjID0gZGVmYXVsdF9tYWNoaW5lX2tleGVjOwotCXBwY19tZC5tYWNoaW5lX2tleGVjX3ByZXBhcmUgPSBkZWZhdWx0X21hY2hpbmVfa2V4ZWNfcHJlcGFyZTsKLQlwcGNfbWQubWFjaGluZV9jcmFzaF9zaHV0ZG93biA9IGRlZmF1bHRfbWFjaGluZV9jcmFzaF9zaHV0ZG93bjsKLQotCXJldHVybiAwOwotfQotbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwocHNlcmllcywgcHNlcmllc19rZXhlY19zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYwppbmRleCA1ZDNlYTlmLi5jYTVkNTg5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKQEAgLTcxMyw2ICs3MTMsMTMgQEAKIC8qIE5COiByZWcvdW5yZWcgYXJlIGNhbGxlZCB3aGlsZSBndWFyZGVkIHdpdGggdGhlIHRyYWNlcG9pbnRzX211dGV4ICovCiBleHRlcm4gbG9uZyBoY2FsbF90cmFjZXBvaW50X3JlZmNvdW50OwogCisvKiAKKyAqIFNpbmNlIHRoZSB0cmFjaW5nIGNvZGUgbWlnaHQgZXhlY3V0ZSBoY2FsbHMgd2UgbmVlZCB0byBndWFyZCBhZ2FpbnN0CisgKiByZWN1cnNpb24uIE9uZSBleGFtcGxlIG9mIHRoaXMgYXJlIHNwaW5sb2NrcyBjYWxsaW5nIEhfWUlFTEQgb24KKyAqIHNoYXJlZCBwcm9jZXNzb3IgcGFydGl0aW9ucy4KKyAqLworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgaGNhbGxfdHJhY2VfZGVwdGgpOworCiB2b2lkIGhjYWxsX3RyYWNlcG9pbnRfcmVnZnVuYyh2b2lkKQogewogCWhjYWxsX3RyYWNlcG9pbnRfcmVmY291bnQrKzsKQEAgLTcyNSwxMiArNzMyLDQyIEBACiAKIHZvaWQgX190cmFjZV9oY2FsbF9lbnRyeSh1bnNpZ25lZCBsb25nIG9wY29kZSwgdW5zaWduZWQgbG9uZyAqYXJncykKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCAqZGVwdGg7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlkZXB0aCA9ICZfX2dldF9jcHVfdmFyKGhjYWxsX3RyYWNlX2RlcHRoKTsKKworCWlmICgqZGVwdGgpCisJCWdvdG8gb3V0OworCisJKCpkZXB0aCkrKzsKIAl0cmFjZV9oY2FsbF9lbnRyeShvcGNvZGUsIGFyZ3MpOworCSgqZGVwdGgpLS07CisKK291dDoKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIHZvaWQgX190cmFjZV9oY2FsbF9leGl0KGxvbmcgb3Bjb2RlLCB1bnNpZ25lZCBsb25nIHJldHZhbCwKIAkJCXVuc2lnbmVkIGxvbmcgKnJldGJ1ZikKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCAqZGVwdGg7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlkZXB0aCA9ICZfX2dldF9jcHVfdmFyKGhjYWxsX3RyYWNlX2RlcHRoKTsKKworCWlmICgqZGVwdGgpCisJCWdvdG8gb3V0OworCisJKCpkZXB0aCkrKzsKIAl0cmFjZV9oY2FsbF9leGl0KG9wY29kZSwgcmV0dmFsLCByZXRidWYpOworCSgqZGVwdGgpLS07CisKK291dDoKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yYXMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yYXMuYwppbmRleCBhNGZjNmRhLi5jNTVkN2FkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmFzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Jhcy5jCkBAIC01NCw3ICs1NCw4IEBACiBzdGF0aWMgdW5zaWduZWQgY2hhciByYXNfbG9nX2J1ZltSVEFTX0VSUk9SX0xPR19NQVhdOwogc3RhdGljIERFRklORV9TUElOTE9DSyhyYXNfbG9nX2J1Zl9sb2NrKTsKIAotc3RhdGljIGNoYXIgbWNlX2RhdGFfYnVmW1JUQVNfRVJST1JfTE9HX01BWF07CitzdGF0aWMgY2hhciBnbG9iYWxfbWNlX2RhdGFfYnVmW1JUQVNfRVJST1JfTE9HX01BWF07CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoX191NjQsIG1jZV9kYXRhX2J1Zik7CiAKIHN0YXRpYyBpbnQgcmFzX2dldF9zZW5zb3Jfc3RhdGVfdG9rZW47CiBzdGF0aWMgaW50IHJhc19jaGVja19leGNlcHRpb25fdG9rZW47CkBAIC0xOTYsMTIgKzE5NywyNCBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotLyogR2V0IHRoZSBlcnJvciBpbmZvcm1hdGlvbiBmb3IgZXJyb3JzIGNvbWluZyB0aHJvdWdoIHRoZQorLyoKKyAqIFNvbWUgdmVyc2lvbnMgb2YgRldOTUkgcGxhY2UgdGhlIGJ1ZmZlciBpbnNpZGUgdGhlIDRrQiBwYWdlIHN0YXJ0aW5nIGF0CisgKiAweDcwMDAuIE90aGVyIHZlcnNpb25zIHBsYWNlIGl0IGluc2lkZSB0aGUgcnRhcyBidWZmZXIuIFdlIGNoZWNrIGJvdGguCisgKi8KKyNkZWZpbmUgVkFMSURfRldOTUlfQlVGRkVSKEEpIFwKKwkoKCgoQSkgPj0gMHg3MDAwKSAmJiAoKEEpIDwgMHg3ZmYwKSkgfHwgXAorCSgoKEEpID49IHJ0YXMuYmFzZSkgJiYgKChBKSA8IChydGFzLmJhc2UgKyBydGFzLnNpemUgLSAxNikpKSkKKworLyoKKyAqIEdldCB0aGUgZXJyb3IgaW5mb3JtYXRpb24gZm9yIGVycm9ycyBjb21pbmcgdGhyb3VnaCB0aGUKICAqIEZXTk1JIHZlY3RvcnMuICBUaGUgcHRfcmVncycgcjMgd2lsbCBiZSB1cGRhdGVkIHRvIHJlZmxlY3QKICAqIHRoZSBhY3R1YWwgcjMgaWYgcG9zc2libGUsIGFuZCBhIHB0ciB0byB0aGUgZXJyb3IgbG9nIGVudHJ5CiAgKiB3aWxsIGJlIHJldHVybmVkIGlmIGZvdW5kLgogICoKLSAqIFRoZSBtY2VfZGF0YV9idWYgZG9lcyBub3QgaGF2ZSBhbnkgbG9ja3Mgb3IgcHJvdGVjdGlvbiBhcm91bmQgaXQsCisgKiBJZiB0aGUgUlRBUyBlcnJvciBpcyBub3Qgb2YgdGhlIGV4dGVuZGVkIHR5cGUsIHRoZW4gd2UgcHV0IGl0IGluIGEgcGVyCisgKiBjcHUgNjRiaXQgYnVmZmVyLiBJZiBpdCBpcyB0aGUgZXh0ZW5kZWQgdHlwZSB3ZSB1c2UgZ2xvYmFsX21jZV9kYXRhX2J1Zi4KKyAqCisgKiBUaGUgZ2xvYmFsX21jZV9kYXRhX2J1ZiBkb2VzIG5vdCBoYXZlIGFueSBsb2NrcyBvciBwcm90ZWN0aW9uIGFyb3VuZCBpdCwKICAqIGlmIGEgc2Vjb25kIG1hY2hpbmUgY2hlY2sgY29tZXMgaW4sIG9yIGEgc3lzdGVtIHJlc2V0IGlzIGRvbmUKICAqIGJlZm9yZSB3ZSBoYXZlIGxvZ2dlZCB0aGUgZXJyb3IsIHRoZW4gd2Ugd2lsbCBnZXQgY29ycnVwdGlvbiBpbiB0aGUKICAqIGVycm9yIGxvZy4gIFRoaXMgaXMgcHJlZmVyYWJsZSBvdmVyIGhvbGRpbmcgb2ZmIG9uIGNhbGxpbmcKQEAgLTIxMCwyMCArMjIzLDMxIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcnRhc19lcnJvcl9sb2cgKmZ3bm1pX2dldF9lcnJpbmZvKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXVuc2lnbmVkIGxvbmcgZXJyZGF0YSA9IHJlZ3MtPmdwclszXTsKLQlzdHJ1Y3QgcnRhc19lcnJvcl9sb2cgKmVycmhkciA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyAqc2F2ZXA7CisJc3RydWN0IHJ0YXNfZXJyb3JfbG9nICpoLCAqZXJyaGRyID0gTlVMTDsKIAotCWlmICgoZXJyZGF0YSA+PSAweDcwMDAgJiYgZXJyZGF0YSA8IDB4N2ZmZjApIHx8Ci0JICAgIChlcnJkYXRhID49IHJ0YXMuYmFzZSAmJiBlcnJkYXRhIDwgcnRhcy5iYXNlICsgcnRhcy5zaXplIC0gMTYpKSB7Ci0JCXNhdmVwID0gX192YShlcnJkYXRhKTsKLQkJcmVncy0+Z3ByWzNdID0gc2F2ZXBbMF07CS8qIHJlc3RvcmUgb3JpZ2luYWwgcjMgKi8KLQkJbWVtc2V0KG1jZV9kYXRhX2J1ZiwgMCwgUlRBU19FUlJPUl9MT0dfTUFYKTsKLQkJbWVtY3B5KG1jZV9kYXRhX2J1ZiwgKGNoYXIgKikoc2F2ZXAgKyAxKSwgUlRBU19FUlJPUl9MT0dfTUFYKTsKLQkJZXJyaGRyID0gKHN0cnVjdCBydGFzX2Vycm9yX2xvZyAqKW1jZV9kYXRhX2J1ZjsKLQl9IGVsc2UgewotCQlwcmludGsoIkZXTk1JOiBjb3JydXB0IHIzXG4iKTsKKwlpZiAoIVZBTElEX0ZXTk1JX0JVRkZFUihyZWdzLT5ncHJbM10pKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRldOTUk6IGNvcnJ1cHQgcjNcbiIpOworCQlyZXR1cm4gTlVMTDsKIAl9CisKKwlzYXZlcCA9IF9fdmEocmVncy0+Z3ByWzNdKTsKKwlyZWdzLT5ncHJbM10gPSBzYXZlcFswXTsJLyogcmVzdG9yZSBvcmlnaW5hbCByMyAqLworCisJLyogSWYgaXQgaXNuJ3QgYW4gZXh0ZW5kZWQgbG9nIHdlIGNhbiB1c2UgdGhlIHBlciBjcHUgNjRiaXQgYnVmZmVyICovCisJaCA9IChzdHJ1Y3QgcnRhc19lcnJvcl9sb2cgKikmc2F2ZXBbMV07CisJaWYgKCFoLT5leHRlbmRlZCkgeworCQltZW1jcHkoJl9fZ2V0X2NwdV92YXIobWNlX2RhdGFfYnVmKSwgaCwgc2l6ZW9mKF9fdTY0KSk7CisJCWVycmhkciA9IChzdHJ1Y3QgcnRhc19lcnJvcl9sb2cgKikmX19nZXRfY3B1X3ZhcihtY2VfZGF0YV9idWYpOworCX0gZWxzZSB7CisJCWludCBsZW47CisKKwkJbGVuID0gbWF4X3QoaW50LCA4K2gtPmV4dGVuZGVkX2xvZ19sZW5ndGgsIFJUQVNfRVJST1JfTE9HX01BWCk7CisJCW1lbXNldChnbG9iYWxfbWNlX2RhdGFfYnVmLCAwLCBSVEFTX0VSUk9SX0xPR19NQVgpOworCQltZW1jcHkoZ2xvYmFsX21jZV9kYXRhX2J1ZiwgaCwgbGVuKTsKKwkJZXJyaGRyID0gKHN0cnVjdCBydGFzX2Vycm9yX2xvZyAqKWdsb2JhbF9tY2VfZGF0YV9idWY7CisJfQorCiAJcmV0dXJuIGVycmhkcjsKIH0KIApAQCAtMjM1LDcgKzI1OSw3IEBACiB7CiAJaW50IHJldCA9IHJ0YXNfY2FsbChydGFzX3Rva2VuKCJpYm0sbm1pLWludGVybG9jayIpLCAwLCAxLCBOVUxMKTsKIAlpZiAocmV0ICE9IDApCi0JCXByaW50aygiRldOTUk6IG5taS1pbnRlcmxvY2sgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcHJpbnRrKEtFUk5fRVJSICJGV05NSTogbm1pLWludGVybG9jayBmYWlsZWQ6ICVkXG4iLCByZXQpOwogfQogCiBpbnQgcFNlcmllc19zeXN0ZW1fcmVzZXRfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtMjU5LDMxICsyODMsNDMgQEAKICAqIFJldHVybiAxIGlmIGNvcnJlY3RlZCAob3IgZGVsaXZlcmVkIGEgc2lnbmFsKS4KICAqIFJldHVybiAwIGlmIHRoZXJlIGlzIG5vdGhpbmcgd2UgY2FuIGRvLgogICovCi1zdGF0aWMgaW50IHJlY292ZXJfbWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgcnRhc19lcnJvcl9sb2cgKiBlcnIpCitzdGF0aWMgaW50IHJlY292ZXJfbWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgcnRhc19lcnJvcl9sb2cgKmVycikKIHsKLQlpbnQgbm9uZmF0YWwgPSAwOworCWludCByZWNvdmVyZWQgPSAwOwogCi0JaWYgKGVyci0+ZGlzcG9zaXRpb24gPT0gUlRBU19ESVNQX0ZVTExZX1JFQ09WRVJFRCkgeworCWlmICghKHJlZ3MtPm1zciAmIE1TUl9SSSkpIHsKKwkJLyogSWYgTVNSX1JJIGlzbid0IHNldCwgd2UgY2Fubm90IHJlY292ZXIgKi8KKwkJcmVjb3ZlcmVkID0gMDsKKworCX0gZWxzZSBpZiAoZXJyLT5kaXNwb3NpdGlvbiA9PSBSVEFTX0RJU1BfRlVMTFlfUkVDT1ZFUkVEKSB7CiAJCS8qIFBsYXRmb3JtIGNvcnJlY3RlZCBpdHNlbGYgKi8KLQkJbm9uZmF0YWwgPSAxOwotCX0gZWxzZSBpZiAoKHJlZ3MtPm1zciAmIE1TUl9SSSkgJiYKLQkJICAgdXNlcl9tb2RlKHJlZ3MpICYmCi0JCSAgIGVyci0+c2V2ZXJpdHkgPT0gUlRBU19TRVZFUklUWV9FUlJPUl9TWU5DICYmCi0JCSAgIGVyci0+ZGlzcG9zaXRpb24gPT0gUlRBU19ESVNQX05PVF9SRUNPVkVSRUQgJiYKLQkJICAgZXJyLT50YXJnZXQgPT0gUlRBU19UQVJHRVRfTUVNT1JZICYmCi0JCSAgIGVyci0+dHlwZSA9PSBSVEFTX1RZUEVfRUNDX1VOQ09SUiAmJgotCQkgICAhKGN1cnJlbnQtPnBpZCA9PSAwIHx8IGlzX2dsb2JhbF9pbml0KGN1cnJlbnQpKSkgewotCQkvKiBLaWxsIG9mZiBhIHVzZXIgcHJvY2VzcyB3aXRoIGFuIEVDQyBlcnJvciAqLwotCQlwcmludGsoS0VSTl9FUlIgIk1DRTogdW5jb3JyZWN0YWJsZSBlY2MgZXJyb3IgZm9yIHBpZCAlZFxuIiwKLQkJICAgICAgIGN1cnJlbnQtPnBpZCk7Ci0JCS8qIFhYWCBzb21ldGhpbmcgYmV0dGVyIGZvciBFQ0MgZXJyb3I/ICovCi0JCV9leGNlcHRpb24oU0lHQlVTLCByZWdzLCBCVVNfQURSRVJSLCByZWdzLT5uaXApOwotCQlub25mYXRhbCA9IDE7CisJCXJlY292ZXJlZCA9IDE7CisKKwl9IGVsc2UgaWYgKGVyci0+ZGlzcG9zaXRpb24gPT0gUlRBU19ESVNQX0xJTUlURURfUkVDT1ZFUlkpIHsKKwkJLyogUGxhdGZvcm0gY29ycmVjdGVkIGl0c2VsZiBidXQgY291bGQgYmUgZGVncmFkZWQgKi8KKwkJcHJpbnRrKEtFUk5fRVJSICJNQ0U6IGxpbWl0ZWQgcmVjb3ZlcnksIHN5c3RlbSBtYXkgIgorCQkgICAgICAgImJlIGRlZ3JhZGVkXG4iKTsKKwkJcmVjb3ZlcmVkID0gMTsKKworCX0gZWxzZSBpZiAodXNlcl9tb2RlKHJlZ3MpICYmICFpc19nbG9iYWxfaW5pdChjdXJyZW50KSAmJgorCQkgICBlcnItPnNldmVyaXR5ID09IFJUQVNfU0VWRVJJVFlfRVJST1JfU1lOQykgeworCisJCS8qCisJCSAqIElmIHdlIHJlY2VpdmVkIGEgc3luY2hyb25vdXMgZXJyb3Igd2hlbiBpbiB1c2Vyc3BhY2UKKwkJICoga2lsbCB0aGUgdGFzay4gRmlybXdhcmUgbWF5IHJlcG9ydCBkZXRhaWxzIG9mIHRoZSBmYWlsCisJCSAqIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBjYW4ndCByZWx5IG9uIHRoZSB0YXJnZXQgYW5kIHR5cGUKKwkJICogZmllbGRzIGJlaW5nIHZhbGlkIGhlcmUuCisJCSAqLworCQlwcmludGsoS0VSTl9FUlIgIk1DRTogdW5jb3JyZWN0YWJsZSBlcnJvciwga2lsbGluZyB0YXNrICIKKwkJICAgICAgICIlczolZFxuIiwgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkKTsKKworCQlfZXhjZXB0aW9uKFNJR0JVUywgcmVncywgQlVTX01DRUVSUl9BUiwgcmVncy0+bmlwKTsKKwkJcmVjb3ZlcmVkID0gMTsKIAl9CiAKLQlsb2dfZXJyb3IoKGNoYXIgKillcnIsIEVSUl9UWVBFX1JUQVNfTE9HLCAhbm9uZmF0YWwpOworCWxvZ19lcnJvcigoY2hhciAqKWVyciwgRVJSX1RZUEVfUlRBU19MT0csIDApOwogCi0JcmV0dXJuIG5vbmZhdGFsOworCXJldHVybiByZWNvdmVyZWQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9yaW8uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3Jpby5jCmluZGV4IDlmOTliZWYuLjhjNmNhYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3Jpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3Jpby5jCkBAIC0xNTU1LDggKzE1NTUsNiBAQAogCXNhdmVkX21jaGVja19leGNlcHRpb24gPSBwcGNfbWQubWFjaGluZV9jaGVja19leGNlcHRpb247CiAJcHBjX21kLm1hY2hpbmVfY2hlY2tfZXhjZXB0aW9uID0gZnNsX3Jpb19tY2hlY2tfZXhjZXB0aW9uOwogI2VuZGlmCi0JLyogRW5zdXJlIHRoYXQgUkZYRSBpcyBzZXQgKi8KLQltdHNwcihTUFJOX0hJRDEsIChtZnNwcihTUFJOX0hJRDEpIHwgMHgyMDAwMCkpOwogCiAJcmV0dXJuIDA7CiBlcnI6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCmluZGV4IDdjMTM0MjYuLmIwYzg0NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCkBAIC02NzQsNyArNjc0LDggQEAKIAkvKiBtYWtlIHN1cmUgbWFzayBnZXRzIHRvIGNvbnRyb2xsZXIgYmVmb3JlIHdlIHJldHVybiB0byB1c2VyICovCiAJZG8gewogCQlpZiAoIWxvb3BzLS0pIHsKLQkJCXByaW50ayhLRVJOX0VSUiAibXBpY19lbmFibGVfaXJxIHRpbWVvdXRcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdGltZW91dCBvbiBod2lycSAldVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgc3JjKTsKIAkJCWJyZWFrOwogCQl9CiAJfSB3aGlsZShtcGljX2lycV9yZWFkKHNyYywgTVBJQ19JTkZPKElSUV9WRUNUT1JfUFJJKSkgJiBNUElDX1ZFQ1BSSV9NQVNLKTsKQEAgLTY5NSw3ICs2OTYsOCBAQAogCS8qIG1ha2Ugc3VyZSBtYXNrIGdldHMgdG8gY29udHJvbGxlciBiZWZvcmUgd2UgcmV0dXJuIHRvIHVzZXIgKi8KIAlkbyB7CiAJCWlmICghbG9vcHMtLSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJtcGljX2VuYWJsZV9pcnEgdGltZW91dFxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0aW1lb3V0IG9uIGh3aXJxICV1XG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBzcmMpOwogCQkJYnJlYWs7CiAJCX0KIAl9IHdoaWxlKCEobXBpY19pcnFfcmVhZChzcmMsIE1QSUNfSU5GTyhJUlFfVkVDVE9SX1BSSSkpICYgTVBJQ19WRUNQUklfTUFTSykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZwppbmRleCBmZjE5ZWZkLi42MzZiY2I4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZwpAQCAtNDA2LDcgKzQwNiw3IEBACiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgQ0hTQ19TQ0gKLQlkZWZfdHJpc3RhdGUgeQorCWRlZl90cmlzdGF0ZSBtCiAJcHJvbXB0ICJTdXBwb3J0IGZvciBDSFNDIHN1YmNoYW5uZWxzIgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGFsbG93cyB1c2FnZSBvZiBDSFNDIHN1YmNoYW5uZWxzLiBBIENIU0Mgc3ViY2hhbm5lbApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCAwODUxZWIxLi4yNzUxYjNhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtMTMzLDExICsxMzMsMTIgQEAKIAl1bnNpZ25lZCBsb25nIG91dHB1dF9hZGRyOwogCXVuc2lnbmVkIGNoYXIgKm91dHB1dDsKIAotCWNoZWNrX2lwbF9wYXJtYmxvY2soKHZvaWQgKikgMCwgKHVuc2lnbmVkIGxvbmcpIG91dHB1dCArIFNaX19ic3Nfc3RhcnQpOworCW91dHB1dF9hZGRyID0gKCh1bnNpZ25lZCBsb25nKSAmX2VuZCArIEhFQVBfU0laRSArIDQwOTVVTCkgJiAtNDA5NlVMOworCWNoZWNrX2lwbF9wYXJtYmxvY2soKHZvaWQgKikgMCwgb3V0cHV0X2FkZHIgKyBTWl9fYnNzX3N0YXJ0KTsKIAltZW1zZXQoJl9ic3MsIDAsICZfZWJzcyAtICZfYnNzKTsKIAlmcmVlX21lbV9wdHIgPSAodW5zaWduZWQgbG9uZykmX2VuZDsKIAlmcmVlX21lbV9lbmRfcHRyID0gZnJlZV9tZW1fcHRyICsgSEVBUF9TSVpFOwotCW91dHB1dCA9ICh1bnNpZ25lZCBjaGFyICopICgoZnJlZV9tZW1fZW5kX3B0ciArIDQwOTVVTCkgJiAtNDA5NlVMKTsKKwlvdXRwdXQgPSAodW5zaWduZWQgY2hhciAqKSBvdXRwdXRfYWRkcjsKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYV9jb21tb24uYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCmluZGV4IGY0MmRiYWIuLjQ4ODg0ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCkBAIC0zOCw2ICszOCw3IEBACiAJCUJVR19PTihyZXQgIT0gYnNpemUpOwogCQlkYXRhICs9IGJzaXplIC0gaW5kZXg7CiAJCWxlbiAtPSBic2l6ZSAtIGluZGV4OworCQlpbmRleCA9IDA7CiAJfQogCiAJLyogcHJvY2VzcyBhcyBtYW55IGJsb2NrcyBhcyBwb3NzaWJsZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IDc2ZGFlYTEuLjVjNWJhMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTM2LDE0ICszNiwxOSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBhdG9taWNfcmVhZChjb25zdCBhdG9taWNfdCAqdikKIHsKLQliYXJyaWVyKCk7Ci0JcmV0dXJuIHYtPmNvdW50ZXI7CisJaW50IGM7CisKKwlhc20gdm9sYXRpbGUoCisJCSIJbAklMCwlMVxuIgorCQk6ICI9ZCIgKGMpIDogIlEiICh2LT5jb3VudGVyKSk7CisJcmV0dXJuIGM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc2V0KGF0b21pY190ICp2LCBpbnQgaSkKIHsKLQl2LT5jb3VudGVyID0gaTsKLQliYXJyaWVyKCk7CisJYXNtIHZvbGF0aWxlKAorCQkiCXN0CSUxLCUwXG4iCisJCTogIj1RIiAodi0+Y291bnRlcikgOiAiZCIgKGkpKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQpAQCAtMTI4LDE0ICsxMzMsMTkgQEAKIAogc3RhdGljIGlubGluZSBsb25nIGxvbmcgYXRvbWljNjRfcmVhZChjb25zdCBhdG9taWM2NF90ICp2KQogewotCWJhcnJpZXIoKTsKLQlyZXR1cm4gdi0+Y291bnRlcjsKKwlsb25nIGxvbmcgYzsKKworCWFzbSB2b2xhdGlsZSgKKwkJIglsZwklMCwlMVxuIgorCQk6ICI9ZCIgKGMpIDogIlEiICh2LT5jb3VudGVyKSk7CisJcmV0dXJuIGM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9zZXQoYXRvbWljNjRfdCAqdiwgbG9uZyBsb25nIGkpCiB7Ci0Jdi0+Y291bnRlciA9IGk7Ci0JYmFycmllcigpOworCWFzbSB2b2xhdGlsZSgKKwkJIglzdGcJJTEsJTBcbiIKKwkJOiAiPVEiICh2LT5jb3VudGVyKSA6ICJkIiAoaSkpOwogfQogCiBzdGF0aWMgaW5saW5lIGxvbmcgbG9uZyBhdG9taWM2NF9hZGRfcmV0dXJuKGxvbmcgbG9uZyBpLCBhdG9taWM2NF90ICp2KQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NhY2hlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGUuaAppbmRleCAyNGFhZmE2Li4yYTMwZDVhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGUuaApAQCAtMTMsNiArMTMsNyBAQAogCiAjZGVmaW5lIEwxX0NBQ0hFX0JZVEVTICAgICAyNTYKICNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQgICAgIDgKKyNkZWZpbmUgTkVUX1NLQl9QQUQJICAgMzIKIAogI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS4ucmVhZF9tb3N0bHkiKSkpCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDQwNWNjOTcuLjdlMWY3NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMSwyOSArMSw4IEBACiAjaWZuZGVmIF9TMzkwX0NBQ0hFRkxVU0hfSAogI2RlZmluZSBfUzM5MF9DQUNIRUZMVVNIX0gKIAotLyogS2VlcCBpbmNsdWRlcyB0aGUgc2FtZSBhY3Jvc3MgYXJjaGVzLiAgKi8KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotCiAvKiBDYWNoZXMgYXJlbid0IGJyYWluLWRlYWQgb24gdGhlIHMzOTAuICovCi0jZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgQVJDSF9JTVBMRU1FTlRTX0ZMVVNIX0RDQUNIRV9QQUdFIDAKLSNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSxwZykJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLHBnLGFkcixsZW4pCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCi0JbWVtY3B5KGRzdCwgc3JjLCBsZW4pCi0jZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAotCW1lbWNweShkc3QsIHNyYywgbGVuKQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NhY2hlZmx1c2guaD4KIAogI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKIHZvaWQga2VybmVsX21hcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBiZjNkZTA0Li4yYzc5YjY0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xNDgsMTEgKzE0OCw2IEBACiAgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIHRocmVhZF9zYXZlZF9wYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpOwogCi0vKgotICogUHJpbnQgcmVnaXN0ZXIgb2YgdGFzayBpbnRvIGJ1ZmZlci4gVXNlZCBpbiBmcy9wcm9jL2FycmF5LmMuCi0gKi8KLWV4dGVybiB2b2lkIHRhc2tfc2hvd19yZWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKLQogZXh0ZXJuIHZvaWQgc2hvd19jb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAogdW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGIuaAppbmRleCBmMWY2NDRmLi45MDc0YTU0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYi5oCkBAIC0yMiw2ICsyMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwppbmRleCA1ZWI3OGRkLi5iNWE0YTczIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCkBAIC0yMzcsNDMgKzIzNyw2IEBACiAJc2hvd19sYXN0X2JyZWFraW5nX2V2ZW50KHJlZ3MpOwogfQogCi0vKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGZzL3Byb2MvYXJyYXkuYyAqLwotdm9pZCB0YXNrX3Nob3dfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKLQotCXJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFzayk7Ci0Jc2VxX3ByaW50ZihtLCAidGFzazogJXAsIGtzcDogJXBcbiIsCi0JCSAgICAgICB0YXNrLCAodm9pZCAqKXRhc2stPnRocmVhZC5rc3ApOwotCXNlcV9wcmludGYobSwgIlVzZXIgUFNXIDogJXAgJXBcbiIsCi0JCSAgICAgICAodm9pZCAqKSByZWdzLT5wc3cubWFzaywgKHZvaWQgKilyZWdzLT5wc3cuYWRkcik7Ci0KLQlzZXFfcHJpbnRmKG0sICJVc2VyIEdQUlM6ICIgRk9VUkxPTkcsCi0JCQkgIHJlZ3MtPmdwcnNbMF0sIHJlZ3MtPmdwcnNbMV0sCi0JCQkgIHJlZ3MtPmdwcnNbMl0sIHJlZ3MtPmdwcnNbM10pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgICAgIiBGT1VSTE9ORywKLQkJCSAgcmVncy0+Z3Byc1s0XSwgcmVncy0+Z3Byc1s1XSwKLQkJCSAgcmVncy0+Z3Byc1s2XSwgcmVncy0+Z3Byc1s3XSk7Ci0Jc2VxX3ByaW50ZihtLCAiICAgICAgICAgICAiIEZPVVJMT05HLAotCQkJICByZWdzLT5ncHJzWzhdLCByZWdzLT5ncHJzWzldLAotCQkJICByZWdzLT5ncHJzWzEwXSwgcmVncy0+Z3Byc1sxMV0pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgICAgIiBGT1VSTE9ORywKLQkJCSAgcmVncy0+Z3Byc1sxMl0sIHJlZ3MtPmdwcnNbMTNdLAotCQkJICByZWdzLT5ncHJzWzE0XSwgcmVncy0+Z3Byc1sxNV0pOwotCXNlcV9wcmludGYobSwgIlVzZXIgQUNSUzogJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKLQkJCSAgdGFzay0+dGhyZWFkLmFjcnNbMF0sIHRhc2stPnRocmVhZC5hY3JzWzFdLAotCQkJICB0YXNrLT50aHJlYWQuYWNyc1syXSwgdGFzay0+dGhyZWFkLmFjcnNbM10pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgICAgJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKLQkJCSAgdGFzay0+dGhyZWFkLmFjcnNbNF0sIHRhc2stPnRocmVhZC5hY3JzWzVdLAotCQkJICB0YXNrLT50aHJlYWQuYWNyc1s2XSwgdGFzay0+dGhyZWFkLmFjcnNbN10pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgICAgJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKLQkJCSAgdGFzay0+dGhyZWFkLmFjcnNbOF0sIHRhc2stPnRocmVhZC5hY3JzWzldLAotCQkJICB0YXNrLT50aHJlYWQuYWNyc1sxMF0sIHRhc2stPnRocmVhZC5hY3JzWzExXSk7Ci0Jc2VxX3ByaW50ZihtLCAiICAgICAgICAgICAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAotCQkJICB0YXNrLT50aHJlYWQuYWNyc1sxMl0sIHRhc2stPnRocmVhZC5hY3JzWzEzXSwKLQkJCSAgdGFzay0+dGhyZWFkLmFjcnNbMTRdLCB0YXNrLT50aHJlYWQuYWNyc1sxNV0pOwotfQotCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRpZV9sb2NrKTsKIAogdm9pZCBkaWUoY29uc3QgY2hhciAqIHN0ciwgc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBsb25nIGVycikKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYwppbmRleCAwN2RlYWVlLi5hNmM0ZjdlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMKKysrIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jCkBAIC0xMjUsOSArMTI1LDkgQEAKIAl1bnNpZ25lZCBsb25nIHRtcDE7CiAKIAlhc20gdm9sYXRpbGUoCisJCSIgICBzYWNmICAyNTZcbiIKIAkJIiAgIkFISSIgICUwLC0xXG4iCiAJCSIgICBqbyAgICA1ZlxuIgotCQkiICAgc2FjZiAgMjU2XG4iCiAJCSIgICBicmFzICAlMywzZlxuIgogCQkiMDoiQUhJIiAgJTAsMjU3XG4iCiAJCSIxOiBtdmMgICAwKDEsJTEpLDAoJTIpXG4iCkBAIC0xNDIsOSArMTQyLDggQEAKIAkJIjM6IkFISSIgICUwLC0yNTZcbiIKIAkJIiAgIGpubSAgIDJiXG4iCiAJCSI0OiBleCAgICAlMCwxYi0wYiglMylcbiIKLQkJIiAgIHNhY2YgIDBcbiIKIAkJIjU6ICJTTFIiICAlMCwlMFxuIgotCQkiNjpcbiIKKwkJIjY6IHNhY2YgIDBcbiIKIAkJRVhfVEFCTEUoMWIsNmIpIEVYX1RBQkxFKDJiLDBiKSBFWF9UQUJMRSg0YiwwYikKIAkJOiAiK2EiIChzaXplKSwgIithIiAodG8pLCAiK2EiIChmcm9tKSwgIj1hIiAodG1wMSkKIAkJOiA6ICJjYyIsICJtZW1vcnkiKTsKQEAgLTE1Niw5ICsxNTUsOSBAQAogCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKIAogCWFzbSB2b2xhdGlsZSgKKwkJIiAgIHNhY2YgIDI1NlxuIgogCQkiICAiQUhJIiAgJTAsLTFcbiIKIAkJIiAgIGpvICAgIDVmXG4iCi0JCSIgICBzYWNmICAyNTZcbiIKIAkJIiAgIGJyYXMgICUzLDNmXG4iCiAJCSIgICB4YyAgICAwKDEsJTEpLDAoJTEpXG4iCiAJCSIwOiJBSEkiICAlMCwyNTdcbiIKQEAgLTE3OCw5ICsxNzcsOCBAQAogCQkiMzoiQUhJIiAgJTAsLTI1NlxuIgogCQkiICAgam5tICAgMmJcbiIKIAkJIjQ6IGV4ICAgICUwLDAoJTMpXG4iCi0JCSIgICBzYWNmICAwXG4iCiAJCSI1OiAiU0xSIiAgJTAsJTBcbiIKLQkJIjY6XG4iCisJCSI2OiBzYWNmICAwXG4iCiAJCUVYX1RBQkxFKDFiLDZiKSBFWF9UQUJMRSgyYiwwYikgRVhfVEFCTEUoNGIsMGIpCiAJCTogIithIiAoc2l6ZSksICIrYSIgKHRvKSwgIj1hIiAodG1wMSksICI9YSIgKHRtcDIpCiAJCTogOiAiY2MiLCAibWVtb3J5Iik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwppbmRleCAwYzcxOWM2Li5lMTg1MGMyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKQEAgLTMzNiw3ICszMzYsOCBAQAogCXBhZ2UtPmZsYWdzIF49IGJpdHM7CiAJaWYgKHBhZ2UtPmZsYWdzICYgRlJBR19NQVNLKSB7CiAJCS8qIFBhZ2Ugbm93IGhhcyBzb21lIGZyZWUgcGd0YWJsZSBmcmFnbWVudHMuICovCi0JCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCAmbW0tPmNvbnRleHQucGd0YWJsZV9saXN0KTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZwYWdlLT5scnUpKQorCQkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QpOwogCQlwYWdlID0gTlVMTDsKIAl9IGVsc2UKIAkJLyogQWxsIGZyYWdtZW50cyBvZiB0aGUgNEsgcGFnZSBoYXZlIGJlZW4gZnJlZWQuICovCmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL0tjb25maWcgYi9hcmNoL3Njb3JlL0tjb25maWcKaW5kZXggNDI5M2ZkY2IuLjI3YjIyOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2NvcmUvS2NvbmZpZworKysgYi9hcmNoL3Njb3JlL0tjb25maWcKQEAgLTEsNSArMSw5IEBACiBtZW51ICJNYWNoaW5lIHNlbGVjdGlvbiIKIAorY29uZmlnIFNDT1JFCisgICAgICAgZGVmX2Jvb2wgeQorICAgICAgIHNlbGVjdCBIQVZFX0dFTkVSSUNfSEFSRElSUVMKKwogY2hvaWNlCiAJcHJvbXB0ICJTeXN0ZW0gdHlwZSIKIAlkZWZhdWx0IE1BQ0hfU1BDVDY2MDAKQEAgLTUzLDkgKzU3LDYgQEAKIGNvbmZpZyBTQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVIKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBHRU5FUklDX1NZU0NBTExfVEFCTEUKIAlkZWZfYm9vbCB5CiAKQEAgLTY4LDkgKzY5LDYgQEAKIGNvbmZpZyAzMkJJVAogCWRlZl9ib29sIHkKIAotY29uZmlnIEdFTkVSSUNfSEFSRElSUVMKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBBUkNIX0ZMQVRNRU1fRU5BQkxFCiAJZGVmX2Jvb2wgeQogCmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL2NvbmZpZ3Mvc3BjdDY2MDBfZGVmY29uZmlnIGIvYXJjaC9zY29yZS9jb25maWdzL3NwY3Q2NjAwX2RlZmNvbmZpZwppbmRleCA5ODgzYzUwLi5kZjFlZGJmIDEwMDY0NAotLS0gYS9hcmNoL3Njb3JlL2NvbmZpZ3Mvc3BjdDY2MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2NvcmUvY29uZmlncy9zcGN0NjYwMF9kZWZjb25maWcKQEAgLTksNyArOSw3IEBACiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggZmZmMjUyMi4uOGE5MDExZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBTVVBFUkgKIAlkZWZfYm9vbCB5Ci0Jc2VsZWN0IEVNQkVEREVECisJc2VsZWN0IEVYUEVSVAogCXNlbGVjdCBDTEtERVZfTE9PS1VQCiAJc2VsZWN0IEhBVkVfSURFIGlmIEhBU19JT1BPUlQKIAlzZWxlY3QgSEFWRV9NRU1CTE9DSwpAQCAtMTUsNiArMTUsNyBAQAogCXNlbGVjdCBIQVZFX0tFUk5FTF9HWklQCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0xaTUEKKwlzZWxlY3QgSEFWRV9LRVJORUxfWFoKIAlzZWxlY3QgSEFWRV9LRVJORUxfTFpPCiAJc2VsZWN0IEhBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUwogCXNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUEkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvTWFrZWZpbGUgYi9hcmNoL3NoL01ha2VmaWxlCmluZGV4IDljOGM2ZTEuLmUzZDgxNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9NYWtlZmlsZQpAQCAtMjAwLDcgKzIwMCw3IEBACiBsaWJzLSQoQ09ORklHX1NVUEVSSDMyKQkJOj0gYXJjaC9zaC9saWIvCSQobGlicy15KQogbGlicy0kKENPTkZJR19TVVBFUkg2NCkJCTo9IGFyY2gvc2gvbGliNjQvICQobGlicy15KQogCi1CT09UX1RBUkdFVFMgPSB1SW1hZ2UgdUltYWdlLmJ6MiB1SW1hZ2UuZ3ogdUltYWdlLmx6bWEgdUltYWdlLmx6byBcCitCT09UX1RBUkdFVFMgPSB1SW1hZ2UgdUltYWdlLmJ6MiB1SW1hZ2UuZ3ogdUltYWdlLmx6bWEgdUltYWdlLnh6IHVJbWFnZS5sem8gXAogCSAgICAgICB1SW1hZ2Uuc3JlYyB1SW1hZ2UuYmluIHpJbWFnZSB2bWxpbnV4LmJpbiB2bWxpbnV4LnNyZWMgXAogCSAgICAgICByb21JbWFnZQogUEhPTlkgKz0gJChCT09UX1RBUkdFVFMpCkBAIC0yMzAsNSArMjMwLDYgQEAKIAlAZWNobyAnKiB1SW1hZ2UuZ3oJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGd6aXApJwogCUBlY2hvICcgIHVJbWFnZS5iejIJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGJ6aXAyKScKIAlAZWNobyAnICB1SW1hZ2UubHptYQkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAobHptYSknCisJQGVjaG8gJyAgdUltYWdlLnh6CSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290ICh4eiknCiAJQGVjaG8gJyAgdUltYWdlLmx6bwkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAobHpvKScKIGVuZGVmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKaW5kZXggMzNiNjYyOS4uNzAxNjY3YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwpAQCAtMTI5NCw2ICsxMjk0LDcgQEAKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBpMmMxX2RldmljZXMsCiAJCQkJQVJSQVlfU0laRShpMmMxX2RldmljZXMpKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX1NIX1ZPVSkgfHwgZGVmaW5lZChDT05GSUdfVklERU9fU0hfVk9VX01PRFVMRSkKIAkvKiBWT1UgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9EVl9EMTUsIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0RWX0QxNCwgTlVMTCk7CkBAIC0xMzI1LDYgKzEzMjYsNyBAQAogCiAJLyogUmVtb3ZlIHJlc2V0ICovCiAJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVEc0LCAxKTsKKyNlbmRpZgogCiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGVjb3ZlY19kZXZpY2VzLAogCQkJCSAgICBBUlJBWV9TSVpFKGVjb3ZlY19kZXZpY2VzKSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKaW5kZXggMWNlNjM2Mi4uYmE1MTVkOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQpAQCAtMjQsMTIgKzI0LDEzIEBACiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0daSVApCTo9IGd6CiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0JaSVAyKQk6PSBiejIKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpNQSkJOj0gbHptYQorc3VmZml4LSQoQ09ORklHX0tFUk5FTF9YWikJOj0geHoKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpPKQk6PSBsem8KIAogdGFyZ2V0cyA6PSB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlIHVJbWFnZSB1SW1hZ2Uuc3JlYyB1SW1hZ2UuZ3ogXAotCSAgIHVJbWFnZS5iejIgdUltYWdlLmx6bWEgdUltYWdlLmx6byB1SW1hZ2UuYmluCisJICAgdUltYWdlLmJ6MiB1SW1hZ2UubHptYSB1SW1hZ2UueHogdUltYWdlLmx6byB1SW1hZ2UuYmluCiBleHRyYS15ICs9IHZtbGludXguYmluIHZtbGludXguYmluLmd6IHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hIFwKLQkgICB2bWxpbnV4LmJpbi5sem8KKwkgICB2bWxpbnV4LmJpbi54eiB2bWxpbnV4LmJpbi5sem8KIHN1YmRpci0gOj0gY29tcHJlc3NlZCByb21pbWFnZQogCiAkKG9iaikvekltYWdlOiAkKG9iaikvY29tcHJlc3NlZC92bWxpbnV4IEZPUkNFCkBAIC03Niw2ICs3Nyw5IEBACiAkKG9iaikvdm1saW51eC5iaW4ubHptYTogJChvYmopL3ZtbGludXguYmluIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsbHptYSkKIAorJChvYmopL3ZtbGludXguYmluLnh6OiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCx4emtlcm4pCisKICQob2JqKS92bWxpbnV4LmJpbi5sem86ICQob2JqKS92bWxpbnV4LmJpbiBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bykKIApAQCAtODgsNiArOTIsOSBAQAogJChvYmopL3VJbWFnZS5sem1hOiAkKG9iaikvdm1saW51eC5iaW4ubHptYQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxsem1hKQogCiskKG9iaikvdUltYWdlLnh6OiAkKG9iaikvdm1saW51eC5iaW4ueHoKKwkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2UseHopCisKICQob2JqKS91SW1hZ2UubHpvOiAkKG9iaikvdm1saW51eC5iaW4ubHpvCiAJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLGx6bykKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCBjZmE1YTA4Li5lMGIwMjkzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKIAogdGFyZ2V0cwkJOj0gdm1saW51eCB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiBcCiAJCSAgIHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hIFwKLQkJICAgdm1saW51eC5iaW4ubHpvIFwKKwkJICAgdm1saW51eC5iaW4ueHogdm1saW51eC5iaW4ubHpvIFwKIAkJICAgaGVhZF8kKEJJVFMpLm8gbWlzYy5vIHBpZ2d5Lm8KIAogT0JKRUNUUyA9ICQob2JqKS9oZWFkXyQoQklUUykubyAkKG9iaikvbWlzYy5vICQob2JqKS9jYWNoZS5vCkBAIC01MCw2ICs1MCw4IEBACiAJJChjYWxsIGlmX2NoYW5nZWQsYnppcDIpCiAkKG9iaikvdm1saW51eC5iaW4ubHptYTogJCh2bWxpbnV4LmJpbi5hbGwteSkgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsem1hKQorJChvYmopL3ZtbGludXguYmluLnh6OiAkKHZtbGludXguYmluLmFsbC15KSBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLHh6a2VybikKICQob2JqKS92bWxpbnV4LmJpbi5sem86ICQodm1saW51eC5iaW4uYWxsLXkpIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsbHpvKQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggMjcxNDBhNi4uOTU0NzBhNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzYy5jCisrKyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtNjEsNiArNjEsMTAgQEAKICNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc191bmx6bWEuYyIKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0tFUk5FTF9YWgorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VueHouYyIKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0tFUk5FTF9MWk8KICNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc191bmx6by5jIgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDA4M2VhMDYuLmRiODU5MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xMzQsNiArMTM0LDcgQEAKIGV4dGVybiB2b2lkIHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKTsKIAogc3RydWN0IHZtX2FyZWFfc3RydWN0Oworc3RydWN0IG1tX3N0cnVjdDsKIAogZXh0ZXJuIHZvaWQgX191cGRhdGVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYwppbmRleCBjMmIwYWFhLi42NzI5NDRmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKQEAgLTIzMCwxMCArMjMwLDEwIEBACiBzdGF0aWMgaW50IF9faW5pdCBzaDc3NTBfZGV2aWNlc19zZXR1cCh2b2lkKQogewogCWlmIChtYWNoX2lzX3J0czc3NTFyMmQoKSkgewotCQlwbGF0Zm9ybV9yZWdpc3Rlcl9kZXZpY2UoJnNjaWZfZGV2aWNlKTsKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzY2lmX2RldmljZSk7CiAJfSBlbHNlIHsKLQkJcGxhdGZvcm1fcmVnaXN0ZXJfZGV2aWNlKCZzY2lfZGV2aWNlKTsKLQkJcGxhdGZvcm1fcmVnaXN0ZXJfZGV2aWNlKCZzY2lmX2RldmljZSk7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2NpX2RldmljZSk7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2NpZl9kZXZpY2UpOwogCX0KIAogCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaDc3NTBfZGV2aWNlcywKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RvcG9sb2d5LmMgYi9hcmNoL3NoL2tlcm5lbC90b3BvbG9neS5jCmluZGV4IDk0OGZkYjYuLjM4ZTg2MjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdG9wb2xvZ3kuYwpAQCAtMTcsNiArMTcsNyBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHUsIGNwdV9kZXZpY2VzKTsKIAogY3B1bWFza190IGNwdV9jb3JlX21hcFtOUl9DUFVTXTsKK0VYUE9SVF9TWU1CT0woY3B1X2NvcmVfbWFwKTsKIAogc3RhdGljIGNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcCh1bnNpZ25lZCBpbnQgY3B1KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9LY29uZmlnIGIvYXJjaC9zcGFyYy9LY29uZmlnCmluZGV4IDQ1ZDljODcuLjk1Njk1ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjL0tjb25maWcKQEAgLTUwLDYgKzUwLDcgQEAKIAlzZWxlY3QgUlRDX0RSVl9TVEFSRklSRQogCXNlbGVjdCBIQVZFX1BFUkZfRVZFTlRTCiAJc2VsZWN0IFBFUkZfVVNFX1ZNQUxMT0MKKwlzZWxlY3QgSEFWRV9HRU5FUklDX0hBUkRJUlFTCiAKIGNvbmZpZyBBUkNIX0RFRkNPTkZJRwogCXN0cmluZwpAQCAtMTA3LDEwICsxMDgsNiBAQAogY29uZmlnIE5FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LCiAJZGVmX2Jvb2wgeSBpZiBTUEFSQzY0CiAKLWNvbmZpZyBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKLQlib29sCi0JZGVmX2Jvb2wgeSBpZiBTUEFSQzY0Ci0KIGNvbmZpZyBNTVUKIAlib29sCiAJZGVmYXVsdCB5CkBAIC0yNzYsMTAgKzI3Myw2IEBACiAJICBjYW4gYmUgY29udHJvbGxlZCB0aHJvdWdoIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMuCiAJICBTYXkgTiBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIENQVSBob3RwbHVnLgogCi1jb25maWcgR0VORVJJQ19IQVJESVJRUwotCWJvb2wKLQlkZWZhdWx0IHkgaWYgU1BBUkM2NAotCiBzb3VyY2UgImtlcm5lbC90aW1lL0tjb25maWciCiAKIGlmIFNQQVJDNjQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Bjci5oCmluZGV4IGEyZjVjNjEuLjg0M2U0ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY3IuaApAQCAtNDMsNCArNDMsNiBAQAogCiBleHRlcm4gdTY0IHBjcl9lbmFibGU7CiAKK2V4dGVybiBpbnQgcGNyX2FyY2hfaW5pdCh2b2lkKTsKKwogI2VuZGlmIC8qIF9fUENSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lvbW11LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pb21tdS5jCmluZGV4IDQ3OTc3YTcuLjcyNTA5ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2lvbW11LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9tbXUuYwpAQCAtMjU1LDEwICsyNTUsOSBAQAogc3RhdGljIGludCBpb21tdV9hbGxvY19jdHgoc3RydWN0IGlvbW11ICppb21tdSkKIHsKIAlpbnQgbG93ZXN0ID0gaW9tbXUtPmN0eF9sb3dlc3RfZnJlZTsKLQlpbnQgc3ogPSBJT01NVV9OVU1fQ1RYUyAtIGxvd2VzdDsKLQlpbnQgbiA9IGZpbmRfbmV4dF96ZXJvX2JpdChpb21tdS0+Y3R4X2JpdG1hcCwgc3osIGxvd2VzdCk7CisJaW50IG4gPSBmaW5kX25leHRfemVyb19iaXQoaW9tbXUtPmN0eF9iaXRtYXAsIElPTU1VX05VTV9DVFhTLCBsb3dlc3QpOwogCi0JaWYgKHVubGlrZWx5KG4gPT0gc3opKSB7CisJaWYgKHVubGlrZWx5KG4gPT0gSU9NTVVfTlVNX0NUWFMpKSB7CiAJCW4gPSBmaW5kX25leHRfemVyb19iaXQoaW9tbXUtPmN0eF9iaXRtYXAsIGxvd2VzdCwgMSk7CiAJCWlmICh1bmxpa2VseShuID09IGxvd2VzdCkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIklPTU1VOiBSYW4gb3V0IG9mIGNvbnRleHRzLlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY3IuYyBiL2FyY2gvc3BhcmMva2VybmVsL3Bjci5jCmluZGV4IGFlOTZjZjUuLjdjMmNlZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Bjci5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Bjci5jCkBAIC0xNjcsNSArMTY3LDMgQEAKIAl1bnJlZ2lzdGVyX3BlcmZfaHN2YygpOwogCXJldHVybiBlcnI7CiB9Ci0KLWVhcmx5X2luaXRjYWxsKHBjcl9hcmNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwppbmRleCBiNmEyYjhmLi41NTVhNzZkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPGFzbS9tZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9sZGMuaD4KICNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgPGFzbS9wY3IuaD4KIAogI2luY2x1ZGUgImNwdW1hcC5oIgogCkBAIC0xMzU4LDYgKzEzNTksNyBAQAogCiB2b2lkIF9faW5pdCBzbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKKwlwY3JfYXJjaF9pbml0KCk7CiB9CiAKIHZvaWQgc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdW5hX2FzbV8zMi5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvdW5hX2FzbV8zMi5TCmluZGV4IDhjYzAzNDUuLjhmMDk2ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3VuYV9hc21fMzIuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC91bmFfYXNtXzMyLlMKQEAgLTI0LDkgKzI0LDkgQEAKIAkuZ2xvYmwJX19kb19pbnRfc3RvcmUKIF9fZG9faW50X3N0b3JlOgogCWxkCVslbzJdLCAlZzEKLQljbXAJJTEsIDIKKwljbXAJJW8xLCAyCiAJYmUJMmYKLQkgY21wCSUxLCA0CisJIGNtcAklbzEsIDQKIAliZQkxZgogCSBzcmwJJWcxLCAyNCwgJWcyCiAJc3JsCSVnMSwgMTYsICVnNwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9saWIvYml0ZXh0LmMgYi9hcmNoL3NwYXJjL2xpYi9iaXRleHQuYwppbmRleCA3NjRiM2ViLi40OGQwMGU3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2xpYi9iaXRleHQuYworKysgYi9hcmNoL3NwYXJjL2xpYi9iaXRleHQuYwpAQCAtMTAsNyArMTAsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KIAogI2luY2x1ZGUgPGFzbS9iaXRleHQuaD4KIApAQCAtODAsOCArODAsNyBAQAogCQl3aGlsZSAodGVzdF9iaXQob2Zmc2V0ICsgaSwgdC0+bWFwKSA9PSAwKSB7CiAJCQlpKys7CiAJCQlpZiAoaSA9PSBsZW4pIHsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCQkJCV9fc2V0X2JpdChvZmZzZXQgKyBpLCB0LT5tYXApOworCQkJCWJpdG1hcF9zZXQodC0+bWFwLCBvZmZzZXQsIGxlbik7CiAJCQkJaWYgKG9mZnNldCA9PSB0LT5maXJzdF9mcmVlKQogCQkJCQl0LT5maXJzdF9mcmVlID0gZmluZF9uZXh0X3plcm9fYml0CiAJCQkJCQkJKHQtPm1hcCwgdC0+c2l6ZSwKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9LY29uZmlnIGIvYXJjaC90aWxlL0tjb25maWcKaW5kZXggZTExYjVmYy4uMDg5NDhlNCAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL0tjb25maWcKKysrIGIvYXJjaC90aWxlL0tjb25maWcKQEAgLTEsMjUgKzEsMzQgQEAKICMgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHN5bnRheCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSwKICMgc2VlIERvY3VtZW50YXRpb24va2J1aWxkL2NvbmZpZy1sYW5ndWFnZS50eHQuCiAKK2NvbmZpZyBUSUxFCisJZGVmX2Jvb2wgeQorCXNlbGVjdCBIQVZFX0tWTSBpZiAhVElMRUdYCisJc2VsZWN0IEdFTkVSSUNfRklORF9GSVJTVF9CSVQKKwlzZWxlY3QgR0VORVJJQ19GSU5EX05FWFRfQklUCisJc2VsZWN0IFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTCisJc2VsZWN0IENDX09QVElNSVpFX0ZPUl9TSVpFCisJc2VsZWN0IEhBVkVfR0VORVJJQ19IQVJESVJRUworCXNlbGVjdCBHRU5FUklDX0lSUV9QUk9CRQorCXNlbGVjdCBHRU5FUklDX1BFTkRJTkdfSVJRIGlmIFNNUAorCisjIEZJWE1FOiBpbnZlc3RpZ2F0ZSB3aGV0aGVyIHdlIG5lZWQvd2FudCB0aGVzZSBvcHRpb25zLgorIwlzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QKKyMgICAgICAgc2VsZWN0IEhBVkVfT1BUUFJPQkVTCisjICAgICAgIHNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUEkKKyMgICAgICAgc2VsZWN0IEhBVkVfSFdfQlJFQUtQT0lOVAorIyAgICAgICBzZWxlY3QgUEVSRl9FVkVOVFMKKyMgICAgICAgc2VsZWN0IEhBVkVfVVNFUl9SRVRVUk5fTk9USUZJRVIKKyMgICAgICAgY29uZmlnIE5PX0JPT1RNRU0KKyMgICAgICAgY29uZmlnIEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DCisjICAgICAgIGNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRQorCiBjb25maWcgTU1VCiAJZGVmX2Jvb2wgeQogCiBjb25maWcgR0VORVJJQ19DU1VNCiAJZGVmX2Jvb2wgeQogCi1jb25maWcgR0VORVJJQ19IQVJESVJRUwotCWRlZl9ib29sIHkKLQotY29uZmlnIEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQotCWRlZl9ib29sIHkKLQotY29uZmlnIEdFTkVSSUNfSVJRX1BST0JFCi0JZGVmX2Jvb2wgeQotCi1jb25maWcgR0VORVJJQ19QRU5ESU5HX0lSUQotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIEdFTkVSSUNfSEFSRElSUVMgJiYgU01QCi0KIGNvbmZpZyBTRU1BUEhPUkVfU0xFRVBFUlMKIAlkZWZfYm9vbCB5CiAKQEAgLTk3LDI2ICsxMDYsNiBAQAogCXNlbGVjdCBIVkNfRFJJVkVSCiAJZGVmX2Jvb2wgeQogCi1jb25maWcgVElMRQotCWRlZl9ib29sIHkKLQlzZWxlY3QgSEFWRV9LVk0gaWYgIVRJTEVHWAotCXNlbGVjdCBHRU5FUklDX0ZJTkRfRklSU1RfQklUCi0Jc2VsZWN0IEdFTkVSSUNfRklORF9ORVhUX0JJVAotCXNlbGVjdCBVU0VfR0VORVJJQ19TTVBfSEVMUEVSUwotCXNlbGVjdCBDQ19PUFRJTUlaRV9GT1JfU0laRQotCi0jIEZJWE1FOiBpbnZlc3RpZ2F0ZSB3aGV0aGVyIHdlIG5lZWQvd2FudCB0aGVzZSBvcHRpb25zLgotIwlzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QKLSMgICAgICAgc2VsZWN0IEhBVkVfT1BUUFJPQkVTCi0jICAgICAgIHNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUEkKLSMgICAgICAgc2VsZWN0IEhBVkVfSFdfQlJFQUtQT0lOVAotIyAgICAgICBzZWxlY3QgUEVSRl9FVkVOVFMKLSMgICAgICAgc2VsZWN0IEhBVkVfVVNFUl9SRVRVUk5fTk9USUZJRVIKLSMgICAgICAgY29uZmlnIE5PX0JPT1RNRU0KLSMgICAgICAgY29uZmlnIEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DCi0jICAgICAgIGNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRQotCi0KICMgUGxlYXNlIG5vdGU6IFRJTEUtR3ggc3VwcG9ydCBpcyBub3QgeWV0IGZpbmFsaXplZDsgdGhpcyBpcwogIyB0aGUgcHJlbGltaW5hcnkgc3VwcG9ydC4gIFRJTEUtR3ggZHJpdmVycyBhcmUgb25seSBwcm92aWRlZAogIyB3aXRoIHRoZSBhbHBoYSBvciBiZXRhIHRlc3QgdmVyc2lvbnMgZm9yIFRpbGVyYSBjdXN0b21lcnMuCkBAIC0yMjAsNyArMjA5LDcgQEAKIAogY2hvaWNlCiAJZGVwZW5kcyBvbiAhVElMRUdYCi0JcHJvbXB0ICJNZW1vcnkgc3BsaXQiIGlmIEVNQkVEREVECisJcHJvbXB0ICJNZW1vcnkgc3BsaXQiIGlmIEVYUEVSVAogCWRlZmF1bHQgVk1TUExJVF8zRwogCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0aGUgZGVzaXJlZCBzcGxpdCBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBtZW1vcnkuCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvdGlsZS9LY29uZmlnLmRlYnVnCmluZGV4IGE4MWYwZmIuLjliYzE2MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvdGlsZS9LY29uZmlnLmRlYnVnCkBAIC0zLDcgKzMsNyBAQAogc291cmNlICJsaWIvS2NvbmZpZy5kZWJ1ZyIKIAogY29uZmlnIEVBUkxZX1BSSU5USwotCWJvb2wgIkVhcmx5IHByaW50ayIgaWYgRU1CRURERUQgJiYgREVCVUdfS0VSTkVMCisJYm9vbCAiRWFybHkgcHJpbnRrIiBpZiBFWFBFUlQgJiYgREVCVUdfS0VSTkVMCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgV3JpdGUga2VybmVsIGxvZyBvdXRwdXQgZGlyZWN0bHkgdmlhIHRoZSBoeXBlcnZpc29yIGNvbnNvbGUuCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvY29uZmlncy90aWxlX2RlZmNvbmZpZyBiL2FyY2gvdGlsZS9jb25maWdzL3RpbGVfZGVmY29uZmlnCmluZGV4IDkxOWM1NGEuLjBmZTU0NDQ1IDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvY29uZmlncy90aWxlX2RlZmNvbmZpZworKysgYi9hcmNoL3RpbGUvY29uZmlncy90aWxlX2RlZmNvbmZpZwpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0idXNyL2NvbnRlbnRzLnR4dCIKLUNPTkZJR19FTUJFRERFRD15CitDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfTU9EVUxFUz15CmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcuY29tbW9uIGIvYXJjaC91bS9LY29uZmlnLmNvbW1vbgppbmRleCAwNDlkMDQ4Li5lMzUxZTE0IDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWcuY29tbW9uCisrKyBiL2FyY2gvdW0vS2NvbmZpZy5jb21tb24KQEAgLTMsMTQgKzMsMTAgQEAKIAlvcHRpb24gZGVmY29uZmlnX2xpc3QKIAlkZWZhdWx0ICJhcmNoLyRBUkNIL2RlZmNvbmZpZyIKIAotIyBVTUwgdXNlcyB0aGUgZ2VuZXJpYyBJUlEgc3Vic3lzdGVtCi1jb25maWcgR0VORVJJQ19IQVJESVJRUwotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIFVNTAogCWJvb2wKIAlkZWZhdWx0IHkKKwlzZWxlY3QgSEFWRV9HRU5FUklDX0hBUkRJUlFTCiAKIGNvbmZpZyBNTVUKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcudW0gYi9hcmNoL3VtL0tjb25maWcudW0KaW5kZXggZjhkMWQwZC4uOTBhNDM4YSAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnLnVtCisrKyBiL2FyY2gvdW0vS2NvbmZpZy51bQpAQCAtMTIwLDkgKzEyMCw2IEBACiAKIAkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8sIHNheSBOLgogCi1jb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgTlJfQ1BVUwogCWludCAiTWF4aW11bSBudW1iZXIgb2YgQ1BVcyAoMi0zMikiCiAJcmFuZ2UgMiAzMgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kZWZjb25maWcgYi9hcmNoL3VtL2RlZmNvbmZpZwppbmRleCA1NjRmM2RlLi45Zjc2MzRmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RlZmNvbmZpZworKysgYi9hcmNoL3VtL2RlZmNvbmZpZwpAQCAtMTMzLDcgKzEzMyw3IEBACiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFBFUlQgaXMgbm90IHNldAogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggM2VkNWFkOS4uZDVlZDk0ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC02MjcsMTEgKzYyNywxMSBAQAogICAgICAgICAgYXMgaXQgaXMgb2ZmLWNoaXAuIEFQQiB0aW1lcnMgYXJlIGFsd2F5cyBydW5uaW5nIHJlZ2FyZGxlc3Mgb2YgQ1BVCiAgICAgICAgICBDIHN0YXRlcywgdGhleSBhcmUgdXNlZCBhcyBwZXIgQ1BVIGNsb2NrZXZlbnQgZGV2aWNlIHdoZW4gcG9zc2libGUuCiAKLSMgTWFyayBhcyBlbWJlZGRlZCBiZWNhdXNlIHRvbyBtYW55IHBlb3BsZSBnb3QgaXQgd3JvbmcuCisjIE1hcmsgYXMgZXhwZXJ0IGJlY2F1c2UgdG9vIG1hbnkgcGVvcGxlIGdvdCBpdCB3cm9uZy4KICMgVGhlIGNvZGUgZGlzYWJsZXMgaXRzZWxmIHdoZW4gbm90IG5lZWRlZC4KIGNvbmZpZyBETUkKIAlkZWZhdWx0IHkKLQlib29sICJFbmFibGUgRE1JIHNjYW5uaW5nIiBpZiBFTUJFRERFRAorCWJvb2wgIkVuYWJsZSBETUkgc2Nhbm5pbmciIGlmIEVYUEVSVAogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZWQgc2Nhbm5pbmcgb2YgRE1JIHRvIGlkZW50aWZ5IG1hY2hpbmUgcXVpcmtzLiBTYXkgWQogCSAgaGVyZSB1bmxlc3MgeW91IGhhdmUgdmVyaWZpZWQgdGhhdCB5b3VyIHNldHVwIGlzIG5vdApAQCAtNjM5LDcgKzYzOSw3IEBACiAJICBCSU9TIGNvZGUuCiAKIGNvbmZpZyBHQVJUX0lPTU1VCi0JYm9vbCAiR0FSVCBJT01NVSBzdXBwb3J0IiBpZiBFTUJFRERFRAorCWJvb2wgIkdBUlQgSU9NTVUgc3VwcG9ydCIgaWYgRVhQRVJUCiAJZGVmYXVsdCB5CiAJc2VsZWN0IFNXSU9UTEIKIAlkZXBlbmRzIG9uIFg4Nl82NCAmJiBQQ0kgJiYgQU1EX05CCkBAIC04ODksNyArODg5LDcgQEAKIAlkZXBlbmRzIG9uIFg4Nl9NQ0VfSU5URUwKIAogY29uZmlnIFZNODYKLQlib29sICJFbmFibGUgVk04NiBzdXBwb3J0IiBpZiBFTUJFRERFRAorCWJvb2wgIkVuYWJsZSBWTTg2IHN1cHBvcnQiIGlmIEVYUEVSVAogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gWDg2XzMyCiAJLS0taGVscC0tLQpAQCAtMTA3Myw3ICsxMDczLDcgQEAKIAogY2hvaWNlCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQlwcm9tcHQgIk1lbW9yeSBzcGxpdCIgaWYgRU1CRURERUQKKwlwcm9tcHQgIk1lbW9yeSBzcGxpdCIgaWYgRVhQRVJUCiAJZGVmYXVsdCBWTVNQTElUXzNHCiAJZGVwZW5kcyBvbiBYODZfMzIKIAktLS1oZWxwLS0tCkBAIC0xMTM1LDcgKzExMzUsNyBAQAogCWRlZl9ib29sIFg4Nl82NCB8fCBISUdITUVNNjRHCiAKIGNvbmZpZyBESVJFQ1RfR0JQQUdFUwotCWJvb2wgIkVuYWJsZSAxR0IgcGFnZXMgZm9yIGtlcm5lbCBwYWdldGFibGVzIiBpZiBFTUJFRERFRAorCWJvb2wgIkVuYWJsZSAxR0IgcGFnZXMgZm9yIGtlcm5lbCBwYWdldGFibGVzIiBpZiBFWFBFUlQKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uIFg4Nl82NAogCS0tLWhlbHAtLS0KQEAgLTEzNjksNyArMTM2OSw3IEBACiAKIGNvbmZpZyBNVFJSCiAJZGVmX2Jvb2wgeQotCXByb21wdCAiTVRSUiAoTWVtb3J5IFR5cGUgUmFuZ2UgUmVnaXN0ZXIpIHN1cHBvcnQiIGlmIEVNQkVEREVECisJcHJvbXB0ICJNVFJSIChNZW1vcnkgVHlwZSBSYW5nZSBSZWdpc3Rlcikgc3VwcG9ydCIgaWYgRVhQRVJUCiAJLS0taGVscC0tLQogCSAgT24gSW50ZWwgUDYgZmFtaWx5IHByb2Nlc3NvcnMgKFBlbnRpdW0gUHJvLCBQZW50aXVtIElJIGFuZCBsYXRlcikKIAkgIHRoZSBNZW1vcnkgVHlwZSBSYW5nZSBSZWdpc3RlcnMgKE1UUlJzKSBtYXkgYmUgdXNlZCB0byBjb250cm9sCkBAIC0xNDM1LDcgKzE0MzUsNyBAQAogCiBjb25maWcgWDg2X1BBVAogCWRlZl9ib29sIHkKLQlwcm9tcHQgIng4NiBQQVQgc3VwcG9ydCIgaWYgRU1CRURERUQKKwlwcm9tcHQgIng4NiBQQVQgc3VwcG9ydCIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBNVFJSCiAJLS0taGVscC0tLQogCSAgVXNlIFBBVCBhdHRyaWJ1dGVzIHRvIHNldHVwIHBhZ2UgbGV2ZWwgY2FjaGUgY29udHJvbC4KQEAgLTE1MzksNyArMTUzOSw3IEBACiAJICBjb2RlIGluIHBoeXNpY2FsIGFkZHJlc3MgbW9kZSB2aWEgS0VYRUMKIAogY29uZmlnIFBIWVNJQ0FMX1NUQVJUCi0JaGV4ICJQaHlzaWNhbCBhZGRyZXNzIHdoZXJlIHRoZSBrZXJuZWwgaXMgbG9hZGVkIiBpZiAoRU1CRURERUQgfHwgQ1JBU0hfRFVNUCkKKwloZXggIlBoeXNpY2FsIGFkZHJlc3Mgd2hlcmUgdGhlIGtlcm5lbCBpcyBsb2FkZWQiIGlmIChFWFBFUlQgfHwgQ1JBU0hfRFVNUCkKIAlkZWZhdWx0ICIweDEwMDAwMDAiCiAJLS0taGVscC0tLQogCSAgVGhpcyBnaXZlcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyB3aGVyZSB0aGUga2VybmVsIGlzIGxvYWRlZC4KQEAgLTE5MzQsNyArMTkzNCw3IEBACiAJZGVwZW5kcyBvbiBYODZfNjQgJiYgUENJICYmIEFDUEkKIAogY29uZmlnIFBDSV9DTkIyMExFX1FVSVJLCi0JYm9vbCAiUmVhZCBDTkIyMExFIEhvc3QgQnJpZGdlIFdpbmRvd3MiIGlmIEVNQkVEREVECisJYm9vbCAiUmVhZCBDTkIyMExFIEhvc3QgQnJpZGdlIFdpbmRvd3MiIGlmIEVYUEVSVAogCWRlZmF1bHQgbgogCWRlcGVuZHMgb24gUENJICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcuY3B1IGIvYXJjaC94ODYvS2NvbmZpZy5jcHUKaW5kZXggMTU1ODhhMC4uMjgzYzVhNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZy5jcHUKKysrIGIvYXJjaC94ODYvS2NvbmZpZy5jcHUKQEAgLTQyNCw3ICs0MjQsNyBAQAogCWRlcGVuZHMgb24gIShNSzYgfHwgTVdJTkNISVBDNiB8fCBNV0lOQ0hJUDNEIHx8IE1DWVJJWElJSSB8fCBNNTg2TU1YIHx8IE01ODZUU0MgfHwgTTU4NiB8fCBNNDg2IHx8IE0zODYpICYmICFVTUwKIAogbWVudWNvbmZpZyBQUk9DRVNTT1JfU0VMRUNUCi0JYm9vbCAiU3VwcG9ydGVkIHByb2Nlc3NvciB2ZW5kb3JzIiBpZiBFTUJFRERFRAorCWJvb2wgIlN1cHBvcnRlZCBwcm9jZXNzb3IgdmVuZG9ycyIgaWYgRVhQRVJUCiAJLS0taGVscC0tLQogCSAgVGhpcyBsZXRzIHlvdSBjaG9vc2Ugd2hhdCB4ODYgdmVuZG9yIHN1cHBvcnQgY29kZSB5b3VyIGtlcm5lbAogCSAgd2lsbCBpbmNsdWRlLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gveDg2L0tjb25maWcuZGVidWcKaW5kZXggNDUxNDNiYi4uNjE1ZTE4OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3g4Ni9LY29uZmlnLmRlYnVnCkBAIC0zMSw3ICszMSw3IEBACiAJICBzZWUgZXJyb3JzLiBEaXNhYmxlIHRoaXMgaWYgeW91IHdhbnQgc2lsZW50IGJvb3R1cC4KIAogY29uZmlnIEVBUkxZX1BSSU5USwotCWJvb2wgIkVhcmx5IHByaW50ayIgaWYgRU1CRURERUQKKwlib29sICJFYXJseSBwcmludGsiIGlmIEVYUEVSVAogCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KIAkgIFdyaXRlIGtlcm5lbCBsb2cgb3V0cHV0IGRpcmVjdGx5IGludG8gdGhlIFZHQSBidWZmZXIgb3IgdG8gYSBzZXJpYWwKQEAgLTEzOCw3ICsxMzgsNyBAQAogCiBjb25maWcgRE9VQkxFRkFVTFQKIAlkZWZhdWx0IHkKLQlib29sICJFbmFibGUgZG91YmxlZmF1bHQgZXhjZXB0aW9uIGhhbmRsZXIiIGlmIEVNQkVEREVECisJYm9vbCAiRW5hYmxlIGRvdWJsZWZhdWx0IGV4Y2VwdGlvbiBoYW5kbGVyIiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIFg4Nl8zMgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGFsbG93cyB0cmFwcGluZyBvZiByYXJlIGRvdWJsZWZhdWx0IGV4Y2VwdGlvbnMgdGhhdApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oCmluZGV4IDIxMWNhM2YuLjRlYTE1Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmgKQEAgLTg4LDYgKzg4LDcgQEAKIGV4dGVybiBpbnQgYWNwaV9wY2lfZGlzYWJsZWQ7CiBleHRlcm4gaW50IGFjcGlfc2tpcF90aW1lcl9vdmVycmlkZTsKIGV4dGVybiBpbnQgYWNwaV91c2VfdGltZXJfb3ZlcnJpZGU7CitleHRlcm4gaW50IGFjcGlfZml4X3BpbjJfcG9sYXJpdHk7CiAKIGV4dGVybiB1OCBhY3BpX3NjaV9mbGFnczsKIGV4dGVybiBpbnQgYWNwaV9zY2lfb3ZlcnJpZGVfZ3NpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCmluZGV4IDVlMzk2OWMuLjNjODk2OTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKQEAgLTIzMyw2ICsyMzMsNyBAQAogZXh0ZXJuIHZvaWQgaW5pdF9ic3BfQVBJQyh2b2lkKTsKIGV4dGVybiB2b2lkIHNldHVwX2xvY2FsX0FQSUModm9pZCk7CiBleHRlcm4gdm9pZCBlbmRfbG9jYWxfQVBJQ19zZXR1cCh2b2lkKTsKK2V4dGVybiB2b2lkIGJzcF9lbmRfbG9jYWxfQVBJQ19zZXR1cCh2b2lkKTsKIGV4dGVybiB2b2lkIGluaXRfYXBpY19tYXBwaW5ncyh2b2lkKTsKIHZvaWQgcmVnaXN0ZXJfbGFwaWNfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogZXh0ZXJuIHZvaWQgc2V0dXBfYm9vdF9BUElDX2Nsb2NrKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDYzZTM1ZWMuLjYyZjA4NDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTEsNDggKzEsOCBAQAogI2lmbmRlZiBfQVNNX1g4Nl9DQUNIRUZMVVNIX0gKICNkZWZpbmUgX0FTTV9YODZfQ0FDSEVGTFVTSF9ICiAKLS8qIEtlZXAgaW5jbHVkZXMgdGhlIHNhbWUgYWNyb3NzIGFyY2hlcy4gICovCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLQogLyogQ2FjaGVzIGFyZW4ndCBicmFpbi1kZWFkIG9uIHRoZSBpbnRlbC4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9hbGwodm9pZCkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX2R1cF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyB2bWFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuKSB7IH0KLSNkZWZpbmUgQVJDSF9JTVBMRU1FTlRTX0ZMVVNIX0RDQUNIRV9QQUdFIDAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfaWNhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJCSAgIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgbGVuKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV92bWFwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV92dW5tYXAodW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCkgeyB9Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3RvX3VzZXJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkgICAgIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyLAotCQkJCSAgICAgdm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIGxlbikKLXsKLQltZW1jcHkoZHN0LCBzcmMsIGxlbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X2Zyb21fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkciwKLQkJCQkgICAgICAgdm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuKQotewotCW1lbWNweShkc3QsIHNyYywgbGVuKTsKLX0KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jYWNoZWZsdXNoLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2X1BBVAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1LmgKaW5kZXggNGZhYjI0ZC4uNDU2NGM4ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1LmgKQEAgLTMyLDUgKzMyLDYgQEAKIAogREVDTEFSRV9QRVJfQ1BVKGludCwgY3B1X3N0YXRlKTsKIAoraW50IG13YWl0X3VzYWJsZShjb25zdCBzdHJ1Y3QgY3B1aW5mb194ODYgKik7CiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9DUFVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oCmluZGV4IGY1MmQ0MmUuLjU3NGRiYzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmgKQEAgLTE0LDcgKzE0LDcgQEAKIAlkbyB7CQkJCQkJCVwKIAkJYXNtIGdvdG8oIjE6IgkJCQkJXAogCQkJSlVNUF9MQUJFTF9JTklUSUFMX05PUAkJCVwKLQkJCSIucHVzaHNlY3Rpb24gX19qdW1wX3RhYmxlLCAgXCJhXCIgXG5cdCJcCisJCQkiLnB1c2hzZWN0aW9uIF9fanVtcF90YWJsZSwgIFwiYXdcIiBcblx0IlwKIAkJCV9BU01fUFRSICIxYiwgJWxbIiAjbGFiZWwgIl0sICVjMCBcblx0IiBcCiAJCQkiLnBvcHNlY3Rpb24gXG5cdCIJCQlcCiAJCQk6IDogICJpIiAoa2V5KSA6ICA6IGxhYmVsKTsJCVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IDRhMmQ0ZTAuLjhiNTM5M2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMzYsOCArMzYsNiBAQAogCXVuc2lnbmVkIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCWlmIChsaWtlbHkocHJldiAhPSBuZXh0KSkgewotCQkvKiBzdG9wIGZsdXNoIGlwaXMgZm9yIHRoZSBwcmV2aW91cyBtbSAqLwotCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1tX2NwdW1hc2socHJldikpOwogI2lmZGVmIENPTkZJR19TTVAKIAkJcGVyY3B1X3dyaXRlKGNwdV90bGJzdGF0ZS5zdGF0ZSwgVExCU1RBVEVfT0spOwogCQlwZXJjcHVfd3JpdGUoY3B1X3RsYnN0YXRlLmFjdGl2ZV9tbSwgbmV4dCk7CkBAIC00Nyw2ICs0NSw5IEBACiAJCS8qIFJlLWxvYWQgcGFnZSB0YWJsZXMgKi8KIAkJbG9hZF9jcjMobmV4dC0+cGdkKTsKIAorCQkvKiBzdG9wIGZsdXNoIGlwaXMgZm9yIHRoZSBwcmV2aW91cyBtbSAqLworCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1tX2NwdW1hc2socHJldikpOworCiAJCS8qCiAJCSAqIGxvYWQgdGhlIExEVCwgaWYgdGhlIExEVCBpcyBkaWZmZXJlbnQ6CiAJCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV8zMi5oCmluZGV4IGEzNzIyOTAuLmIwZWYyYjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hXzMyLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9BU01fWDg2X05VTUFfMzJfSAogI2RlZmluZSBfQVNNX1g4Nl9OVU1BXzMyX0gKIAorZXh0ZXJuIGludCBudW1hX29mZjsKKwogZXh0ZXJuIGludCBweG1fdG9fbmlkKGludCBweG0pOwogZXh0ZXJuIHZvaWQgbnVtYV9yZW1vdmVfY3B1KGludCBjcHUpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hXzY0LmgKaW5kZXggNWFlODcyOC4uMDQ5M2JlMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFfNjQuaApAQCAtNDAsNiArNDAsNyBAQAogI2lmZGVmIENPTkZJR19OVU1BX0VNVQogI2RlZmluZSBGQUtFX05PREVfTUlOX1NJWkUJKCh1NjQpMzIgPDwgMjApCiAjZGVmaW5lIEZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLCSh+KEZBS0VfTk9ERV9NSU5fU0laRSAtIDFVTCkpCit2b2lkIG51bWFfZW11X2NtZGxpbmUoY2hhciAqKTsKICNlbmRpZiAvKiBDT05GSUdfTlVNQV9FTVUgKi8KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9jcHVfdG9fbm9kZSh2b2lkKQkJeyB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAppbmRleCAyMDcxYThiLi5lYmJjNGQ4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKQEAgLTU1OCwxMyArNTU4LDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BtZF9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgICAgcG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKIHsKLSNpZiBQQUdFVEFCTEVfTEVWRUxTID49IDMKIAlpZiAoc2l6ZW9mKHBtZHZhbF90KSA+IHNpemVvZihsb25nKSkKIAkJLyogNSBhcmcgd29yZHMgKi8KIAkJcHZfbW11X29wcy5zZXRfcG1kX2F0KG1tLCBhZGRyLCBwbWRwLCBwbWQpOwogCWVsc2UKLQkJUFZPUF9WQ0FMTDQocHZfbW11X29wcy5zZXRfcG1kX2F0LCBtbSwgYWRkciwgcG1kcCwgcG1kLnBtZCk7Ci0jZW5kaWYKKwkJUFZPUF9WQ0FMTDQocHZfbW11X29wcy5zZXRfcG1kX2F0LCBtbSwgYWRkciwgcG1kcCwKKwkJCSAgICBuYXRpdmVfcG1kX3ZhbChwbWQpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCmluZGV4IDhlZTQ1MTYuLjdlMTcyOTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCkBAIC0yNzMsMzQgKzI3MywzNCBAQAogCXR5cGVvZih2YXIpIHB4b19uZXdfXyA9IChudmFsKTsJCQkJCVwKIAlzd2l0Y2ggKHNpemVvZih2YXIpKSB7CQkJCQkJXAogCWNhc2UgMToJCQkJCQkJCVwKLQkJYXNtKCJcbjE6bW92ICJfX3BlcmNwdV9hcmcoMSkiLCUlYWwiCQkJXAotCQkgICAgIlxuXHRjbXB4Y2hnYiAlMiwgIl9fcGVyY3B1X2FyZygxKQkJCVwKKwkJYXNtKCJcblx0bW92ICJfX3BlcmNwdV9hcmcoMSkiLCUlYWwiCQkJXAorCQkgICAgIlxuMTpcdGNtcHhjaGdiICUyLCAiX19wZXJjcHVfYXJnKDEpCQlcCiAJCSAgICAiXG5cdGpueiAxYiIJCQkJCVwKLQkJCSAgICA6ICI9YSIgKHB4b19yZXRfXyksICIrbSIgKHZhcikJCVwKKwkJCSAgICA6ICI9JmEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCiAJCQkgICAgOiAicSIgKHB4b19uZXdfXykJCQkJXAogCQkJICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCiAJY2FzZSAyOgkJCQkJCQkJXAotCQlhc20oIlxuMTptb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVheCIJCQlcCi0JCSAgICAiXG5cdGNtcHhjaGd3ICUyLCAiX19wZXJjcHVfYXJnKDEpCQkJXAorCQlhc20oIlxuXHRtb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVheCIJCQlcCisJCSAgICAiXG4xOlx0Y21weGNoZ3cgJTIsICJfX3BlcmNwdV9hcmcoMSkJCVwKIAkJICAgICJcblx0am56IDFiIgkJCQkJXAotCQkJICAgIDogIj1hIiAocHhvX3JldF9fKSwgIittIiAodmFyKQkJXAorCQkJICAgIDogIj0mYSIgKHB4b19yZXRfXyksICIrbSIgKHZhcikJCVwKIAkJCSAgICA6ICJyIiAocHhvX25ld19fKQkJCQlcCiAJCQkgICAgOiAibWVtb3J5Iik7CQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKIAljYXNlIDQ6CQkJCQkJCQlcCi0JCWFzbSgiXG4xOm1vdiAiX19wZXJjcHVfYXJnKDEpIiwlJWVheCIJCQlcCi0JCSAgICAiXG5cdGNtcHhjaGdsICUyLCAiX19wZXJjcHVfYXJnKDEpCQkJXAorCQlhc20oIlxuXHRtb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVlYXgiCQkJXAorCQkgICAgIlxuMTpcdGNtcHhjaGdsICUyLCAiX19wZXJjcHVfYXJnKDEpCQlcCiAJCSAgICAiXG5cdGpueiAxYiIJCQkJCVwKLQkJCSAgICA6ICI9YSIgKHB4b19yZXRfXyksICIrbSIgKHZhcikJCVwKKwkJCSAgICA6ICI9JmEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCiAJCQkgICAgOiAiciIgKHB4b19uZXdfXykJCQkJXAogCQkJICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCiAJY2FzZSA4OgkJCQkJCQkJXAotCQlhc20oIlxuMTptb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVyYXgiCQkJXAotCQkgICAgIlxuXHRjbXB4Y2hncSAlMiwgIl9fcGVyY3B1X2FyZygxKQkJCVwKKwkJYXNtKCJcblx0bW92ICJfX3BlcmNwdV9hcmcoMSkiLCUlcmF4IgkJCVwKKwkJICAgICJcbjE6XHRjbXB4Y2hncSAlMiwgIl9fcGVyY3B1X2FyZygxKQkJXAogCQkgICAgIlxuXHRqbnogMWIiCQkJCQlcCi0JCQkgICAgOiAiPWEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCisJCQkgICAgOiAiPSZhIiAocHhvX3JldF9fKSwgIittIiAodmFyKQkJXAogCQkJICAgIDogInIiIChweG9fbmV3X18pCQkJCVwKIAkJCSAgICA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXApAQCAtNDE0LDggKzQxNCw2IEBACiAjZGVmaW5lIHRoaXNfY3B1X3hjaGdfMShwY3AsIG52YWwpCXBlcmNwdV94Y2hnX29wKHBjcCwgbnZhbCkKICNkZWZpbmUgdGhpc19jcHVfeGNoZ18yKHBjcCwgbnZhbCkJcGVyY3B1X3hjaGdfb3AocGNwLCBudmFsKQogI2RlZmluZSB0aGlzX2NwdV94Y2hnXzQocGNwLCBudmFsKQlwZXJjcHVfeGNoZ19vcChwY3AsIG52YWwpCi0jZGVmaW5lIHRoaXNfY3B1X3hjaGdfOChwY3AsIG52YWwpCXBlcmNwdV94Y2hnX29wKHBjcCwgbnZhbCkKLSNkZWZpbmUgdGhpc19jcHVfY21weGNoZ184KHBjcCwgb3ZhbCwgbnZhbCkJcGVyY3B1X2NtcHhjaGdfb3AocGNwLCBvdmFsLCBudmFsKQogCiAjZGVmaW5lIGlycXNhZmVfY3B1X2FkZF8xKHBjcCwgdmFsKQlwZXJjcHVfYWRkX29wKChwY3ApLCB2YWwpCiAjZGVmaW5lIGlycXNhZmVfY3B1X2FkZF8yKHBjcCwgdmFsKQlwZXJjcHVfYWRkX29wKChwY3ApLCB2YWwpCkBAIC00MzIsOCArNDMwLDYgQEAKICNkZWZpbmUgaXJxc2FmZV9jcHVfeGNoZ18xKHBjcCwgbnZhbCkJcGVyY3B1X3hjaGdfb3AocGNwLCBudmFsKQogI2RlZmluZSBpcnFzYWZlX2NwdV94Y2hnXzIocGNwLCBudmFsKQlwZXJjcHVfeGNoZ19vcChwY3AsIG52YWwpCiAjZGVmaW5lIGlycXNhZmVfY3B1X3hjaGdfNChwY3AsIG52YWwpCXBlcmNwdV94Y2hnX29wKHBjcCwgbnZhbCkKLSNkZWZpbmUgaXJxc2FmZV9jcHVfeGNoZ184KHBjcCwgbnZhbCkJcGVyY3B1X3hjaGdfb3AocGNwLCBudmFsKQotI2RlZmluZSBpcnFzYWZlX2NwdV9jbXB4Y2hnXzgocGNwLCBvdmFsLCBudmFsKQlwZXJjcHVfY21weGNoZ19vcChwY3AsIG92YWwsIG52YWwpCiAKICNpZm5kZWYgQ09ORklHX00zODYKICNkZWZpbmUgX190aGlzX2NwdV9hZGRfcmV0dXJuXzEocGNwLCB2YWwpIHBlcmNwdV9hZGRfcmV0dXJuX29wKHBjcCwgdmFsKQpAQCAtNDc1LDExICs0NzEsMTUgQEAKICNkZWZpbmUgdGhpc19jcHVfb3JfOChwY3AsIHZhbCkJCXBlcmNwdV90b19vcCgib3IiLCAocGNwKSwgdmFsKQogI2RlZmluZSB0aGlzX2NwdV94b3JfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJ4b3IiLCAocGNwKSwgdmFsKQogI2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzgocGNwLCB2YWwpCXBlcmNwdV9hZGRfcmV0dXJuX29wKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV94Y2hnXzgocGNwLCBudmFsKQlwZXJjcHVfeGNoZ19vcChwY3AsIG52YWwpCisjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfOChwY3AsIG92YWwsIG52YWwpCXBlcmNwdV9jbXB4Y2hnX29wKHBjcCwgb3ZhbCwgbnZhbCkKIAogI2RlZmluZSBpcnFzYWZlX2NwdV9hZGRfOChwY3AsIHZhbCkJcGVyY3B1X2FkZF9vcCgocGNwKSwgdmFsKQogI2RlZmluZSBpcnFzYWZlX2NwdV9hbmRfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhbmQiLCAocGNwKSwgdmFsKQogI2RlZmluZSBpcnFzYWZlX2NwdV9vcl84KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm9yIiwgKHBjcCksIHZhbCkKICNkZWZpbmUgaXJxc2FmZV9jcHVfeG9yXzgocGNwLCB2YWwpCXBlcmNwdV90b19vcCgieG9yIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgaXJxc2FmZV9jcHVfeGNoZ184KHBjcCwgbnZhbCkJcGVyY3B1X3hjaGdfb3AocGNwLCBudmFsKQorI2RlZmluZSBpcnFzYWZlX2NwdV9jbXB4Y2hnXzgocGNwLCBvdmFsLCBudmFsKQlwZXJjcHVfY21weGNoZ19vcChwY3AsIG92YWwsIG52YWwpCiAjZW5kaWYKIAogLyogVGhpcyBpcyBub3QgYXRvbWljIGFnYWluc3Qgb3RoZXIgQ1BVcyAtLSBDUFUgcHJlZW1wdGlvbiBuZWVkcyB0byBiZSBvZmYgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnRfcDQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnRfcDQuaAppbmRleCBlMmY2YTk5Li5jYzI5MDg2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50X3A0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudF9wNC5oCkBAIC0yMiw2ICsyMiw3IEBACiAKICNkZWZpbmUgQVJDSF9QNF9DTlRSVkFMX0JJVFMJKDQwKQogI2RlZmluZSBBUkNIX1A0X0NOVFJWQUxfTUFTSwkoKDFVTEwgPDwgQVJDSF9QNF9DTlRSVkFMX0JJVFMpIC0gMSkKKyNkZWZpbmUgQVJDSF9QNF9VTkZMQUdHRURfQklUCSgoMVVMTCkgPDwgKEFSQ0hfUDRfQ05UUlZBTF9CSVRTIC0gMSkpCiAKICNkZWZpbmUgUDRfRVNDUl9FVkVOVF9NQVNLCTB4N2UwMDAwMDBVCiAjZGVmaW5lIFA0X0VTQ1JfRVZFTlRfU0hJRlQJMjUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggNGMyZjYzYy4uMWY0Njk1MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmgKQEAgLTQwLDEwICs0MCw3IEBACiBERUNMQVJFX0VBUkxZX1BFUl9DUFUodTE2LCB4ODZfYmlvc19jcHVfYXBpY2lkKTsKIAogLyogU3RhdGljIHN0YXRlIGluIGhlYWQuUyB1c2VkIHRvIHNldCB1cCBhIENQVSAqLwotZXh0ZXJuIHN0cnVjdCB7Ci0Jdm9pZCAqc3A7Ci0JdW5zaWduZWQgc2hvcnQgc3M7Ci19IHN0YWNrX3N0YXJ0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3RhY2tfc3RhcnQ7IC8qIEluaXRpYWwgc3RhY2sgcG9pbnRlciBhZGRyZXNzICovCiAKIHN0cnVjdCBzbXBfb3BzIHsKIAl2b2lkICgqc21wX3ByZXBhcmVfYm9vdF9jcHUpKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE1OWUwOS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfU1lTVEVNXzY0X0gKLSNkZWZpbmUgX0FTTV9YODZfU1lTVEVNXzY0X0gKLQotI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KLQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9jcjgodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGNyODsKLQlhc20gdm9sYXRpbGUoIm1vdnEgJSVjcjgsJTAiIDogIj1yIiAoY3I4KSk7Ci0JcmV0dXJuIGNyODsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2NyOCh1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQlhc20gdm9sYXRpbGUoIm1vdnEgJTAsJSVjcjgiIDo6ICJyIiAodmFsKSA6ICJtZW1vcnkiKTsKLX0KLQotI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+Ci0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9TWVNURU1fNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCmluZGV4IGIzYTcxMTMuLjNlNmUyZDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKQEAgLTcyLDYgKzcyLDcgQEAKIGludCBhY3BpX3NjaV9vdmVycmlkZV9nc2kgX19pbml0ZGF0YTsKIGludCBhY3BpX3NraXBfdGltZXJfb3ZlcnJpZGUgX19pbml0ZGF0YTsKIGludCBhY3BpX3VzZV90aW1lcl9vdmVycmlkZSBfX2luaXRkYXRhOworaW50IGFjcGlfZml4X3BpbjJfcG9sYXJpdHkgX19pbml0ZGF0YTsKIAogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogc3RhdGljIHU2NCBhY3BpX2xhcGljX2FkZHIgX19pbml0ZGF0YSA9IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7CkBAIC00MTUsMTAgKzQxNiwxNSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoYWNwaV9za2lwX3RpbWVyX292ZXJyaWRlICYmCi0JICAgIGludHNyYy0+c291cmNlX2lycSA9PSAwICYmIGludHNyYy0+Z2xvYmFsX2lycSA9PSAyKSB7Ci0JCXByaW50ayhQUkVGSVggIkJJT1MgSVJRMCBwaW4yIG92ZXJyaWRlIGlnbm9yZWQuXG4iKTsKLQkJcmV0dXJuIDA7CisJaWYgKGludHNyYy0+c291cmNlX2lycSA9PSAwICYmIGludHNyYy0+Z2xvYmFsX2lycSA9PSAyKSB7CisJCWlmIChhY3BpX3NraXBfdGltZXJfb3ZlcnJpZGUpIHsKKwkJCXByaW50ayhQUkVGSVggIkJJT1MgSVJRMCBwaW4yIG92ZXJyaWRlIGlnbm9yZWQuXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChhY3BpX2ZpeF9waW4yX3BvbGFyaXR5ICYmIChpbnRzcmMtPmludGlfZmxhZ3MgJiBBQ1BJX01BRFRfUE9MQVJJVFlfTUFTSykpIHsKKwkJCWludHNyYy0+aW50aV9mbGFncyAmPSB+QUNQSV9NQURUX1BPTEFSSVRZX01BU0s7CisJCQlwcmludGsoUFJFRklYICJCSU9TIElSUTAgcGluMiBvdmVycmlkZTogZm9yY2luZyBwb2xhcml0eSB0byBoaWdoIGFjdGl2ZS5cbiIpOworCQl9CiAJfQogCiAJbXBfb3ZlcnJpZGVfbGVnYWN5X2lycShpbnRzcmMtPnNvdXJjZV9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jIGIvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYwppbmRleCA2OWZkNzJhLi42OGQxNTM3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMKQEAgLTEyLDEwICsxMiw4IEBACiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KLQotI2lmZGVmIENPTkZJR19YODZfMzIKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2VuZGlmCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAogI2luY2x1ZGUgInJlYWxtb2RlL3dha2V1cC5oIgogI2luY2x1ZGUgInNsZWVwLmgiCkBAIC0xMDAsNyArOTgsNyBAQAogI2Vsc2UgLyogQ09ORklHXzY0QklUICovCiAJaGVhZGVyLT50cmFtcG9saW5lX3NlZ21lbnQgPSBzZXR1cF90cmFtcG9saW5lKCkgPj4gNDsKICNpZmRlZiBDT05GSUdfU01QCi0Jc3RhY2tfc3RhcnQuc3AgPSB0ZW1wX3N0YWNrICsgc2l6ZW9mKHRlbXBfc3RhY2spOworCXN0YWNrX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpdGVtcF9zdGFjayArIHNpemVvZih0ZW1wX3N0YWNrKTsKIAllYXJseV9nZHRfZGVzY3IuYWRkcmVzcyA9CiAJCQkodW5zaWduZWQgbG9uZylnZXRfY3B1X2dkdF90YWJsZShzbXBfcHJvY2Vzc29yX2lkKCkpOwogCWluaXRpYWxfZ3MgPSBwZXJfY3B1X29mZnNldChzbXBfcHJvY2Vzc29yX2lkKCkpOwpAQCAtMTQ5LDYgKzE0NywxNSBAQAogCW1lbWJsb2NrX3g4Nl9yZXNlcnZlX3JhbmdlKG1lbSwgbWVtICsgV0FLRVVQX1NJWkUsICJBQ1BJIFdBS0VVUCIpOwogfQogCitpbnQgX19pbml0IGFjcGlfY29uZmlndXJlX3dha2V1cF9tZW1vcnkodm9pZCkKK3sKKwlpZiAoYWNwaV9yZWFsbW9kZSkKKwkJc2V0X21lbW9yeV94KGFjcGlfcmVhbG1vZGUsIFdBS0VVUF9TSVpFID4+IFBBR0VfU0hJRlQpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKGFjcGlfY29uZmlndXJlX3dha2V1cF9tZW1vcnkpOworCiAKIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfc2xlZXBfc2V0dXAoY2hhciAqc3RyKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwppbmRleCAxMjM2MDg1Li43MDM4Yjk1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwpAQCAtNjcxLDcgKzY3MSw3IEBACiAKIAlhdG9taWNfc2V0KCZzdG9wX21hY2hpbmVfZmlyc3QsIDEpOwogCXdyb3RlX3RleHQgPSAwOwotCXN0b3BfbWFjaGluZShzdG9wX21hY2hpbmVfdGV4dF9wb2tlLCAodm9pZCAqKSZ0cHAsIE5VTEwpOworCV9fc3RvcF9tYWNoaW5lKHN0b3BfbWFjaGluZV90ZXh0X3Bva2UsICh2b2lkICopJnRwcCwgTlVMTCk7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkgfHwgZGVmaW5lZChIQVZFX0pVTVBfTEFCRUwpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMKaW5kZXggNTFlZjMxYS4uNTFkNGUxNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwYl90aW1lci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGJfdGltZXIuYwpAQCAtMjg0LDcgKzI4NCw3IEBACiAJbWVtY3B5KCZhZGV2LT5ldnQsICZhcGJ0X2Nsb2NrZXZlbnQsIHNpemVvZihzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlKSk7CiAKIAlpZiAobXJzdF90aW1lcl9vcHRpb25zID09IE1SU1RfVElNRVJfTEFQSUNfQVBCVCkgewotCQlhcGJ0X2Nsb2NrZXZlbnQucmF0aW5nID0gQVBCVF9DTE9DS0VWRU5UX1JBVElORyAtIDEwMDsKKwkJYWRldi0+ZXZ0LnJhdGluZyA9IEFQQlRfQ0xPQ0tFVkVOVF9SQVRJTkcgLSAxMDA7CiAJCWdsb2JhbF9jbG9ja19ldmVudCA9ICZhZGV2LT5ldnQ7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlcyBjbG9ja2V2ZW50IHJlZ2lzdGVyZWQgYXMgZ2xvYmFsXG4iLAogCQkgICAgICAgZ2xvYmFsX2Nsb2NrX2V2ZW50LT5uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwppbmRleCAwNmMxOTZkLi43NmI5NmQ3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCkBAIC0xMzgxLDEyICsxMzgxLDE3IEBACiAjZW5kaWYKIAogCWFwaWNfcG1fYWN0aXZhdGUoKTsKK30KKwordm9pZCBfX2luaXQgYnNwX2VuZF9sb2NhbF9BUElDX3NldHVwKHZvaWQpCit7CisJZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKIAogCS8qCiAJICogTm93IHRoYXQgbG9jYWwgQVBJQyBzZXR1cCBpcyBjb21wbGV0ZWQgZm9yIEJQLCBjb25maWd1cmUgdGhlIGZhdWx0CiAJICogaGFuZGxpbmcgZm9yIGludGVycnVwdCByZW1hcHBpbmcuCiAJICovCi0JaWYgKCFzbXBfcHJvY2Vzc29yX2lkKCkgJiYgaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKKwlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKIAkJZW5hYmxlX2RyaGRfZmF1bHRfaGFuZGxpbmcoKTsKIAogfQpAQCAtMTc1Niw3ICsxNzYxLDcgQEAKIAkJZW5hYmxlX0lPX0FQSUMoKTsKICNlbmRpZgogCi0JZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKKwlic3BfZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKIAogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwogCWlmIChzbXBfZm91bmRfY29uZmlnICYmICFza2lwX2lvYXBpY19zZXR1cCAmJiBucl9pb2FwaWNzKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCmluZGV4IDY5N2RjMzQuLmNhOWUyYTM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCkBAIC00MDAyLDYgKzQwMDIsOSBAQAogewogCWludCBpID0gMDsKIAorCWlmIChucl9pb2FwaWNzID09IDApCisJCXJldHVybiAtMTsKKwogCS8qIEZpbmQgdGhlIElPQVBJQyB0aGF0IG1hbmFnZXMgdGhpcyBHU0kuICovCiAJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgewogCQlpZiAoKGdzaSA+PSBtcF9nc2lfcm91dGluZ1tpXS5nc2lfYmFzZSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCmluZGV4IDcyODNlOTguLmVjMmMxOWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwpAQCAtNDUsNiArNDUsNyBAQAogCXsgMHgwYSwgTFZMXzFfREFUQSwgOCB9LAkvKiAyIHdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCiAJeyAweDBjLCBMVkxfMV9EQVRBLCAxNiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCiAJeyAweDBkLCBMVkxfMV9EQVRBLCAxNiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDBlLCBMVkxfMV9EQVRBLCAyNCB9LAkvKiA2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDIxLCBMVkxfMiwgICAgICAyNTYgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHgyMiwgTFZMXzMsICAgICAgNTEyIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDIzLCBMVkxfMywgICAgICBNQigxKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwpAQCAtNjYsNiArNjcsNyBAQAogCXsgMHg0NSwgTFZMXzIsICAgICAgTUIoMikgfSwJLyogNC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg0NiwgTFZMXzMsICAgICAgTUIoNCkgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg0NywgTFZMXzMsICAgICAgTUIoOCkgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg0OCwgTFZMXzIsICAgICAgTUIoMykgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4NDksIExWTF8zLCAgICAgIE1CKDQpIH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDRhLCBMVkxfMywgICAgICBNQig2KSB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg0YiwgTFZMXzMsICAgICAgTUIoOCkgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KQEAgLTg3LDYgKzg5LDcgQEAKIAl7IDB4N2MsIExWTF8yLCAgICAgIE1CKDEpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDdkLCBMVkxfMiwgICAgICBNQigyKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDdmLCBMVkxfMiwgICAgICA1MTIgfSwJLyogMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg4MCwgTFZMXzIsICAgICAgNTEyIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4ODIsIExWTF8yLCAgICAgIDI1NiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCiAJeyAweDgzLCBMVkxfMiwgICAgICA1MTIgfSwJLyogOC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg4NCwgTFZMXzIsICAgICAgTUIoMSkgfSwJLyogOC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKaW5kZXggZTEyMjQ2Zi4uNmY4YzVlOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCkBAIC01OSw2ICs1OSw3IEBACiAKIC8qIENhbGxiYWNrIHRvIGhhbmRsZSBjb3JlIHRocmVzaG9sZCBpbnRlcnJ1cHRzICovCiBpbnQgKCpwbGF0Zm9ybV90aGVybWFsX25vdGlmeSkoX191NjQgbXNyX3ZhbCk7CitFWFBPUlRfU1lNQk9MKHBsYXRmb3JtX3RoZXJtYWxfbm90aWZ5KTsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0aGVybWFsX3N0YXRlLCB0aGVybWFsX3N0YXRlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKaW5kZXggMDFjMGYzZS4uYmViYWJlYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCkBAIC03OTMsMTMgKzc5MywyMSBAQAogfQogCiAvKgotICogTVRSUiBpbml0aWFsaXphdGlvbiBmb3IgYWxsIEFQJ3MKKyAqIERlbGF5ZWQgTVRSUiBpbml0aWFsaXphdGlvbiBmb3IgYWxsIEFQJ3MKICAqLwogdm9pZCBtdHJyX2Fwc19pbml0KHZvaWQpCiB7CiAJaWYgKCF1c2VfaW50ZWwoKSkKIAkJcmV0dXJuOwogCisJLyoKKwkgKiBDaGVjayBpZiBzb21lb25lIGhhcyByZXF1ZXN0ZWQgdGhlIGRlbGF5IG9mIEFQIE1UUlIgaW5pdGlhbGl6YXRpb24sCisJICogYnkgZG9pbmcgc2V0X210cnJfYXBzX2RlbGF5ZWRfaW5pdCgpLCBwcmlvciB0byB0aGlzIHBvaW50LiBJZiBub3QsCisJICogdGhlbiB3ZSBhcmUgZG9uZS4KKwkgKi8KKwlpZiAoIW10cnJfYXBzX2RlbGF5ZWRfaW5pdCkKKwkJcmV0dXJuOworCiAJc2V0X210cnIofjBVLCAwLCAwLCAwKTsKIAltdHJyX2Fwc19kZWxheWVkX2luaXQgPSBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMKaW5kZXggZTU2YjliZi4uZmY3NTFhOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMKQEAgLTY4Miw3ICs2ODIsNyBAQAogCSAqIGlmIGFuIGV2ZW50IGlzIHNoYXJlZCBhY2Nyb3NzIHRoZSBsb2dpY2FsIHRocmVhZHMKIAkgKiB0aGUgdXNlciBuZWVkcyBzcGVjaWFsIHBlcm1pc3Npb25zIHRvIGJlIGFibGUgdG8gdXNlIGl0CiAJICovCi0JaWYgKHA0X2V2ZW50X2JpbmRfbWFwW3ZdLnNoYXJlZCkgeworCWlmIChwNF9odF9hY3RpdmUoKSAmJiBwNF9ldmVudF9iaW5kX21hcFt2XS5zaGFyZWQpIHsKIAkJaWYgKHBlcmZfcGFyYW5vaWRfY3B1KCkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CkBAIC03MjcsNyArNzI3LDggQEAKIAkJZXZlbnQtPmh3LmNvbmZpZyA9IHA0X3NldF9odF9iaXQoZXZlbnQtPmh3LmNvbmZpZyk7CiAKIAlpZiAoZXZlbnQtPmF0dHIudHlwZSA9PSBQRVJGX1RZUEVfUkFXKSB7Ci0KKwkJc3RydWN0IHA0X2V2ZW50X2JpbmQgKmJpbmQ7CisJCXVuc2lnbmVkIGludCBlc2VsOwogCQkvKgogCQkgKiBDbGVhciBiaXRzIHdlIHJlc2VydmUgdG8gYmUgbWFuYWdlZCBieSBrZXJuZWwgaXRzZWxmCiAJCSAqIGFuZCBuZXZlciBhbGxvd2VkIGZyb20gYSB1c2VyIHNwYWNlCkBAIC03NDMsNiArNzQ0LDEzIEBACiAJCSAqIGJpdHMgc2luY2Ugd2Uga2VlcCBhZGRpdGlvbmFsIGluZm8gaGVyZSAoZm9yIGNhY2hlIGV2ZW50cyBhbmQgZXRjKQogCQkgKi8KIAkJZXZlbnQtPmh3LmNvbmZpZyB8PSBldmVudC0+YXR0ci5jb25maWc7CisJCWJpbmQgPSBwNF9jb25maWdfZ2V0X2JpbmQoZXZlbnQtPmF0dHIuY29uZmlnKTsKKwkJaWYgKCFiaW5kKSB7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQllc2VsID0gUDRfT1BDT0RFX0VTRUwoYmluZC0+b3Bjb2RlKTsKKwkJZXZlbnQtPmh3LmNvbmZpZyB8PSBwNF9jb25maWdfcGFja19jY2NyKFA0X0NDQ1JfRVNFTChlc2VsKSk7CiAJfQogCiAJcmMgPSB4ODZfc2V0dXBfcGVyZmN0cihldmVudCk7CkBAIC03NjIsOSArNzcwLDE0IEBACiAJCXJldHVybiAxOwogCX0KIAotCS8qIGl0IG1pZ2h0IGJlIHVuZmxhZ2dlZCBvdmVyZmxvdyAqLwotCXJkbXNybChod2MtPmV2ZW50X2Jhc2UgKyBod2MtPmlkeCwgdik7Ci0JaWYgKCEodiAmIEFSQ0hfUDRfQ05UUlZBTF9NQVNLKSkKKwkvKgorCSAqIEluIHNvbWUgY2lyY3Vtc3RhbmNlcyB0aGUgb3ZlcmZsb3cgbWlnaHQgaXNzdWUgYW4gTk1JIGJ1dCBkaWQKKwkgKiBub3Qgc2V0IFA0X0NDQ1JfT1ZGIGJpdC4gQmVjYXVzZSBhIGNvdW50ZXIgaG9sZHMgYSBuZWdhdGl2ZSB2YWx1ZQorCSAqIHdlIHNpbXBseSBjaGVjayBmb3IgaGlnaCBiaXQgYmVpbmcgc2V0LCBpZiBpdCdzIGNsZWFyZWQgaXQgbWVhbnMKKwkgKiB0aGUgY291bnRlciBoYXMgcmVhY2hlZCB6ZXJvIHZhbHVlIGFuZCBjb250aW51ZWQgY291bnRpbmcgYmVmb3JlCisJICogcmVhbCBOTUkgc2lnbmFsIHdhcyByZWNlaXZlZDoKKwkgKi8KKwlpZiAoISh2ICYgQVJDSF9QNF9VTkZMQUdHRURfQklUKSkKIAkJcmV0dXJuIDE7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwppbmRleCA2NDEwMTMzLi5hNmI2ZmNmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCkBAIC0xNDksMTMgKzE0OSwxMyBAQAogCXVuc2lnbmVkIHVzZWQgPSAwOwogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm87CiAJaW50IGdyYXBoID0gMDsKKwl1bnNpZ25lZCBsb25nIGR1bW15OwogCXVuc2lnbmVkIGxvbmcgYnA7CiAKIAlpZiAoIXRhc2spCiAJCXRhc2sgPSBjdXJyZW50OwogCiAJaWYgKCFzdGFjaykgewotCQl1bnNpZ25lZCBsb25nIGR1bW15OwogCQlzdGFjayA9ICZkdW1teTsKIAkJaWYgKHRhc2sgJiYgdGFzayAhPSBjdXJyZW50KQogCQkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKXRhc2stPnRocmVhZC5zcDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lYXJseS1xdWlya3MuYyBiL2FyY2gveDg2L2tlcm5lbC9lYXJseS1xdWlya3MuYwppbmRleCA3NmI4Y2Q5Li45ZWZiZGNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZWFybHktcXVpcmtzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5LXF1aXJrcy5jCkBAIC0xNDMsMTUgKzE0MywxMCBAQAogCiBzdGF0aWMgdTMyIF9faW5pdCBhdGlfc2J4MDBfcmV2KGludCBudW0sIGludCBzbG90LCBpbnQgZnVuYykKIHsKLQl1MzIgb2xkLCBkOworCXUzMiBkOwogCi0JZCA9IHJlYWRfcGNpX2NvbmZpZyhudW0sIHNsb3QsIGZ1bmMsIDB4NzApOwotCW9sZCA9IGQ7Ci0JZCAmPSB+KDE8PDgpOwotCXdyaXRlX3BjaV9jb25maWcobnVtLCBzbG90LCBmdW5jLCAweDcwLCBkKTsKIAlkID0gcmVhZF9wY2lfY29uZmlnKG51bSwgc2xvdCwgZnVuYywgMHg4KTsKIAlkICY9IDB4ZmY7Ci0Jd3JpdGVfcGNpX2NvbmZpZyhudW0sIHNsb3QsIGZ1bmMsIDB4NzAsIG9sZCk7CiAKIAlyZXR1cm4gZDsKIH0KQEAgLTE2MCwxMSArMTU1LDE0IEBACiB7CiAJdTMyIGQsIHJldjsKIAotCWlmIChhY3BpX3VzZV90aW1lcl9vdmVycmlkZSkKKwlyZXYgPSBhdGlfc2J4MDBfcmV2KG51bSwgc2xvdCwgZnVuYyk7CisJaWYgKHJldiA+PSAweDQwKQorCQlhY3BpX2ZpeF9waW4yX3BvbGFyaXR5ID0gMTsKKworCWlmIChyZXYgPiAweDEzKQogCQlyZXR1cm47CiAKLQlyZXYgPSBhdGlfc2J4MDBfcmV2KG51bSwgc2xvdCwgZnVuYyk7Ci0JaWYgKHJldiA+IDB4MTMpCisJaWYgKGFjcGlfdXNlX3RpbWVyX292ZXJyaWRlKQogCQlyZXR1cm47CiAKIAkvKiBjaGVjayBmb3IgSVJRMCBpbnRlcnJ1cHQgc3dhcCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggZmMyOTNkYy4uNzY3ZDZjNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCkBAIC04NSw2ICs4NSw4IEBACiAgKi8KIF9fSEVBRAogRU5UUlkoc3RhcnR1cF8zMikKKwltb3ZsIHBhKHN0YWNrX3N0YXJ0KSwlZWN4CisJCiAJLyogdGVzdCBLRUVQX1NFR01FTlRTIGZsYWcgdG8gc2VlIGlmIHRoZSBib290bG9hZGVyIGlzIGFza2luZwogCQl1cyB0byBub3QgcmVsb2FkIHNlZ21lbnRzICovCiAJdGVzdGIgJCgxPDw2KSwgQlBfbG9hZGZsYWdzKCVlc2kpCkBAIC05OSw3ICsxMDEsOSBAQAogCW1vdmwgJWVheCwlZXMKIAltb3ZsICVlYXgsJWZzCiAJbW92bCAlZWF4LCVncworCW1vdmwgJWVheCwlc3MKIDI6CisJbGVhbCAtX19QQUdFX09GRlNFVCglZWN4KSwlZXNwCiAKIC8qCiAgKiBDbGVhciBCU1MgZmlyc3Qgc28gdGhhdCB0aGVyZSBhcmUgbm8gc3VycHJpc2VzLi4uCkBAIC0xNDUsOCArMTQ5LDYgQEAKICAqIF9icmtfZW5kIGlzIHNldCB1cCB0byBwb2ludCB0byB0aGUgZmlyc3QgInNhZmUiIGxvY2F0aW9uLgogICogTWFwcGluZ3MgYXJlIGNyZWF0ZWQgYm90aCBhdCB2aXJ0dWFsIGFkZHJlc3MgMCAoaWRlbnRpdHkgbWFwcGluZykKICAqIGFuZCBQQUdFX09GRlNFVCBmb3IgdXAgdG8gX2VuZC4KLSAqCi0gKiBOb3RlIHRoYXQgdGhlIHN0YWNrIGlzIG5vdCB5ZXQgc2V0IHVwIQogICovCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKIApAQCAtMjgyLDYgKzI4NCw5IEBACiAJbW92bCAlZWF4LCVlcwogCW1vdmwgJWVheCwlZnMKIAltb3ZsICVlYXgsJWdzCisJbW92bCBwYShzdGFja19zdGFydCksJWVjeAorCW1vdmwgJWVheCwlc3MKKwlsZWFsIC1fX1BBR0VfT0ZGU0VUKCVlY3gpLCVlc3AKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiBkZWZhdWx0X2VudHJ5OgogCkBAIC0zNDcsOCArMzUyLDggQEAKIAltb3ZsICVlYXgsJWNyMAkJLyogLi5hbmQgc2V0IHBhZ2luZyAoUEcpIGJpdCAqLwogCWxqbXAgJF9fQk9PVF9DUywkMWYJLyogQ2xlYXIgcHJlZmV0Y2ggYW5kIG5vcm1hbGl6ZSAlZWlwICovCiAxOgotCS8qIFNldCB1cCB0aGUgc3RhY2sgcG9pbnRlciAqLwotCWxzcyBzdGFja19zdGFydCwlZXNwCisJLyogU2hpZnQgdGhlIHN0YWNrIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGFkZHJlc3MgKi8KKwlhZGRsICRfX1BBR0VfT0ZGU0VULCAlZXNwCiAKIC8qCiAgKiBJbml0aWFsaXplIGVmbGFncy4gIFNvbWUgQklPUydzIGxlYXZlIGJpdHMgbGlrZSBOVCBzZXQuICBUaGlzIHdvdWxkCkBAIC0zNjAsOSArMzY1LDcgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIAljbXBiICQwLCByZWFkeQotCWp6ICAxZgkJCQkvKiBJbml0aWFsIENQVSBjbGVhbnMgQlNTICovCi0Jam1wIGNoZWNrQ1BVdHlwZQotMToKKwlqbnogY2hlY2tDUFV0eXBlCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAvKgpAQCAtNDcwLDE0ICs0NzMsNyBAQAogCiAJY2xkCQkJIyBnY2MyIHdhbnRzIHRoZSBkaXJlY3Rpb24gZmxhZyBjbGVhcmVkIGF0IGFsbCB0aW1lcwogCXB1c2hsICQwCQkjIGZha2UgcmV0dXJuIGFkZHJlc3MgZm9yIHVud2luZGVyCi0jaWZkZWYgQ09ORklHX1NNUAotCW1vdmIgcmVhZHksICVjbAogCW1vdmIgJDEsIHJlYWR5Ci0JY21wYiAkMCwlY2wJCSMgdGhlIGZpcnN0IENQVSBjYWxscyBzdGFydF9rZXJuZWwKLQlqZSAgIDFmCi0JbW92bCAoc3RhY2tfc3RhcnQpLCAlZXNwCi0xOgotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAlqbXAgKihpbml0aWFsX2NvZGUpCiAKIC8qCkBAIC02NzAsMTUgKzY2NiwxNSBAQAogI2VuZGlmCiAKIC5kYXRhCisuYmFsaWduIDQKIEVOVFJZKHN0YWNrX3N0YXJ0KQogCS5sb25nIGluaXRfdGhyZWFkX3VuaW9uK1RIUkVBRF9TSVpFCi0JLmxvbmcgX19CT09UX0RTCi0KLXJlYWR5OgkuYnl0ZSAwCiAKIGVhcmx5X3JlY3Vyc2lvbl9mbGFnOgogCS5sb25nIDAKIAorcmVhZHk6CS5ieXRlIDAKKwogaW50X21zZzoKIAkuYXNjaXogIlVua25vd24gaW50ZXJydXB0IG9yIGZhdWx0IGF0OiAlcCAlcCAlcFxuIgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKaW5kZXggNTI5NDVkYS4uMzg3YjZhMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwpAQCAtMzY3LDcgKzM2Nyw4IEBACiAJCWlmIChpcnIgICYgKDEgPDwgKHZlY3RvciAlIDMyKSkpIHsKIAkJCWlycSA9IF9fdGhpc19jcHVfcmVhZCh2ZWN0b3JfaXJxW3ZlY3Rvcl0pOwogCi0JCQlkYXRhID0gaXJxX2dldF9pcnFfZGF0YShpcnEpOworCQkJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJCQlkYXRhID0gJmRlc2MtPmlycV9kYXRhOwogCQkJcmF3X3NwaW5fbG9jaygmZGVzYy0+bG9jayk7CiAJCQlpZiAoZGF0YS0+Y2hpcC0+aXJxX3JldHJpZ2dlcikKIAkJCQlkYXRhLT5jaGlwLT5pcnFfcmV0cmlnZ2VyKGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZDgyODZlZC4uZmY0NTU0MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9wb3dlci5oPgogI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CkBAIC05MSwyMSArOTIsMzEgQEAKIAogdm9pZCBzaG93X3JlZ3NfY29tbW9uKHZvaWQpCiB7Ci0JY29uc3QgY2hhciAqYm9hcmQsICpwcm9kdWN0OworCWNvbnN0IGNoYXIgKnZlbmRvciwgKnByb2R1Y3QsICpib2FyZDsKIAotCWJvYXJkID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQk9BUkRfTkFNRSk7Ci0JaWYgKCFib2FyZCkKLQkJYm9hcmQgPSAiIjsKKwl2ZW5kb3IgPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9TWVNfVkVORE9SKTsKKwlpZiAoIXZlbmRvcikKKwkJdmVuZG9yID0gIiI7CiAJcHJvZHVjdCA9IGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1BST0RVQ1RfTkFNRSk7CiAJaWYgKCFwcm9kdWN0KQogCQlwcm9kdWN0ID0gIiI7CiAKKwkvKiBCb2FyZCBOYW1lIGlzIG9wdGlvbmFsICovCisJYm9hcmQgPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CT0FSRF9OQU1FKTsKKwogCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci0JcHJpbnRrKEtFUk5fREVGQVVMVCAiUGlkOiAlZCwgY29tbTogJS4yMHMgJXMgJXMgJS4qcyAlcy8lc1xuIiwKKwlwcmludGsoS0VSTl9ERUZBVUxUICJQaWQ6ICVkLCBjb21tOiAlLjIwcyAlcyAlcyAlLipzIiwKIAkJY3VycmVudC0+cGlkLCBjdXJyZW50LT5jb21tLCBwcmludF90YWludGVkKCksCiAJCWluaXRfdXRzbmFtZSgpLT5yZWxlYXNlLAogCQkoaW50KXN0cmNzcG4oaW5pdF91dHNuYW1lKCktPnZlcnNpb24sICIgIiksCi0JCWluaXRfdXRzbmFtZSgpLT52ZXJzaW9uLCBib2FyZCwgcHJvZHVjdCk7CisJCWluaXRfdXRzbmFtZSgpLT52ZXJzaW9uKTsKKwlwcmludGsoS0VSTl9DT05UICIgIik7CisJcHJpbnRrKEtFUk5fQ09OVCAiJXMgJXMiLCB2ZW5kb3IsIHByb2R1Y3QpOworCWlmIChib2FyZCkgeworCQlwcmludGsoS0VSTl9DT05UICIvIik7CisJCXByaW50ayhLRVJOX0NPTlQgIiVzIiwgYm9hcmQpOworCX0KKwlwcmludGsoS0VSTl9DT05UICJcbiIpOwogfQogCiB2b2lkIGZsdXNoX3RocmVhZCh2b2lkKQpAQCAtNTA1LDcgKzUxNiw3IEBACiAjZGVmaW5lIE1XQUlUX0VDWF9FWFRFTkRFRF9JTkZPCQkweDAxCiAjZGVmaW5lIE1XQUlUX0VEWF9DMQkJCTB4ZjAKIAotc3RhdGljIGludCBfX2NwdWluaXQgbXdhaXRfdXNhYmxlKGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK2ludCBtd2FpdF91c2FibGUoY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCXUzMiBlYXgsIGVieCwgZWN4LCBlZHg7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYwppbmRleCBmYzdhYWUxLi43MTUwMzdjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCkBAIC0yODUsNiArMjg1LDE0IEBACiAJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJQNFM4MDAiKSwKIAkJfSwKIAl9LAorCXsJLyogSGFuZGxlIHByb2JsZW1zIHdpdGggcmVib290aW5nIG9uIFZlcnNhTG9naWMgTWVubG93IGJvYXJkcyAqLworCQkuY2FsbGJhY2sgPSBzZXRfYmlvc19yZWJvb3QsCisJCS5pZGVudCA9ICJWZXJzYUxvZ2ljIE1lbmxvdyBiYXNlZCBib2FyZCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJWZXJzYUxvZ2ljIENvcnBvcmF0aW9uIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJWZXJzYUxvZ2ljIE1lbmxvdyBib2FyZCIpLAorCQl9LAorCX0sCiAJeyB9CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwppbmRleCA3NjNkZjc3Li4wODc3NmE5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKQEAgLTYzOCw3ICs2MzgsNyBAQAogCSAqIHRhcmdldCBwcm9jZXNzb3Igc3RhdGUuCiAJICovCiAJc3RhcnR1cF9pcGlfaG9vayhwaHlzX2FwaWNpZCwgKHVuc2lnbmVkIGxvbmcpIHN0YXJ0X3NlY29uZGFyeSwKLQkJCSAodW5zaWduZWQgbG9uZylzdGFja19zdGFydC5zcCk7CisJCQkgc3RhY2tfc3RhcnQpOwogCiAJLyoKIAkgKiBSdW4gU1RBUlRVUCBJUEkgbG9vcC4KQEAgLTc4NSw3ICs3ODUsNyBAQAogI2VuZGlmCiAJZWFybHlfZ2R0X2Rlc2NyLmFkZHJlc3MgPSAodW5zaWduZWQgbG9uZylnZXRfY3B1X2dkdF90YWJsZShjcHUpOwogCWluaXRpYWxfY29kZSA9ICh1bnNpZ25lZCBsb25nKXN0YXJ0X3NlY29uZGFyeTsKLQlzdGFja19zdGFydC5zcCA9ICh2b2lkICopIGNfaWRsZS5pZGxlLT50aHJlYWQuc3A7CisJc3RhY2tfc3RhcnQgID0gY19pZGxlLmlkbGUtPnRocmVhZC5zcDsKIAogCS8qIHN0YXJ0X2lwIGhhZCBiZXR0ZXIgYmUgcGFnZS1hbGlnbmVkISAqLwogCXN0YXJ0X2lwID0gc2V0dXBfdHJhbXBvbGluZSgpOwpAQCAtMTA2MCw3ICsxMDYwLDcgQEAKIAogCQljb25uZWN0X2JzcF9BUElDKCk7CiAJCXNldHVwX2xvY2FsX0FQSUMoKTsKLQkJZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKKwkJYnNwX2VuZF9sb2NhbF9BUElDX3NldHVwKCk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTExMzcsNyArMTEzNyw3IEBACiAJaWYgKCFza2lwX2lvYXBpY19zZXR1cCAmJiBucl9pb2FwaWNzKQogCQllbmFibGVfSU9fQVBJQygpOwogCi0JZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKKwlic3BfZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKIAogCW1hcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoKTsKIApAQCAtMTQwMiw4ICsxNDAyLDkgQEAKIAl1bnNpZ25lZCBpbnQgaGlnaGVzdF9zdWJjc3RhdGUgPSAwOwogCWludCBpOwogCXZvaWQgKm13YWl0X3B0cjsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBfX3RoaXNfY3B1X3B0cigmY3B1X2luZm8pOwogCi0JaWYgKCFjcHVfaGFzKF9fdGhpc19jcHVfcHRyKCZjcHVfaW5mbyksIFg4Nl9GRUFUVVJFX01XQUlUKSkKKwlpZiAoIShjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX01XQUlUKSAmJiBtd2FpdF91c2FibGUoYykpKQogCQlyZXR1cm47CiAJaWYgKCFjcHVfaGFzKF9fdGhpc19jcHVfcHRyKCZjcHVfaW5mbyksIFg4Nl9GRUFUVVJFX0NMRkxTSCkpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggYjM0YWI4MC4uYmY0NzAwNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTM0LDkgKzM0LDExIEBACiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogT1VUUFVUX0FSQ0goaTM4NikKIEVOVFJZKHBoeXNfc3RhcnR1cF8zMikKK2ppZmZpZXMgPSBqaWZmaWVzXzY0OwogI2Vsc2UKIE9VVFBVVF9BUkNIKGkzODY6eDg2LTY0KQogRU5UUlkocGh5c19zdGFydHVwXzY0KQoramlmZmllc182NCA9IGppZmZpZXM7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgJiYgZGVmaW5lZChDT05GSUdfREVCVUdfUk9EQVRBKQpAQCAtMTQwLDE1ICsxNDIsNiBAQAogCQlDQUNIRUxJTkVfQUxJR05FRF9EQVRBKEwxX0NBQ0hFX0JZVEVTKQogCiAJCURBVEFfREFUQQotCQkvKgotCQkgKiBXb3JrYXJvdW5kIGEgYmludXRpbHMgKDIuMjAuNTEuMC4xMiB0byAyLjIxLjUxLjAuMykgYnVnLgotCQkgKiBUaGlzIG1ha2VzIGppZmZpZXMgcmVsb2NhdGFibGUgaW4gc3VjaCBiaW51dGlscwotCQkgKi8KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JCWppZmZpZXMgPSBqaWZmaWVzXzY0OwotI2Vsc2UKLQkJamlmZmllc182NCA9IGppZmZpZXM7Ci0jZW5kaWYKIAkJQ09OU1RSVUNUT1JTCiAKIAkJLyogcmFyZWx5IGNoYW5nZWQgZGF0YSBsaWtlIGNwdSBtYXBzICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKaW5kZXggMjViZDFiYy4uNjNmZWMxNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS5jCisrKyBiL2FyY2gveDg2L2t2bS9zdm0uYwpAQCAtMTE1MCw4ICsxMTUwLDggQEAKIAlrdm1fbG9hZF9sZHQoc3ZtLT5ob3N0LmxkdCk7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCWxvYWRzZWdtZW50KGZzLCBzdm0tPmhvc3QuZnMpOwotCWxvYWRfZ3NfaW5kZXgoc3ZtLT5ob3N0LmdzKTsKIAl3cm1zcmwoTVNSX0tFUk5FTF9HU19CQVNFLCBjdXJyZW50LT50aHJlYWQuZ3MpOworCWxvYWRfZ3NfaW5kZXgoc3ZtLT5ob3N0LmdzKTsKICNlbHNlCiAJbG9hZHNlZ21lbnQoZ3MsIHN2bS0+aG9zdC5ncyk7CiAjZW5kaWYKQEAgLTI3NzcsNiArMjc3Nyw4IEBACiAJCQlrdm1fcmVnaXN0ZXJfd3JpdGUoJnN2bS0+dmNwdSwgcmVnLCB2YWwpOwogCX0KIAorCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CisKIAlyZXR1cm4gMTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGd1ZXN0L0tjb25maWcgYi9hcmNoL3g4Ni9sZ3Vlc3QvS2NvbmZpZwppbmRleCAzODcxODA0Li42ZTEyMWEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9sZ3Vlc3QvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9sZ3Vlc3QvS2NvbmZpZwpAQCAtMiw2ICsyLDcgQEAKIAlib29sICJMZ3Vlc3QgZ3Vlc3Qgc3VwcG9ydCIKIAlzZWxlY3QgUEFSQVZJUlQKIAlkZXBlbmRzIG9uIFg4Nl8zMgorCXNlbGVjdCBWSVJUVUFMSVpBVElPTgogCXNlbGVjdCBWSVJUSU8KIAlzZWxlY3QgVklSVElPX1JJTkcKIAlzZWxlY3QgVklSVElPX0NPTlNPTEUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xndWVzdC9ib290LmMgYi9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCmluZGV4IDQ5OTZjZjUuLmViYTY4N2YwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCisrKyBiL2FyY2gveDg2L2xndWVzdC9ib290LmMKQEAgLTgyNCw3ICs4MjQsNyBAQAogCiAJZm9yIChpID0gRklSU1RfRVhURVJOQUxfVkVDVE9SOyBpIDwgTlJfVkVDVE9SUzsgaSsrKSB7CiAJCS8qIFNvbWUgc3lzdGVtcyBtYXAgInZlY3RvcnMiIHRvIGludGVycnVwdHMgd2VpcmRseS4gIE5vdCB1cyEgKi8KLQkJX19nZXRfY3B1X3Zhcih2ZWN0b3JfaXJxKVtpXSA9IGkgLSBGSVJTVF9FWFRFUk5BTF9WRUNUT1I7CisJCV9fdGhpc19jcHVfd3JpdGUodmVjdG9yX2lycVtpXSwgaSAtIEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUik7CiAJCWlmIChpICE9IFNZU0NBTExfVkVDVE9SKQogCQkJc2V0X2ludHJfZ2F0ZShpLCBpbnRlcnJ1cHRbaSAtIEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUl0pOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWEuYyBiL2FyY2gveDg2L21tL251bWEuYwppbmRleCA3ODdjNTJjLi5lYmY2ZDc4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9udW1hLmMKKysrIGIvYXJjaC94ODYvbW0vbnVtYS5jCkBAIC0yLDYgKzIsMjggQEAKICNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxhc20vbnVtYS5oPgorI2luY2x1ZGUgPGFzbS9hY3BpLmg+CisKK2ludCBfX2luaXRkYXRhIG51bWFfb2ZmOworCitzdGF0aWMgX19pbml0IGludCBudW1hX3NldHVwKGNoYXIgKm9wdCkKK3sKKwlpZiAoIW9wdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFzdHJuY21wKG9wdCwgIm9mZiIsIDMpKQorCQludW1hX29mZiA9IDE7CisjaWZkZWYgQ09ORklHX05VTUFfRU1VCisJaWYgKCFzdHJuY21wKG9wdCwgImZha2U9IiwgNSkpCisJCW51bWFfZW11X2NtZGxpbmUob3B0ICsgNSk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCisJaWYgKCFzdHJuY21wKG9wdCwgIm5vYWNwaSIsIDYpKQorCQlhY3BpX251bWEgPSAtMTsKKyNlbmRpZgorCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm51bWEiLCBudW1hX3NldHVwKTsKIAogLyoKICAqIFdoaWNoIGxvZ2ljYWwgQ1BVcyBhcmUgb24gd2hpY2ggbm9kZXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWFfNjQuYyBiL2FyY2gveDg2L21tL251bWFfNjQuYwppbmRleCAxZTcyMTAyLi45NWVhMTU1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKKysrIGIvYXJjaC94ODYvbW0vbnVtYV82NC5jCkBAIC0zMCw3ICszMCw2IEBACiAJWzAgLi4uIE1BWF9MT0NBTF9BUElDLTFdID0gTlVNQV9OT19OT0RFCiB9OwogCi1pbnQgbnVtYV9vZmYgX19pbml0ZGF0YTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbm9kZW1hcF9hZGRyOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBub2RlbWFwX3NpemU7CiAKQEAgLTI2Myw2ICsyNjIsMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgYm9vdG5vZGUgcGh5c25vZGVzW01BWF9OVU1OT0RFU10gX19jcHVpbml0ZGF0YTsKIHN0YXRpYyBjaGFyICpjbWRsaW5lIF9faW5pdGRhdGE7CiAKK3ZvaWQgX19pbml0IG51bWFfZW11X2NtZGxpbmUoY2hhciAqc3RyKQoreworCWNtZGxpbmUgPSBzdHI7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX3BoeXNub2Rlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCQkJaW50IGFjcGksIGludCBhbWQpCiB7CkBAIC02NzAsMjQgKzY3NCw2IEBACiAJcmV0dXJuIHBhZ2VzOwogfQogCi1zdGF0aWMgX19pbml0IGludCBudW1hX3NldHVwKGNoYXIgKm9wdCkKLXsKLQlpZiAoIW9wdCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFzdHJuY21wKG9wdCwgIm9mZiIsIDMpKQotCQludW1hX29mZiA9IDE7Ci0jaWZkZWYgQ09ORklHX05VTUFfRU1VCi0JaWYgKCFzdHJuY21wKG9wdCwgImZha2U9IiwgNSkpCi0JCWNtZGxpbmUgPSBvcHQgKyA1OwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FDUElfTlVNQQotCWlmICghc3RybmNtcChvcHQsICJub2FjcGkiLCA2KSkKLQkJYWNwaV9udW1hID0gLTE7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJudW1hIiwgbnVtYV9zZXR1cCk7Ci0KICNpZmRlZiBDT05GSUdfTlVNQQogCiBzdGF0aWMgX19pbml0IGludCBmaW5kX25lYXJfb25saW5lX25vZGUoaW50IG5vZGUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jIGIvYXJjaC94ODYvbW0vcGFnZWF0dHIuYwppbmRleCA4YjgzMGNhLi5kMzQzYjNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCisrKyBiL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKQEAgLTI1Niw3ICsyNTYsNiBAQAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgcGZuKQogewogCXBncHJvdF90IGZvcmJpZGRlbiA9IF9fcGdwcm90KDApOwotCXBncHJvdF90IHJlcXVpcmVkID0gX19wZ3Byb3QoMCk7CiAKIAkvKgogCSAqIFRoZSBCSU9TIGFyZWEgYmV0d2VlbiA2NDBrIGFuZCAxTWIgbmVlZHMgdG8gYmUgZXhlY3V0YWJsZSBmb3IKQEAgLTI4MiwxMiArMjgxLDYgQEAKIAlpZiAod2l0aGluKHBmbiwgX19wYSgodW5zaWduZWQgbG9uZylfX3N0YXJ0X3JvZGF0YSkgPj4gUEFHRV9TSElGVCwKIAkJICAgX19wYSgodW5zaWduZWQgbG9uZylfX2VuZF9yb2RhdGEpID4+IFBBR0VfU0hJRlQpKQogCQlwZ3Byb3RfdmFsKGZvcmJpZGRlbikgfD0gX1BBR0VfUlc7Ci0JLyoKLQkgKiAuZGF0YSBhbmQgLmJzcyBzaG91bGQgYWx3YXlzIGJlIHdyaXRhYmxlLgotCSAqLwotCWlmICh3aXRoaW4oYWRkcmVzcywgKHVuc2lnbmVkIGxvbmcpX3NkYXRhLCAodW5zaWduZWQgbG9uZylfZWRhdGEpIHx8Ci0JICAgIHdpdGhpbihhZGRyZXNzLCAodW5zaWduZWQgbG9uZylfX2Jzc19zdGFydCwgKHVuc2lnbmVkIGxvbmcpX19ic3Nfc3RvcCkpCi0JCXBncHJvdF92YWwocmVxdWlyZWQpIHw9IF9QQUdFX1JXOwogCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSAmJiBkZWZpbmVkKENPTkZJR19ERUJVR19ST0RBVEEpCiAJLyoKQEAgLTMyNyw3ICszMjAsNiBAQAogI2VuZGlmCiAKIAlwcm90ID0gX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSAmIH5wZ3Byb3RfdmFsKGZvcmJpZGRlbikpOwotCXByb3QgPSBfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpIHwgcGdwcm90X3ZhbChyZXF1aXJlZCkpOwogCiAJcmV0dXJuIHByb3Q7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9zcmF0XzMyLmMgYi9hcmNoL3g4Ni9tbS9zcmF0XzMyLmMKaW5kZXggZjE2NDM0NS4uYWU5NmU3YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vc3JhdF8zMi5jCisrKyBiL2FyY2gveDg2L21tL3NyYXRfMzIuYwpAQCAtNTksNyArNTksNiBAQAogc3RhdGljIGludCBfX2luaXRkYXRhIG51bV9tZW1vcnlfY2h1bmtzOyAvKiB0b3RhbCBudW1iZXIgb2YgbWVtb3J5IGNodW5rcyAqLwogc3RhdGljIHU4IF9faW5pdGRhdGEgYXBpY2lkX3RvX3B4bVtNQVhfQVBJQ0lEXTsKIAotaW50IG51bWFfb2ZmIF9faW5pdGRhdGE7CiBpbnQgYWNwaV9udW1hIF9faW5pdGRhdGE7CiAKIHN0YXRpYyBfX2luaXQgdm9pZCBiYWRfc3JhdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCmluZGV4IDdlOGQzYmMuLjUwNTQyZWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYworKysgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKQEAgLTExOTQsNyArMTE5NCw3IEBACiAJcGVyX2NwdSh4ZW5fdmNwdSwgMCkgPSAmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+dmNwdV9pbmZvWzBdOwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQllYXJseV9ib290X2lycXNfb2ZmKCk7CisJZWFybHlfYm9vdF9pcnFzX2Rpc2FibGVkID0gdHJ1ZTsKIAogCW1lbWJsb2NrX2luaXQoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2lycS5jIGIvYXJjaC94ODYveGVuL2lycS5jCmluZGV4IDlkMzAxMDUuLjZhNmZlODkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9pcnEuYworKysgYi9hcmNoL3g4Ni94ZW4vaXJxLmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogI2VuZGlmCiB9OwogCi12b2lkIF9faW5pdCB4ZW5faW5pdF9pcnFfb3BzKCkKK3ZvaWQgX19pbml0IHhlbl9pbml0X2lycV9vcHModm9pZCkKIHsKIAlwdl9pcnFfb3BzID0geGVuX2lycV9vcHM7CiAJeDg2X2luaXQuaXJxcy5pbnRyX2luaXQgPSB4ZW5faW5pdF9JUlE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vcDJtLmMgYi9hcmNoL3g4Ni94ZW4vcDJtLmMKaW5kZXggOGYyMjUxZC4uZmQxMmQ3YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3AybS5jCisrKyBiL2FyY2gveDg2L3hlbi9wMm0uYwpAQCAtMjM3LDYgKzIzNywxOCBAQAogCQkJcDJtX3RvcFt0b3BpZHhdID0gbWlkOwogCQl9CiAKKwkJLyoKKwkJICogQXMgbG9uZyBhcyB0aGUgbWZuX2xpc3QgaGFzIGVub3VnaCBlbnRyaWVzIHRvIGNvbXBsZXRlbHkKKwkJICogZmlsbCBhIHAybSBwYWdlLCBwb2ludGluZyBpbnRvIHRoZSBhcnJheSBpcyBvay4gQnV0IGlmCisJCSAqIG5vdCB0aGUgZW50cmllcyBiZXlvbmQgdGhlIGxhc3QgcGZuIHdpbGwgYmUgdW5kZWZpbmVkLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KHBmbiArIFAyTV9QRVJfUEFHRSA+IG1heF9wZm4pKSB7CisJCQl1bnNpZ25lZCBsb25nIHAybWlkeDsKKworCQkJcDJtaWR4ID0gbWF4X3BmbiAlIFAyTV9QRVJfUEFHRTsKKwkJCWZvciAoIDsgcDJtaWR4IDwgUDJNX1BFUl9QQUdFOyBwMm1pZHgrKykKKwkJCQltZm5fbGlzdFtwZm4gKyBwMm1pZHhdID0gSU5WQUxJRF9QMk1fRU5UUlk7CisJCX0KIAkJcDJtX3RvcFt0b3BpZHhdW21pZGlkeF0gPSAmbWZuX2xpc3RbcGZuXTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zZXR1cC5jIGIvYXJjaC94ODYveGVuL3NldHVwLmMKaW5kZXggYjVhN2Y5Mi4uYThhNjZhNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3NldHVwLmMKKysrIGIvYXJjaC94ODYveGVuL3NldHVwLmMKQEAgLTE3OSw4ICsxNzksMTMgQEAKIAllODIwLm5yX21hcCA9IDA7CiAJeGVuX2V4dHJhX21lbV9zdGFydCA9IG1lbV9lbmQ7CiAJZm9yIChpID0gMDsgaSA8IG1lbW1hcC5ucl9lbnRyaWVzOyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBsb25nIGVuZCA9IG1hcFtpXS5hZGRyICsgbWFwW2ldLnNpemU7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyBlbmQ7CiAKKwkJLyogR3VhcmQgYWdhaW5zdCBub24tcGFnZSBhbGlnbmVkIEU4MjAgZW50cmllcy4gKi8KKwkJaWYgKG1hcFtpXS50eXBlID09IEU4MjBfUkFNKQorCQkJbWFwW2ldLnNpemUgLT0gKG1hcFtpXS5zaXplICsgbWFwW2ldLmFkZHIpICUgUEFHRV9TSVpFOworCisJCWVuZCA9IG1hcFtpXS5hZGRyICsgbWFwW2ldLnNpemU7CiAJCWlmIChtYXBbaV0udHlwZSA9PSBFODIwX1JBTSAmJiBlbmQgPiBtZW1fZW5kKSB7CiAJCQkvKiBSQU0gb2ZmIHRoZSBlbmQgLSBtYXkgYmUgcGFydGlhbGx5IGluY2x1ZGVkICovCiAJCQl1NjQgZGVsdGEgPSBtaW4obWFwW2ldLnNpemUsIGVuZCAtIG1lbV9lbmQpOwpAQCAtMzUwLDYgKzM1NSw3IEBACiAJYm9vdF9jcHVfZGF0YS5obHRfd29ya3Nfb2sgPSAxOwogI2VuZGlmCiAJcG1faWRsZSA9IGRlZmF1bHRfaWRsZTsKKwlib290X29wdGlvbl9pZGxlX292ZXJyaWRlID0gSURMRV9IQUxUOwogCiAJZmlkZGxlX3Zkc28oKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2NvbmZpZ3MvY29tbW9uX2RlZmNvbmZpZyBiL2FyY2gveHRlbnNhL2NvbmZpZ3MvY29tbW9uX2RlZmNvbmZpZwppbmRleCAxZDIzMGVlLi5iOTAwMzhlIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9jb25maWdzL2NvbW1vbl9kZWZjb25maWcKKysrIGIvYXJjaC94dGVuc2EvY29uZmlncy9jb21tb25fZGVmY29uZmlnCkBAIC0zMiw3ICszMiw3IEBACiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFBFUlQgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2NvbmZpZ3MvaXNzX2RlZmNvbmZpZyBiL2FyY2gveHRlbnNhL2NvbmZpZ3MvaXNzX2RlZmNvbmZpZwppbmRleCA3MzY4MTY0Li4wMjM0Y2QxIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9jb25maWdzL2lzc19kZWZjb25maWcKKysrIGIvYXJjaC94dGVuc2EvY29uZmlncy9pc3NfZGVmY29uZmlnCkBAIC01NSw3ICs1NSw3IEBACiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0VYUEVSVD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9jb25maWdzL3M2MTA1X2RlZmNvbmZpZyBiL2FyY2gveHRlbnNhL2NvbmZpZ3MvczYxMDVfZGVmY29uZmlnCmluZGV4IGJiODRmYmMuLjA5NWNkODAgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2NvbmZpZ3MvczYxMDVfZGVmY29uZmlnCisrKyBiL2FyY2gveHRlbnNhL2NvbmZpZ3MvczYxMDVfZGVmY29uZmlnCkBAIC01NSw3ICs1NSw3IEBACiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYmxvY2svS2NvbmZpZyBiL2Jsb2NrL0tjb25maWcKaW5kZXggNmM5MjEzZS4uNjBiZTFlMCAxMDA2NDQKLS0tIGEvYmxvY2svS2NvbmZpZworKysgYi9ibG9jay9LY29uZmlnCkBAIC0yLDcgKzIsNyBAQAogIyBCbG9jayBsYXllciBjb3JlIGNvbmZpZ3VyYXRpb24KICMKIG1lbnVjb25maWcgQkxPQ0sKLSAgICAgICBib29sICJFbmFibGUgdGhlIGJsb2NrIGxheWVyIiBpZiBFTUJFRERFRAorICAgICAgIGJvb2wgIkVuYWJsZSB0aGUgYmxvY2sgbGF5ZXIiIGlmIEVYUEVSVAogICAgICAgIGRlZmF1bHQgeQogICAgICAgIGhlbHAKIAkgUHJvdmlkZSBibG9jayBsYXllciBzdXBwb3J0IGZvciB0aGUga2VybmVsLgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXRocm90dGxlLmMgYi9ibG9jay9ibGstdGhyb3R0bGUuYwppbmRleCAzODFiMDliLi5hODkwNDNhIDEwMDY0NAotLS0gYS9ibG9jay9ibGstdGhyb3R0bGUuYworKysgYi9ibG9jay9ibGstdGhyb3R0bGUuYwpAQCAtMTY4LDcgKzE2OCwxNSBAQAogCSAqIHRyZWUgb2YgYmxrZyAoaW5zdGVhZCBvZiB0cmF2ZXJzaW5nIHRocm91Z2ggaGFzaCBsaXN0IGFsbAogCSAqIHRoZSB0aW1lLgogCSAqLwotCXRnID0gdGdfb2ZfYmxrZyhibGtpb2NnX2xvb2t1cF9ncm91cChibGtjZywga2V5KSk7CisKKwkvKgorCSAqIFRoaXMgaXMgdGhlIGNvbW1vbiBjYXNlIHdoZW4gdGhlcmUgYXJlIG5vIGJsa2lvIGNncm91cHMuCisgCSAqIEF2b2lkIGxvb2t1cCBpbiB0aGlzIGNhc2UKKyAJICovCisJaWYgKGJsa2NnID09ICZibGtpb19yb290X2Nncm91cCkKKwkJdGcgPSAmdGQtPnJvb3RfdGc7CisJZWxzZQorCQl0ZyA9IHRnX29mX2Jsa2coYmxraW9jZ19sb29rdXBfZ3JvdXAoYmxrY2csIGtleSkpOwogCiAJLyogRmlsbCBpbiBkZXZpY2UgZGV0YWlscyBmb3Igcm9vdCBncm91cCAqLwogCWlmICh0ZyAmJiAhdGctPmJsa2cuZGV2ICYmIGJkaS0+ZGV2ICYmIGRldl9uYW1lKGJkaS0+ZGV2KSkgewpkaWZmIC0tZ2l0IGEvYmxvY2svY2ZxLWlvc2NoZWQuYyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKaW5kZXggNTAxZmZkZi4uN2JlNGM3OSAxMDA2NDQKLS0tIGEvYmxvY2svY2ZxLWlvc2NoZWQuYworKysgYi9ibG9jay9jZnEtaW9zY2hlZC5jCkBAIC01OTksNyArNTk5LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZAotY2ZxX3NjYWxlZF9ncm91cF9zbGljZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCitjZnFfc2NhbGVkX2NmcXFfc2xpY2Uoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQogewogCXVuc2lnbmVkIHNsaWNlID0gY2ZxX3ByaW9fdG9fc2xpY2UoY2ZxZCwgY2ZxcSk7CiAJaWYgKGNmcWQtPmNmcV9sYXRlbmN5KSB7CkBAIC02MzEsNyArNjMxLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogY2ZxX3NldF9wcmlvX3NsaWNlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKIHsKLQl1bnNpZ25lZCBzbGljZSA9IGNmcV9zY2FsZWRfZ3JvdXBfc2xpY2UoY2ZxZCwgY2ZxcSk7CisJdW5zaWduZWQgc2xpY2UgPSBjZnFfc2NhbGVkX2NmcXFfc2xpY2UoY2ZxZCwgY2ZxcSk7CiAKIAljZnFxLT5zbGljZV9zdGFydCA9IGppZmZpZXM7CiAJY2ZxcS0+c2xpY2VfZW5kID0gamlmZmllcyArIHNsaWNlOwpAQCAtMTY3MSw3ICsxNjcxLDcgQEAKIAkgKi8KIAlpZiAodGltZWRfb3V0KSB7CiAJCWlmIChjZnFfY2ZxcV9zbGljZV9uZXcoY2ZxcSkpCi0JCQljZnFxLT5zbGljZV9yZXNpZCA9IGNmcV9zY2FsZWRfZ3JvdXBfc2xpY2UoY2ZxZCwgY2ZxcSk7CisJCQljZnFxLT5zbGljZV9yZXNpZCA9IGNmcV9zY2FsZWRfY2ZxcV9zbGljZShjZnFkLCBjZnFxKTsKIAkJZWxzZQogCQkJY2ZxcS0+c2xpY2VfcmVzaWQgPSBjZnFxLT5zbGljZV9lbmQgLSBqaWZmaWVzOwogCQljZnFfbG9nX2NmcXEoY2ZxZCwgY2ZxcSwgInJlc2lkPSVsZCIsIGNmcXEtPnNsaWNlX3Jlc2lkKTsKQEAgLTM0MzIsNiArMzQzMiwxMCBAQAogewogCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljID0gY2ZxZC0+YWN0aXZlX2NpYzsKIAorCS8qIElmIHRoZSBxdWV1ZSBhbHJlYWR5IGhhcyByZXF1ZXN0cywgZG9uJ3Qgd2FpdCAqLworCWlmICghUkJfRU1QVFlfUk9PVCgmY2ZxcS0+c29ydF9saXN0KSkKKwkJcmV0dXJuIGZhbHNlOworCiAJLyogSWYgdGhlcmUgYXJlIG90aGVyIHF1ZXVlcyBpbiB0aGUgZ3JvdXAsIGRvbid0IHdhaXQgKi8KIAlpZiAoY2ZxcS0+Y2ZxZy0+bnJfY2ZxcSA+IDEpCiAJCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jCmluZGV4IDZhNWI3NzIuLmNiZjExMTIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2dlbmhkLmMKKysrIGIvYmxvY2svZ2VuaGQuYwpAQCAtMTM1NSw3ICsxMzU1LDcgQEAKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gYmRnZXRfZGlzayhkaXNrLCBwYXJ0bm8pOwogCWlmIChiZGV2KSB7CiAJCWZzeW5jX2JkZXYoYmRldik7Ci0JCXJlcyA9IF9faW52YWxpZGF0ZV9kZXZpY2UoYmRldik7CisJCXJlcyA9IF9faW52YWxpZGF0ZV9kZXZpY2UoYmRldiwgdHJ1ZSk7CiAJCWJkcHV0KGJkZXYpOwogCX0KIAlyZXR1cm4gcmVzOwpkaWZmIC0tZ2l0IGEvYmxvY2svaW9jdGwuYyBiL2Jsb2NrL2lvY3RsLmMKaW5kZXggOTA0OWQ0Ni4uMTEyNGNkMiAxMDA2NDQKLS0tIGEvYmxvY2svaW9jdGwuYworKysgYi9ibG9jay9pb2N0bC5jCkBAIC0yOTQsOSArMjk0LDExIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGdldF91c2VyKG4sIChpbnQgX191c2VyICopIGFyZykpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKCEobW9kZSAmIEZNT0RFX0VYQ0wpICYmCi0JCSAgICBibGtkZXZfZ2V0KGJkZXYsIG1vZGUgfCBGTU9ERV9FWENMLCAmYmRldikgPCAwKQotCQkJcmV0dXJuIC1FQlVTWTsKKwkJaWYgKCEobW9kZSAmIEZNT0RFX0VYQ0wpKSB7CisJCQliZGdyYWIoYmRldik7CisJCQlpZiAoYmxrZGV2X2dldChiZGV2LCBtb2RlIHwgRk1PREVfRVhDTCwgJmJkZXYpIDwgMCkKKwkJCQlyZXR1cm4gLUVCVVNZOworCQl9CiAJCXJldCA9IHNldF9ibG9ja3NpemUoYmRldiwgbik7CiAJCWlmICghKG1vZGUgJiBGTU9ERV9FWENMKSkKIAkJCWJsa2Rldl9wdXQoYmRldiwgbW9kZSB8IEZNT0RFX0VYQ0wpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9NYWtlZmlsZSBiL2RyaXZlcnMvTWFrZWZpbGUKaW5kZXggN2ViMzVmNC4uYjQyM2JiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL01ha2VmaWxlCkBAIC0yNCw3ICsyNCw3IEBACiAjIHJlZ3VsYXRvcnMgZWFybHksIHNpbmNlIHNvbWUgc3Vic3lzdGVtcyByZWx5IG9uIHRoZW0gdG8gaW5pdGlhbGl6ZQogb2JqLSQoQ09ORklHX1JFR1VMQVRPUikJCSs9IHJlZ3VsYXRvci8KIAotIyBjaGFyLyBjb21lcyBiZWZvcmUgc2VyaWFsLyBldGMgc28gdGhhdCB0aGUgVlQgY29uc29sZSBpcyB0aGUgYm9vdC10aW1lCisjIHR0eS8gY29tZXMgYmVmb3JlIGNoYXIvIHNvIHRoYXQgdGhlIFZUIGNvbnNvbGUgaXMgdGhlIGJvb3QtdGltZQogIyBkZWZhdWx0Lgogb2JqLXkJCQkJKz0gdHR5Lwogb2JqLXkJCQkJKz0gY2hhci8KQEAgLTM4LDcgKzM4LDYgQEAKIG9iai0kKENPTkZJR19GQl9JODEwKSAgICAgICAgICAgKz0gdmlkZW8vaTgxMC8KIG9iai0kKENPTkZJR19GQl9JTlRFTCkgICAgICAgICAgKz0gdmlkZW8vaW50ZWxmYi8KIAotb2JqLXkJCQkJKz0gc2VyaWFsLwogb2JqLSQoQ09ORklHX1BBUlBPUlQpCQkrPSBwYXJwb3J0Lwogb2JqLXkJCQkJKz0gYmFzZS8gYmxvY2svIG1pc2MvIG1mZC8gbmZjLwogb2JqLSQoQ09ORklHX05VQlVTKQkJKz0gbnVidXMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCmluZGV4IDEwYzdhZDUuLjJhYTA0MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC0zMTgsNyArMzE4LDcgQEAKIAkgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGNpX3Nsb3QuCiAKIGNvbmZpZyBYODZfUE1fVElNRVIKLQlib29sICJQb3dlciBNYW5hZ2VtZW50IFRpbWVyIFN1cHBvcnQiIGlmIEVNQkVEREVECisJYm9vbCAiUG93ZXIgTWFuYWdlbWVudCBUaW1lciBTdXBwb3J0IiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIFg4NgogCWRlZmF1bHQgeQogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb21tb24uaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb21tb24uaAppbmRleCAzZTUwYzc0Li5lMGJhMTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29tbW9uLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbW1vbi5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbmZpZy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbmZpZy5oCmluZGV4IGIxN2Q4ZGUuLmFiODczOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb25maWcuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29uZmlnLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZGVidWcuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNkZWJ1Zy5oCmluZGV4IDcyZTlkNWUuLmViMGIxZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNkZWJ1Zy5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNkZWJ1Zy5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2Rpc3BhdC5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2Rpc3BhdC5oCmluZGV4IDg5NGEwZmYuLjY2NjI3MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNkaXNwYXQuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZGlzcGF0LmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZXZlbnRzLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZXZlbnRzLmgKaW5kZXggNzBlMGIyOC4uNDFkMjQ3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2V2ZW50cy5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNldmVudHMuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNnbG9iYWwuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNnbG9iYWwuaAppbmRleCAwZTRkYmEwLi44MmExYmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZ2xvYmFsLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2dsb2JhbC5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2h3YXJlLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaHdhcmUuaAppbmRleCAyNThkNjI4Li5lNzIxM2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaHdhcmUuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaHdhcmUuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNpbnRlcnAuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNpbnRlcnAuaAppbmRleCAwNDllMjAzLi4zNzMxZTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaW50ZXJwLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2ludGVycC5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaAppbmRleCA3NDAwMGY1Li41NDc4NGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNtYWNyb3MuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNtYWNyb3MuaAppbmRleCA4ZDVjOWUwLi5iNzQ5MWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbWFjcm9zLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY21hY3Jvcy5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY25hbWVzcC5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY25hbWVzcC5oCmluZGV4IGQ0NGQzYmMuLjc5YTU5OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNuYW1lc3AuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbmFtZXNwLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmgKaW5kZXggOTYyYTNjYy4uMTA1NTc2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY29iamVjdC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaApAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTk3LDggKzk3LDYgQEAKICNkZWZpbmUgQU9QT0JKX09CSkVDVF9JTklUSUFMSVpFRCAgIDB4MDgJLyogUmVnaW9uIGlzIGluaXRpYWxpemVkLCBfUkVHIHdhcyBydW4gKi8KICNkZWZpbmUgQU9QT0JKX1NFVFVQX0NPTVBMRVRFICAgICAgIDB4MTAJLyogUmVnaW9uIHNldHVwIGlzIGNvbXBsZXRlICovCiAjZGVmaW5lIEFPUE9CSl9JTlZBTElEICAgICAgICAgICAgICAweDIwCS8qIEhvc3QgT1Mgd29uJ3QgYWxsb3cgYSBSZWdpb24gYWRkcmVzcyAqLwotI2RlZmluZSBBT1BPQkpfTU9EVUxFX0xFVkVMICAgICAgICAgMHg0MAkvKiBNZXRob2QgaXMgYWN0dWFsbHkgbW9kdWxlLWxldmVsIGNvZGUgKi8KLSNkZWZpbmUgQU9QT0JKX01PRElGSUVEX05BTUVTUEFDRSAgIDB4ODAJLyogTWV0aG9kIG1vZGlmaWVkIHRoZSBuYW1lc3BhY2UgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTE3NSw3ICsxNzMsNyBAQAogfTsKIAogc3RydWN0IGFjcGlfb2JqZWN0X21ldGhvZCB7Ci0JQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiB1OCBtZXRob2RfZmxhZ3M7CisJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiB1OCBpbmZvX2ZsYWdzOwogCXU4IHBhcmFtX2NvdW50OwogCXU4IHN5bmNfbGV2ZWw7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbXV0ZXg7CkBAIC0xODMsMTMgKzE4MSwyMSBAQAogCXVuaW9uIHsKIAkJQUNQSV9JTlRFUk5BTF9NRVRIT0QgaW1wbGVtZW50YXRpb247CiAJCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKmhhbmRsZXI7Ci0JfSBleHRyYTsKKwl9IGRpc3BhdGNoOwogCiAJdTMyIGFtbF9sZW5ndGg7CiAJdTggdGhyZWFkX2NvdW50OwogCWFjcGlfb3duZXJfaWQgb3duZXJfaWQ7CiB9OwogCisvKiBGbGFncyBmb3IgaW5mb19mbGFncyBmaWVsZCBhYm92ZSAqLworCisjZGVmaW5lIEFDUElfTUVUSE9EX01PRFVMRV9MRVZFTCAgICAgICAgMHgwMQkvKiBNZXRob2QgaXMgYWN0dWFsbHkgbW9kdWxlLWxldmVsIGNvZGUgKi8KKyNkZWZpbmUgQUNQSV9NRVRIT0RfSU5URVJOQUxfT05MWSAgICAgICAweDAyCS8qIE1ldGhvZCBpcyBpbXBsZW1lbnRlZCBpbnRlcm5hbGx5IChfT1NJKSAqLworI2RlZmluZSBBQ1BJX01FVEhPRF9TRVJJQUxJWkVEICAgICAgICAgIDB4MDQJLyogTWV0aG9kIGlzIHNlcmlhbGl6ZWQgKi8KKyNkZWZpbmUgQUNQSV9NRVRIT0RfU0VSSUFMSVpFRF9QRU5ESU5HICAweDA4CS8qIE1ldGhvZCBpcyB0byBiZSBtYXJrZWQgc2VyaWFsaXplZCAqLworI2RlZmluZSBBQ1BJX01FVEhPRF9NT0RJRklFRF9OQU1FU1BBQ0UgIDB4MTAJLyogTWV0aG9kIG1vZGlmaWVkIHRoZSBuYW1lc3BhY2UgKi8KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIE9iamVjdHMgdGhhdCBjYW4gYmUgbm90aWZpZWQuICBBbGwgc2hhcmUgYSBjb21tb24gbm90aWZ5X2luZm8gYXJlYS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvcGNvZGUuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvcGNvZGUuaAppbmRleCA4YzE1ZmY0Li5iYjJjY2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb3Bjb2RlLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY29wY29kZS5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3BhcnNlci5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3BhcnNlci5oCmluZGV4IGQwYmIwZmQuLjVlYTFlMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwYXJzZXIuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcGFyc2VyLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcHJlZGVmLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcHJlZGVmLmgKaW5kZXggMTA5OThkMy4uOTRlNzNjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3ByZWRlZi5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwcmVkZWYuaApAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNyZXNyYy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3Jlc3JjLmgKaW5kZXggNTI4YmNiYS4uZjA4YjU1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3Jlc3JjLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3Jlc3JjLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjc3RydWN0LmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjc3RydWN0LmgKaW5kZXggNmU1ZGQ5Ny4uMTYyM2IyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3N0cnVjdC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNzdHJ1Y3QuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWN0YWJsZXMuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWN0YWJsZXMuaAppbmRleCA2MmE1NzZlLi45NjdmMDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdGFibGVzLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3RhYmxlcy5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3V0aWxzLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdXRpbHMuaAppbmRleCA3MmU0MTgzLi45OWMxNDBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdXRpbHMuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdXRpbHMuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYW1sY29kZS5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hbWxjb2RlLmgKaW5kZXggMWY0ODRiYS4uZjRmMDk5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hbWxjb2RlLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hbWxjb2RlLmgKQEAgLTcsNyArNyw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00ODAsMTYgKzQ4MCwxMCBAQAogCUFNTF9GSUVMRF9BVFRSSUJfU01CX0JMT0NLX0NBTEwgPSAweDBECiB9IEFNTF9BQ0NFU1NfQVRUUklCVVRFOwogCi0vKiBCaXQgZmllbGRzIGluIG1ldGhvZF9mbGFncyBieXRlICovCisvKiBCaXQgZmllbGRzIGluIHRoZSBBTUwgbWV0aG9kX2ZsYWdzIGJ5dGUgKi8KIAogI2RlZmluZSBBTUxfTUVUSE9EX0FSR19DT1VOVCAgICAgICAgMHgwNwogI2RlZmluZSBBTUxfTUVUSE9EX1NFUklBTElaRUQgICAgICAgMHgwOAogI2RlZmluZSBBTUxfTUVUSE9EX1NZTkNfTEVWRUwgICAgICAgMHhGMAogCi0vKiBNRVRIT0RfRkxBR1NfQVJHX0NPVU5UIGlzIG5vdCB1c2VkIGludGVybmFsbHksIGRlZmluZSBhZGRpdGlvbmFsIGZsYWdzICovCi0KLSNkZWZpbmUgQU1MX01FVEhPRF9JTlRFUk5BTF9PTkxZICAgIDB4MDEKLSNkZWZpbmUgQU1MX01FVEhPRF9SRVNFUlZFRDEgICAgICAgIDB4MDIKLSNkZWZpbmUgQU1MX01FVEhPRF9SRVNFUlZFRDIgICAgICAgIDB4MDQKLQogI2VuZGlmCQkJCS8qIF9fQU1MQ09ERV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYW1scmVzcmMuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYW1scmVzcmMuaAppbmRleCAwZTU3OThmLi41OTEyMmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FtbHJlc3JjLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hbWxyZXNyYy5oCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc2ZpZWxkLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzZmllbGQuYwppbmRleCAzNDdiZWUxLi4zNGJlNjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzZmllbGQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzZmllbGQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNpbml0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzaW5pdC5jCmluZGV4IGNjNGEzOGMuLmE3NzE4YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNpbml0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc2luaXQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtZXRob2QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtZXRob2QuYwppbmRleCBkOTRkZDg5Li41ZDc5Nzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbWV0aG9kLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc21ldGhvZC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDMsNyArNDMsNiBAQAogCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSAiYWNjb21tb24uaCIKLSNpbmNsdWRlICJhbWxjb2RlLmgiCiAjaW5jbHVkZSAiYWNkaXNwYXQuaCIKICNpbmNsdWRlICJhY2ludGVycC5oIgogI2luY2x1ZGUgImFjbmFtZXNwLmgiCkBAIC0yMDEsNyArMjAwLDcgQEAKIAkvKgogCSAqIElmIHRoaXMgbWV0aG9kIGlzIHNlcmlhbGl6ZWQsIHdlIG5lZWQgdG8gYWNxdWlyZSB0aGUgbWV0aG9kIG11dGV4LgogCSAqLwotCWlmIChvYmpfZGVzYy0+bWV0aG9kLm1ldGhvZF9mbGFncyAmIEFNTF9NRVRIT0RfU0VSSUFMSVpFRCkgeworCWlmIChvYmpfZGVzYy0+bWV0aG9kLmluZm9fZmxhZ3MgJiBBQ1BJX01FVEhPRF9TRVJJQUxJWkVEKSB7CiAJCS8qCiAJCSAqIENyZWF0ZSBhIG11dGV4IGZvciB0aGUgbWV0aG9kIGlmIGl0IGlzIGRlZmluZWQgdG8gYmUgU2VyaWFsaXplZAogCQkgKiBhbmQgYSBtdXRleCBoYXMgbm90IGFscmVhZHkgYmVlbiBjcmVhdGVkLiBXZSBkZWZlciB0aGUgbXV0ZXggY3JlYXRpb24KQEAgLTQxMyw4ICs0MTIsOSBAQAogCiAJLyogSW52b2tlIGFuIGludGVybmFsIG1ldGhvZCBpZiBuZWNlc3NhcnkgKi8KIAotCWlmIChvYmpfZGVzYy0+bWV0aG9kLm1ldGhvZF9mbGFncyAmIEFNTF9NRVRIT0RfSU5URVJOQUxfT05MWSkgewotCQlzdGF0dXMgPSBvYmpfZGVzYy0+bWV0aG9kLmV4dHJhLmltcGxlbWVudGF0aW9uKG5leHRfd2Fsa19zdGF0ZSk7CisJaWYgKG9ial9kZXNjLT5tZXRob2QuaW5mb19mbGFncyAmIEFDUElfTUVUSE9EX0lOVEVSTkFMX09OTFkpIHsKKwkJc3RhdHVzID0KKwkJICAgIG9ial9kZXNjLT5tZXRob2QuZGlzcGF0Y2guaW1wbGVtZW50YXRpb24obmV4dF93YWxrX3N0YXRlKTsKIAkJaWYgKHN0YXR1cyA9PSBBRV9PSykgewogCQkJc3RhdHVzID0gQUVfQ1RSTF9URVJNSU5BVEU7CiAJCX0KQEAgLTU3OSwxMSArNTc5LDE0IEBACiAKIAkJLyoKIAkJICogRGVsZXRlIGFueSBuYW1lc3BhY2Ugb2JqZWN0cyBjcmVhdGVkIGFueXdoZXJlIHdpdGhpbiB0aGUKLQkJICogbmFtZXNwYWNlIGJ5IHRoZSBleGVjdXRpb24gb2YgdGhpcyBtZXRob2QuIFVubGVzcyB0aGlzIG1ldGhvZAotCQkgKiBpcyBhIG1vZHVsZS1sZXZlbCBleGVjdXRhYmxlIGNvZGUgbWV0aG9kLCBpbiB3aGljaCBjYXNlIHdlCi0JCSAqIHdhbnQgbWFrZSB0aGUgb2JqZWN0cyBwZXJtYW5lbnQuCisJCSAqIG5hbWVzcGFjZSBieSB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgbWV0aG9kLiBVbmxlc3M6CisJCSAqIDEpIFRoaXMgbWV0aG9kIGlzIGEgbW9kdWxlLWxldmVsIGV4ZWN1dGFibGUgY29kZSBtZXRob2QsIGluIHdoaWNoCisJCSAqICAgIGNhc2Ugd2Ugd2FudCBtYWtlIHRoZSBvYmplY3RzIHBlcm1hbmVudC4KKwkJICogMikgVGhlcmUgYXJlIG90aGVyIHRocmVhZHMgZXhlY3V0aW5nIHRoZSBtZXRob2QsIGluIHdoaWNoIGNhc2Ugd2UKKwkJICogICAgd2lsbCB3YWl0IHVudGlsIHRoZSBsYXN0IHRocmVhZCBoYXMgY29tcGxldGVkLgogCQkgKi8KLQkJaWYgKCEobWV0aG9kX2Rlc2MtPm1ldGhvZC5mbGFncyAmIEFPUE9CSl9NT0RVTEVfTEVWRUwpKSB7CisJCWlmICghKG1ldGhvZF9kZXNjLT5tZXRob2QuaW5mb19mbGFncyAmIEFDUElfTUVUSE9EX01PRFVMRV9MRVZFTCkKKwkJICAgICYmIChtZXRob2RfZGVzYy0+bWV0aG9kLnRocmVhZF9jb3VudCA9PSAxKSkgewogCiAJCQkvKiBEZWxldGUgYW55IGRpcmVjdCBjaGlsZHJlbiBvZiAoY3JlYXRlZCBieSkgdGhpcyBtZXRob2QgKi8KIApAQCAtNTkzLDEyICs1OTYsMTcgQEAKIAkJCS8qCiAJCQkgKiBEZWxldGUgYW55IG9iamVjdHMgdGhhdCB3ZXJlIGNyZWF0ZWQgYnkgdGhpcyBtZXRob2QKIAkJCSAqIGVsc2V3aGVyZSBpbiB0aGUgbmFtZXNwYWNlIChpZiBhbnkgd2VyZSBjcmVhdGVkKS4KKwkJCSAqIFVzZSBvZiB0aGUgQUNQSV9NRVRIT0RfTU9ESUZJRURfTkFNRVNQQUNFIG9wdGltaXplcyB0aGUKKwkJCSAqIGRlbGV0aW9uIHN1Y2ggdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHBlcmZvcm0gYW4gZW50aXJlCisJCQkgKiBuYW1lc3BhY2Ugd2FsayBmb3IgZXZlcnkgY29udHJvbCBtZXRob2QgZXhlY3V0aW9uLgogCQkJICovCiAJCQlpZiAobWV0aG9kX2Rlc2MtPm1ldGhvZC4KLQkJCSAgICBmbGFncyAmIEFPUE9CSl9NT0RJRklFRF9OQU1FU1BBQ0UpIHsKKwkJCSAgICBpbmZvX2ZsYWdzICYgQUNQSV9NRVRIT0RfTU9ESUZJRURfTkFNRVNQQUNFKSB7CiAJCQkJYWNwaV9uc19kZWxldGVfbmFtZXNwYWNlX2J5X293bmVyKG1ldGhvZF9kZXNjLT4KIAkJCQkJCQkJICBtZXRob2QuCiAJCQkJCQkJCSAgb3duZXJfaWQpOworCQkJCW1ldGhvZF9kZXNjLT5tZXRob2QuaW5mb19mbGFncyAmPQorCQkJCSAgICB+QUNQSV9NRVRIT0RfTU9ESUZJRURfTkFNRVNQQUNFOwogCQkJfQogCQl9CiAJfQpAQCAtNjI5LDE5ICs2MzcsNDMgQEAKIAkJICogU2VyaWFsaXplZCBpZiBpdCBhcHBlYXJzIHRoYXQgdGhlIG1ldGhvZCBpcyBpbmNvcnJlY3RseSB3cml0dGVuIGFuZAogCQkgKiBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHRocmVhZCBleGVjdXRpb24uIFRoZSBiZXN0IGV4YW1wbGUgb2YgdGhpcwogCQkgKiBpcyBpZiBzdWNoIGEgbWV0aG9kIGNyZWF0ZXMgbmFtZXNwYWNlIG9iamVjdHMgYW5kIGJsb2Nrcy4gQSBzZWNvbmQKLQkJICogdGhyZWFkIHdpbGwgZmFpbCB3aXRoIGFuIEFFX0FMUkVBRFlfRVhJU1RTIGV4Y2VwdGlvbgorCQkgKiB0aHJlYWQgd2lsbCBmYWlsIHdpdGggYW4gQUVfQUxSRUFEWV9FWElTVFMgZXhjZXB0aW9uLgogCQkgKgogCQkgKiBUaGlzIGNvZGUgaXMgaGVyZSBiZWNhdXNlIHdlIG11c3Qgd2FpdCB1bnRpbCB0aGUgbGFzdCB0aHJlYWQgZXhpdHMKLQkJICogYmVmb3JlIGNyZWF0aW5nIHRoZSBzeW5jaHJvbml6YXRpb24gc2VtYXBob3JlLgorCQkgKiBiZWZvcmUgbWFya2luZyB0aGUgbWV0aG9kIGFzIHNlcmlhbGl6ZWQuCiAJCSAqLwotCQlpZiAoKG1ldGhvZF9kZXNjLT5tZXRob2QubWV0aG9kX2ZsYWdzICYgQU1MX01FVEhPRF9TRVJJQUxJWkVEKQotCQkgICAgJiYgKCFtZXRob2RfZGVzYy0+bWV0aG9kLm11dGV4KSkgewotCQkJKHZvaWQpYWNwaV9kc19jcmVhdGVfbWV0aG9kX211dGV4KG1ldGhvZF9kZXNjKTsKKwkJaWYgKG1ldGhvZF9kZXNjLT5tZXRob2QuCisJCSAgICBpbmZvX2ZsYWdzICYgQUNQSV9NRVRIT0RfU0VSSUFMSVpFRF9QRU5ESU5HKSB7CisJCQlpZiAod2Fsa19zdGF0ZSkgeworCQkJCUFDUElfSU5GTygoQUVfSU5GTywKKwkJCQkJICAgIk1hcmtpbmcgbWV0aG9kICU0LjRzIGFzIFNlcmlhbGl6ZWQgYmVjYXVzZSBvZiBBRV9BTFJFQURZX0VYSVNUUyBlcnJvciIsCisJCQkJCSAgIHdhbGtfc3RhdGUtPm1ldGhvZF9ub2RlLT5uYW1lLgorCQkJCQkgICBhc2NpaSkpOworCQkJfQorCisJCQkvKgorCQkJICogTWV0aG9kIHRyaWVkIHRvIGNyZWF0ZSBhbiBvYmplY3QgdHdpY2UgYW5kIHdhcyBtYXJrZWQgYXMKKwkJCSAqICJwZW5kaW5nIHNlcmlhbGl6ZWQiLiBUaGUgcHJvYmFibGUgY2F1c2UgaXMgdGhhdCB0aGUgbWV0aG9kCisJCQkgKiBjYW5ub3QgaGFuZGxlIHJlZW50cmFuY3kuCisJCQkgKgorCQkJICogVGhlIG1ldGhvZCB3YXMgY3JlYXRlZCBhcyBub3Rfc2VyaWFsaXplZCwgYnV0IGl0IHRyaWVkIHRvIGNyZWF0ZQorCQkJICogYSBuYW1lZCBvYmplY3QgYW5kIHRoZW4gYmxvY2tlZCwgY2F1c2luZyB0aGUgc2Vjb25kIHRocmVhZAorCQkJICogZW50cmFuY2UgdG8gYmVnaW4gYW5kIHRoZW4gZmFpbC4gV29ya2Fyb3VuZCB0aGlzIHByb2JsZW0gYnkKKwkJCSAqIG1hcmtpbmcgdGhlIG1ldGhvZCBwZXJtYW5lbnRseSBhcyBTZXJpYWxpemVkIHdoZW4gdGhlIGxhc3QKKwkJCSAqIHRocmVhZCBleGl0cyBoZXJlLgorCQkJICovCisJCQltZXRob2RfZGVzYy0+bWV0aG9kLmluZm9fZmxhZ3MgJj0KKwkJCSAgICB+QUNQSV9NRVRIT0RfU0VSSUFMSVpFRF9QRU5ESU5HOworCQkJbWV0aG9kX2Rlc2MtPm1ldGhvZC5pbmZvX2ZsYWdzIHw9CisJCQkgICAgQUNQSV9NRVRIT0RfU0VSSUFMSVpFRDsKKwkJCW1ldGhvZF9kZXNjLT5tZXRob2Quc3luY19sZXZlbCA9IDA7CiAJCX0KIAogCQkvKiBObyBtb3JlIHRocmVhZHMsIHdlIGNhbiBmcmVlIHRoZSBvd25lcl9pZCAqLwogCi0JCWlmICghKG1ldGhvZF9kZXNjLT5tZXRob2QuZmxhZ3MgJiBBT1BPQkpfTU9EVUxFX0xFVkVMKSkgeworCQlpZiAoIQorCQkgICAgKG1ldGhvZF9kZXNjLT5tZXRob2QuCisJCSAgICAgaW5mb19mbGFncyAmIEFDUElfTUVUSE9EX01PRFVMRV9MRVZFTCkpIHsKIAkJCWFjcGlfdXRfcmVsZWFzZV9vd25lcl9pZCgmbWV0aG9kX2Rlc2MtPm1ldGhvZC5vd25lcl9pZCk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbXRoZGF0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbXRoZGF0LmMKaW5kZXggODA5NTMwNi4uOTA1Y2UyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc210aGRhdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtdGhkYXQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb2JqZWN0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb2JqZWN0LmMKaW5kZXggOGU4NWY1NC4uZjQyZTE3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc29iamVjdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvYmplY3QuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvcGNvZGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvcGNvZGUuYwppbmRleCA3YzBlNzQyLi5iYmVjZjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb3Bjb2RlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc29wY29kZS5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzdXRpbHMuYwppbmRleCAxNTEzNWMyLi4yYzQ3N2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzdXRpbHMuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2V4ZWMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3ZXhlYy5jCmluZGV4IDZiMGI1ZDAuLmZlNDBlNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3ZXhlYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3ZXhlYy5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dsb2FkLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2xvYWQuYwppbmRleCAxNDBhOWQwLi41MjU2NmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2xvYWQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2xvYWQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3c2NvcGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3c2NvcGUuYwppbmRleCBkMWU3MDE3Li43NmE2NjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd3Njb3BlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dzY29wZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dzdGF0ZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dzdGF0ZS5jCmluZGV4IDgzMTU1ZGQuLmE2YzM3NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3c3RhdGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd3N0YXRlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2ZXZlbnQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZldmVudC5jCmluZGV4IGU1ZTMxM2MuLmQ0NThiMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZldmVudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZldmVudC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jCmluZGV4IDdjMzM5ZDMuLjE0OTg4YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00NzEsNiArNDcxLDcgQEAKIAogCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9FVkVOVFMpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlBQ1BJX0ZSRUUobG9jYWxfZ3BlX2V2ZW50X2luZm8pOwogCQlyZXR1cm5fVk9JRDsKIAl9CiAKQEAgLTQ3OCw2ICs0NzksNyBAQAogCiAJaWYgKCFhY3BpX2V2X3ZhbGlkX2dwZV9ldmVudChncGVfZXZlbnRfaW5mbykpIHsKIAkJc3RhdHVzID0gYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX0VWRU5UUyk7CisJCUFDUElfRlJFRShsb2NhbF9ncGVfZXZlbnRfaW5mbyk7CiAJCXJldHVybl9WT0lEOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWJsay5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWJsay5jCmluZGV4IDlhY2I4NjkuLmNhMmM0MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVibGsuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlYmxrLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlaW5pdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWluaXQuYwppbmRleCBjNTlkYzIzLi5jZTlhYTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlaW5pdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVpbml0LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BldXRpbC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZXV0aWwuYwppbmRleCAxMGU0Nzc0Li44MGE4MWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BldXRpbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGV1dGlsLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2bWlzYy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldm1pc2MuYwppbmRleCAzOGJiYTY2Li43ZGM4MDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2bWlzYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZtaXNjLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmVnaW9uLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmVnaW9uLmMKaW5kZXggOThmZDIxMC4uNzg1YTVlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJlZ2lvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZWdpb24uYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZ25pbmkuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZ25pbmkuYwppbmRleCAwYjQ3YTZkLi45NjU5Y2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmduaW5pLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJnbmluaS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTkwLDkgKzU5MCw5IEBACiAJCQkJICogU2VlIGFjcGlfbnNfZXhlY19tb2R1bGVfY29kZQogCQkJCSAqLwogCQkJCWlmIChvYmpfZGVzYy0+bWV0aG9kLgotCQkJCSAgICBmbGFncyAmIEFPUE9CSl9NT0RVTEVfTEVWRUwpIHsKKwkJCQkgICAgaW5mb19mbGFncyAmIEFDUElfTUVUSE9EX01PRFVMRV9MRVZFTCkgewogCQkJCQloYW5kbGVyX29iaiA9Ci0JCQkJCSAgICBvYmpfZGVzYy0+bWV0aG9kLmV4dHJhLmhhbmRsZXI7CisJCQkJCSAgICBvYmpfZGVzYy0+bWV0aG9kLmRpc3BhdGNoLmhhbmRsZXI7CiAJCQkJfQogCQkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2c2NpLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2c2NpLmMKaW5kZXggOGRmYmFhOS4uMmViZDQwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnNjaS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZzY2kuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmFjZS5jCmluZGV4IDEyMjY2ODkuLmUxMTQxNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmFjZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZXZudC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZXZudC5jCmluZGV4IDkwNDg4YzEuLmM1N2I1YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmV2bnQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZncGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmdwZS5jCmluZGV4IDQxNjg0NWIuLjNiMjBhMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmdwZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmdwZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjEyLDM3ICsyMTIsNDAgQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KIAotCS8qIFZhbGlkYXRlIHdha2VfZGV2aWNlIGlzIG9mIHR5cGUgRGV2aWNlICovCi0KLQlkZXZpY2Vfbm9kZSA9IEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUsIHdha2VfZGV2aWNlKTsKLQlpZiAoZGV2aWNlX25vZGUtPnR5cGUgIT0gQUNQSV9UWVBFX0RFVklDRSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7Ci0JfQotCiAJZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9ncGVfbG9jayk7CiAKIAkvKiBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgR1BFIG51bWJlciAqLwogCiAJZ3BlX2V2ZW50X2luZm8gPSBhY3BpX2V2X2dldF9ncGVfZXZlbnRfaW5mbyhncGVfZGV2aWNlLCBncGVfbnVtYmVyKTsKLQlpZiAoZ3BlX2V2ZW50X2luZm8pIHsKLQkJLyoKLQkJICogSWYgdGhlcmUgaXMgbm8gbWV0aG9kIG9yIGhhbmRsZXIgZm9yIHRoaXMgR1BFLCB0aGVuIHRoZQotCQkgKiB3YWtlX2RldmljZSB3aWxsIGJlIG5vdGlmaWVkIHdoZW5ldmVyIHRoaXMgR1BFIGZpcmVzIChha2EKLQkJICogImltcGxpY2l0IG5vdGlmeSIpIE5vdGU6IFRoZSBHUEUgaXMgYXNzdW1lZCB0byBiZQotCQkgKiBsZXZlbC10cmlnZ2VyZWQgKGZvciB3aW5kb3dzIGNvbXBhdGliaWxpdHkpLgotCQkgKi8KLQkJaWYgKChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLKSA9PQotCQkgICAgQUNQSV9HUEVfRElTUEFUQ0hfTk9ORSkgewotCQkJZ3BlX2V2ZW50X2luZm8tPmZsYWdzID0KLQkJCSAgICAoQUNQSV9HUEVfRElTUEFUQ0hfTk9USUZZIHwKLQkJCSAgICAgQUNQSV9HUEVfTEVWRUxfVFJJR0dFUkVEKTsKLQkJCWdwZV9ldmVudF9pbmZvLT5kaXNwYXRjaC5kZXZpY2Vfbm9kZSA9IGRldmljZV9ub2RlOwotCQl9Ci0KLQkJZ3BlX2V2ZW50X2luZm8tPmZsYWdzIHw9IEFDUElfR1BFX0NBTl9XQUtFOwotCQlzdGF0dXMgPSBBRV9PSzsKKwlpZiAoIWdwZV9ldmVudF9pbmZvKSB7CisJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCX0KIAorCS8qCisJICogSWYgdGhlcmUgaXMgbm8gbWV0aG9kIG9yIGhhbmRsZXIgZm9yIHRoaXMgR1BFLCB0aGVuIHRoZQorCSAqIHdha2VfZGV2aWNlIHdpbGwgYmUgbm90aWZpZWQgd2hlbmV2ZXIgdGhpcyBHUEUgZmlyZXMgKGFrYQorCSAqICJpbXBsaWNpdCBub3RpZnkiKSBOb3RlOiBUaGUgR1BFIGlzIGFzc3VtZWQgdG8gYmUKKwkgKiBsZXZlbC10cmlnZ2VyZWQgKGZvciB3aW5kb3dzIGNvbXBhdGliaWxpdHkpLgorCSAqLworCWlmICgoKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0RJU1BBVENIX01BU0spID09CisJICAgICAgQUNQSV9HUEVfRElTUEFUQ0hfTk9ORSkgJiYgKHdha2VfZGV2aWNlICE9IEFDUElfUk9PVF9PQkpFQ1QpKSB7CisKKwkJLyogVmFsaWRhdGUgd2FrZV9kZXZpY2UgaXMgb2YgdHlwZSBEZXZpY2UgKi8KKworCQlkZXZpY2Vfbm9kZSA9IEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUsCisJCQkJCSAgICB3YWtlX2RldmljZSk7CisJCWlmIChkZXZpY2Vfbm9kZS0+dHlwZSAhPSBBQ1BJX1RZUEVfREVWSUNFKSB7CisJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJfQorCQlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgPSAoQUNQSV9HUEVfRElTUEFUQ0hfTk9USUZZIHwKKwkJCQkJIEFDUElfR1BFX0xFVkVMX1RSSUdHRVJFRCk7CisJCWdwZV9ldmVudF9pbmZvLT5kaXNwYXRjaC5kZXZpY2Vfbm9kZSA9IGRldmljZV9ub2RlOworCX0KKworCWdwZV9ldmVudF9pbmZvLT5mbGFncyB8PSBBQ1BJX0dQRV9DQU5fV0FLRTsKKwlzdGF0dXMgPSBBRV9PSzsKKworIHVubG9ja19hbmRfZXhpdDoKIAlhY3BpX29zX3JlbGVhc2VfbG9jayhhY3BpX2dibF9ncGVfbG9jaywgZmxhZ3MpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmcmVnbi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmcmVnbi5jCmluZGV4IGNlOTMxNGYuLmViNzM4NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZnJlZ24uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZyZWduLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29uZmlnLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29uZmlnLmMKaW5kZXggMTg4MzIyMC4uNzQ1YTQyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGNvbmZpZy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb25maWcuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb252cnQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb252cnQuYwppbmRleCBiNzNiYzUwLi43NDE2MmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29udnJ0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGNvbnZydC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGNyZWF0ZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGNyZWF0ZS5jCmluZGV4IDNjNjFiNDguLmU3YjM3MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjcmVhdGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y3JlYXRlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00ODIsMTMgKzQ4MiwxMSBAQAogCW9ial9kZXNjLT5tZXRob2QuYW1sX2xlbmd0aCA9IGFtbF9sZW5ndGg7CiAKIAkvKgotCSAqIERpc2Fzc2VtYmxlIHRoZSBtZXRob2QgZmxhZ3MuIFNwbGl0IG9mZiB0aGUgQXJnIENvdW50Ci0JICogZm9yIGVmZmljaWVuY3kKKwkgKiBEaXNhc3NlbWJsZSB0aGUgbWV0aG9kIGZsYWdzLiBTcGxpdCBvZmYgdGhlIGFyZ19jb3VudCwgU2VyaWFsaXplZAorCSAqIGZsYWcsIGFuZCBzeW5jX2xldmVsIGZvciBlZmZpY2llbmN5LgogCSAqLwogCW1ldGhvZF9mbGFncyA9ICh1OCkgb3BlcmFuZFsxXS0+aW50ZWdlci52YWx1ZTsKIAotCW9ial9kZXNjLT5tZXRob2QubWV0aG9kX2ZsYWdzID0KLQkgICAgKHU4KSAobWV0aG9kX2ZsYWdzICYgfkFNTF9NRVRIT0RfQVJHX0NPVU5UKTsKIAlvYmpfZGVzYy0+bWV0aG9kLnBhcmFtX2NvdW50ID0KIAkgICAgKHU4KSAobWV0aG9kX2ZsYWdzICYgQU1MX01FVEhPRF9BUkdfQ09VTlQpOwogCkBAIC00OTcsNiArNDk1LDggQEAKIAkgKiBjcmVhdGVkIGZvciB0aGlzIG1ldGhvZCB3aGVuIGl0IGlzIHBhcnNlZC4KIAkgKi8KIAlpZiAobWV0aG9kX2ZsYWdzICYgQU1MX01FVEhPRF9TRVJJQUxJWkVEKSB7CisJCW9ial9kZXNjLT5tZXRob2QuaW5mb19mbGFncyA9IEFDUElfTUVUSE9EX1NFUklBTElaRUQ7CisKIAkJLyoKIAkJICogQUNQSSAxLjA6IHN5bmNfbGV2ZWwgPSAwCiAJCSAqIEFDUEkgMi4wOiBzeW5jX2xldmVsID0gc3luY19sZXZlbCBpbiBtZXRob2QgZGVjbGFyYXRpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhkZWJ1Zy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGRlYnVnLmMKaW5kZXggYmU4Yzk4Yi4uYzdhMmYxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGRlYnVnLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGRlYnVnLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZHVtcC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGR1bXAuYwppbmRleCBmMDY3YmJiLi42MWI4YzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZHVtcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhkdW1wLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMjIsNyArMTIyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBhY3BpX2V4ZHVtcF9pbmZvIGFjcGlfZXhfZHVtcF9tZXRob2RbOV0gPSB7CiAJe0FDUElfRVhEX0lOSVQsIEFDUElfRVhEX1RBQkxFX1NJWkUoYWNwaV9leF9kdW1wX21ldGhvZCksIE5VTEx9LAotCXtBQ1BJX0VYRF9VSU5UOCwgQUNQSV9FWERfT0ZGU0VUKG1ldGhvZC5tZXRob2RfZmxhZ3MpLCAiTWV0aG9kIEZsYWdzIn0sCisJe0FDUElfRVhEX1VJTlQ4LCBBQ1BJX0VYRF9PRkZTRVQobWV0aG9kLmluZm9fZmxhZ3MpLCAiSW5mbyBGbGFncyJ9LAogCXtBQ1BJX0VYRF9VSU5UOCwgQUNQSV9FWERfT0ZGU0VUKG1ldGhvZC5wYXJhbV9jb3VudCksCiAJICJQYXJhbWV0ZXIgQ291bnQifSwKIAl7QUNQSV9FWERfVUlOVDgsIEFDUElfRVhEX09GRlNFVChtZXRob2Quc3luY19sZXZlbCksICJTeW5jIExldmVsIn0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmllbGQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmaWVsZC5jCmluZGV4IGYxN2QyZmYuLjBiZGUyMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmaWVsZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmaWVsZC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGZsZGlvLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmxkaW8uYwppbmRleCAzODI5M2ZkLi42Yzc5YzI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmxkaW8uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmxkaW8uYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhtaXNjLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bWlzYy5jCmluZGV4IDk1ZGI0YmUwLi43MDNkODhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bWlzYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhtaXNjLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bXV0ZXguYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhtdXRleC5jCmluZGV4IDZhZjE0ZTQuLmJlMWM1NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhtdXRleC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhtdXRleC5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG5hbWVzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bmFtZXMuYwppbmRleCBkMTFlNTM5Li40OWVjMDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bmFtZXMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bmFtZXMuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzEuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzEuYwppbmRleCA4NGU0ZDE4Li4yMzZlYWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmcxLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMS5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMi5jCmluZGV4IDEwZTEwNGMuLjI1NzFiNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzIuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmcyLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmczLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmczLmMKaW5kZXggN2EwOGQyMy4uMWI0OGQ5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzMuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzYuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzYuYwppbmRleCA0YjUwNzMwLi5mNGEyNzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3Bhcmc2LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnNi5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHByZXAuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhwcmVwLmMKaW5kZXggN2FhZTI5Zi4uY2M5NWUyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHByZXAuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cHJlcC5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jCmluZGV4IGRlMTdlMTAuLmYwZDVlMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZWdpb24uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVnaW9uLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzbnRlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzbnRlLmMKaW5kZXggMWZhNDI4OS4uNTU5OTdlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc250ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNudGUuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvbHYuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvbHYuYwppbmRleCA3Y2EzNWVhLi5kYjUwMmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzb2x2LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc29sdi5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc29wLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzb3AuYwppbmRleCA4Yzk3Y2ZkLi5lM2JiMDBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzb3AuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzb3AuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3JlLmMKaW5kZXggMTYyNDQzNi4uYzBjODg0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3JlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3JlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3RvcmVuLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3RvcmVuLmMKaW5kZXggZDRhZjY4NC4uYTk3OTAxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3Jlbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yZW4uYwpAQCAtNyw3ICs3LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yb2IuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yb2IuYwppbmRleCBlOTcyYjY2Li5kYzY2NWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3Rvcm9iLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3JvYi5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHN5c3RlbS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHN5c3RlbS5jCmluZGV4IDY3NWFhYTkuLmRmNjZlN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzeXN0ZW0uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3lzdGVtLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4dXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXh1dGlscy5jCmluZGV4IDQwOTM1MjIuLjhhZDkzMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXh1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXh1dGlscy5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od2FjcGkuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdhY3BpLmMKaW5kZXggYjQ0Mjc0YS4uZmMzODBkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od2FjcGkuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3YWNwaS5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od2dwZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od2dwZS5jCmluZGV4IDg1YzNjYmQuLmY2MTBkODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdncGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3Z3BlLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3cGNpLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3cGNpLmMKaW5kZXggYWQyMWM3ZC4uMDUwZmQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3BjaS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdwY2kuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3cmVncy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3JlZ3MuYwppbmRleCA1ZDEyNzNiLi41NWFjY2I3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3cmVncy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdyZWdzLmMKQEAgLTcsNyArNyw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3NsZWVwLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3c2xlZXAuYwppbmRleCAzNzk2ODExLi4yYWMyOGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3c2xlZXAuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3c2xlZXAuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd0aW1lci5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3RpbWVyLmMKaW5kZXggMWVmOGUwYi4uOWM4ZWI3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3RpbWVyLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3RpbWVyLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3dmFsaWQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd2YWxpZC5jCmluZGV4IGUxZDljNzcuLjVmMTYwNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd2YWxpZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd2YWxpZC5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3hmYWNlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3eGZhY2UuYwppbmRleCA1MGNjM2JlLi42Zjk4ZDIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3eGZhY2UuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3eGZhY2UuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhY2Nlc3MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhY2Nlc3MuYwppbmRleCAwY2Q5MjViLi5kOTMxNzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWNjZXNzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FjY2Vzcy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE2Myw5ICsxNjMsOSBAQAogI2Vsc2UKIAkJCQkvKiBNYXJrIHRoaXMgYXMgYSB2ZXJ5IFNQRUNJQUwgbWV0aG9kICovCiAKLQkJCQlvYmpfZGVzYy0+bWV0aG9kLm1ldGhvZF9mbGFncyA9Ci0JCQkJICAgIEFNTF9NRVRIT0RfSU5URVJOQUxfT05MWTsKLQkJCQlvYmpfZGVzYy0+bWV0aG9kLmV4dHJhLmltcGxlbWVudGF0aW9uID0KKwkJCQlvYmpfZGVzYy0+bWV0aG9kLmluZm9fZmxhZ3MgPQorCQkJCSAgICBBQ1BJX01FVEhPRF9JTlRFUk5BTF9PTkxZOworCQkJCW9ial9kZXNjLT5tZXRob2QuZGlzcGF0Y2guaW1wbGVtZW50YXRpb24gPQogCQkJCSAgICBhY3BpX3V0X29zaV9pbXBsZW1lbnRhdGlvbjsKICNlbmRpZgogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FsbG9jLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWxsb2MuYwppbmRleCAxZTVmZjgwLi4xZDBlZjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWxsb2MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWxsb2MuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMzQsOCArMjM0LDggQEAKIAkJCSAqIG1vZGlmaWVkIHRoZSBuYW1lc3BhY2UuIFRoaXMgaXMgdXNlZCBmb3IgY2xlYW51cCB3aGVuIHRoZQogCQkJICogbWV0aG9kIGV4aXRzLgogCQkJICovCi0JCQl3YWxrX3N0YXRlLT5tZXRob2RfZGVzYy0+bWV0aG9kLmZsYWdzIHw9Ci0JCQkgICAgQU9QT0JKX01PRElGSUVEX05BTUVTUEFDRTsKKwkJCXdhbGtfc3RhdGUtPm1ldGhvZF9kZXNjLT5tZXRob2QuaW5mb19mbGFncyB8PQorCQkJICAgIEFDUElfTUVUSE9EX01PRElGSUVEX05BTUVTUEFDRTsKIAkJfQogCX0KIApAQCAtMzQxLDYgKzM0MSw3IEBACiB7CiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmNoaWxkX25vZGUgPSBOVUxMOwogCXUzMiBsZXZlbCA9IDE7CisJYWNwaV9zdGF0dXMgc3RhdHVzOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRShuc19kZWxldGVfbmFtZXNwYWNlX3N1YnRyZWUpOwogCkBAIC0zNDgsNiArMzQ5LDEzIEBACiAJCXJldHVybl9WT0lEOwogCX0KIAorCS8qIExvY2sgbmFtZXNwYWNlIGZvciBwb3NzaWJsZSB1cGRhdGUgKi8KKworCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm5fVk9JRDsKKwl9CisKIAkvKgogCSAqIFRyYXZlcnNlIHRoZSB0cmVlIG9mIG9iamVjdHMgdW50aWwgd2UgYnViYmxlIGJhY2sgdXAKIAkgKiB0byB3aGVyZSB3ZSBzdGFydGVkLgpAQCAtMzk3LDYgKzQwNSw3IEBACiAJCX0KIAl9CiAKKwkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKIAlyZXR1cm5fVk9JRDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2R1bXAuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNkdW1wLmMKaW5kZXggYTU0ZGMzOS4uYjY4M2NjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2R1bXAuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjI0LDkgKzYyNCwyMiBAQAogCQkgICAgIGFjcGlfb3duZXJfaWQgb3duZXJfaWQsIGFjcGlfaGFuZGxlIHN0YXJ0X2hhbmRsZSkKIHsKIAlzdHJ1Y3QgYWNwaV93YWxrX2luZm8gaW5mbzsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKIAlBQ1BJX0ZVTkNUSU9OX0VOVFJZKCk7CiAKKwkvKgorCSAqIEp1c3QgbG9jayB0aGUgZW50aXJlIG5hbWVzcGFjZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBkdW1wLgorCSAqIFdlIGRvbid0IHdhbnQgYW55IGNoYW5nZXMgdG8gdGhlIG5hbWVzcGFjZSBkdXJpbmcgdGhpcyB0aW1lLAorCSAqIGVzcGVjaWFsbHkgdGhlIHRlbXBvcmFyeSBub2RlcyBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gZGlzcGxheQorCSAqIHRoZW0gYWxzby4KKwkgKi8KKwlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJYWNwaV9vc19wcmludGYoIkNvdWxkIG5vdCBhY3F1aXJlIG5hbWVzcGFjZSBtdXRleFxuIik7CisJCXJldHVybjsKKwl9CisKIAlpbmZvLmRlYnVnX2xldmVsID0gQUNQSV9MVl9UQUJMRVM7CiAJaW5mby5vd25lcl9pZCA9IG93bmVyX2lkOwogCWluZm8uZGlzcGxheV90eXBlID0gZGlzcGxheV90eXBlOwpAQCAtNjM2LDYgKzY0OSw4IEBACiAJCQkJICAgICBBQ1BJX05TX1dBTEtfVEVNUF9OT0RFUywKIAkJCQkgICAgIGFjcGlfbnNfZHVtcF9vbmVfb2JqZWN0LCBOVUxMLAogCQkJCSAgICAgKHZvaWQgKikmaW5mbywgTlVMTCk7CisKKwkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKIH0KICNlbmRpZgkJCQkvKiBBQ1BJX0ZVVFVSRV9VU0FHRSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcGR2LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcGR2LmMKaW5kZXggZDJhOTc5Mi4uMmVkMjk0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2R1bXBkdi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNkdW1wZHYuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNldmFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZXZhbC5jCmluZGV4IGY1MjgyOWMuLmMxYmQwMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2V2YWwuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zODksNyArMzg5LDcgQEAKIAkgKiBhY3BpX2dibF9yb290X25vZGUtPk9iamVjdCBpcyBOVUxMIGF0IFBBU1MxLgogCSAqLwogCWlmICgodHlwZSA9PSBBQ1BJX1RZUEVfREVWSUNFKSAmJiBwYXJlbnRfbm9kZS0+b2JqZWN0KSB7Ci0JCW1ldGhvZF9vYmotPm1ldGhvZC5leHRyYS5oYW5kbGVyID0KKwkJbWV0aG9kX29iai0+bWV0aG9kLmRpc3BhdGNoLmhhbmRsZXIgPQogCQkgICAgcGFyZW50X25vZGUtPm9iamVjdC0+ZGV2aWNlLmhhbmRsZXI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zaW5pdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2luaXQuYwppbmRleCAwY2FjN2VjLi5mZDdjNjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zaW5pdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNpbml0LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbG9hZC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2xvYWQuYwppbmRleCBkZjE4YmU5Li41ZjdkYzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbG9hZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNsb2FkLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbmFtZXMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNuYW1lcy5jCmluZGV4IGQzMTA0YWYuLmQ1ZmE1MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNuYW1lcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNuYW1lcy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNvYmplY3QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNvYmplY3QuYwppbmRleCA0MWE5MjEzLi4zYmI4YmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zb2JqZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc29iamVjdC5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwYXJzZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3BhcnNlLmMKaW5kZXggNTgwOGM4OS4uYjMyMzRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3BhcnNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3BhcnNlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcHJlZGVmLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcHJlZGVmLmMKaW5kZXggNzA5NmJjZC4uOWZiMDNmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3ByZWRlZi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwcmVkZWYuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIuYwppbmRleCBkMWMxMzY2Li4xZDc2YWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3JlcGFpci5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3JlcGFpcjIuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIyLmMKaW5kZXggNGVmOWY0My4uOTczODgzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3JlcGFpcjIuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyMi5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3NlYXJjaC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3NlYXJjaC5jCmluZGV4IDQxMTAyYTguLjI4YjBkN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNzZWFyY2guYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zc2VhcmNoLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zdXRpbHMuYwppbmRleCBhN2Q2YWQ5Li5jYjFiMTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zdXRpbHMuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN3YWxrLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zd2Fsay5jCmluZGV4IDJjZDViZTguLjM0NWYwYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN3YWxrLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3dhbGsuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4ZmV2YWwuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4ZmV2YWwuYwppbmRleCBlYmVmOGE3Li5jNTNmMDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmZXZhbC5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm5hbWUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm5hbWUuYwppbmRleCBiMDFlNDVhLi4zZmQ0NTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZuYW1lLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmbmFtZS5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjAzLDEwICs2MDMsOSBAQAogCW1ldGhvZF9vYmotPm1ldGhvZC5wYXJhbV9jb3VudCA9ICh1OCkKIAkgICAgKG1ldGhvZF9mbGFncyAmIEFNTF9NRVRIT0RfQVJHX0NPVU5UKTsKIAotCW1ldGhvZF9vYmotPm1ldGhvZC5tZXRob2RfZmxhZ3MgPSAodTgpCi0JICAgIChtZXRob2RfZmxhZ3MgJiB+QU1MX01FVEhPRF9BUkdfQ09VTlQpOwotCiAJaWYgKG1ldGhvZF9mbGFncyAmIEFNTF9NRVRIT0RfU0VSSUFMSVpFRCkgeworCQltZXRob2Rfb2JqLT5tZXRob2QuaW5mb19mbGFncyA9IEFDUElfTUVUSE9EX1NFUklBTElaRUQ7CisKIAkJbWV0aG9kX29iai0+bWV0aG9kLnN5bmNfbGV2ZWwgPSAodTgpCiAJCSAgICAoKG1ldGhvZF9mbGFncyAmIEFNTF9NRVRIT0RfU1lOQ19MRVZFTCkgPj4gNCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmb2JqLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZvYmouYwppbmRleCBhMWYwNGU5Li5kYjc2NjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZvYmouYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZvYmouYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzYXJncy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc2FyZ3MuYwppbmRleCA3ZGYxYTRjLi5lMWZhZDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzYXJncy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNhcmdzLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzbG9vcC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc2xvb3AuYwppbmRleCAyZjJlNzc2Li4wMWRkNzBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzbG9vcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNsb29wLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02NTUsNyArNjU1LDcgQEAKIAkJbWV0aG9kX29iai0+bWV0aG9kLmFtbF9zdGFydCA9IGFtbF9zdGFydDsKIAkJbWV0aG9kX29iai0+bWV0aG9kLmFtbF9sZW5ndGggPSBhbWxfbGVuZ3RoOwogCQltZXRob2Rfb2JqLT5tZXRob2Qub3duZXJfaWQgPSBvd25lcl9pZDsKLQkJbWV0aG9kX29iai0+bWV0aG9kLmZsYWdzIHw9IEFPUE9CSl9NT0RVTEVfTEVWRUw7CisJCW1ldGhvZF9vYmotPm1ldGhvZC5pbmZvX2ZsYWdzIHw9IEFDUElfTUVUSE9EX01PRFVMRV9MRVZFTDsKIAogCQkvKgogCQkgKiBTYXZlIHRoZSBwYXJlbnQgbm9kZSBpbiBuZXh0X29iamVjdC4gVGhpcyBpcyBjaGVhdGluZywgYnV0IHdlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzb3Bjb2RlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzb3Bjb2RlLmMKaW5kZXggMmIwYzNiZS4uYmVkMDhkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc29wY29kZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNvcGNvZGUuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNwYXJzZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3BhcnNlLmMKaW5kZXggOGQ4MTU0Mi4uOWJiMGNiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc3BhcnNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3BhcnNlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC01NSw3ICs1NSw2IEBACiAjaW5jbHVkZSAiYWNwYXJzZXIuaCIKICNpbmNsdWRlICJhY2Rpc3BhdC5oIgogI2luY2x1ZGUgImFtbGNvZGUuaCIKLSNpbmNsdWRlICJhY25hbWVzcC5oIgogI2luY2x1ZGUgImFjaW50ZXJwLmgiCiAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX1BBUlNFUgpAQCAtNTM5LDI0ICs1MzgsMTYgQEAKIAkJCS8qIENoZWNrIGZvciBwb3NzaWJsZSBtdWx0aS10aHJlYWQgcmVlbnRyYW5jeSBwcm9ibGVtICovCiAKIAkJCWlmICgoc3RhdHVzID09IEFFX0FMUkVBRFlfRVhJU1RTKSAmJgotCQkJICAgICghd2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2MtPm1ldGhvZC5tdXRleCkpIHsKLQkJCQlBQ1BJX0lORk8oKEFFX0lORk8sCi0JCQkJCSAgICJNYXJraW5nIG1ldGhvZCAlNC40cyBhcyBTZXJpYWxpemVkIGJlY2F1c2Ugb2YgQUVfQUxSRUFEWV9FWElTVFMgZXJyb3IiLAotCQkJCQkgICB3YWxrX3N0YXRlLT5tZXRob2Rfbm9kZS0+bmFtZS4KLQkJCQkJICAgYXNjaWkpKTsKLQorCQkJICAgICghKHdhbGtfc3RhdGUtPm1ldGhvZF9kZXNjLT5tZXRob2QuCisJCQkgICAgICAgaW5mb19mbGFncyAmIEFDUElfTUVUSE9EX1NFUklBTElaRUQpKSkgewogCQkJCS8qCi0JCQkJICogTWV0aG9kIHRyaWVkIHRvIGNyZWF0ZSBhbiBvYmplY3QgdHdpY2UuIFRoZSBwcm9iYWJsZSBjYXVzZSBpcwotCQkJCSAqIHRoYXQgdGhlIG1ldGhvZCBjYW5ub3QgaGFuZGxlIHJlZW50cmFuY3kuCi0JCQkJICoKLQkJCQkgKiBUaGUgbWV0aG9kIGlzIG1hcmtlZCBub3Rfc2VyaWFsaXplZCwgYnV0IGl0IHRyaWVkIHRvIGNyZWF0ZQotCQkJCSAqIGEgbmFtZWQgb2JqZWN0LCBjYXVzaW5nIHRoZSBzZWNvbmQgdGhyZWFkIGVudHJhbmNlIHRvIGZhaWwuCi0JCQkJICogV29ya2Fyb3VuZCB0aGlzIHByb2JsZW0gYnkgbWFya2luZyB0aGUgbWV0aG9kIHBlcm1hbmVudGx5Ci0JCQkJICogYXMgU2VyaWFsaXplZC4KKwkJCQkgKiBNZXRob2QgaXMgbm90IHNlcmlhbGl6ZWQgYW5kIHRyaWVkIHRvIGNyZWF0ZSBhbiBvYmplY3QKKwkJCQkgKiB0d2ljZS4gVGhlIHByb2JhYmxlIGNhdXNlIGlzIHRoYXQgdGhlIG1ldGhvZCBjYW5ub3QKKwkJCQkgKiBoYW5kbGUgcmVlbnRyYW5jeS4gTWFyayBhcyAicGVuZGluZyBzZXJpYWxpemVkIiBub3csIGFuZAorCQkJCSAqIHRoZW4gbWFyayAic2VyaWFsaXplZCIgd2hlbiB0aGUgbGFzdCB0aHJlYWQgZXhpdHMuCiAJCQkJICovCi0JCQkJd2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2MtPm1ldGhvZC5tZXRob2RfZmxhZ3MgfD0KLQkJCQkgICAgQU1MX01FVEhPRF9TRVJJQUxJWkVEOwotCQkJCXdhbGtfc3RhdGUtPm1ldGhvZF9kZXNjLT5tZXRob2Quc3luY19sZXZlbCA9IDA7CisJCQkJd2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2MtPm1ldGhvZC5pbmZvX2ZsYWdzIHw9CisJCQkJICAgIEFDUElfTUVUSE9EX1NFUklBTElaRURfUEVORElORzsKIAkJCX0KIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzc2NvcGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNzY29wZS5jCmluZGV4IDQwZTJiMjcuLmE1ZmFhMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNzY29wZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNzY29wZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc3RyZWUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN0cmVlLmMKaW5kZXggZDRiOTcwYy4uZjE0NjRjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc3RyZWUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzdHJlZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzdXRpbHMuYwppbmRleCBmZTI5ZWVlLi43ZWRhNzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzdXRpbHMuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN3YWxrLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzd2Fsay5jCmluZGV4IDhhYmI5NjIuLjMzMTJkNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN3YWxrLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3dhbGsuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3hmYWNlLmMKaW5kZXggYzQyZjA2Ny4uODA4NjgwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc3hmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3hmYWNlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSAiYWNkaXNwYXQuaCIKICNpbmNsdWRlICJhY2ludGVycC5oIgogI2luY2x1ZGUgImFjdGFibGVzLmgiCi0jaW5jbHVkZSAiYW1sY29kZS5oIgogCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9QQVJTRVIKIEFDUElfTU9EVUxFX05BTUUoInBzeGZhY2UiKQpAQCAtMjg1LDE1ICsyODQsMTUgQEAKIAkJZ290byBjbGVhbnVwOwogCX0KIAotCWlmIChpbmZvLT5vYmpfZGVzYy0+bWV0aG9kLmZsYWdzICYgQU9QT0JKX01PRFVMRV9MRVZFTCkgeworCWlmIChpbmZvLT5vYmpfZGVzYy0+bWV0aG9kLmluZm9fZmxhZ3MgJiBBQ1BJX01FVEhPRF9NT0RVTEVfTEVWRUwpIHsKIAkJd2Fsa19zdGF0ZS0+cGFyc2VfZmxhZ3MgfD0gQUNQSV9QQVJTRV9NT0RVTEVfTEVWRUw7CiAJfQogCiAJLyogSW52b2tlIGFuIGludGVybmFsIG1ldGhvZCBpZiBuZWNlc3NhcnkgKi8KIAotCWlmIChpbmZvLT5vYmpfZGVzYy0+bWV0aG9kLm1ldGhvZF9mbGFncyAmIEFNTF9NRVRIT0RfSU5URVJOQUxfT05MWSkgeworCWlmIChpbmZvLT5vYmpfZGVzYy0+bWV0aG9kLmluZm9fZmxhZ3MgJiBBQ1BJX01FVEhPRF9JTlRFUk5BTF9PTkxZKSB7CiAJCXN0YXR1cyA9Ci0JCSAgICBpbmZvLT5vYmpfZGVzYy0+bWV0aG9kLmV4dHJhLmltcGxlbWVudGF0aW9uKHdhbGtfc3RhdGUpOworCQkgICAgaW5mby0+b2JqX2Rlc2MtPm1ldGhvZC5kaXNwYXRjaC5pbXBsZW1lbnRhdGlvbih3YWxrX3N0YXRlKTsKIAkJaW5mby0+cmV0dXJuX29iamVjdCA9IHdhbGtfc3RhdGUtPnJldHVybl9kZXNjOwogCiAJCS8qIENsZWFudXAgc3RhdGVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzYWRkci5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2FkZHIuYwppbmRleCAyMjZjODA2Li45ZTY2ZjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzYWRkci5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNhZGRyLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2NhbGMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNjYWxjLmMKaW5kZXggZDZlYmY3ZS4uM2E4YTg5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2NhbGMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzY2FsYy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNjcmVhdGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNjcmVhdGUuYwppbmRleCBjODBhMmVlLi40Y2U2ZTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzY3JlYXRlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2NyZWF0ZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNkdW1wLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzZHVtcC5jCmluZGV4IGY4NTliMDMuLjMzZGI3NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNkdW1wLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2R1bXAuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzaW5mby5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2luZm8uYwppbmRleCAxZmQ4NjhiLi5mOWVhNjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzaW5mby5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpbmZvLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2lvLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzaW8uYwppbmRleCAzM2JmZjE3Li4wYzdlZmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzaW8uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzaW8uYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzaXJxLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzaXJxLmMKaW5kZXggNTQ1ZGE0MC4uNTBiOGFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2lycS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpcnEuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzbGlzdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2xpc3QuYwppbmRleCA3MzM1ZjIyLi4xYmZjZWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzbGlzdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNsaXN0LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc21lbW9yeS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc21lbW9yeS5jCmluZGV4IDg4N2I4YmEuLjdjYzZkODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNtZW1vcnkuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzbWVtb3J5LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc21pc2MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNtaXNjLmMKaW5kZXggZjhjZDllOC4uNDEwMjY0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc21pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzbWlzYy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnN1dGlscy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc3V0aWxzLmMKaW5kZXggNDkxMTkxZS4uMjMxODExZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc3V0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc3V0aWxzLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc3hmYWNlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzeGZhY2UuYwppbmRleCA5ZjZhNmU3Li4yZmY2NTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzeGZhY2UuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzeGZhY2UuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiZmFkdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YmZhZHQuYwppbmRleCBkMmZmNDMyLi40MjhkNDRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiZmFkdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJmYWR0LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiZmluZC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YmZpbmQuYwppbmRleCA5ODlkNWM4Li5hNTVjYjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiZmluZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJmaW5kLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiaW5zdGFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiaW5zdGFsLmMKaW5kZXggODNkN2FmOC4uNDhkYjA5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS90Ymluc3RhbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJpbnN0YWwuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ1dGlscy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YnV0aWxzLmMKaW5kZXggMzRmOWMyYi4uMGYyZDM5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS90YnV0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YnV0aWxzLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RieGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZmFjZS5jCmluZGV4IDRhOGI5ZTYuLjRiNzA4NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZmFjZS5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS90Ynhmcm9vdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS90Ynhmcm9vdC5jCmluZGV4IGZkMmMwN2QuLjdlYjZjNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZnJvb3QuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RieGZyb290LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0YWxsb2MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRhbGxvYy5jCmluZGV4IDhmMDg5NjIuLjBhNjk3MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRhbGxvYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRhbGxvYy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGNvcHkuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRjb3B5LmMKaW5kZXggNmZlZjgzZi4uYWRlZDI5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGNvcHkuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Y29weS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGRlYnVnLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZGVidWcuYwppbmRleCBmMjFjNDg2Li5hOWJjZDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZGVidWcuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZGVidWcuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWxldGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWxldGUuYwppbmRleCBlZDc5NGNkLi4zMWY1YTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZGVsZXRlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGRlbGV0ZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRldmFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZXZhbC5jCmluZGV4IDIyZjU5ZWYuLjE4ZjczYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGV2YWwuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRnbG9iYWwuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRnbG9iYWwuYwppbmRleCA1MDg1MzdmLi45N2RkOWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Z2xvYmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGdsb2JhbC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGlkcy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGlkcy5jCmluZGV4IGQyOTA2MzIuLmI2NzllYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRpZHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0aWRzLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0aW5pdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGluaXQuYwppbmRleCBjMWIxYzgwLi4xOTFiNjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0aW5pdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRpbml0LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bG9jay5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGxvY2suYwppbmRleCBiMDgxY2Q0Li5mNmJiNzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bG9jay5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRsb2NrLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bWF0aC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG1hdGguYwppbmRleCA0OWNmN2I3Li5jZTQ4MWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bWF0aC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtYXRoLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG1pc2MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtaXNjLmMKaW5kZXggYzdkMGUwNS4uYzMzYTg1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG1pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bWlzYy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtdXRleC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG11dGV4LmMKaW5kZXggMTk5NTI4Zi4uYTk0NmM2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG11dGV4LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG11dGV4LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG9iamVjdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG9iamVjdC5jCmluZGV4IGZkMWZhMjcuLjE4ODM0MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRvYmplY3QuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0b2JqZWN0LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0b3NpLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0b3NpLmMKaW5kZXggMThjNTlhOC4uMWZiMTBjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG9zaS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRvc2kuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRyZXNyYy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dHJlc3JjLmMKaW5kZXggNzk2NTkxOS4uODRlMDUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHJlc3JjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dHJlc3JjLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHN0YXRlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0c3RhdGUuYwppbmRleCBkMzVkMTA5Li4zMGMyMWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0c3RhdGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0c3RhdGUuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0eGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmFjZS5jCmluZGV4IDFmNDg0YzkuLjk4YWQxMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmFjZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHhmZXJyb3IuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmVycm9yLmMKaW5kZXggNmYxMmUzMS4uOTE2YWUwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHhmZXJyb3IuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0eGZlcnJvci5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCmluZGV4IDY4YmMyMjcuLmFjMWE1OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9hY3BpL2JhdHRlcnkuYwpAQCAtOTk4LDcgKzk5OCw2IEBACiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybiAtRUlOVkFMOwogCWJhdHRlcnkgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7Ci0JYWNwaV9iYXR0ZXJ5X3JlZnJlc2goYmF0dGVyeSk7CiAJYmF0dGVyeS0+dXBkYXRlX3RpbWUgPSAwOwogCWFjcGlfYmF0dGVyeV91cGRhdGUoYmF0dGVyeSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbnZzLmMgYi9kcml2ZXJzL2FjcGkvbnZzLmMKaW5kZXggNTRiNmFiOC4uZmE1YTFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL252cy5jCisrKyBiL2RyaXZlcnMvYWNwaS9udnMuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpX2lvLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3Bpb3N4Zi5oPgogCiAvKgpAQCAtODAsNyArODEsNyBAQAogCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWVudHJ5LT5kYXRhKTsKIAkJCWVudHJ5LT5kYXRhID0gTlVMTDsKIAkJCWlmIChlbnRyeS0+a2FkZHIpIHsKLQkJCQlhY3BpX29zX3VubWFwX21lbW9yeShlbnRyeS0+a2FkZHIsIGVudHJ5LT5zaXplKTsKKwkJCQlpb3VubWFwKGVudHJ5LT5rYWRkcik7CiAJCQkJZW50cnktPmthZGRyID0gTlVMTDsKIAkJCX0KIAkJfQpAQCAtMTE0LDggKzExNSw4IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmbnZzX2xpc3QsIG5vZGUpCiAJCWlmIChlbnRyeS0+ZGF0YSkgewotCQkJZW50cnktPmthZGRyID0gYWNwaV9vc19tYXBfbWVtb3J5KGVudHJ5LT5waHlzX3N0YXJ0LAotCQkJCQkJCSAgZW50cnktPnNpemUpOworCQkJZW50cnktPmthZGRyID0gYWNwaV9vc19pb3JlbWFwKGVudHJ5LT5waHlzX3N0YXJ0LAorCQkJCQkJICAgIGVudHJ5LT5zaXplKTsKIAkJCWlmICghZW50cnktPmthZGRyKSB7CiAJCQkJc3VzcGVuZF9udnNfZnJlZSgpOwogCQkJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL29zbC5jIGIvZHJpdmVycy9hY3BpL29zbC5jCmluZGV4IGUyZGQ2ZGUuLmM5MGM3NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9vc2wuYworKysgYi9kcml2ZXJzL2FjcGkvb3NsLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9ubWkuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaV9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KQEAgLTMwMiw5ICszMDMsMTAgQEAKIGFjcGlfb3NfbWFwX21lbW9yeShhY3BpX3BoeXNpY2FsX2FkZHJlc3MgcGh5cywgYWNwaV9zaXplIHNpemUpCiB7CiAJc3RydWN0IGFjcGlfaW9yZW1hcCAqbWFwLCAqdG1wX21hcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCBwZ19zejsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXZvaWQgX19pb21lbSAqdmlydDsKLQlwaHlzX2FkZHJfdCBwZ19vZmY7CisJYWNwaV9waHlzaWNhbF9hZGRyZXNzIHBnX29mZjsKKwlhY3BpX3NpemUgcGdfc3o7CiAKIAlpZiAocGh5cyA+IFVMT05HX01BWCkgewogCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJDYW5ub3QgbWFwIG1lbW9yeSB0aGF0IGhpZ2hcbiIpOwpAQCAtMzIwLDcgKzMyMiw3IEBACiAKIAlwZ19vZmYgPSByb3VuZF9kb3duKHBoeXMsIFBBR0VfU0laRSk7CiAJcGdfc3ogPSByb3VuZF91cChwaHlzICsgc2l6ZSwgUEFHRV9TSVpFKSAtIHBnX29mZjsKLQl2aXJ0ID0gaW9yZW1hcF9jYWNoZShwZ19vZmYsIHBnX3N6KTsKKwl2aXJ0ID0gYWNwaV9vc19pb3JlbWFwKHBnX29mZiwgcGdfc3opOwogCWlmICghdmlydCkgewogCQlrZnJlZShtYXApOwogCQlyZXR1cm4gTlVMTDsKQEAgLTYzNCwxNyArNjM2LDIxIEBACiBhY3BpX3N0YXR1cwogYWNwaV9vc19yZWFkX21lbW9yeShhY3BpX3BoeXNpY2FsX2FkZHJlc3MgcGh5c19hZGRyLCB1MzIgKiB2YWx1ZSwgdTMyIHdpZHRoKQogewotCXUzMiBkdW1teTsKIAl2b2lkIF9faW9tZW0gKnZpcnRfYWRkcjsKLQlpbnQgc2l6ZSA9IHdpZHRoIC8gOCwgdW5tYXAgPSAwOworCXVuc2lnbmVkIGludCBzaXplID0gd2lkdGggLyA4OworCWJvb2wgdW5tYXAgPSBmYWxzZTsKKwl1MzIgZHVtbXk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJdmlydF9hZGRyID0gYWNwaV9tYXBfdmFkZHJfbG9va3VwKHBoeXNfYWRkciwgc2l6ZSk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAJaWYgKCF2aXJ0X2FkZHIpIHsKLQkJdmlydF9hZGRyID0gaW9yZW1hcF9jYWNoZShwaHlzX2FkZHIsIHNpemUpOwotCQl1bm1hcCA9IDE7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQl2aXJ0X2FkZHIgPSBhY3BpX29zX2lvcmVtYXAocGh5c19hZGRyLCBzaXplKTsKKwkJaWYgKCF2aXJ0X2FkZHIpCisJCQlyZXR1cm4gQUVfQkFEX0FERFJFU1M7CisJCXVubWFwID0gdHJ1ZTsKIAl9CisKIAlpZiAoIXZhbHVlKQogCQl2YWx1ZSA9ICZkdW1teTsKIApAQCAtNjY0LDYgKzY3MCw4IEBACiAKIAlpZiAodW5tYXApCiAJCWlvdW5tYXAodmlydF9hZGRyKTsKKwllbHNlCisJCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIEFFX09LOwogfQpAQCAtNjcyLDE0ICs2ODAsMTcgQEAKIGFjcGlfb3Nfd3JpdGVfbWVtb3J5KGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBwaHlzX2FkZHIsIHUzMiB2YWx1ZSwgdTMyIHdpZHRoKQogewogCXZvaWQgX19pb21lbSAqdmlydF9hZGRyOwotCWludCBzaXplID0gd2lkdGggLyA4LCB1bm1hcCA9IDA7CisJdW5zaWduZWQgaW50IHNpemUgPSB3aWR0aCAvIDg7CisJYm9vbCB1bm1hcCA9IGZhbHNlOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCXZpcnRfYWRkciA9IGFjcGlfbWFwX3ZhZGRyX2xvb2t1cChwaHlzX2FkZHIsIHNpemUpOwotCXJjdV9yZWFkX3VubG9jaygpOwogCWlmICghdmlydF9hZGRyKSB7Ci0JCXZpcnRfYWRkciA9IGlvcmVtYXBfY2FjaGUocGh5c19hZGRyLCBzaXplKTsKLQkJdW5tYXAgPSAxOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJdmlydF9hZGRyID0gYWNwaV9vc19pb3JlbWFwKHBoeXNfYWRkciwgc2l6ZSk7CisJCWlmICghdmlydF9hZGRyKQorCQkJcmV0dXJuIEFFX0JBRF9BRERSRVNTOworCQl1bm1hcCA9IHRydWU7CiAJfQogCiAJc3dpdGNoICh3aWR0aCkgewpAQCAtNjk4LDYgKzcwOSw4IEBACiAKIAlpZiAodW5tYXApCiAJCWlvdW5tYXAodmlydF9hZGRyKTsKKwllbHNlCisJCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIEFFX09LOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NsZWVwLmMgYi9kcml2ZXJzL2FjcGkvc2xlZXAuYwppbmRleCBmZGQzYWVlLi5kNmE4Y2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2xlZXAuYworKysgYi9kcml2ZXJzL2FjcGkvc2xlZXAuYwpAQCAtMTY2LDYgKzE2Niw3IEBACiAJdTMyIGFjcGlfc3RhdGUgPSBhY3BpX3RhcmdldF9zbGVlcF9zdGF0ZTsKIAogCWFjcGlfZWNfdW5ibG9ja190cmFuc2FjdGlvbnMoKTsKKwlzdXNwZW5kX252c19mcmVlKCk7CiAKIAlpZiAoYWNwaV9zdGF0ZSA9PSBBQ1BJX1NUQVRFX1MwKQogCQlyZXR1cm47CkBAIC0xODYsNyArMTg3LDYgQEAKICAqLwogc3RhdGljIHZvaWQgYWNwaV9wbV9lbmQodm9pZCkKIHsKLQlzdXNwZW5kX252c19mcmVlKCk7CiAJLyoKIAkgKiBUaGlzIGlzIG5lY2Vzc2FyeSBpbiBjYXNlIGFjcGlfcG1fZmluaXNoKCkgaXMgbm90IGNhbGxlZCBkdXJpbmcgYQogCSAqIGZhaWxpbmcgdHJhbnNpdGlvbiB0byBhIHNsZWVwIHN0YXRlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jIGIvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jCmluZGV4IDQyZDNkNzIuLjVhZjM0NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMKQEAgLTgyLDYgKzgyLDExIEBACiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybiAwOwogCisJLyogSXMgdGhpcyBkZXZpY2UgYWJsZSB0byBzdXBwb3J0IHZpZGVvIHN3aXRjaGluZyA/ICovCisJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfRE9EIiwgJmhfZHVtbXkpKSB8fAorCSAgICBBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX0RPUyIsICZoX2R1bW15KSkpCisJCXZpZGVvX2NhcHMgfD0gQUNQSV9WSURFT19PVVRQVVRfU1dJVENISU5HOworCiAJLyogSXMgdGhpcyBkZXZpY2UgYWJsZSB0byByZXRyaWV2ZSBhIHZpZGVvIFJPTSA/ICovCiAJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfUk9NIiwgJmhfZHVtbXkpKSkKIAkJdmlkZW9fY2FwcyB8PSBBQ1BJX1ZJREVPX1JPTV9BVkFJTEFCTEU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvd2FrZXVwLmMgYi9kcml2ZXJzL2FjcGkvd2FrZXVwLmMKaW5kZXggZWQ2NTAxNC4uN2JmYmU0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3dha2V1cC5jCisrKyBiL2RyaXZlcnMvYWNwaS93YWtldXAuYwpAQCAtODYsOCArODYsMTIgQEAKIAkJc3RydWN0IGFjcGlfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yobm9kZSwKIAkJCQkJCSAgICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UsCiAJCQkJCQkgICAgICAgd2FrZXVwX2xpc3QpOwotCQlpZiAoZGV2aWNlX2Nhbl93YWtldXAoJmRldi0+ZGV2KSkKKwkJaWYgKGRldmljZV9jYW5fd2FrZXVwKCZkZXYtPmRldikpIHsKKwkJCS8qIEJ1dHRvbiBHUEVzIGFyZSBzdXBwb3NlZCB0byBiZSBhbHdheXMgZW5hYmxlZC4gKi8KKwkJCWFjcGlfZW5hYmxlX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAorCQkJCQlkZXYtPndha2V1cC5ncGVfbnVtYmVyKTsKIAkJCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmZGV2LT5kZXYsIHRydWUpOworCQl9CiAJfQogCW11dGV4X3VubG9jaygmYWNwaV9kZXZpY2VfbG9jayk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9LY29uZmlnIGIvZHJpdmVycy9hdGEvS2NvbmZpZwppbmRleCBjNmIyOThkLi5jMjMyOGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYXRhL0tjb25maWcKQEAgLTc4Myw3ICs3ODMsNyBAQAogCiBjb25maWcgUEFUQV9QTEFURk9STQogCXRyaXN0YXRlICJHZW5lcmljIHBsYXRmb3JtIGRldmljZSBQQVRBIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBFTUJFRERFRCB8fCBQUEMgfHwgSEFWRV9QQVRBX1BMQVRGT1JNCisJZGVwZW5kcyBvbiBFWFBFUlQgfHwgUFBDIHx8IEhBVkVfUEFUQV9QTEFURk9STQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgZ2VuZXJpYyBkaXJlY3RseSBjb25uZWN0ZWQgQVRBCiAJICBkZXZpY2VzIGNvbW1vbmx5IGZvdW5kIG9uIGVtYmVkZGVkIHN5c3RlbXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmMgYi9kcml2ZXJzL2F0YS9haGNpLmMKaW5kZXggMzI4ODI2My4uYjhkOTZjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuYwpAQCAtMjYwLDYgKzI2MCw3IEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxZDAyKSwgYm9hcmRfYWhjaSB9LCAvKiBQQkcgQUhDSSAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWQwNCksIGJvYXJkX2FoY2kgfSwgLyogUEJHIFJBSUQgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFkMDYpLCBib2FyZF9haGNpIH0sIC8qIFBCRyBSQUlEICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyMzIzKSwgYm9hcmRfYWhjaSB9LCAvKiBESDg5eHhDQyBBSENJICovCiAKIAkvKiBKTWljcm9uIDM2MC8xLzMvNS82LCBtYXRjaCBjbGFzcyB0byBhdm9pZCBJREUgZnVuY3Rpb24gKi8KIAl7IFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKQEAgLTM3OSw2ICszODAsOCBAQAogCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHg2MTQ1KSwgYm9hcmRfYWhjaV9tdiB9LAkvKiA2MTQ1ICovCiAJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDYxMjEpLCBib2FyZF9haGNpX212IH0sCS8qIDYxMjEgKi8KIAl7IFBDSV9ERVZJQ0UoMHgxYjRiLCAweDkxMjMpLAorCSAgLmNsYXNzID0gUENJX0NMQVNTX1NUT1JBR0VfU0FUQV9BSENJLAorCSAgLmNsYXNzX21hc2sgPSAweGZmZmZmZiwKIAkgIC5kcml2ZXJfZGF0YSA9IGJvYXJkX2FoY2lfeWVzX2ZicyB9LAkJCS8qIDg4c2U5MTI4ICovCiAKIAkvKiBQcm9taXNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwppbmRleCBhMzFmZTk2Li5kNGU1MmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKQEAgLTQxMzgsNiArNDEzOCw3IEBACiAJICogZGV2aWNlIGFuZCBjb250cm9sbGVyIGFyZSBTQVRBLgogCSAqLwogCXsgIlBJT05FRVIgRFZELVJXICBEVlJURDA4IiwJIjEuMDAiLAlBVEFfSE9SS0FHRV9OT1NFVFhGRVIgfSwKKwl7ICJQSU9ORUVSIERWRC1SVyAgRFZSLTIxMkQiLAkiMS4yOCIsIEFUQV9IT1JLQUdFX05PU0VUWEZFUiB9LAogCiAJLyogRW5kIE1hcmtlciAqLwogCXsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKaW5kZXggNWRlZmM3NC4uNjAwZjYzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCkBAIC0xMDk5LDkgKzEwOTksOSBAQAogCQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHNkZXYtPnJlcXVlc3RfcXVldWU7CiAJCXZvaWQgKmJ1ZjsKIAotCQkvKiBzZXQgdGhlIG1pbiBhbGlnbm1lbnQgYW5kIHBhZGRpbmcgKi8KLQkJYmxrX3F1ZXVlX3VwZGF0ZV9kbWFfYWxpZ25tZW50KHNkZXYtPnJlcXVlc3RfcXVldWUsCi0JCQkJCSAgICAgICBBVEFfRE1BX1BBRF9TWiAtIDEpOworCQlzZGV2LT5zZWN0b3Jfc2l6ZSA9IEFUQV9TRUNUX1NJWkU7CisKKwkJLyogc2V0IERNQSBwYWRkaW5nICovCiAJCWJsa19xdWV1ZV91cGRhdGVfZG1hX3BhZChzZGV2LT5yZXF1ZXN0X3F1ZXVlLAogCQkJCQkgQVRBX0RNQV9QQURfU1ogLSAxKTsKIApAQCAtMTExNSwxMyArMTExNSwyNSBAQAogCiAJCWJsa19xdWV1ZV9kbWFfZHJhaW4ocSwgYXRhcGlfZHJhaW5fbmVlZGVkLCBidWYsIEFUQVBJX01BWF9EUkFJTik7CiAJfSBlbHNlIHsKLQkJLyogQVRBIGRldmljZXMgbXVzdCBiZSBzZWN0b3IgYWxpZ25lZCAqLwogCQlzZGV2LT5zZWN0b3Jfc2l6ZSA9IGF0YV9pZF9sb2dpY2FsX3NlY3Rvcl9zaXplKGRldi0+aWQpOwotCQlibGtfcXVldWVfdXBkYXRlX2RtYV9hbGlnbm1lbnQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKLQkJCQkJICAgICAgIHNkZXYtPnNlY3Rvcl9zaXplIC0gMSk7CiAJCXNkZXYtPm1hbmFnZV9zdGFydF9zdG9wID0gMTsKIAl9CiAKKwkvKgorCSAqIGF0YV9waW9fc2VjdG9ycygpIGV4cGVjdHMgYnVmZmVyIGZvciBlYWNoIHNlY3RvciB0byBub3QgY3Jvc3MKKwkgKiBwYWdlIGJvdW5kYXJ5LiAgRW5mb3JjZSBpdCBieSByZXF1aXJpbmcgYnVmZmVycyB0byBiZSBzZWN0b3IKKwkgKiBhbGlnbmVkLCB3aGljaCB3b3JrcyBpZmYgc2VjdG9yX3NpemUgaXMgbm90IGxhcmdlciB0aGFuCisJICogUEFHRV9TSVpFLiAgQVRBUEkgZGV2aWNlcyBhbHNvIG5lZWQgdGhlIGFsaWdubWVudCBhcworCSAqIElERU5USUZZX1BBQ0tFVCBpcyBleGVjdXRlZCBhcyBBVEFfUFJPVF9QSU8uCisJICovCisJaWYgKHNkZXYtPnNlY3Rvcl9zaXplID4gUEFHRV9TSVpFKQorCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fV0FSTklORywKKwkJCSJzZWN0b3Jfc2l6ZT0ldSA+IFBBR0VfU0laRSwgUElPIG1heSBtYWxmdW5jdGlvblxuIiwKKwkJCXNkZXYtPnNlY3Rvcl9zaXplKTsKKworCWJsa19xdWV1ZV91cGRhdGVfZG1hX2FsaWdubWVudChzZGV2LT5yZXF1ZXN0X3F1ZXVlLAorCQkJCSAgICAgICBzZGV2LT5zZWN0b3Jfc2l6ZSAtIDEpOworCiAJaWYgKGRldi0+ZmxhZ3MgJiBBVEFfREZMQUdfQU4pCiAJCXNldF9iaXQoU0RFVl9FVlRfTUVESUFfQ0hBTkdFLCBzZGV2LT5zdXBwb3J0ZWRfZXZlbnRzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMKaW5kZXggZDdlNTdkYi4uNTM4ZWMzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInBhdGFfaHB0MzY2IgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42LjkiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjYuMTAiCiAKIHN0cnVjdCBocHRfY2xvY2sgewogCXU4CXhmZXJfbW9kZTsKQEAgLTE2MCw4ICsxNjAsOCBAQAogCiAJd2hpbGUgKGxpc3RbaV0gIT0gTlVMTCkgewogCQlpZiAoIXN0cmNtcChsaXN0W2ldLCBtb2RlbF9udW0pKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICVzIGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVzLlxuIiwKLQkJCQltb2Rlc3RyLCBsaXN0W2ldKTsKKwkJCXByX3dhcm5pbmcoRFJWX05BTUUgIjogJXMgaXMgbm90IHN1cHBvcnRlZCBmb3IgJXMuXG4iLAorCQkJCSAgIG1vZGVzdHIsIGxpc3RbaV0pOwogCQkJcmV0dXJuIDE7CiAJCX0KIAkJaSsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKaW5kZXggZWZkZDE4Yi4uNGM1YjUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInBhdGFfaHB0Mzd4IgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42LjE4IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42LjIyIgogCiBzdHJ1Y3QgaHB0X2Nsb2NrIHsKIAl1OAl4ZmVyX3NwZWVkOwpAQCAtMjI5LDggKzIyOSw4IEBACiAKIAl3aGlsZSAobGlzdFtpXSAhPSBOVUxMKSB7CiAJCWlmICghc3RyY21wKGxpc3RbaV0sIG1vZGVsX251bSkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogJXMgaXMgbm90IHN1cHBvcnRlZCBmb3IgJXMuXG4iLAotCQkJCW1vZGVzdHIsIGxpc3RbaV0pOworCQkJcHJfd2FybmluZyhEUlZfTkFNRSAiOiAlcyBpcyBub3Qgc3VwcG9ydGVkIGZvciAlcy5cbiIsCisJCQkJICAgbW9kZXN0ciwgbGlzdFtpXSk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlpKys7CkBAIC02NDIsNyArNjQyLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBocHQzNzRfZm4xX3BvcnRfb3BzID0gewogCS5pbmhlcml0cwk9ICZocHQzNzJfcG9ydF9vcHMsCiAJLmNhYmxlX2RldGVjdAk9IGhwdDM3NF9mbjFfY2FibGVfZGV0ZWN0LAotCS5wcmVyZXNldAk9IGhwdDM3eF9wcmVfcmVzZXQsCiB9OwogCiAvKioKQEAgLTgwMyw3ICs4MDIsNyBAQAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMgPSAmaHB0MzAyX3BvcnRfb3BzCiAJfTsKLQkvKiBIUFQzNzQgLSBVRE1BMTAwLCBmdW5jdGlvbiAxIHVzZXMgZGlmZmVyZW50IHByZXJlc2V0IG1ldGhvZCAqLworCS8qIEhQVDM3NCAtIFVETUExMDAsIGZ1bmN0aW9uIDEgdXNlcyBkaWZmZXJlbnQgY2FibGVfZGV0ZWN0IG1ldGhvZCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3NF9mbjAgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS5waW9fbWFzayA9IEFUQV9QSU80LApAQCAtODM4LDcgKzgzNyw4IEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9UVElfSFBUMzY2KSB7CisJc3dpdGNoIChkZXYtPmRldmljZSkgeworCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzY2OgogCQkvKiBNYXkgYmUgYSBsYXRlciBjaGlwIGluIGRpc2d1aXNlLiBDaGVjayAqLwogCQkvKiBPbGRlciBjaGlwcyBhcmUgaW4gdGhlIEhQVDM2NiBkcml2ZXIuIElnbm9yZSB0aGVtICovCiAJCWlmIChyZXYgPCAzKQpAQCAtODYzLDU0ICs4NjMsNTAgQEAKIAkJCWNoaXBfdGFibGUgPSAmaHB0MzcyOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIgInBhdGFfaHB0Mzd4OiBVbmtub3duIEhQVDM2NiBzdWJ0eXBlLCAiCisJCQlwcl9lcnIoRFJWX05BTUUgIjogVW5rbm93biBIUFQzNjYgc3VidHlwZSwgIgogCQkJICAgICAgICJwbGVhc2UgcmVwb3J0ICglZCkuXG4iLCByZXYpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KLQl9IGVsc2UgewotCQlzd2l0Y2ggKGRldi0+ZGV2aWNlKSB7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzcyOgotCQkJLyogMzcyTiBpZiByZXYgPj0gMiAqLwotCQkJaWYgKHJldiA+PSAyKQotCQkJCXJldHVybiAtRU5PREVWOwotCQkJcHBpWzBdID0gJmluZm9faHB0MzcyOwotCQkJY2hpcF90YWJsZSA9ICZocHQzNzJhOwotCQkJYnJlYWs7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzAyOgotCQkJLyogMzAyTiBpZiByZXYgPiAxICovCi0JCQlpZiAocmV2ID4gMSkKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCXBwaVswXSA9ICZpbmZvX2hwdDMwMjsKLQkJCS8qIENoZWNrIHRoaXMgKi8KLQkJCWNoaXBfdGFibGUgPSAmaHB0MzAyOwotCQkJYnJlYWs7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzcxOgotCQkJaWYgKHJldiA+IDEpCi0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQlwcGlbMF0gPSAmaW5mb19ocHQzMDI7Ci0JCQljaGlwX3RhYmxlID0gJmhwdDM3MTsKLQkJCS8qCi0JCQkgKiBTaW5nbGUgY2hhbm5lbCBkZXZpY2UsIG1hc3RlciBpcyBub3QgcHJlc2VudAotCQkJICogYnV0IHRoZSBCSU9TIChvciB1cyBmb3Igbm9uIHg4NikgbXVzdCBtYXJrIGl0Ci0JCQkgKiBhYnNlbnQKLQkJCSAqLwotCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDUwLCAmbWNyMSk7Ci0JCQltY3IxICY9IH4weDA0OwotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgbWNyMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzQ6Ci0JCQljaGlwX3RhYmxlID0gJmhwdDM3NDsKLQkJCWlmICghKFBDSV9GVU5DKGRldi0+ZGV2Zm4pICYgMSkpCi0JCQkJKnBwaSA9ICZpbmZvX2hwdDM3NF9mbjA7Ci0JCQllbHNlCi0JCQkJKnBwaSA9ICZpbmZvX2hwdDM3NF9mbjE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJwYXRhX2hwdDM3eDogUENJIHRhYmxlIGlzIGJvZ3VzLCBwbGVhc2UgcmVwb3J0ICglZCkuXG4iLAotCQkJICAgICAgIGRldi0+ZGV2aWNlKTsKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQorCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3MjoKKwkJLyogMzcyTiBpZiByZXYgPj0gMiAqLworCQlpZiAocmV2ID49IDIpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJcHBpWzBdID0gJmluZm9faHB0MzcyOworCQljaGlwX3RhYmxlID0gJmhwdDM3MmE7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzAyOgorCQkvKiAzMDJOIGlmIHJldiA+IDEgKi8KKwkJaWYgKHJldiA+IDEpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJcHBpWzBdID0gJmluZm9faHB0MzAyOworCQkvKiBDaGVjayB0aGlzICovCisJCWNoaXBfdGFibGUgPSAmaHB0MzAyOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3MToKKwkJaWYgKHJldiA+IDEpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJcHBpWzBdID0gJmluZm9faHB0MzAyOworCQljaGlwX3RhYmxlID0gJmhwdDM3MTsKKwkJLyoKKwkJICogU2luZ2xlIGNoYW5uZWwgZGV2aWNlLCBtYXN0ZXIgaXMgbm90IHByZXNlbnQgYnV0IHRoZSBCSU9TCisJCSAqIChvciB1cyBmb3Igbm9uIHg4NikgbXVzdCBtYXJrIGl0IGFic2VudAorCQkgKi8KKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDUwLCAmbWNyMSk7CisJCW1jcjEgJj0gfjB4MDQ7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTAsIG1jcjEpOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3NDoKKwkJY2hpcF90YWJsZSA9ICZocHQzNzQ7CisJCWlmICghKFBDSV9GVU5DKGRldi0+ZGV2Zm4pICYgMSkpCisJCQkqcHBpID0gJmluZm9faHB0Mzc0X2ZuMDsKKwkJZWxzZQorCQkJKnBwaSA9ICZpbmZvX2hwdDM3NF9mbjE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2VycihEUlZfTkFNRSAiOiBQQ0kgdGFibGUgaXMgYm9ndXMsIHBsZWFzZSByZXBvcnQgKCVkKS5cbiIsCisJCSAgICAgICBkZXYtPmRldmljZSk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAkvKiBPayBzbyB0aGlzIGlzIGEgY2hpcCB3ZSBzdXBwb3J0ICovCiAKQEAgLTk1Nyw4ICs5NTMsNyBAQAogCQl1OCBzcjsKIAkJdTMyIHRvdGFsID0gMDsKIAotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAicGF0YV9ocHQzN3g6IEJJT1MgaGFzIG5vdCBzZXQgdGltaW5nIGNsb2Nrcy5cbiIpOworCQlwcl93YXJuaW5nKERSVl9OQU1FICI6IEJJT1MgaGFzIG5vdCBzZXQgdGltaW5nIGNsb2Nrcy5cbiIpOwogCiAJCS8qIFRoaXMgaXMgdGhlIHByb2Nlc3MgdGhlIEhQVDM3MSBCSU9TIGlzIHJlcG9ydGVkIHRvIHVzZSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKQEAgLTEwMTQsNyArMTAwOSw3IEBACiAJCQkJCSAgICAgICAoZl9oaWdoIDw8IDE2KSB8IGZfbG93IHwgMHgxMDApOwogCQl9CiAJCWlmIChhZGp1c3QgPT0gOCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJwYXRhX2hwdDM3eDogRFBMTCBkaWQgbm90IHN0YWJpbGl6ZSFcbiIpOworCQkJcHJfZXJyKERSVl9OQU1FICI6IERQTEwgZGlkIG5vdCBzdGFiaWxpemUhXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJCWlmIChkcGxsID09IDMpCkBAIC0xMDIyLDggKzEwMTcsOCBAQAogCQllbHNlCiAJCQlwcml2YXRlX2RhdGEgPSAodm9pZCAqKWhwdDM3eF90aW1pbmdzXzUwOwogCi0JCXByaW50ayhLRVJOX0lORk8gInBhdGFfaHB0Mzd4OiBidXMgY2xvY2sgJWRNSHosIHVzaW5nICVkTUh6IERQTEwuXG4iLAotCQkgICAgICAgTUh6W2Nsb2NrX3Nsb3RdLCBNSHpbZHBsbF0pOworCQlwcl9pbmZvKERSVl9OQU1FICI6IGJ1cyBjbG9jayAlZE1IeiwgdXNpbmcgJWRNSHogRFBMTC5cbiIsCisJCQlNSHpbY2xvY2tfc2xvdF0sIE1IeltkcGxsXSk7CiAJfSBlbHNlIHsKIAkJcHJpdmF0ZV9kYXRhID0gKHZvaWQgKiljaGlwX3RhYmxlLT5jbG9ja3NbY2xvY2tfc2xvdF07CiAJCS8qCkBAIC0xMDM2LDggKzEwMzEsOSBAQAogCQkJcHBpWzBdID0gJmluZm9faHB0MzcwXzMzOwogCQlpZiAoY2xvY2tfc2xvdCA8IDIgJiYgcHBpWzBdID09ICZpbmZvX2hwdDM3MGEpCiAJCQlwcGlbMF0gPSAmaW5mb19ocHQzNzBhXzMzOwotCQlwcmludGsoS0VSTl9JTkZPICJwYXRhX2hwdDM3eDogJXMgdXNpbmcgJWRNSHogYnVzIGNsb2NrLlxuIiwKLQkJICAgICAgIGNoaXBfdGFibGUtPm5hbWUsIE1IeltjbG9ja19zbG90XSk7CisKKwkJcHJfaW5mbyhEUlZfTkFNRSAiOiAlcyB1c2luZyAlZE1IeiBidXMgY2xvY2suXG4iLAorCQkJY2hpcF90YWJsZS0+bmFtZSwgTUh6W2Nsb2NrX3Nsb3RdKTsKIAl9CiAKIAkvKiBOb3cga2ljayBvZmYgQVRBIHNldCB1cCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYwppbmRleCBkMjIzOWJiLi5lY2E2OGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2hwdDN4Mm4iCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjMuMTMiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjMuMTQiCiAKIGVudW0gewogCUhQVF9QQ0lfRkFTVAk9CSgxIDw8IDMxKSwKQEAgLTQxOCw3ICs0MTgsNyBAQAogCQl1MTYgc3I7CiAJCXUzMiB0b3RhbCA9IDA7CiAKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAicGF0YV9ocHQzeDJuOiBCSU9TIGNsb2NrIGRhdGEgbm90IHNldC5cbiIpOworCQlwcl93YXJuaW5nKERSVl9OQU1FICI6IEJJT1MgY2xvY2sgZGF0YSBub3Qgc2V0LlxuIik7CiAKIAkJLyogVGhpcyBpcyB0aGUgcHJvY2VzcyB0aGUgSFBUMzcxIEJJT1MgaXMgcmVwb3J0ZWQgdG8gdXNlICovCiAJCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgewpAQCAtNTI4LDggKzUyOCw3IEBACiAJCXBwaVswXSA9ICZpbmZvX2hwdDM3Mm47CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgInBhdGFfaHB0M3gybjogUENJIHRhYmxlIGlzIGJvZ3VzIHBsZWFzZSByZXBvcnQgKCVkKS5cbiIsCisJCXByX2VycihEUlZfTkFNRSAiOiBQQ0kgdGFibGUgaXMgYm9ndXMsIHBsZWFzZSByZXBvcnQgKCVkKS5cbiIsCiAJCSAgICAgICBkZXYtPmRldmljZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTU3OSwxMiArNTc4LDExIEBACiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDVDLCAoZl9oaWdoIDw8IDE2KSB8IGZfbG93KTsKIAl9CiAJaWYgKGFkanVzdCA9PSA4KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGF0YV9ocHQzeDJuOiBEUExMIGRpZCBub3Qgc3RhYmlsaXplIVxuIik7CisJCXByX2VycihEUlZfTkFNRSAiOiBEUExMIGRpZCBub3Qgc3RhYmlsaXplIVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gInBhdGFfaHB0Mzd4OiBidXMgY2xvY2sgJWRNSHosIHVzaW5nIDY2TUh6IERQTEwuXG4iLAotCSAgICAgICBwY2lfbWh6KTsKKwlwcl9pbmZvKERSVl9OQU1FICI6IGJ1cyBjbG9jayAlZE1IeiwgdXNpbmcgNjZNSHogRFBMTC5cbiIsIHBjaV9taHopOwogCiAJLyoKIAkgKiBTZXQgb3VyIHByaXZhdGUgZGF0YSB1cC4gV2Ugb25seSBuZWVkIGEgZmV3IGZsYWdzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYyBiL2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jCmluZGV4IDhjYzUzNmUuLmQ3ZDgwMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jCkBAIC02MTAsNyArNjEwLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBtcGM1Mnh4X2F0YV9wb3J0X29wcyA9IHsKLQkuaW5oZXJpdHMJCT0gJmF0YV9zZmZfcG9ydF9vcHMsCisJLmluaGVyaXRzCQk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCiAJLnNmZl9kZXZfc2VsZWN0CQk9IG1wYzUyeHhfYXRhX2Rldl9zZWxlY3QsCiAJLnNldF9waW9tb2RlCQk9IG1wYzUyeHhfYXRhX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQkJPSBtcGM1Mnh4X2F0YV9zZXRfZG1hbW9kZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2lkdDc3MTA1LmMgYi9kcml2ZXJzL2F0bS9pZHQ3NzEwNS5jCmluZGV4IGJjYTljYjguLjQ4N2E1NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2lkdDc3MTA1LmMKKysrIGIvZHJpdmVycy9hdG0vaWR0NzcxMDUuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWR0NzcxMDVfcHJpdl9sb2NrLCBmbGFncyk7CiAJaWYgKGFyZyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY29weV90b191c2VyKGFyZywgJlBSSVYoZGV2KS0+c3RhdHMsCisJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmcsICZzdGF0cywKIAkJICAgIHNpemVvZihzdHJ1Y3QgaWR0NzcxMDVfc3RhdHMpKSA/IC1FRkFVTFQgOiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYyBiL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCmluZGV4IDczZmIxYzQuLjI1ZWYxYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCisrKyBiL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCkBAIC04NjYsOCArODY2LDkgQEAKIAl9CiAKIAlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKCpoZWFkZXIpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXNrYiAmJiBuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNrX2J1ZmYgaW4gcG9wZW4oKVxuIik7CisJaWYgKCFza2IpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza19idWZmIGluIHBvcGVuKClcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJaGVhZGVyID0gKHZvaWQgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZWFkZXIpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9LY29uZmlnIGIvZHJpdmVycy9iYXNlL0tjb25maWcKaW5kZXggZmQ5NjM0NS4uZDU3ZThkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL0tjb25maWcKKysrIGIvZHJpdmVycy9iYXNlL0tjb25maWcKQEAgLTcwLDcgKzcwLDcgQEAKIAkgIElmIHVuc3VyZSBzYXkgWSBoZXJlLgogCiBjb25maWcgRldfTE9BREVSCi0JdHJpc3RhdGUgIlVzZXJzcGFjZSBmaXJtd2FyZSBsb2FkaW5nIHN1cHBvcnQiIGlmIEVNQkVEREVECisJdHJpc3RhdGUgIlVzZXJzcGFjZSBmaXJtd2FyZSBsb2FkaW5nIHN1cHBvcnQiIGlmIEVYUEVSVAogCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGlzIHByb3ZpZGVkIGZvciB0aGUgY2FzZSB3aGVyZSBubyBpbi1rZXJuZWwtdHJlZSBtb2R1bGVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYwppbmRleCA2NTY0OTNhLi40MjYxNWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKQEAgLTQwNywxMiArNDA3LDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCS8qIE1heWJlIHRoZSBwYXJlbnQgaXMgbm93IGFibGUgdG8gc3VzcGVuZC4gKi8KIAlpZiAocGFyZW50ICYmICFwYXJlbnQtPnBvd2VyLmlnbm9yZV9jaGlsZHJlbiAmJiAhZGV2LT5wb3dlci5pcnFfc2FmZSkgewotCQlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJCXNwaW5fdW5sb2NrKCZkZXYtPnBvd2VyLmxvY2spOwogCi0JCXBtX3JlcXVlc3RfaWRsZShwYXJlbnQpOworCQlzcGluX2xvY2soJnBhcmVudC0+cG93ZXIubG9jayk7CisJCXJwbV9pZGxlKHBhcmVudCwgUlBNX0FTWU5DKTsKKwkJc3Bpbl91bmxvY2soJnBhcmVudC0+cG93ZXIubG9jayk7CiAKLQkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZkZXYtPnBvd2VyLmxvY2spOwogCX0KIAogIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUgYi9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlCmluZGV4IGQ3ZjQ2M2QuLjQwNTI4YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ibG9jay9NYWtlZmlsZQpAQCAtMzksNCArMzksNCBAQAogb2JqLSQoQ09ORklHX0JMS19ERVZfRFJCRCkgICAgICs9IGRyYmQvCiBvYmotJChDT05GSUdfQkxLX0RFVl9SQkQpICAgICArPSByYmQubwogCi1zd2ltX21vZC1vYmpzCTo9IHN3aW0ubyBzd2ltX2FzbS5vCitzd2ltX21vZC15CTo9IHN3aW0ubyBzd2ltX2FzbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2FvZS9NYWtlZmlsZSBiL2RyaXZlcnMvYmxvY2svYW9lL01ha2VmaWxlCmluZGV4IGU3NmQ5OTcuLjA2ZWE4MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYW9lL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYmxvY2svYW9lL01ha2VmaWxlCkBAIC0zLDQgKzMsNCBAQAogIwogCiBvYmotJChDT05GSUdfQVRBX09WRVJfRVRIKQkrPSBhb2UubwotYW9lLW9ianMgOj0gYW9lYmxrLm8gYW9lY2hyLm8gYW9lY21kLm8gYW9lZGV2Lm8gYW9lbWFpbi5vIGFvZW5ldC5vCithb2UteSA6PSBhb2VibGsubyBhb2VjaHIubyBhb2VjbWQubyBhb2VkZXYubyBhb2VtYWluLm8gYW9lbmV0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwppbmRleCA1MTZkNWJiLi45Mjc5MjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCkBAIC0yODMzLDcgKzI4MzMsNyBAQAogCXNlY3Rvcl90IHRvdGFsX3NpemU7CiAJSW5xdWlyeURhdGFfc3RydWN0ICppbnFfYnVmZiA9IE5VTEw7CiAKLQlmb3IgKGxvZ3ZvbCA9IDA7IGxvZ3ZvbCA8IENJU1NfTUFYX0xVTjsgbG9ndm9sKyspIHsKKwlmb3IgKGxvZ3ZvbCA9IDA7IGxvZ3ZvbCA8PSBoLT5oaWdoZXN0X2x1bjsgbG9ndm9sKyspIHsKIAkJaWYgKCFoLT5kcnZbbG9ndm9sXSkKIAkJCWNvbnRpbnVlOwogCQlpZiAobWVtY21wKGgtPmRydltsb2d2b2xdLT5MdW5JRCwgZHJ2LT5MdW5JRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCmluZGV4IGI5YmEwNGYuLjc3ZmM3NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKKysrIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwpAQCAtMzI4MSw3ICszMjgxLDcgQEAKIAkJCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBvcGVuZWRfYmRldltjbnRdOwogCQkJaWYgKCFiZGV2IHx8IElUWVBFKGRyaXZlX3N0YXRlW2NudF0uZmRfZGV2aWNlKSAhPSB0eXBlKQogCQkJCWNvbnRpbnVlOwotCQkJX19pbnZhbGlkYXRlX2RldmljZShiZGV2KTsKKwkJCV9faW52YWxpZGF0ZV9kZXZpY2UoYmRldiwgdHJ1ZSk7CiAJCX0KIAkJbXV0ZXhfdW5sb2NrKCZvcGVuX2xvY2spOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDQ0ZTE4YzAuLjQ5ZTZhNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC0xNjQxLDYgKzE2NDEsOSBAQAogCiBzdGF0aWMgdm9pZCBsb29wX2ZyZWUoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIHsKKwlpZiAoIWxvLT5sb19xdWV1ZS0+cXVldWVfbG9jaykKKwkJbG8tPmxvX3F1ZXVlLT5xdWV1ZV9sb2NrID0gJmxvLT5sb19xdWV1ZS0+X19xdWV1ZV9sb2NrOworCiAJYmxrX2NsZWFudXBfcXVldWUobG8tPmxvX3F1ZXVlKTsKIAlwdXRfZGlzayhsby0+bG9fZGlzayk7CiAJbGlzdF9kZWwoJmxvLT5sb19saXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCmluZGV4IGEzMmZiNDEuLmU2ZmM3MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmMKKysrIGIvZHJpdmVycy9ibG9jay9uYmQuYwpAQCAtNTMsNyArNTMsNiBAQAogI2RlZmluZSBEQkdfQkxLREVWICAgICAgMHgwMTAwCiAjZGVmaW5lIERCR19SWCAgICAgICAgICAweDAyMDAKICNkZWZpbmUgREJHX1RYICAgICAgICAgIDB4MDQwMAotc3RhdGljIERFRklORV9NVVRFWChuYmRfbXV0ZXgpOwogc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1Z2ZsYWdzOwogI2VuZGlmIC8qIE5ERUJVRyAqLwogCkBAIC03MTgsMTEgKzcxNyw5IEBACiAJZHByaW50ayhEQkdfSU9DVEwsICIlczogbmJkX2lvY3RsIGNtZD0lcygweCV4KSBhcmc9JWx1XG4iLAogCQkJbG8tPmRpc2stPmRpc2tfbmFtZSwgaW9jdGxfY21kX3RvX2FzY2lpKGNtZCksIGNtZCwgYXJnKTsKIAotCW11dGV4X2xvY2soJm5iZF9tdXRleCk7CiAJbXV0ZXhfbG9jaygmbG8tPnR4X2xvY2spOwogCWVycm9yID0gX19uYmRfaW9jdGwoYmRldiwgbG8sIGNtZCwgYXJnKTsKIAltdXRleF91bmxvY2soJmxvLT50eF9sb2NrKTsKLQltdXRleF91bmxvY2soJm5iZF9tdXRleCk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jIGIvZHJpdmVycy9ibHVldG9vdGgvYXRoM2suYwppbmRleCA5NDllZDA5Li42ZGNkNTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2F0aDNrLmMKQEAgLTM5LDYgKzM5LDExIEBACiAJLyogQXRoZXJvcyBBUjMwMTEgd2l0aCBzZmxhc2ggZmlybXdhcmUqLwogCXsgVVNCX0RFVklDRSgweDBDRjMsIDB4MzAwMikgfSwKIAorCS8qIEF0aGVyb3MgQVI5Mjg1IE1hbGJlYyB3aXRoIHNmbGFzaCBmaXJtd2FyZSAqLworCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MzExRCkgfSwKKworCS8qIEF0aGVyb3MgQVI1QkJVMTIgd2l0aCBzZmxhc2ggZmlybXdhcmUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDg5LCAweEUwMkMpIH0sCiAJeyB9CS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCkBAIC00NywzMyArNTIsMTYgQEAKICNkZWZpbmUgVVNCX1JFUV9ERlVfRE5MT0FECTEKICNkZWZpbmUgQlVMS19TSVpFCQk0MDk2CiAKLXN0cnVjdCBhdGgza19kYXRhIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQl1OCAqZndfZGF0YTsKLQl1MzIgZndfc2l6ZTsKLQl1MzIgZndfc2VudDsKLX07Ci0KLXN0YXRpYyBpbnQgYXRoM2tfbG9hZF9maXJtd2FyZShzdHJ1Y3QgYXRoM2tfZGF0YSAqZGF0YSwKLQkJCQl1bnNpZ25lZCBjaGFyICpmaXJtd2FyZSwKLQkJCQlpbnQgY291bnQpCitzdGF0aWMgaW50IGF0aDNrX2xvYWRfZmlybXdhcmUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSkKIHsKIAl1OCAqc2VuZF9idWY7CiAJaW50IGVyciwgcGlwZSwgbGVuLCBzaXplLCBzZW50ID0gMDsKKwlpbnQgY291bnQgPSBmaXJtd2FyZS0+c2l6ZTsKIAotCUJUX0RCRygiYXRoM2sgJXAgdWRldiAlcCIsIGRhdGEsIGRhdGEtPnVkZXYpOworCUJUX0RCRygidWRldiAlcCIsIHVkZXYpOwogCi0JcGlwZSA9IHVzYl9zbmRjdHJscGlwZShkYXRhLT51ZGV2LCAwKTsKLQotCWlmICgodXNiX2NvbnRyb2xfbXNnKGRhdGEtPnVkZXYsIHBpcGUsCi0JCQkJVVNCX1JFUV9ERlVfRE5MT0FELAotCQkJCVVTQl9UWVBFX1ZFTkRPUiwgMCwgMCwKLQkJCQlmaXJtd2FyZSwgMjAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKSkgPCAwKSB7Ci0JCUJUX0VSUigiQ2FuJ3QgY2hhbmdlIHRvIGxvYWRpbmcgY29uZmlndXJhdGlvbiBlcnIiKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0Jc2VudCArPSAyMDsKLQljb3VudCAtPSAyMDsKKwlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApOwogCiAJc2VuZF9idWYgPSBrbWFsbG9jKEJVTEtfU0laRSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFzZW5kX2J1ZikgewpAQCAtODEsMTIgKzY5LDIzIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCW1lbWNweShzZW5kX2J1ZiwgZmlybXdhcmUtPmRhdGEsIDIwKTsKKwlpZiAoKGVyciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCBwaXBlLAorCQkJCVVTQl9SRVFfREZVX0ROTE9BRCwKKwkJCQlVU0JfVFlQRV9WRU5ET1IsIDAsIDAsCisJCQkJc2VuZF9idWYsIDIwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCkpIDwgMCkgeworCQlCVF9FUlIoIkNhbid0IGNoYW5nZSB0byBsb2FkaW5nIGNvbmZpZ3VyYXRpb24gZXJyIik7CisJCWdvdG8gZXJyb3I7CisJfQorCXNlbnQgKz0gMjA7CisJY291bnQgLT0gMjA7CisKIAl3aGlsZSAoY291bnQpIHsKIAkJc2l6ZSA9IG1pbl90KHVpbnQsIGNvdW50LCBCVUxLX1NJWkUpOwotCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRhdGEtPnVkZXYsIDB4MDIpOwotCQltZW1jcHkoc2VuZF9idWYsIGZpcm13YXJlICsgc2VudCwgc2l6ZSk7CisJCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUodWRldiwgMHgwMik7CisJCW1lbWNweShzZW5kX2J1ZiwgZmlybXdhcmUtPmRhdGEgKyBzZW50LCBzaXplKTsKIAotCQllcnIgPSB1c2JfYnVsa19tc2coZGF0YS0+dWRldiwgcGlwZSwgc2VuZF9idWYsIHNpemUsCisJCWVyciA9IHVzYl9idWxrX21zZyh1ZGV2LCBwaXBlLCBzZW5kX2J1Ziwgc2l6ZSwKIAkJCQkJJmxlbiwgMzAwMCk7CiAKIAkJaWYgKGVyciB8fCAobGVuICE9IHNpemUpKSB7CkBAIC0xMTIsNTcgKzExMSwyOCBAQAogewogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXN0cnVjdCBhdGgza19kYXRhICpkYXRhOwotCWludCBzaXplOwogCiAJQlRfREJHKCJpbnRmICVwIGlkICVwIiwgaW50ZiwgaWQpOwogCiAJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgIT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZGF0YS0+dWRldiA9IHVkZXY7Ci0KIAlpZiAocmVxdWVzdF9maXJtd2FyZSgmZmlybXdhcmUsICJhdGgzay0xLmZ3IiwgJnVkZXYtPmRldikgPCAwKSB7Ci0JCWtmcmVlKGRhdGEpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlzaXplID0gbWF4X3QodWludCwgZmlybXdhcmUtPnNpemUsIDQwOTYpOwotCWRhdGEtPmZ3X2RhdGEgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YS0+ZndfZGF0YSkgeworCWlmIChhdGgza19sb2FkX2Zpcm13YXJlKHVkZXYsIGZpcm13YXJlKSkgewogCQlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKLQkJa2ZyZWUoZGF0YSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1lbWNweShkYXRhLT5md19kYXRhLCBmaXJtd2FyZS0+ZGF0YSwgZmlybXdhcmUtPnNpemUpOwotCWRhdGEtPmZ3X3NpemUgPSBmaXJtd2FyZS0+c2l6ZTsKLQlkYXRhLT5md19zZW50ID0gMDsKLQlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKLQotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGF0YSk7Ci0JaWYgKGF0aDNrX2xvYWRfZmlybXdhcmUoZGF0YSwgZGF0YS0+ZndfZGF0YSwgZGF0YS0+Zndfc2l6ZSkpIHsKLQkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKLQkJa2ZyZWUoZGF0YS0+ZndfZGF0YSk7Ci0JCWtmcmVlKGRhdGEpOwogCQlyZXR1cm4gLUVJTzsKIAl9CisJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgYXRoM2tfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKLQlzdHJ1Y3QgYXRoM2tfZGF0YSAqZGF0YSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0KIAlCVF9EQkcoImF0aDNrX2Rpc2Nvbm5lY3QgaW50ZiAlcCIsIGludGYpOwotCi0Ja2ZyZWUoZGF0YS0+ZndfZGF0YSk7Ci0Ja2ZyZWUoZGF0YSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhdGgza19kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwppbmRleCAxZGE3NzNmOC4uNzAwYTM4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCkBAIC0xMDIsNiArMTAyLDEyIEBACiAJLyogQXRoZXJvcyAzMDExIHdpdGggc2ZsYXNoIGZpcm13YXJlICovCiAJeyBVU0JfREVWSUNFKDB4MGNmMywgMHgzMDAyKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfSUdOT1JFIH0sCiAKKwkvKiBBdGhlcm9zIEFSOTI4NSBNYWxiZWMgd2l0aCBzZmxhc2ggZmlybXdhcmUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2YwLCAweDMxMWQpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9JR05PUkUgfSwKKworCS8qIEF0aGVyb3MgQVI1QkJVMTIgd2l0aCBzZmxhc2ggZmlybXdhcmUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDg5LCAweGUwMmMpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9JR05PUkUgfSwKKwogCS8qIEJyb2FkY29tIEJDTTIwMzUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIwMzUpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9XUk9OR19TQ09fTVRVIH0sCiAJeyBVU0JfREVWSUNFKDB4MGE1YywgMHgyMDBhKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfV1JPTkdfU0NPX01UVSB9LApAQCAtODI2LDcgKzgzMiw3IEBACiAKIAlpZiAoaGRldi0+Y29ubl9oYXNoLnNjb19udW0gPiAwKSB7CiAJCWlmICghdGVzdF9iaXQoQlRVU0JfRElEX0lTT19SRVNVTUUsICZkYXRhLT5mbGFncykpIHsKLQkJCWVyciA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShkYXRhLT5pc29jKTsKKwkJCWVyciA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShkYXRhLT5pc29jID8gZGF0YS0+aXNvYyA6IGRhdGEtPmludGYpOwogCQkJaWYgKGVyciA8IDApIHsKIAkJCQljbGVhcl9iaXQoQlRVU0JfSVNPQ19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwogCQkJCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmRhdGEtPmlzb2NfYW5jaG9yKTsKQEAgLTg1NSw3ICs4NjEsNyBAQAogCiAJCV9fc2V0X2lzb2NfaW50ZXJmYWNlKGhkZXYsIDApOwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEJUVVNCX0RJRF9JU09fUkVTVU1FLCAmZGF0YS0+ZmxhZ3MpKQotCQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRhdGEtPmlzb2MpOworCQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRhdGEtPmlzb2MgPyBkYXRhLT5pc29jIDogZGF0YS0+aW50Zik7CiAJfQogfQogCkBAIC0xMDM4LDggKzEwNDQsNiBAQAogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkYXRhKTsKIAotCXVzYl9lbmFibGVfYXV0b3N1c3BlbmQoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jIGIvZHJpdmVycy9jZHJvbS9jZHJvbS5jCmluZGV4IDE0MDMzYTMuLmUyYzQ4YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vY2Ryb20uYworKysgYi9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKQEAgLTQwOSw3ICs0MDksOCBAQAogCX0KIAogCUVOU1VSRShkcml2ZV9zdGF0dXMsIENEQ19EUklWRV9TVEFUVVMgKTsKLQlFTlNVUkUobWVkaWFfY2hhbmdlZCwgQ0RDX01FRElBX0NIQU5HRUQpOworCWlmIChjZG8tPmNoZWNrX2V2ZW50cyA9PSBOVUxMICYmIGNkby0+bWVkaWFfY2hhbmdlZCA9PSBOVUxMKQorCQkqY2hhbmdlX2NhcGFiaWxpdHkgPSB+KENEQ19NRURJQV9DSEFOR0VEIHwgQ0RDX1NFTEVDVF9ESVNDKTsKIAlFTlNVUkUodHJheV9tb3ZlLCBDRENfQ0xPU0VfVFJBWSB8IENEQ19PUEVOX1RSQVkpOwogCUVOU1VSRShsb2NrX2Rvb3IsIENEQ19MT0NLKTsKIAlFTlNVUkUoc2VsZWN0X3NwZWVkLCBDRENfU0VMRUNUX1NQRUVEKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9LY29uZmlnIGIvZHJpdmVycy9jaGFyL0tjb25maWcKaW5kZXggMGYxNzVhOC4uYjc5ODBhODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC01LDcgKzUsNyBAQAogbWVudSAiQ2hhcmFjdGVyIGRldmljZXMiCiAKIGNvbmZpZyBWVAotCWJvb2wgIlZpcnR1YWwgdGVybWluYWwiIGlmIEVNQkVEREVECisJYm9vbCAiVmlydHVhbCB0ZXJtaW5hbCIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiAhUzM5MAogCXNlbGVjdCBJTlBVVAogCWRlZmF1bHQgeQpAQCAtMzksMTMgKzM5LDEzIEBACiBjb25maWcgQ09OU09MRV9UUkFOU0xBVElPTlMKIAlkZXBlbmRzIG9uIFZUCiAJZGVmYXVsdCB5Ci0JYm9vbCAiRW5hYmxlIGNoYXJhY3RlciB0cmFuc2xhdGlvbnMgaW4gY29uc29sZSIgaWYgRU1CRURERUQKKwlib29sICJFbmFibGUgY2hhcmFjdGVyIHRyYW5zbGF0aW9ucyBpbiBjb25zb2xlIiBpZiBFWFBFUlQKIAktLS1oZWxwLS0tCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgZm9udCBtYXBwaW5nIGFuZCBVbmljb2RlIHRyYW5zbGF0aW9uCiAJICBvbiB2aXJ0dWFsIGNvbnNvbGVzLgogCiBjb25maWcgVlRfQ09OU09MRQotCWJvb2wgIlN1cHBvcnQgZm9yIGNvbnNvbGUgb24gdmlydHVhbCB0ZXJtaW5hbCIgaWYgRU1CRURERUQKKwlib29sICJTdXBwb3J0IGZvciBjb25zb2xlIG9uIHZpcnR1YWwgdGVybWluYWwiIGlmIEVYUEVSVAogCWRlcGVuZHMgb24gVlQKIAlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCkBAIC00MjYsMTAgKzQyNiwxMCBAQAogICAgICAgICAgSWYgeW91IGhhdmUgYW4gU0dJIEFsdGl4IHdpdGggYW4gYXR0YWNoZWQgU0FCcmljawogICAgICAgICAgc2F5IFkgb3IgTSBoZXJlLCBvdGhlcndpc2Ugc2F5IE4uCiAKLXNvdXJjZSAiZHJpdmVycy9zZXJpYWwvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWciCiAKIGNvbmZpZyBVTklYOThfUFRZUwotCWJvb2wgIlVuaXg5OCBQVFkgc3VwcG9ydCIgaWYgRU1CRURERUQKKwlib29sICJVbml4OTggUFRZIHN1cHBvcnQiIGlmIEVYUEVSVAogCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KIAkgIEEgcHNldWRvIHRlcm1pbmFsIChQVFkpIGlzIGEgc29mdHdhcmUgZGV2aWNlIGNvbnNpc3Rpbmcgb2YgdHdvCkBAIC00OTUsNyArNDk1LDcgQEAKIAogY29uZmlnIFRUWV9QUklOVEsKIAlib29sICJUVFkgZHJpdmVyIHRvIG91dHB1dCB1c2VyIG1lc3NhZ2VzIHZpYSBwcmludGsiCi0JZGVwZW5kcyBvbiBFTUJFRERFRAorCWRlcGVuZHMgb24gRVhQRVJUCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZSBzdXBwb3J0IGZvciB3cml0aW5nIHVzZXIgbWVzc2FnZXMgKGkuZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQppbmRleCAxZTlkZmZiLi44MjM4Zjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCkBAIC0zMCwxNyArMzAsNiBAQAogb2JqLSQoQ09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMKSArPSBhbWlzZXJpYWwubwogb2JqLSQoQ09ORklHX1NYKQkJKz0gc3gubyBnZW5lcmljX3NlcmlhbC5vCiBvYmotJChDT05GSUdfUklPKQkJKz0gcmlvLyBnZW5lcmljX3NlcmlhbC5vCi1vYmotJChDT05GSUdfSFZDX0NPTlNPTEUpCSs9IGh2Y192aW8ubyBodnNpLm8KLW9iai0kKENPTkZJR19IVkNfSVNFUklFUykJKz0gaHZjX2lzZXJpZXMubwotb2JqLSQoQ09ORklHX0hWQ19SVEFTKQkJKz0gaHZjX3J0YXMubwotb2JqLSQoQ09ORklHX0hWQ19USUxFKQkJKz0gaHZjX3RpbGUubwotb2JqLSQoQ09ORklHX0hWQ19EQ0MpCQkrPSBodmNfZGNjLm8KLW9iai0kKENPTkZJR19IVkNfQkVBVCkJCSs9IGh2Y19iZWF0Lm8KLW9iai0kKENPTkZJR19IVkNfRFJJVkVSKQkrPSBodmNfY29uc29sZS5vCi1vYmotJChDT05GSUdfSFZDX0lSUSkJCSs9IGh2Y19pcnEubwotb2JqLSQoQ09ORklHX0hWQ19YRU4pCQkrPSBodmNfeGVuLm8KLW9iai0kKENPTkZJR19IVkNfSVVDVikJCSs9IGh2Y19pdWN2Lm8KLW9iai0kKENPTkZJR19IVkNfVURCRykJCSs9IGh2Y191ZGJnLm8KIG9iai0kKENPTkZJR19WSVJUSU9fQ09OU09MRSkJKz0gdmlydGlvX2NvbnNvbGUubwogb2JqLSQoQ09ORklHX1JBV19EUklWRVIpCSs9IHJhdy5vCiBvYmotJChDT05GSUdfU0dJX1NOU0MpCQkrPSBzbnNjLm8gc25zY19ldmVudC5vCkBAIC00OCw3ICszNyw2IEBACiBvYmotJChDT05GSUdfTU1USU1FUikJCSs9IG1tdGltZXIubwogb2JqLSQoQ09ORklHX1VWX01NVElNRVIpCSs9IHV2X21tdGltZXIubwogb2JqLSQoQ09ORklHX1ZJT1RBUEUpCQkrPSB2aW90YXBlLm8KLW9iai0kKENPTkZJR19IVkNTKQkJKz0gaHZjcy5vCiBvYmotJChDT05GSUdfSUJNX0JTUikJCSs9IGJzci5vCiBvYmotJChDT05GSUdfU0dJX01CQ1MpCQkrPSBtYmNzLm8KIG9iai0kKENPTkZJR19CUklRX1BBTkVMKQkrPSBicmlxX3BhbmVsLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZwppbmRleCBmY2Q4NjdkLi5kOGIxYjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL2FncC9LY29uZmlnCkBAIC01MCw3ICs1MCw3IEBACiAKIGNvbmZpZyBBR1BfQU1ECiAJdHJpc3RhdGUgIkFNRCBJcm9uZ2F0ZSwgNzYxLCBhbmQgNzYyIGNoaXBzZXQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFHUCAmJiAoWDg2XzMyIHx8IEFMUEhBKQorCWRlcGVuZHMgb24gQUdQICYmIFg4Nl8zMgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGdpdmVzIHlvdSBBR1Agc3VwcG9ydCBmb3IgdGhlIEdMWCBjb21wb25lbnQgb2YKIAkgIFggb24gQU1EIElyb25nYXRlLCA3NjEsIGFuZCA3NjIgY2hpcHNldHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCmluZGV4IGIxYjQzNjIuLjQ1NjgxYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCkBAIC00MSwyMiArNDEsOCBAQAogCWlmIChwYWdlX21hcC0+cmVhbCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotI2lmbmRlZiBDT05GSUdfWDg2Ci0JU2V0UGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShwYWdlX21hcC0+cmVhbCkpOwotCWdsb2JhbF9jYWNoZV9mbHVzaCgpOwotCXBhZ2VfbWFwLT5yZW1hcHBlZCA9IGlvcmVtYXBfbm9jYWNoZSh2aXJ0X3RvX3BoeXMocGFnZV9tYXAtPnJlYWwpLAotCQkJCQkgICAgUEFHRV9TSVpFKTsKLQlpZiAocGFnZV9tYXAtPnJlbWFwcGVkID09IE5VTEwpIHsKLQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHBhZ2VfbWFwLT5yZWFsKSk7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFnZV9tYXAtPnJlYWwpOwotCQlwYWdlX21hcC0+cmVhbCA9IE5VTEw7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlnbG9iYWxfY2FjaGVfZmx1c2goKTsKLSNlbHNlCiAJc2V0X21lbW9yeV91YygodW5zaWduZWQgbG9uZylwYWdlX21hcC0+cmVhbCwgMSk7CiAJcGFnZV9tYXAtPnJlbWFwcGVkID0gcGFnZV9tYXAtPnJlYWw7Ci0jZW5kaWYKIAogCWZvciAoaSA9IDA7IGkgPCBQQUdFX1NJWkUgLyBzaXplb2YodW5zaWduZWQgbG9uZyk7IGkrKykgewogCQl3cml0ZWwoYWdwX2JyaWRnZS0+c2NyYXRjaF9wYWdlLCBwYWdlX21hcC0+cmVtYXBwZWQraSk7CkBAIC02OCwxMiArNTQsNyBAQAogCiBzdGF0aWMgdm9pZCBhbWRfZnJlZV9wYWdlX21hcChzdHJ1Y3QgYW1kX3BhZ2VfbWFwICpwYWdlX21hcCkKIHsKLSNpZm5kZWYgQ09ORklHX1g4NgotCWlvdW5tYXAocGFnZV9tYXAtPnJlbWFwcGVkKTsKLQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UocGFnZV9tYXAtPnJlYWwpKTsKLSNlbHNlCiAJc2V0X21lbW9yeV93YigodW5zaWduZWQgbG9uZylwYWdlX21hcC0+cmVhbCwgMSk7Ci0jZW5kaWYKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2VfbWFwLT5yZWFsKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKaW5kZXggOTI1MmU4NS4uNzgwNDk4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCkBAIC03NzMsMTggKzc3MywyMyBAQAogI2Vsc2UKIAkJCXByaW50ayhLRVJOX0lORk8gUEZYICJZb3UgY2FuIGJvb3Qgd2l0aCBhZ3A9dHJ5X3Vuc3VwcG9ydGVkXG4iKTsKICNlbmRpZgorCQkJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhZ3BfYW1kNjRfcGNpX2RyaXZlcik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCiAJCS8qIEZpcnN0IGNoZWNrIHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgQU1ENjQgTkIgKi8KLQkJaWYgKCFwY2lfZGV2X3ByZXNlbnQoYW1kX25iX21pc2NfaWRzKSkKKwkJaWYgKCFwY2lfZGV2X3ByZXNlbnQoYW1kX25iX21pc2NfaWRzKSkgeworCQkJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhZ3BfYW1kNjRfcGNpX2RyaXZlcik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQogCiAJCS8qIExvb2sgZm9yIGFueSBBR1AgYnJpZGdlICovCiAJCWFncF9hbWQ2NF9wY2lfZHJpdmVyLmlkX3RhYmxlID0gYWdwX2FtZDY0X3BjaV9wcm9taXNjX3RhYmxlOwogCQllcnIgPSBkcml2ZXJfYXR0YWNoKCZhZ3BfYW1kNjRfcGNpX2RyaXZlci5kcml2ZXIpOwotCQlpZiAoZXJyID09IDAgJiYgYWdwX2JyaWRnZXNfZm91bmQgPT0gMCkKKwkJaWYgKGVyciA9PSAwICYmIGFncF9icmlkZ2VzX2ZvdW5kID09IDApIHsKKwkJCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYWdwX2FtZDY0X3BjaV9kcml2ZXIpOwogCQkJZXJyID0gLUVOT0RFVjsKKwkJfQogCX0KIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKaW5kZXggODU3ZGYxMC4uYjBhMGRjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCkBAIC03NzQsMjAgKzc3NCwxNCBAQAogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJJbnRlbCAlcyBDaGlwc2V0XG4iLCBpbnRlbF9hZ3BfY2hpcHNldHNbaV0ubmFtZSk7CiAKIAkvKgotCSogSWYgdGhlIGRldmljZSBoYXMgbm90IGJlZW4gcHJvcGVybHkgc2V0dXAsIHRoZSBmb2xsb3dpbmcgd2lsbCBjYXRjaAotCSogdGhlIHByb2JsZW0gYW5kIHNob3VsZCBzdG9wIHRoZSBzeXN0ZW0gZnJvbSBjcmFzaGluZy4KLQkqIDIwMDMwNjEwIC0gaGFtaXNoQHpvdC5vcmcKLQkqLwotCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBlbmFibGUgUENJIGRldmljZVxuIik7Ci0JCWFncF9wdXRfYnJpZGdlKGJyaWRnZSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCS8qCiAJKiBUaGUgZm9sbG93aW5nIGZpeGVzIHRoZSBjYXNlIHdoZXJlIHRoZSBCSU9TIGhhcyAiZm9yZ290dGVuIiB0bwogCSogcHJvdmlkZSBhbiBhZGRyZXNzIHJhbmdlIGZvciB0aGUgR0FSVC4KIAkqIDIwMDMwNjEwIC0gaGFtaXNoQHpvdC5vcmcKKwkqIFRoaXMgaGFwcGVucyBiZWZvcmUgcGNpX2VuYWJsZV9kZXZpY2UoKSBpbnRlbnRpb25hbGx5OworCSogY2FsbGluZyBwY2lfZW5hYmxlX2RldmljZSgpIGJlZm9yZSBhc3NpZ25pbmcgdGhlIHJlc291cmNlCisJKiB3aWxsIHJlc3VsdCBpbiB0aGUgR0FSVCBiZWluZyBkaXNhYmxlZCBvbiBtYWNoaW5lcyB3aXRoIHN1Y2gKKwkqIEJJT1NzICh0aGUgR0FSVCBlbmRzIHVwIHdpdGggYSBCQVIgc3RhcnRpbmcgYXQgMCwgd2hpY2gKKwkqIGNvbmZsaWN0cyBhIGxvdCBvZiBvdGhlciBkZXZpY2VzKS4KIAkqLwogCXIgPSAmcGRldi0+cmVzb3VyY2VbMF07CiAJaWYgKCFyLT5zdGFydCAmJiByLT5lbmQpIHsKQEAgLTc5OCw2ICs3OTIsMTcgQEAKIAkJfQogCX0KIAorCS8qCisJKiBJZiB0aGUgZGV2aWNlIGhhcyBub3QgYmVlbiBwcm9wZXJseSBzZXR1cCwgdGhlIGZvbGxvd2luZyB3aWxsIGNhdGNoCisJKiB0aGUgcHJvYmxlbSBhbmQgc2hvdWxkIHN0b3AgdGhlIHN5c3RlbSBmcm9tIGNyYXNoaW5nLgorCSogMjAwMzA2MTAgLSBoYW1pc2hAem90Lm9yZworCSovCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKKwkJYWdwX3B1dF9icmlkZ2UoYnJpZGdlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJLyogRmlsbCBpbiB0aGUgbW9kZSByZWdpc3RlciAqLwogCWlmIChjYXBfcHRyKSB7CiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuaCBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmgKaW5kZXggYzE5NWJmZS4uNWZlZWJlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuaAorKysgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5oCkBAIC0xMzAsNiArMTMwLDcgQEAKICNkZWZpbmUgSU5URUxfR01DSF9HTVNfU1RPTEVOXzM1Mk0JKDB4ZCA8PCA0KQogCiAjZGVmaW5lIEk5MTVfSUZQQUREUiAgICAweDYwCisjZGVmaW5lIEk4MzBfSElDICAgICAgICAweDcwCiAKIC8qIEludGVsIDk2NUcgcmVnaXN0ZXJzICovCiAjZGVmaW5lIEk5NjVfTVNBQyAweDYyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWd0dC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1ndHQuYwppbmRleCA4MjZhYjA5Li4wZDA5YjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWd0dC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtZ3R0LmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvYWdwX2JhY2tlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlICJhZ3AuaCIKICNpbmNsdWRlICJpbnRlbC1hZ3AuaCIKQEAgLTY4LDEzICs2OSwxMCBAQAogCXBoeXNfYWRkcl90IGdtYV9idXNfYWRkcjsKIAl1MzIgUEdFVEJMX3NhdmU7CiAJdTMyIF9faW9tZW0gKmd0dDsJCS8qIEk5MTVHICovCisJYm9vbCBjbGVhcl9mYWtlX2FncDsgLyogb24gZmlyc3QgYWNjZXNzIHZpYSBhZ3AsIGZpbGwgd2l0aCBzY3JhdGNoICovCiAJaW50IG51bV9kY2FjaGVfZW50cmllczsKLQl1bmlvbiB7Ci0JCXZvaWQgX19pb21lbSAqaTl4eF9mbHVzaF9wYWdlOwotCQl2b2lkICppOHh4X2ZsdXNoX3BhZ2U7Ci0JfTsKKwl2b2lkIF9faW9tZW0gKmk5eHhfZmx1c2hfcGFnZTsKIAljaGFyICppODF4X2d0dF90YWJsZTsKLQlzdHJ1Y3QgcGFnZSAqaTh4eF9wYWdlOwogCXN0cnVjdCByZXNvdXJjZSBpZnBfcmVzb3VyY2U7CiAJaW50IHJlc291cmNlX3ZhbGlkOwogCXN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2U7CkBAIC03MjEsMjggKzcxOSw2IEBACiAKIHN0YXRpYyB2b2lkIGk4MzBfY2xlYW51cCh2b2lkKQogewotCWlmIChpbnRlbF9wcml2YXRlLmk4eHhfZmx1c2hfcGFnZSkgewotCQlrdW5tYXAoaW50ZWxfcHJpdmF0ZS5pOHh4X2ZsdXNoX3BhZ2UpOwotCQlpbnRlbF9wcml2YXRlLmk4eHhfZmx1c2hfcGFnZSA9IE5VTEw7Ci0JfQotCi0JX19mcmVlX3BhZ2UoaW50ZWxfcHJpdmF0ZS5pOHh4X3BhZ2UpOwotCWludGVsX3ByaXZhdGUuaTh4eF9wYWdlID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfaTgzMF9zZXR1cF9mbHVzaCh2b2lkKQotewotCS8qIHJldHVybiBpZiB3ZSd2ZSBhbHJlYWR5IHNldCB0aGUgZmx1c2ggbWVjaGFuaXNtIHVwICovCi0JaWYgKGludGVsX3ByaXZhdGUuaTh4eF9wYWdlKQotCQlyZXR1cm47Ci0KLQlpbnRlbF9wcml2YXRlLmk4eHhfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbnRlbF9wcml2YXRlLmk4eHhfcGFnZSkKLQkJcmV0dXJuOwotCi0JaW50ZWxfcHJpdmF0ZS5pOHh4X2ZsdXNoX3BhZ2UgPSBrbWFwKGludGVsX3ByaXZhdGUuaTh4eF9wYWdlKTsKLQlpZiAoIWludGVsX3ByaXZhdGUuaTh4eF9mbHVzaF9wYWdlKQotCQlpODMwX2NsZWFudXAoKTsKIH0KIAogLyogVGhlIGNoaXBzZXRfZmx1c2ggaW50ZXJmYWNlIG5lZWRzIHRvIGdldCBkYXRhIHRoYXQgaGFzIGFscmVhZHkgYmVlbgpAQCAtNzU3LDE0ICs3MzMsMjcgQEAKICAqLwogc3RhdGljIHZvaWQgaTgzMF9jaGlwc2V0X2ZsdXNoKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50ICpwZyA9IGludGVsX3ByaXZhdGUuaTh4eF9mbHVzaF9wYWdlOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApOwogCi0JbWVtc2V0KHBnLCAwLCAxMDI0KTsKKwkvKiBGb3JjaWJseSBldmljdCBldmVyeXRoaW5nIGZyb20gdGhlIENQVSB3cml0ZSBidWZmZXJzLgorCSAqIGNsZmx1c2ggYXBwZWFycyB0byBiZSBpbnN1ZmZpY2llbnQuCisJICovCisJd2JpbnZkX29uX2FsbF9jcHVzKCk7CiAKLQlpZiAoY3B1X2hhc19jbGZsdXNoKQotCQljbGZsdXNoX2NhY2hlX3JhbmdlKHBnLCAxMDI0KTsKLQllbHNlIGlmICh3YmludmRfb25fYWxsX2NwdXMoKSAhPSAwKQotCQlwcmludGsoS0VSTl9FUlIgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBjYWNoZSBmbHVzaC5cbiIpOworCS8qIE5vdyB3ZSd2ZSBvbmx5IHNlZW4gZG9jdW1lbnRzIGZvciB0aGlzIG1hZ2ljIGJpdCBvbiA4NTVHTSwKKwkgKiB3ZSBob3BlIGl0IGV4aXN0cyBmb3IgdGhlIG90aGVyIGdlbjIgY2hpcHNldHMuLi4KKwkgKgorCSAqIEFsc28gd29ya3MgYXMgYWR2ZXJ0aXNlZCBvbiBteSA4NDVHLgorCSAqLworCXdyaXRlbChyZWFkbChpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODMwX0hJQykgfCAoMTw8MzEpLAorCSAgICAgICBpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODMwX0hJQyk7CisKKwl3aGlsZSAocmVhZGwoaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMrSTgzMF9ISUMpICYgKDE8PDMxKSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCWJyZWFrOworCisJCXVkZWxheSg1MCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBpODMwX3dyaXRlX2VudHJ5KGRtYV9hZGRyX3QgYWRkciwgdW5zaWduZWQgaW50IGVudHJ5LApAQCAtODQ4LDggKzgzNyw2IEBACiAKIAlpbnRlbF9wcml2YXRlLmd0dF9idXNfYWRkciA9IHJlZ19hZGRyICsgSTgxMF9QVEVfQkFTRTsKIAotCWludGVsX2k4MzBfc2V0dXBfZmx1c2goKTsKLQogCXJldHVybiAwOwogfQogCkBAIC04NjksMjEgKzg1NiwxMiBAQAogCiBzdGF0aWMgaW50IGludGVsX2Zha2VfYWdwX2NvbmZpZ3VyZSh2b2lkKQogewotCWludCBpOwotCiAJaWYgKCFpbnRlbF9lbmFibGVfZ3R0KCkpCiAJICAgIHJldHVybiAtRUlPOwogCisJaW50ZWxfcHJpdmF0ZS5jbGVhcl9mYWtlX2FncCA9IHRydWU7CiAJYWdwX2JyaWRnZS0+Z2FydF9idXNfYWRkciA9IGludGVsX3ByaXZhdGUuZ21hX2J1c19hZGRyOwogCi0JZm9yIChpID0gMDsgaSA8IGludGVsX3ByaXZhdGUuYmFzZS5ndHRfdG90YWxfZW50cmllczsgaSsrKSB7Ci0JCWludGVsX3ByaXZhdGUuZHJpdmVyLT53cml0ZV9lbnRyeShpbnRlbF9wcml2YXRlLnNjcmF0Y2hfcGFnZV9kbWEsCi0JCQkJCQkgIGksIDApOwotCX0KLQlyZWFkbChpbnRlbF9wcml2YXRlLmd0dCtpLTEpOwkvKiBQQ0kgUG9zdGluZy4gKi8KLQotCWdsb2JhbF9jYWNoZV9mbHVzaCgpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk0NSw2ICs5MjMsMTMgQEAKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAorCWlmIChpbnRlbF9wcml2YXRlLmNsZWFyX2Zha2VfYWdwKSB7CisJCWludCBzdGFydCA9IGludGVsX3ByaXZhdGUuYmFzZS5zdG9sZW5fc2l6ZSAvIFBBR0VfU0laRTsKKwkJaW50IGVuZCA9IGludGVsX3ByaXZhdGUuYmFzZS5ndHRfbWFwcGFibGVfZW50cmllczsKKwkJaW50ZWxfZ3R0X2NsZWFyX3JhbmdlKHN0YXJ0LCBlbmQgLSBzdGFydCk7CisJCWludGVsX3ByaXZhdGUuY2xlYXJfZmFrZV9hZ3AgPSBmYWxzZTsKKwl9CisKIAlpZiAoSU5URUxfR1RUX0dFTiA9PSAxICYmIHR5cGUgPT0gQUdQX0RDQUNIRV9NRU1PUlkpCiAJCXJldHVybiBpODEwX2luc2VydF9kY2FjaGVfZW50cmllcyhtZW0sIHBnX3N0YXJ0LCB0eXBlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2JmaW5fanRhZ19jb21tLmMgYi9kcml2ZXJzL2NoYXIvYmZpbl9qdGFnX2NvbW0uYwppbmRleCBlMzk3ZGYzLi4xNjQwMjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYmZpbl9qdGFnX2NvbW0uYworKysgYi9kcml2ZXJzL2NoYXIvYmZpbl9qdGFnX2NvbW0uYwpAQCAtMTgzLDE2ICsxODMsMTYgQEAKIH0KIAogI2lmbmRlZiBDT05GSUdfQkZJTl9KVEFHX0NPTU1fQ09OU09MRQotIyBkZWZpbmUgYWNxdWlyZV9jb25zb2xlX3NlbSgpCi0jIGRlZmluZSByZWxlYXNlX2NvbnNvbGVfc2VtKCkKKyMgZGVmaW5lIGNvbnNvbGVfbG9jaygpCisjIGRlZmluZSBjb25zb2xlX3VubG9jaygpCiAjZW5kaWYKIHN0YXRpYyBpbnQKIGJmaW5famNfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7CiAJaW50IGk7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWkgPSBiZmluX2pjX2NpcmNfd3JpdGUoYnVmLCBjb3VudCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJd2FrZV91cF9wcm9jZXNzKGJmaW5famNfa3RocmVhZCk7CiAJcmV0dXJuIGk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCmluZGV4IGI2YWU2ZTkuLjc4NTVmOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCkBAIC0zMjAsNiArMzIwLDcgQEAKIHN0YXRpYyBpbnQgYWRkX3NtaShzdHJ1Y3Qgc21pX2luZm8gKnNtaSk7CiBzdGF0aWMgaW50IHRyeV9zbWlfaW5pdChzdHJ1Y3Qgc21pX2luZm8gKnNtaSk7CiBzdGF0aWMgdm9pZCBjbGVhbnVwX29uZV9zaShzdHJ1Y3Qgc21pX2luZm8gKnRvX2NsZWFuKTsKK3N0YXRpYyB2b2lkIGNsZWFudXBfaXBtaV9zaSh2b2lkKTsKIAogc3RhdGljIEFUT01JQ19OT1RJRklFUl9IRUFEKHhhY3Rpb25fbm90aWZpZXJfbGlzdCk7CiBzdGF0aWMgaW50IHJlZ2lzdGVyX3hhY3Rpb25fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKQEAgLTM0NTAsMTYgKzM0NTEsNyBAQAogCW11dGV4X2xvY2soJnNtaV9pbmZvc19sb2NrKTsKIAlpZiAodW5sb2FkX3doZW5fZW1wdHkgJiYgbGlzdF9lbXB0eSgmc21pX2luZm9zKSkgewogCQltdXRleF91bmxvY2soJnNtaV9pbmZvc19sb2NrKTsKLSNpZmRlZiBDT05GSUdfUENJCi0JCWlmIChwY2lfcmVnaXN0ZXJlZCkKLQkJCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaXBtaV9wY2lfZHJpdmVyKTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1BQQ19PRgotCQlpZiAob2ZfcmVnaXN0ZXJlZCkKLQkJCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZpcG1pX29mX3BsYXRmb3JtX2RyaXZlcik7Ci0jZW5kaWYKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJmlwbWlfZHJpdmVyLmRyaXZlcik7CisJCWNsZWFudXBfaXBtaV9zaSgpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAogCQkgICAgICAgIlVuYWJsZSB0byBmaW5kIGFueSBTeXN0ZW0gSW50ZXJmYWNlKHMpXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwppbmRleCA3NzcxODFhLi5iY2JiYzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKQEAgLTgzMCw4ICs4MzAsNyBAQAogCQkJICAgIHRlc3RfYml0KElTX0FOWV9UMSwgJmRldi0+ZmxhZ3MpKSkgewogCQkJCURFQlVHUCg0LCBkZXYsICJQZXJmb3JtIEFVVE9QUFNcbiIpOwogCQkJCXNldF9iaXQoSVNfQVVUT1BQU19BQ1QsICZkZXYtPmZsYWdzKTsKLQkJCQlwdHNyZXEucHJvdG9jb2wgPSBwdHNyZXEucHJvdG9jb2wgPQotCQkJCSAgICAoMHgwMSA8PCBkZXYtPnByb3RvKTsKKwkJCQlwdHNyZXEucHJvdG9jb2wgPSAoMHgwMSA8PCBkZXYtPnByb3RvKTsKIAkJCQlwdHNyZXEuZmxhZ3MgPSAweDAxOwogCQkJCXB0c3JlcS5wdHMxID0gMHgwMDsKIAkJCQlwdHNyZXEucHRzMiA9IDB4MDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbWFpbi5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL21haW4uYwppbmRleCA5NGI4ZWI0Li40NDQxNTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbWFpbi5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9tYWluLmMKQEAgLTc4LDcgKzc4LDYgQEAKIHN0YXRpYyBpbnQgaXB3aXJlbGVzc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIHZvaWQgKnByaXZfZGF0YSkKIHsKIAlzdHJ1Y3QgaXB3X2RldiAqaXB3ID0gcHJpdl9kYXRhOwotCXN0cnVjdCByZXNvdXJjZSAqaW9fcmVzb3VyY2U7CiAJaW50IHJldDsKIAogCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKQEAgLTkyLDkgKzkxLDEyIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlvX3Jlc291cmNlID0gcmVxdWVzdF9yZWdpb24ocF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCwKLQkJCQlyZXNvdXJjZV9zaXplKHBfZGV2LT5yZXNvdXJjZVswXSksCi0JCQkJSVBXSVJFTEVTU19QQ0NBUkRfTkFNRSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0LAorCQkJICAgIHJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzBdKSwKKwkJCSAgICBJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXhpdDsKKwl9CiAKIAlwX2Rldi0+cmVzb3VyY2VbMl0tPmZsYWdzIHw9CiAJCVdJTl9EQVRBX1dJRFRIXzE2IHwgV0lOX01FTU9SWV9UWVBFX0NNIHwgV0lOX0VOQUJMRTsKQEAgLTEwNSwyMiArMTA3LDI1IEBACiAKIAlyZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKHBfZGV2LCBwX2Rldi0+cmVzb3VyY2VbMl0sIHBfZGV2LT5jYXJkX2FkZHIpOwogCWlmIChyZXQgIT0gMCkKLQkJZ290byBleGl0MjsKKwkJZ290byBleGl0MTsKIAogCWlwdy0+aXNfdjJfY2FyZCA9IHJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzJdKSA9PSAweDEwMDsKIAotCWlwdy0+YXR0cl9tZW1vcnkgPSBpb3JlbWFwKHBfZGV2LT5yZXNvdXJjZVsyXS0+c3RhcnQsCisJaXB3LT5jb21tb25fbWVtb3J5ID0gaW9yZW1hcChwX2Rldi0+cmVzb3VyY2VbMl0tPnN0YXJ0LAogCQkJCXJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzJdKSk7Ci0JcmVxdWVzdF9tZW1fcmVnaW9uKHBfZGV2LT5yZXNvdXJjZVsyXS0+c3RhcnQsCi0JCQlyZXNvdXJjZV9zaXplKHBfZGV2LT5yZXNvdXJjZVsyXSksCi0JCQlJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwX2Rldi0+cmVzb3VyY2VbMl0tPnN0YXJ0LAorCQkJCXJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzJdKSwKKwkJCQlJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXhpdDI7CisJfQogCiAJcF9kZXYtPnJlc291cmNlWzNdLT5mbGFncyB8PSBXSU5fREFUQV9XSURUSF8xNiB8IFdJTl9NRU1PUllfVFlQRV9BTSB8CiAJCQkJCVdJTl9FTkFCTEU7CiAJcF9kZXYtPnJlc291cmNlWzNdLT5lbmQgPSAwOyAvKiB0aGlzIHVzZWQgdG8gYmUgMHgxMDAwICovCiAJcmV0ID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KHBfZGV2LCBwX2Rldi0+cmVzb3VyY2VbM10sIDApOwogCWlmIChyZXQgIT0gMCkKLQkJZ290byBleGl0MjsKKwkJZ290byBleGl0MzsKIAogCXJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UocF9kZXYsIHBfZGV2LT5yZXNvdXJjZVszXSwgMCk7CiAJaWYgKHJldCAhPSAwKQpAQCAtMTI4LDIzICsxMzMsMjggQEAKIAogCWlwdy0+YXR0cl9tZW1vcnkgPSBpb3JlbWFwKHBfZGV2LT5yZXNvdXJjZVszXS0+c3RhcnQsCiAJCQkJcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbM10pKTsKLQlyZXF1ZXN0X21lbV9yZWdpb24ocF9kZXYtPnJlc291cmNlWzNdLT5zdGFydCwKLQkJCXJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzNdKSwKLQkJCUlQV0lSRUxFU1NfUENDQVJEX05BTUUpOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHBfZGV2LT5yZXNvdXJjZVszXS0+c3RhcnQsCisJCQkJcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbM10pLAorCQkJCUlQV0lSRUxFU1NfUENDQVJEX05BTUUpKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBleGl0NDsKKwl9CiAKIAlyZXR1cm4gMDsKIAorZXhpdDQ6CisJaW91bm1hcChpcHctPmF0dHJfbWVtb3J5KTsKIGV4aXQzOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihwX2Rldi0+cmVzb3VyY2VbMl0tPnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbMl0pKTsKIGV4aXQyOgotCWlmIChpcHctPmNvbW1vbl9tZW1vcnkpIHsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKHBfZGV2LT5yZXNvdXJjZVsyXS0+c3RhcnQsCi0JCQkJcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbMl0pKTsKLQkJaW91bm1hcChpcHctPmNvbW1vbl9tZW1vcnkpOwotCX0KKwlpb3VubWFwKGlwdy0+Y29tbW9uX21lbW9yeSk7CiBleGl0MToKLQlyZWxlYXNlX3Jlc291cmNlKGlvX3Jlc291cmNlKTsKKwlyZWxlYXNlX3JlZ2lvbihwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0LAorCQkgICAgICAgcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbMF0pKTsKK2V4aXQ6CiAJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKHBfZGV2KTsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBjb25maWdfaXB3aXJlbGVzcyhzdHJ1Y3QgaXB3X2RldiAqaXB3KQpAQCAtMjE5LDYgKzIyOSw4IEBACiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfaXB3aXJlbGVzcyhzdHJ1Y3QgaXB3X2RldiAqaXB3KQogeworCXJlbGVhc2VfcmVnaW9uKGlwdy0+bGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LAorCQkgICAgICAgcmVzb3VyY2Vfc2l6ZShpcHctPmxpbmstPnJlc291cmNlWzBdKSk7CiAJaWYgKGlwdy0+Y29tbW9uX21lbW9yeSkgewogCQlyZWxlYXNlX21lbV9yZWdpb24oaXB3LT5saW5rLT5yZXNvdXJjZVsyXS0+c3RhcnQsCiAJCQkJcmVzb3VyY2Vfc2l6ZShpcHctPmxpbmstPnJlc291cmNlWzJdKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwppbmRleCAxZjQ2ZjFjLi4zNmUwZmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKQEAgLTM2NCwxMiArMzY0LDE0IEBACiAJCSAgICB0cG1fcHJvdGVjdGVkX29yZGluYWxfZHVyYXRpb25bb3JkaW5hbCAmCiAJCQkJCQkgICBUUE1fUFJPVEVDVEVEX09SRElOQUxfTUFTS107CiAKLQlpZiAoZHVyYXRpb25faWR4ICE9IFRQTV9VTkRFRklORUQpCisJaWYgKGR1cmF0aW9uX2lkeCAhPSBUUE1fVU5ERUZJTkVEKSB7CiAJCWR1cmF0aW9uID0gY2hpcC0+dmVuZG9yLmR1cmF0aW9uW2R1cmF0aW9uX2lkeF07Ci0JaWYgKGR1cmF0aW9uIDw9IDApCisJCS8qIGlmIGR1cmF0aW9uIGlzIDAsIGl0J3MgYmVjYXVzZSBjaGlwLT52ZW5kb3IuZHVyYXRpb24gd2Fzbid0ICovCisJCS8qIGZpbGxlZCB5ZXQsIHNvIHdlIHNldCB0aGUgbG93ZXN0IHRpbWVvdXQganVzdCB0byBnaXZlIGVub3VnaCAqLworCQkvKiB0aW1lIGZvciB0cG1fZ2V0X3RpbWVvdXRzKCkgdG8gc3VjY2VlZCAqLworCQlyZXR1cm4gKGR1cmF0aW9uIDw9IDAgPyBIWiA6IGR1cmF0aW9uKTsKKwl9IGVsc2UKIAkJcmV0dXJuIDIgKiA2MCAqIEhaOwotCWVsc2UKLQkJcmV0dXJuIGR1cmF0aW9uOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX2NhbGNfb3JkaW5hbF9kdXJhdGlvbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMKaW5kZXggYzE3YTMwNS4uZGQyMWRmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMKQEAgLTQ5Myw5ICs0OTMsNiBAQAogCQkgIjEuMiBUUE0gKGRldmljZS1pZCAweCVYLCByZXYtaWQgJWQpXG4iLAogCQkgdmVuZG9yID4+IDE2LCBpb3JlYWQ4KGNoaXAtPnZlbmRvci5pb2Jhc2UgKyBUUE1fUklEKDApKSk7CiAKLQlpZiAoaXNfaXRwbSh0b19wbnBfZGV2KGRldikpKQotCQlpdHBtID0gMTsKLQogCWlmIChpdHBtKQogCQlkZXZfaW5mbyhkZXYsICJJbnRlbCBpVFBNIHdvcmthcm91bmQgZW5hYmxlZFxuIik7CiAKQEAgLTYzNyw2ICs2MzQsOSBAQAogCWVsc2UKIAkJaW50ZXJydXB0cyA9IDA7CiAKKwlpZiAoaXNfaXRwbShwbnBfZGV2KSkKKwkJaXRwbSA9IDE7CisKIAlyZXR1cm4gdHBtX3Rpc19pbml0KCZwbnBfZGV2LT5kZXYsIHN0YXJ0LCBsZW4sIGlycSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKaW5kZXggODk2YTJjZS4uNDkwMzkzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IFJ1c3R5IFJ1c3NlbGwsIElCTSBDb3Jwb3JhdGlvbgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgQW1pdCBTaGFoIDxhbWl0LnNoYWhAcmVkaGF0LmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTMxLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlICJodmNfY29uc29sZS5oIgorI2luY2x1ZGUgIi4uL3R0eS9odmMvaHZjX2NvbnNvbGUuaCIKIAogLyoKICAqIFRoaXMgaXMgYSBnbG9iYWwgc3RydWN0IGZvciBzdG9yaW5nIGNvbW1vbiBkYXRhIGZvciBhbGwgdGhlIGRldmljZXMKQEAgLTE0NjIsNiArMTQ2MywxNyBAQAogCXNwaW5fdW5sb2NrKCZwb3J0ZGV2LT5jdnFfbG9jayk7CiB9CiAKK3N0YXRpYyB2b2lkIG91dF9pbnRyKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCisJcG9ydCA9IGZpbmRfcG9ydF9ieV92cSh2cS0+dmRldi0+cHJpdiwgdnEpOworCWlmICghcG9ydCkKKwkJcmV0dXJuOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT53YWl0cXVldWUpOworfQorCiBzdGF0aWMgdm9pZCBpbl9pbnRyKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQogewogCXN0cnVjdCBwb3J0ICpwb3J0OwpAQCAtMTU2Niw3ICsxNTc4LDcgQEAKIAkgKi8KIAlqID0gMDsKIAlpb19jYWxsYmFja3Nbal0gPSBpbl9pbnRyOwotCWlvX2NhbGxiYWNrc1tqICsgMV0gPSBOVUxMOworCWlvX2NhbGxiYWNrc1tqICsgMV0gPSBvdXRfaW50cjsKIAlpb19uYW1lc1tqXSA9ICJpbnB1dCI7CiAJaW9fbmFtZXNbaiArIDFdID0gIm91dHB1dCI7CiAJaiArPSAyOwpAQCAtMTU4MCw3ICsxNTkyLDcgQEAKIAkJZm9yIChpID0gMTsgaSA8IG5yX3BvcnRzOyBpKyspIHsKIAkJCWogKz0gMjsKIAkJCWlvX2NhbGxiYWNrc1tqXSA9IGluX2ludHI7Ci0JCQlpb19jYWxsYmFja3NbaiArIDFdID0gTlVMTDsKKwkJCWlvX2NhbGxiYWNrc1tqICsgMV0gPSBvdXRfaW50cjsKIAkJCWlvX25hbWVzW2pdID0gImlucHV0IjsKIAkJCWlvX25hbWVzW2ogKyAxXSA9ICJvdXRwdXQiOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jCmluZGV4IGNmYjBmNTIuLmVmZmU3OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jCkBAIC0yMDIsMTcgKzIwMiwyMSBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiUE0tVGltZXIgaGFkIGluY29uc2lzdGVudCByZXN1bHRzOiIKIAkJCSAgICAgICAiIDB4JSNsbHgsIDB4JSNsbHggLSBhYm9ydGluZy5cbiIsCiAJCQkgICAgICAgdmFsdWUxLCB2YWx1ZTIpOworCQkJcG10bXJfaW9wb3J0ID0gMDsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChpID09IEFDUElfUE1fUkVBRF9DSEVDS1MpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIlBNLVRpbWVyIGZhaWxlZCBjb25zaXN0ZW5jeSBjaGVjayAiCiAJCQkgICAgICAgIiAoMHglI2xseCkgLSBhYm9ydGluZy5cbiIsIHZhbHVlMSk7CisJCQlwbXRtcl9pb3BvcnQgPSAwOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CiAKLQlpZiAodmVyaWZ5X3BtdG1yX3JhdGUoKSAhPSAwKQorCWlmICh2ZXJpZnlfcG10bXJfcmF0ZSgpICE9IDApeworCQlwbXRtcl9pb3BvcnQgPSAwOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlyZXR1cm4gY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX2FjcGlfcG0sCiAJCQkJCQlQTVRNUl9USUNLU19QRVJfU0VDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGNiX2Nsa3NyYy5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90Y2JfY2xrc3JjLmMKaW5kZXggMDFiODg2ZS4uNzljNDdlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS90Y2JfY2xrc3JjLmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90Y2JfY2xrc3JjLmMKQEAgLTE5Niw5ICsxOTYsOSBAQAogCWNsa2V2dC5jbGtldnQubWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygxLCAmY2xrZXZ0LmNsa2V2dCkgKyAxOwogCWNsa2V2dC5jbGtldnQuY3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CiAKLQlzZXR1cF9pcnEoaXJxLCAmdGNfaXJxYWN0aW9uKTsKLQogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmY2xrZXZ0LmNsa2V2dCk7CisKKwlzZXR1cF9pcnEoaXJxLCAmdGNfaXJxYWN0aW9uKTsKIH0KIAogI2Vsc2UgLyogIUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZyBiL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnCmluZGV4IGE4YzhkOWMuLmNhOGVlODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnCkBAIC03MSw3ICs3MSw3IEBACiAKIGNvbmZpZyBDUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUKIAlib29sICJwb3dlcnNhdmUiCi0JZGVwZW5kcyBvbiBFTUJFRERFRAorCWRlcGVuZHMgb24gRVhQRVJUCiAJc2VsZWN0IENQVV9GUkVRX0dPVl9QT1dFUlNBVkUKIAloZWxwCiAJICBVc2UgdGhlIENQVUZyZXEgZ292ZXJub3IgJ3Bvd2Vyc2F2ZScgYXMgZGVmYXVsdC4gVGhpcyBzZXRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9hbWJhLXBsMDh4LmMgYi9kcml2ZXJzL2RtYS9hbWJhLXBsMDh4LmMKaW5kZXggMjk3ZjQ4Yi4uMDdiY2E0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvYW1iYS1wbDA4eC5jCisrKyBiL2RyaXZlcnMvZG1hL2FtYmEtcGwwOHguYwpAQCAtNzksNiArNzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgpAQCAtMjM1LDE2ICsyMzYsMTkgQEAKIH0KIAogLyoKLSAqIE92ZXJhbGwgRE1BQyByZW1haW5zIGVuYWJsZWQgYWx3YXlzLgorICogUGF1c2UgdGhlIGNoYW5uZWwgYnkgc2V0dGluZyB0aGUgSEFMVCBiaXQuCiAgKgotICogRGlzYWJsaW5nIGluZGl2aWR1YWwgY2hhbm5lbHMgY291bGQgbG9zZSBkYXRhLgorICogRm9yIE0tPlAgdHJhbnNmZXJzLCBwYXVzZSB0aGUgRE1BQyBmaXJzdCBhbmQgdGhlbiBzdG9wIHRoZSBwZXJpcGhlcmFsIC0KKyAqIHRoZSBGSUZPIGNhbiBvbmx5IGRyYWluIGlmIHRoZSBwZXJpcGhlcmFsIGlzIHN0aWxsIHJlcXVlc3RpbmcgZGF0YS4KKyAqIChub3RlOiB0aGlzIGNhbiBzdGlsbCB0aW1lb3V0IGlmIHRoZSBETUFDIEZJRk8gbmV2ZXIgZHJhaW5zIG9mIGRhdGEuKQogICoKLSAqIERpc2FibGUgdGhlIHBlcmlwaGVyYWwgRE1BIGFmdGVyIGRpc2FibGluZyB0aGUgRE1BQyBpbiBvcmRlciB0byBhbGxvdwotICogdGhlIERNQUMgRklGTyB0byBkcmFpbiwgYW5kIGhlbmNlIGFsbG93IHRoZSBjaGFubmVsIHRvIHNob3cgaW5hY3RpdmUKKyAqIEZvciBQLT5NIHRyYW5zZmVycywgZGlzYWJsZSB0aGUgcGVyaXBoZXJhbCBmaXJzdCB0byBzdG9wIGl0IGZpbGxpbmcKKyAqIHRoZSBETUFDIEZJRk8sIGFuZCB0aGVuIHBhdXNlIHRoZSBETUFDLgogICovCiBzdGF0aWMgdm9pZCBwbDA4eF9wYXVzZV9waHlfY2hhbihzdHJ1Y3QgcGwwOHhfcGh5X2NoYW4gKmNoKQogewogCXUzMiB2YWw7CisJaW50IHRpbWVvdXQ7CiAKIAkvKiBTZXQgdGhlIEhBTFQgYml0IGFuZCB3YWl0IGZvciB0aGUgRklGTyB0byBkcmFpbiAqLwogCXZhbCA9IHJlYWRsKGNoLT5iYXNlICsgUEwwODBfQ0hfQ09ORklHKTsKQEAgLTI1Miw4ICsyNTYsMTMgQEAKIAl3cml0ZWwodmFsLCBjaC0+YmFzZSArIFBMMDgwX0NIX0NPTkZJRyk7CiAKIAkvKiBXYWl0IGZvciBjaGFubmVsIGluYWN0aXZlICovCi0Jd2hpbGUgKHBsMDh4X3BoeV9jaGFubmVsX2J1c3koY2gpKQotCQljcHVfcmVsYXgoKTsKKwlmb3IgKHRpbWVvdXQgPSAxMDAwOyB0aW1lb3V0OyB0aW1lb3V0LS0pIHsKKwkJaWYgKCFwbDA4eF9waHlfY2hhbm5lbF9idXN5KGNoKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfQorCWlmIChwbDA4eF9waHlfY2hhbm5lbF9idXN5KGNoKSkKKwkJcHJfZXJyKCJwbDA4eDogY2hhbm5lbCV1IHRpbWVvdXQgd2FpdGluZyBmb3IgcGF1c2VcbiIsIGNoLT5pZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBsMDh4X3Jlc3VtZV9waHlfY2hhbihzdHJ1Y3QgcGwwOHhfcGh5X2NoYW4gKmNoKQpAQCAtMjY3LDE5ICsyNzYsMjQgQEAKIH0KIAogCi0vKiBTdG9wcyB0aGUgY2hhbm5lbCAqLwotc3RhdGljIHZvaWQgcGwwOHhfc3RvcF9waHlfY2hhbihzdHJ1Y3QgcGwwOHhfcGh5X2NoYW4gKmNoKQorLyoKKyAqIHBsMDh4X3Rlcm1pbmF0ZV9waHlfY2hhbigpIHN0b3BzIHRoZSBjaGFubmVsLCBjbGVhcnMgdGhlIEZJRk8gYW5kCisgKiBjbGVhcnMgYW55IHBlbmRpbmcgaW50ZXJydXB0IHN0YXR1cy4gIFRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIGZvcgorICogYW4gb24tZ29pbmcgdHJhbnNmZXIsIGJ1dCBhcyBhIG1ldGhvZCBvZiBzaHV0dGluZyBkb3duIGEgY2hhbm5lbAorICogKGVnLCB3aGVuIGl0J3Mgbm8gbG9uZ2VyIHVzZWQpIG9yIHRlcm1pbmF0aW5nIGEgdHJhbnNmZXIuCisgKi8KK3N0YXRpYyB2b2lkIHBsMDh4X3Rlcm1pbmF0ZV9waHlfY2hhbihzdHJ1Y3QgcGwwOHhfZHJpdmVyX2RhdGEgKnBsMDh4LAorCXN0cnVjdCBwbDA4eF9waHlfY2hhbiAqY2gpCiB7Ci0JdTMyIHZhbDsKKwl1MzIgdmFsID0gcmVhZGwoY2gtPmJhc2UgKyBQTDA4MF9DSF9DT05GSUcpOwogCi0JcGwwOHhfcGF1c2VfcGh5X2NoYW4oY2gpOworCXZhbCAmPSB+KFBMMDgwX0NPTkZJR19FTkFCTEUgfCBQTDA4MF9DT05GSUdfRVJSX0lSUV9NQVNLIHwKKwkgICAgICAgICBQTDA4MF9DT05GSUdfVENfSVJRX01BU0spOwogCi0JLyogRGlzYWJsZSBjaGFubmVsICovCi0JdmFsID0gcmVhZGwoY2gtPmJhc2UgKyBQTDA4MF9DSF9DT05GSUcpOwotCXZhbCAmPSB+UEwwODBfQ09ORklHX0VOQUJMRTsKLQl2YWwgJj0gflBMMDgwX0NPTkZJR19FUlJfSVJRX01BU0s7Ci0JdmFsICY9IH5QTDA4MF9DT05GSUdfVENfSVJRX01BU0s7CiAJd3JpdGVsKHZhbCwgY2gtPmJhc2UgKyBQTDA4MF9DSF9DT05GSUcpOworCisJd3JpdGVsKDEgPDwgY2gtPmlkLCBwbDA4eC0+YmFzZSArIFBMMDgwX0VSUl9DTEVBUik7CisJd3JpdGVsKDEgPDwgY2gtPmlkLCBwbDA4eC0+YmFzZSArIFBMMDgwX1RDX0NMRUFSKTsKIH0KIAogc3RhdGljIGlubGluZSB1MzIgZ2V0X2J5dGVzX2luX2NjdGwodTMyIGNjdGwpCkBAIC00MDQsMTMgKzQxOCwxMiBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGZsYWdzKTsKKwogCS8qIFN0b3AgdGhlIGNoYW5uZWwgYW5kIGNsZWFyIGl0cyBpbnRlcnJ1cHRzICovCi0JcGwwOHhfc3RvcF9waHlfY2hhbihjaCk7Ci0Jd3JpdGVsKCgxIDw8IGNoLT5pZCksIHBsMDh4LT5iYXNlICsgUEwwODBfRVJSX0NMRUFSKTsKLQl3cml0ZWwoKDEgPDwgY2gtPmlkKSwgcGwwOHgtPmJhc2UgKyBQTDA4MF9UQ19DTEVBUik7CisJcGwwOHhfdGVybWluYXRlX3BoeV9jaGFuKHBsMDh4LCBjaCk7CiAKIAkvKiBNYXJrIGl0IGFzIGZyZWUgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGZsYWdzKTsKIAljaC0+c2VydmluZyA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTE0NDksNyArMTQ2Miw3IEBACiAJCXBsY2hhbi0+c3RhdGUgPSBQTDA4WF9DSEFOX0lETEU7CiAKIAkJaWYgKHBsY2hhbi0+cGh5Y2hhbikgewotCQkJcGwwOHhfc3RvcF9waHlfY2hhbihwbGNoYW4tPnBoeWNoYW4pOworCQkJcGwwOHhfdGVybWluYXRlX3BoeV9jaGFuKHBsMDh4LCBwbGNoYW4tPnBoeWNoYW4pOwogCiAJCQkvKgogCQkJICogTWFyayBwaHlzaWNhbCBjaGFubmVsIGFzIGZyZWUgYW5kIGZyZWUgYW55IHNsYXZlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pbXgtZG1hLmMgYi9kcml2ZXJzL2RtYS9pbXgtZG1hLmMKaW5kZXggZTUzZDQzOC4uZTE4ZWFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW14LWRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2lteC1kbWEuYwpAQCAtNDksNiArNDksNyBAQAogCiBzdHJ1Y3QgaW14ZG1hX2VuZ2luZSB7CiAJc3RydWN0IGRldmljZQkJCSpkZXY7CisJc3RydWN0IGRldmljZV9kbWFfcGFyYW1ldGVycwlkbWFfcGFybXM7CiAJc3RydWN0IGRtYV9kZXZpY2UJCWRtYV9kZXZpY2U7CiAJc3RydWN0IGlteGRtYV9jaGFubmVsCQljaGFubmVsW01BWF9ETUFfQ0hBTk5FTFNdOwogfTsKQEAgLTI0Miw2ICsyNDMsMjEgQEAKIAllbHNlCiAJCWRtYW1vZGUgPSBETUFfTU9ERV9XUklURTsKIAorCXN3aXRjaCAoaW14ZG1hYy0+d29yZF9zaXplKSB7CisJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzoKKwkJaWYgKHNnbC0+bGVuZ3RoICYgMyB8fCBzZ2wtPmRtYV9hZGRyZXNzICYgMykKKwkJCXJldHVybiBOVUxMOworCQlicmVhazsKKwljYXNlIERNQV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTOgorCQlpZiAoc2dsLT5sZW5ndGggJiAxIHx8IHNnbC0+ZG1hX2FkZHJlc3MgJiAxKQorCQkJcmV0dXJuIE5VTEw7CisJCWJyZWFrOworCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURToKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJcmV0ID0gaW14X2RtYV9zZXR1cF9zZyhpbXhkbWFjLT5pbXhkbWFfY2hhbm5lbCwgc2dsLCBzZ19sZW4sCiAJCSBkbWFfbGVuZ3RoLCBpbXhkbWFjLT5wZXJfYWRkcmVzcywgZG1hbW9kZSk7CiAJaWYgKHJldCkKQEAgLTMyOSw2ICszNDUsOSBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJmlteGRtYS0+ZG1hX2RldmljZS5jaGFubmVscyk7CiAKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIGlteGRtYS0+ZG1hX2RldmljZS5jYXBfbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX0NZQ0xJQywgaW14ZG1hLT5kbWFfZGV2aWNlLmNhcF9tYXNrKTsKKwogCS8qIEluaXRpYWxpemUgY2hhbm5lbCBwYXJhbWV0ZXJzICovCiAJZm9yIChpID0gMDsgaSA8IE1BWF9ETUFfQ0hBTk5FTFM7IGkrKykgewogCQlzdHJ1Y3QgaW14ZG1hX2NoYW5uZWwgKmlteGRtYWMgPSAmaW14ZG1hLT5jaGFubmVsW2ldOwpAQCAtMzQ2LDExICszNjUsNyBAQAogCQlpbXhkbWFjLT5pbXhkbWEgPSBpbXhkbWE7CiAJCXNwaW5fbG9ja19pbml0KCZpbXhkbWFjLT5sb2NrKTsKIAotCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIGlteGRtYS0+ZG1hX2RldmljZS5jYXBfbWFzayk7Ci0JCWRtYV9jYXBfc2V0KERNQV9DWUNMSUMsIGlteGRtYS0+ZG1hX2RldmljZS5jYXBfbWFzayk7Ci0KIAkJaW14ZG1hYy0+Y2hhbi5kZXZpY2UgPSAmaW14ZG1hLT5kbWFfZGV2aWNlOwotCQlpbXhkbWFjLT5jaGFuLmNoYW5faWQgPSBpOwogCQlpbXhkbWFjLT5jaGFubmVsID0gaTsKIAogCQkvKiBBZGQgdGhlIGNoYW5uZWwgdG8gdGhlIERNQUMgbGlzdCAqLwpAQCAtMzcwLDYgKzM4NSw5IEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbXhkbWEpOwogCisJaW14ZG1hLT5kbWFfZGV2aWNlLmRldi0+ZG1hX3Bhcm1zID0gJmlteGRtYS0+ZG1hX3Bhcm1zOworCWRtYV9zZXRfbWF4X3NlZ19zaXplKGlteGRtYS0+ZG1hX2RldmljZS5kZXYsIDB4ZmZmZmZmKTsKKwogCXJldCA9IGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJmlteGRtYS0+ZG1hX2RldmljZSk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXJcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW14LXNkbWEuYyBiL2RyaXZlcnMvZG1hL2lteC1zZG1hLmMKaW5kZXggZDVhNWQ0ZC4uYjZkMTQ1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW14LXNkbWEuYworKysgYi9kcml2ZXJzL2RtYS9pbXgtc2RtYS5jCkBAIC0yMzAsNyArMjMwLDcgQEAKICAqIHN0cnVjdCBzZG1hX2NoYW5uZWwgLSBob3VzZWtlZXBpbmcgZm9yIGEgU0RNQSBjaGFubmVsCiAgKgogICogQHNkbWEJCXBvaW50ZXIgdG8gdGhlIFNETUEgZW5naW5lIGZvciB0aGlzIGNoYW5uZWwKLSAqIEBjaGFubmVsCQl0aGUgY2hhbm5lbCBudW1iZXIsIG1hdGNoZXMgZG1hZW5naW5lIGNoYW5faWQKKyAqIEBjaGFubmVsCQl0aGUgY2hhbm5lbCBudW1iZXIsIG1hdGNoZXMgZG1hZW5naW5lIGNoYW5faWQgKyAxCiAgKiBAZGlyZWN0aW9uCQl0cmFuc2ZlciB0eXBlLiBOZWVkZWQgZm9yIHNldHRpbmcgU0RNQSBzY3JpcHQKICAqIEBwZXJpcGhlcmFsX3R5cGUJUGVyaXBoZXJhbCB0eXBlLiBOZWVkZWQgZm9yIHNldHRpbmcgU0RNQSBzY3JpcHQKICAqIEBldmVudF9pZDAJCWFrYSBkbWEgcmVxdWVzdCBsaW5lCkBAIC0zMDEsNiArMzAxLDcgQEAKIAogc3RydWN0IHNkbWFfZW5naW5lIHsKIAlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsKKwlzdHJ1Y3QgZGV2aWNlX2RtYV9wYXJhbWV0ZXJzCWRtYV9wYXJtczsKIAlzdHJ1Y3Qgc2RtYV9jaGFubmVsCQljaGFubmVsW01BWF9ETUFfQ0hBTk5FTFNdOwogCXN0cnVjdCBzZG1hX2NoYW5uZWxfY29udHJvbAkqY2hhbm5lbF9jb250cm9sOwogCXZvaWQgX19pb21lbQkJCSpyZWdzOwpAQCAtNDQ5LDcgKzQ1MCw3IEBACiAJCWlmIChiZC0+bW9kZS5zdGF0dXMgJiBCRF9SUk9SKQogCQkJc2RtYWMtPnN0YXR1cyA9IERNQV9FUlJPUjsKIAkJZWxzZQotCQkJc2RtYWMtPnN0YXR1cyA9IERNQV9TVUNDRVNTOworCQkJc2RtYWMtPnN0YXR1cyA9IERNQV9JTl9QUk9HUkVTUzsKIAogCQliZC0+bW9kZS5zdGF0dXMgfD0gQkRfRE9ORTsKIAkJc2RtYWMtPmJ1Zl90YWlsKys7CkBAIC03NzAsMTUgKzc3MSwxNSBAQAogCV9fcmF3X3dyaXRlbCgxIDw8IGNoYW5uZWwsIHNkbWEtPnJlZ3MgKyBTRE1BX0hfU1RBUlQpOwogfQogCi1zdGF0aWMgZG1hX2Nvb2tpZV90IHNkbWFfYXNzaWduX2Nvb2tpZShzdHJ1Y3Qgc2RtYV9jaGFubmVsICpzZG1hKQorc3RhdGljIGRtYV9jb29raWVfdCBzZG1hX2Fzc2lnbl9jb29raWUoc3RydWN0IHNkbWFfY2hhbm5lbCAqc2RtYWMpCiB7Ci0JZG1hX2Nvb2tpZV90IGNvb2tpZSA9IHNkbWEtPmNoYW4uY29va2llOworCWRtYV9jb29raWVfdCBjb29raWUgPSBzZG1hYy0+Y2hhbi5jb29raWU7CiAKIAlpZiAoKytjb29raWUgPCAwKQogCQljb29raWUgPSAxOwogCi0Jc2RtYS0+Y2hhbi5jb29raWUgPSBjb29raWU7Ci0Jc2RtYS0+ZGVzYy5jb29raWUgPSBjb29raWU7CisJc2RtYWMtPmNoYW4uY29va2llID0gY29va2llOworCXNkbWFjLT5kZXNjLmNvb2tpZSA9IGNvb2tpZTsKIAogCXJldHVybiBjb29raWU7CiB9CkBAIC03OTgsNyArNzk5LDcgQEAKIAogCWNvb2tpZSA9IHNkbWFfYXNzaWduX2Nvb2tpZShzZG1hYyk7CiAKLQlzZG1hX2VuYWJsZV9jaGFubmVsKHNkbWEsIHR4LT5jaGFuLT5jaGFuX2lkKTsKKwlzZG1hX2VuYWJsZV9jaGFubmVsKHNkbWEsIHNkbWFjLT5jaGFubmVsKTsKIAogCXNwaW5fdW5sb2NrX2lycSgmc2RtYWMtPmxvY2spOwogCkBAIC04MTEsMTAgKzgxMiw2IEBACiAJc3RydWN0IGlteF9kbWFfZGF0YSAqZGF0YSA9IGNoYW4tPnByaXZhdGU7CiAJaW50IHByaW8sIHJldDsKIAotCS8qIE5vIG5lZWQgdG8gZXhlY3V0ZSB0aGlzIGZvciBpbnRlcm5hbCBjaGFubmVsIDAgKi8KLQlpZiAoY2hhbi0+Y2hhbl9pZCA9PSAwKQotCQlyZXR1cm4gMDsKLQogCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTg3OSw3ICs4NzYsNyBAQAogCXN0cnVjdCBzZG1hX2NoYW5uZWwgKnNkbWFjID0gdG9fc2RtYV9jaGFuKGNoYW4pOwogCXN0cnVjdCBzZG1hX2VuZ2luZSAqc2RtYSA9IHNkbWFjLT5zZG1hOwogCWludCByZXQsIGksIGNvdW50OwotCWludCBjaGFubmVsID0gY2hhbi0+Y2hhbl9pZDsKKwlpbnQgY2hhbm5lbCA9IHNkbWFjLT5jaGFubmVsOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAKIAlpZiAoc2RtYWMtPnN0YXR1cyA9PSBETUFfSU5fUFJPR1JFU1MpCkBAIC05MjQsMjIgKzkyMSwzMyBAQAogCQkJcmV0ID0gIC1FSU5WQUw7CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KLQkJaWYgKHNkbWFjLT53b3JkX3NpemUgPT0gRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVMpCisKKwkJc3dpdGNoIChzZG1hYy0+d29yZF9zaXplKSB7CisJCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVM6CiAJCQliZC0+bW9kZS5jb21tYW5kID0gMDsKLQkJZWxzZQotCQkJYmQtPm1vZGUuY29tbWFuZCA9IHNkbWFjLT53b3JkX3NpemU7CisJCQlpZiAoY291bnQgJiAzIHx8IHNnLT5kbWFfYWRkcmVzcyAmIDMpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlicmVhazsKKwkJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfMl9CWVRFUzoKKwkJCWJkLT5tb2RlLmNvbW1hbmQgPSAyOworCQkJaWYgKGNvdW50ICYgMSB8fCBzZy0+ZG1hX2FkZHJlc3MgJiAxKQorCQkJCXJldHVybiBOVUxMOworCQkJYnJlYWs7CisJCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURToKKwkJCWJkLT5tb2RlLmNvbW1hbmQgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gTlVMTDsKKwkJfQogCiAJCXBhcmFtID0gQkRfRE9ORSB8IEJEX0VYVEQgfCBCRF9DT05UOwogCi0JCWlmIChzZG1hYy0+ZmxhZ3MgJiBJTVhfRE1BX1NHX0xPT1ApIHsKKwkJaWYgKGkgKyAxID09IHNnX2xlbikgewogCQkJcGFyYW0gfD0gQkRfSU5UUjsKLQkJCWlmIChpICsgMSA9PSBzZ19sZW4pCi0JCQkJcGFyYW0gfD0gQkRfV1JBUDsKKwkJCXBhcmFtIHw9IEJEX0xBU1Q7CisJCQlwYXJhbSAmPSB+QkRfQ09OVDsKIAkJfQogCi0JCWlmIChpICsgMSA9PSBzZ19sZW4pCi0JCQlwYXJhbSB8PSBCRF9JTlRSOwotCiAJCWRldl9kYmcoc2RtYS0+ZGV2LCAiZW50cnkgJWQ6IGNvdW50OiAlZCBkbWE6IDB4JTA4eCAlcyVzXG4iLAogCQkJCWksIGNvdW50LCBzZy0+ZG1hX2FkZHJlc3MsCiAJCQkJcGFyYW0gJiBCRF9XUkFQID8gIndyYXAiIDogIiIsCkBAIC05NTMsNiArOTYxLDcgQEAKIAogCXJldHVybiAmc2RtYWMtPmRlc2M7CiBlcnJfb3V0OgorCXNkbWFjLT5zdGF0dXMgPSBETUFfRVJST1I7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTk2Myw3ICs5NzIsNyBAQAogCXN0cnVjdCBzZG1hX2NoYW5uZWwgKnNkbWFjID0gdG9fc2RtYV9jaGFuKGNoYW4pOwogCXN0cnVjdCBzZG1hX2VuZ2luZSAqc2RtYSA9IHNkbWFjLT5zZG1hOwogCWludCBudW1fcGVyaW9kcyA9IGJ1Zl9sZW4gLyBwZXJpb2RfbGVuOwotCWludCBjaGFubmVsID0gY2hhbi0+Y2hhbl9pZDsKKwlpbnQgY2hhbm5lbCA9IHNkbWFjLT5jaGFubmVsOwogCWludCByZXQsIGkgPSAwLCBidWYgPSAwOwogCiAJZGV2X2RiZyhzZG1hLT5kZXYsICIlcyBjaGFubmVsOiAlZFxuIiwgX19mdW5jX18sIGNoYW5uZWwpOwpAQCAtMTA2NiwxNCArMTA3NSwxMiBAQAogewogCXN0cnVjdCBzZG1hX2NoYW5uZWwgKnNkbWFjID0gdG9fc2RtYV9jaGFuKGNoYW4pOwogCWRtYV9jb29raWVfdCBsYXN0X3VzZWQ7Ci0JZW51bSBkbWFfc3RhdHVzIHJldDsKIAogCWxhc3RfdXNlZCA9IGNoYW4tPmNvb2tpZTsKIAotCXJldCA9IGRtYV9hc3luY19pc19jb21wbGV0ZShjb29raWUsIHNkbWFjLT5sYXN0X2NvbXBsZXRlZCwgbGFzdF91c2VkKTsKIAlkbWFfc2V0X3R4X3N0YXRlKHR4c3RhdGUsIHNkbWFjLT5sYXN0X2NvbXBsZXRlZCwgbGFzdF91c2VkLCAwKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIHNkbWFjLT5zdGF0dXM7CiB9CiAKIHN0YXRpYyB2b2lkIHNkbWFfaXNzdWVfcGVuZGluZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCkBAIC0xMTM1LDcgKzExNDIsNyBAQAogCS8qIGRvd25sb2FkIHRoZSBSQU0gaW1hZ2UgZm9yIFNETUEgKi8KIAlzZG1hX2xvYWRfc2NyaXB0KHNkbWEsIHJhbV9jb2RlLAogCQkJaGVhZGVyLT5yYW1fY29kZV9zaXplLAotCQkJc2RtYS0+c2NyaXB0X2FkZHJzLT5yYW1fY29kZV9zdGFydF9hZGRyKTsKKwkJCWFkZHItPnJhbV9jb2RlX3N0YXJ0X2FkZHIpOwogCWNsa19kaXNhYmxlKHNkbWEtPmNsayk7CiAKIAlzZG1hX2FkZF9zY3JpcHRzKHNkbWEsIGFkZHIpOwpAQCAtMTIzNyw3ICsxMjQ0LDYgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvcmVzOwogCXN0cnVjdCBzZG1hX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IGk7Ci0JZG1hX2NhcF9tYXNrX3QgbWFzazsKIAlzdHJ1Y3Qgc2RtYV9lbmdpbmUgKnNkbWE7CiAKIAlzZG1hID0ga3phbGxvYyhzaXplb2YoKnNkbWEpLCBHRlBfS0VSTkVMKTsKQEAgLTEyODAsNiArMTI4Niw5IEBACiAKIAlzZG1hLT52ZXJzaW9uID0gcGRhdGEtPnNkbWFfdmVyc2lvbjsKIAorCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgc2RtYS0+ZG1hX2RldmljZS5jYXBfbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX0NZQ0xJQywgc2RtYS0+ZG1hX2RldmljZS5jYXBfbWFzayk7CisKIAlJTklUX0xJU1RfSEVBRCgmc2RtYS0+ZG1hX2RldmljZS5jaGFubmVscyk7CiAJLyogSW5pdGlhbGl6ZSBjaGFubmVsIHBhcmFtZXRlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0RNQV9DSEFOTkVMUzsgaSsrKSB7CkBAIC0xMjg4LDE1ICsxMjk3LDE3IEBACiAJCXNkbWFjLT5zZG1hID0gc2RtYTsKIAkJc3Bpbl9sb2NrX2luaXQoJnNkbWFjLT5sb2NrKTsKIAotCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIHNkbWEtPmRtYV9kZXZpY2UuY2FwX21hc2spOwotCQlkbWFfY2FwX3NldChETUFfQ1lDTElDLCBzZG1hLT5kbWFfZGV2aWNlLmNhcF9tYXNrKTsKLQogCQlzZG1hYy0+Y2hhbi5kZXZpY2UgPSAmc2RtYS0+ZG1hX2RldmljZTsKLQkJc2RtYWMtPmNoYW4uY2hhbl9pZCA9IGk7CiAJCXNkbWFjLT5jaGFubmVsID0gaTsKIAotCQkvKiBBZGQgdGhlIGNoYW5uZWwgdG8gdGhlIERNQUMgbGlzdCAqLwotCQlsaXN0X2FkZF90YWlsKCZzZG1hYy0+Y2hhbi5kZXZpY2Vfbm9kZSwgJnNkbWEtPmRtYV9kZXZpY2UuY2hhbm5lbHMpOworCQkvKgorCQkgKiBBZGQgdGhlIGNoYW5uZWwgdG8gdGhlIERNQUMgbGlzdC4gRG8gbm90IGFkZCBjaGFubmVsIDAgdGhvdWdoCisJCSAqIGJlY2F1c2Ugd2UgbmVlZCBpdCBpbnRlcm5hbGx5IGluIHRoZSBTRE1BIGRyaXZlci4gVGhpcyBhbHNvIG1lYW5zCisJCSAqIHRoYXQgY2hhbm5lbCAwIGluIGRtYWVuZ2luZSBjb3VudGluZyBtYXRjaGVzIHNkbWEgY2hhbm5lbCAxLgorCQkgKi8KKwkJaWYgKGkpCisJCQlsaXN0X2FkZF90YWlsKCZzZG1hYy0+Y2hhbi5kZXZpY2Vfbm9kZSwKKwkJCQkJJnNkbWEtPmRtYV9kZXZpY2UuY2hhbm5lbHMpOwogCX0KIAogCXJldCA9IHNkbWFfaW5pdChzZG1hKTsKQEAgLTEzMTcsNiArMTMyOCw4IEBACiAJc2RtYS0+ZG1hX2RldmljZS5kZXZpY2VfcHJlcF9kbWFfY3ljbGljID0gc2RtYV9wcmVwX2RtYV9jeWNsaWM7CiAJc2RtYS0+ZG1hX2RldmljZS5kZXZpY2VfY29udHJvbCA9IHNkbWFfY29udHJvbDsKIAlzZG1hLT5kbWFfZGV2aWNlLmRldmljZV9pc3N1ZV9wZW5kaW5nID0gc2RtYV9pc3N1ZV9wZW5kaW5nOworCXNkbWEtPmRtYV9kZXZpY2UuZGV2LT5kbWFfcGFybXMgPSAmc2RtYS0+ZG1hX3Bhcm1zOworCWRtYV9zZXRfbWF4X3NlZ19zaXplKHNkbWEtPmRtYV9kZXZpY2UuZGV2LCA2NTUzNSk7CiAKIAlyZXQgPSBkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZzZG1hLT5kbWFfZGV2aWNlKTsKIAlpZiAocmV0KSB7CkBAIC0xMzI0LDEzICsxMzM3LDYgQEAKIAkJZ290byBlcnJfaW5pdDsKIAl9CiAKLQkvKiByZXF1ZXN0IGNoYW5uZWwgMC4gVGhpcyBpcyBhbiBpbnRlcm5hbCBjb250cm9sIGNoYW5uZWwKLQkgKiB0byB0aGUgU0RNQSBlbmdpbmUgYW5kIG5vdCBhdmFpbGFibGUgdG8gY2xpZW50cy4KLQkgKi8KLQlkbWFfY2FwX3plcm8obWFzayk7Ci0JZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKLQlkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIE5VTEwsIE5VTEwpOwotCiAJZGV2X2luZm8oc2RtYS0+ZGV2LCAiaW5pdGlhbGl6ZWRcbiIpOwogCiAJcmV0dXJuIDA7CkBAIC0xMzQ4LDcgKzEzNTQsNyBAQAogZXJyX3JlcXVlc3RfcmVnaW9uOgogZXJyX2lycToKIAlrZnJlZShzZG1hKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IF9fZXhpdCBzZG1hX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jIGIvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jCmluZGV4IGNiMjZlZTkuLmMxYTEyNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lwdS9pcHVfaWRtYWMuYworKysgYi9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMKQEAgLTExNDUsMjkgKzExNDUsNiBAQAogCXJlZyA9IGlkbWFjX3JlYWRfaWNyZWcoaXB1LCBJRE1BQ19DSEFfRU4pOwogCWlkbWFjX3dyaXRlX2ljcmVnKGlwdSwgcmVnICYgfmNoYW5fbWFzaywgSURNQUNfQ0hBX0VOKTsKIAotCS8qCi0JICogUHJvYmxlbSAob2JzZXJ2ZWQgd2l0aCBjaGFubmVsIERNQUlDXzcpOiBhZnRlciBlbmFibGluZyB0aGUgY2hhbm5lbAotCSAqIGFuZCBpbml0aWFsaXNpbmcgYnVmZmVycywgdGhlcmUgY29tZXMgYW4gaW50ZXJydXB0IHdpdGggY3VycmVudCBzdGlsbAotCSAqIHBvaW50aW5nIGF0IGJ1ZmZlciAwLCB3aGVyZWFzIGl0IHNob3VsZCB1c2UgYnVmZmVyIDAgZmlyc3QgYW5kIG9ubHkKLQkgKiBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgd2hlbiBpdCBpcyBkb25lLCB0aGVuIGN1cnJlbnQgc2hvdWxkIGFscmVhZHkKLQkgKiBwb2ludCB0byBidWZmZXIgMS4gVGhpcyBzcHVyaW91cyBpbnRlcnJ1cHQgYWxzbyBjb21lcyBvbiBjaGFubmVsCi0JICogRE1BU0RDXzAuIFdpdGggRE1BSUNfNyBub3JtYWxseSwgaXMgd2UganVzdCBsZWF2ZSB0aGUgSVNSIGFmdGVyIHRoZQotCSAqIGZpcnN0IGludGVycnVwdCwgdGhlcmUgY29tZXMgdGhlIHNlY29uZCB3aXRoIGN1cnJlbnQgY29ycmVjdGx5Ci0JICogcG9pbnRpbmcgdG8gYnVmZmVyIDEgdGhpcyB0aW1lLiBCdXQgc29tZXRpbWVzIHRoaXMgc2Vjb25kIGludGVycnVwdAotCSAqIGRvZXNuJ3QgY29tZSBhbmQgdGhlIGNoYW5uZWwgaGFuZ3MuIENsZWFyaW5nIEJVRnhfUkRZIHdoZW4gZGlzYWJsaW5nCi0JICogdGhlIGNoYW5uZWwgc2VlbXMgdG8gcHJldmVudCB0aGUgY2hhbm5lbCBmcm9tIGhhbmdpbmcsIGJ1dCBpdCBkb2Vzbid0Ci0JICogcHJldmVudCB0aGUgc3B1cmlvdXMgaW50ZXJydXB0LiBUaGlzIG1pZ2h0IGFsc28gYmUgdW5zYWZlLiBUaGluawotCSAqIGFib3V0IHRoZSBJRE1BQyBjb250cm9sbGVyIHRyeWluZyB0byBzd2l0Y2ggdG8gYSBidWZmZXIsIHdoZW4gd2UKLQkgKiBjbGVhciB0aGUgcmVhZHkgYml0LCBhbmQgcmUtZW5hYmxlIGl0IGEgbW9tZW50IGxhdGVyLgotCSAqLwotCXJlZyA9IGlkbWFjX3JlYWRfaXB1cmVnKGlwdSwgSVBVX0NIQV9CVUYwX1JEWSk7Ci0JaWRtYWNfd3JpdGVfaXB1cmVnKGlwdSwgMCwgSVBVX0NIQV9CVUYwX1JEWSk7Ci0JaWRtYWNfd3JpdGVfaXB1cmVnKGlwdSwgcmVnICYgfigxVUwgPDwgY2hhbm5lbCksIElQVV9DSEFfQlVGMF9SRFkpOwotCi0JcmVnID0gaWRtYWNfcmVhZF9pcHVyZWcoaXB1LCBJUFVfQ0hBX0JVRjFfUkRZKTsKLQlpZG1hY193cml0ZV9pcHVyZWcoaXB1LCAwLCBJUFVfQ0hBX0JVRjFfUkRZKTsKLQlpZG1hY193cml0ZV9pcHVyZWcoaXB1LCByZWcgJiB+KDFVTCA8PCBjaGFubmVsKSwgSVBVX0NIQV9CVUYxX1JEWSk7Ci0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcHUtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwpAQCAtMTI0NiwzMyArMTIyMyw2IEBACiAKIAkvKiBPdGhlciBpbnRlcnJ1cHRzIGRvIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGlzIGNoYW5uZWwgKi8KIAlzcGluX2xvY2soJmljaGFuLT5sb2NrKTsKLQlpZiAodW5saWtlbHkoY2hhbl9pZCAhPSBJRE1BQ19TRENfMCAmJiBjaGFuX2lkICE9IElETUFDX1NEQ18xICYmCi0JCSAgICAgKChjdXJidWYgPj4gY2hhbl9pZCkgJiAxKSA9PSBpY2hhbi0+YWN0aXZlX2J1ZmZlciAmJgotCQkgICAgICFsaXN0X2lzX2xhc3QoaWNoYW4tPnF1ZXVlLm5leHQsICZpY2hhbi0+cXVldWUpKSkgewotCQlpbnQgaSA9IDEwMDsKLQotCQkvKiBUaGlzIGRvZXNuJ3QgaGVscC4gU2VlIGNvbW1lbnQgaW4gaXB1X2Rpc2FibGVfY2hhbm5lbCgpICovCi0JCXdoaWxlICgtLWkpIHsKLQkJCWN1cmJ1ZiA9IGlkbWFjX3JlYWRfaXB1cmVnKCZpcHVfZGF0YSwgSVBVX0NIQV9DVVJfQlVGKTsKLQkJCWlmICgoKGN1cmJ1ZiA+PiBjaGFuX2lkKSAmIDEpICE9IGljaGFuLT5hY3RpdmVfYnVmZmVyKQotCQkJCWJyZWFrOwotCQkJY3B1X3JlbGF4KCk7Ci0JCX0KLQotCQlpZiAoIWkpIHsKLQkJCXNwaW5fdW5sb2NrKCZpY2hhbi0+bG9jayk7Ci0JCQlkZXZfZGJnKGRldiwKLQkJCQkiSVJRIG9uIGFjdGl2ZSBidWZmZXIgb24gY2hhbm5lbCAleCwgYWN0aXZlICIKLQkJCQkiJWQsIHJlYWR5ICV4LCAleCwgY3VycmVudCAleCFcbiIsIGNoYW5faWQsCi0JCQkJaWNoYW4tPmFjdGl2ZV9idWZmZXIsIHJlYWR5MCwgcmVhZHkxLCBjdXJidWYpOwotCQkJcmV0dXJuIElSUV9OT05FOwotCQl9IGVsc2UKLQkJCWRldl9kYmcoZGV2LAotCQkJCSJCdWZmZXIgZGVhY3RpdmF0ZWQgb24gY2hhbm5lbCAleCwgYWN0aXZlICIKLQkJCQkiJWQsIHJlYWR5ICV4LCAleCwgY3VycmVudCAleCwgcmVzdCAlZCFcbiIsIGNoYW5faWQsCi0JCQkJaWNoYW4tPmFjdGl2ZV9idWZmZXIsIHJlYWR5MCwgcmVhZHkxLCBjdXJidWYsIGkpOwotCX0KLQogCWlmICh1bmxpa2VseSgoaWNoYW4tPmFjdGl2ZV9idWZmZXIgJiYgKHJlYWR5MSA+PiBjaGFuX2lkKSAmIDEpIHx8CiAJCSAgICAgKCFpY2hhbi0+YWN0aXZlX2J1ZmZlciAmJiAocmVhZHkwID4+IGNoYW5faWQpICYgMSkKIAkJICAgICApKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwppbmRleCA0YTVlY2M1Li4yM2UwMzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKQEAgLTgyNiw4ICs4MjYsNiBAQAogLyogRGlzcGxheSBhbmQgZGVjb2RlIHZhcmlvdXMgTkIgcmVnaXN0ZXJzIGZvciBkZWJ1ZyBwdXJwb3Nlcy4gKi8KIHN0YXRpYyB2b2lkIGFtZDY0X2R1bXBfbWlzY19yZWdzKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCkKIHsKLQlpbnQgZ2FuZ2VkOwotCiAJZGVidWdmMSgiRjN4RTggKE5CIENhcCk6IDB4JTA4eFxuIiwgcHZ0LT5uYmNhcCk7CiAKIAlkZWJ1Z2YxKCIgIE5CIHR3byBjaGFubmVsIERSQU0gY2FwYWJsZTogJXNcbiIsCkBAIC04NTEsMjggKzg0OSwxOSBAQAogCWRlYnVnZjEoIiAgRHJhbUhvbGVWYWxpZDogJXNcbiIsCiAJCShwdnQtPmRoYXIgJiBESEFSX1ZBTElEKSA/ICJ5ZXMiIDogIm5vIik7CiAKKwlhbWQ2NF9kZWJ1Z19kaXNwbGF5X2RpbW1fc2l6ZXMoMCwgcHZ0KTsKKwogCS8qIGV2ZXJ5dGhpbmcgYmVsb3cgdGhpcyBwb2ludCBpcyBGYW0xMGggYW5kIGFib3ZlICovCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4ZikgewotCQlhbWQ2NF9kZWJ1Z19kaXNwbGF5X2RpbW1fc2l6ZXMoMCwgcHZ0KTsKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHhmKQogCQlyZXR1cm47Ci0JfQorCisJYW1kNjRfZGVidWdfZGlzcGxheV9kaW1tX3NpemVzKDEsIHB2dCk7CiAKIAlhbWQ2NF9pbmZvKCJ1c2luZyAlcyBzeW5kcm9tZXMuXG4iLCAoKHB2dC0+c3luX3R5cGUgPT0gOCkgPyAieDgiIDogIng0IikpOwogCiAJLyogT25seSBpZiBOT1QgZ2FuZ2VkIGRvZXMgZGNscjEgaGF2ZSB2YWxpZCBpbmZvICovCiAJaWYgKCFkY3RfZ2FuZ2luZ19lbmFibGVkKHB2dCkpCiAJCWFtZDY0X2R1bXBfZHJhbWNmZ19sb3cocHZ0LT5kY2xyMSwgMSk7Ci0KLQkvKgotCSAqIERldGVybWluZSBpZiBnYW5nZWQgYW5kIHRoZW4gZHVtcCBtZW1vcnkgc2l6ZXMgZm9yIGZpcnN0IGNvbnRyb2xsZXIsCi0JICogYW5kIGlmIE5PVCBnYW5nZWQgZHVtcCBpbmZvIGZvciAybmQgY29udHJvbGxlci4KLQkgKi8KLQlnYW5nZWQgPSBkY3RfZ2FuZ2luZ19lbmFibGVkKHB2dCk7Ci0KLQlhbWQ2NF9kZWJ1Z19kaXNwbGF5X2RpbW1fc2l6ZXMoMCwgcHZ0KTsKLQotCWlmICghZ2FuZ2VkKQotCQlhbWQ2NF9kZWJ1Z19kaXNwbGF5X2RpbW1fc2l6ZXMoMSwgcHZ0KTsKIH0KIAogLyogUmVhZCBpbiBib3RoIG9mIERCQU0gcmVnaXN0ZXJzICovCkBAIC0xNjQ0LDExICsxNjMzLDEwIEBACiAJCSAgICAgICBXQVJOX09OKGN0cmwgIT0gMCk7CiAJfQogCi0JZGVidWdmMSgiRjJ4JWQ4MCAoRFJBTSBCYW5rIEFkZHJlc3MgTWFwcGluZyk6IDB4JTA4eFxuIiwKLQkJY3RybCwgY3RybCA/IHB2dC0+ZGJhbTEgOiBwdnQtPmRiYW0wKTsKKwlkYmFtID0gKGN0cmwgJiYgIWRjdF9nYW5naW5nX2VuYWJsZWQocHZ0KSkgPyBwdnQtPmRiYW0xIDogcHZ0LT5kYmFtMDsKKwlkY3NiID0gKGN0cmwgJiYgIWRjdF9nYW5naW5nX2VuYWJsZWQocHZ0KSkgPyBwdnQtPmRjc2IxIDogcHZ0LT5kY3NiMDsKIAotCWRiYW0gPSBjdHJsID8gcHZ0LT5kYmFtMSA6IHB2dC0+ZGJhbTA7Ci0JZGNzYiA9IGN0cmwgPyBwdnQtPmRjc2IxIDogcHZ0LT5kY3NiMDsKKwlkZWJ1Z2YxKCJGMnglZDgwIChEUkFNIEJhbmsgQWRkcmVzcyBNYXBwaW5nKTogMHglMDh4XG4iLCBjdHJsLCBkYmFtKTsKIAogCWVkYWNfcHJpbnRrKEtFUk5fREVCVUcsIEVEQUNfTUMsICJEQ1QlZCBjaGlwIHNlbGVjdHM6XG4iLCBjdHJsKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9LY29uZmlnIGIvZHJpdmVycy9maXJld2lyZS9LY29uZmlnCmluZGV4IDY4Zjk0MmMuLjBjNTY5ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvS2NvbmZpZworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL0tjb25maWcKQEAgLTQ5LDE1ICs0OSwxMyBAQAogCSAgY29uZmlndXJhdGlvbiBzZWN0aW9uLgogCiBjb25maWcgRklSRVdJUkVfTkVUCi0JdHJpc3RhdGUgIklQIG5ldHdvcmtpbmcgb3ZlciAxMzk0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRklSRVdJUkUgJiYgSU5FVCAmJiBFWFBFUklNRU5UQUwKKwl0cmlzdGF0ZSAiSVAgbmV0d29ya2luZyBvdmVyIDEzOTQiCisJZGVwZW5kcyBvbiBGSVJFV0lSRSAmJiBJTkVUCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIElQdjQgb3ZlciBJRUVFIDEzOTQsIHByb3ZpZGluZyBJUCBjb25uZWN0aXZpdHkgd2l0aAogCSAgb3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIFJGQyAyNzM0IGFzIGZvdW5kIG9uIHNldmVyYWwgb3BlcmF0aW5nCiAJICBzeXN0ZW1zLiAgTXVsdGljYXN0IHN1cHBvcnQgaXMgY3VycmVudGx5IGxpbWl0ZWQuCiAKLQkgIE5PVEUsIHRoaXMgZHJpdmVyIGlzIG5vdCBzdGFibGUgeWV0IQotCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlOiAgVGhlIG1vZHVsZSB3aWxsIGJlCiAJICBjYWxsZWQgZmlyZXdpcmUtbmV0LgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2FyZC5jIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWNhcmQuYwppbmRleCBiZTA0OTIzLi4yNGZmMzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2FyZC5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jYXJkLmMKQEAgLTc1LDYgKzc1LDggQEAKICNkZWZpbmUgQklCX0lSTUMJCSgoMSkgPDwgMzEpCiAjZGVmaW5lIE5PREVfQ0FQQUJJTElUSUVTCTB4MGMwMDgzYzAgLyogcGVyIElFRUUgMTM5NCBjbGF1c2UgOC4zLjIuNi41LjIgKi8KIAorI2RlZmluZSBDQU5PTl9PVUkJCTB4MDAwMDg1CisKIHN0YXRpYyB2b2lkIGdlbmVyYXRlX2NvbmZpZ19yb20oc3RydWN0IGZ3X2NhcmQgKmNhcmQsIF9fYmUzMiAqY29uZmlnX3JvbSkKIHsKIAlzdHJ1Y3QgZndfZGVzY3JpcHRvciAqZGVzYzsKQEAgLTI4NCw2ICsyODYsNyBAQAogCWJvb2wgcm9vdF9kZXZpY2VfaXNfcnVubmluZzsKIAlib29sIHJvb3RfZGV2aWNlX2lzX2NtYzsKIAlib29sIGlybV9pc18xMzk0XzE5OTVfb25seTsKKwlib29sIGtlZXBfdGhpc19pcm07CiAKIAlzcGluX2xvY2tfaXJxKCZjYXJkLT5sb2NrKTsKIApAQCAtMzA1LDYgKzMwOCwxMCBAQAogCWlybV9pc18xMzk0XzE5OTVfb25seSA9IGlybV9kZXZpY2UgJiYgaXJtX2RldmljZS0+Y29uZmlnX3JvbSAmJgogCQkJKGlybV9kZXZpY2UtPmNvbmZpZ19yb21bMl0gJiAweDAwMDAwMGYwKSA9PSAwOwogCisJLyogQ2Fub24gTVY1aSB3b3JrcyB1bnJlbGlhYmx5IGlmIGl0IGlzIG5vdCByb290IG5vZGUuICovCisJa2VlcF90aGlzX2lybSA9IGlybV9kZXZpY2UgJiYgaXJtX2RldmljZS0+Y29uZmlnX3JvbSAmJgorCQkJaXJtX2RldmljZS0+Y29uZmlnX3JvbVszXSA+PiA4ID09IENBTk9OX09VSTsKKwogCXJvb3RfaWQgID0gcm9vdF9ub2RlLT5ub2RlX2lkOwogCWlybV9pZCAgID0gY2FyZC0+aXJtX25vZGUtPm5vZGVfaWQ7CiAJbG9jYWxfaWQgPSBjYXJkLT5sb2NhbF9ub2RlLT5ub2RlX2lkOwpAQCAtMzMzLDcgKzM0MCw3IEBACiAJCQlnb3RvIHBpY2tfbWU7CiAJCX0KIAotCQlpZiAoaXJtX2lzXzEzOTRfMTk5NV9vbmx5KSB7CisJCWlmIChpcm1faXNfMTM5NF8xOTk1X29ubHkgJiYgIWtlZXBfdGhpc19pcm0pIHsKIAkJCW5ld19yb290X2lkID0gbG9jYWxfaWQ7CiAJCQlmd19ub3RpZnkoIiVzLCBtYWtpbmcgbG9jYWwgbm9kZSAoJTAyeCkgcm9vdC5cbiIsCiAJCQkJICAiSVJNIGlzIG5vdCAxMzk0YSBjb21wbGlhbnQiLCBuZXdfcm9vdF9pZCk7CkBAIC0zODIsNyArMzg5LDcgQEAKIAogCQlzcGluX2xvY2tfaXJxKCZjYXJkLT5sb2NrKTsKIAotCQlpZiAocmNvZGUgIT0gUkNPREVfQ09NUExFVEUpIHsKKwkJaWYgKHJjb2RlICE9IFJDT0RFX0NPTVBMRVRFICYmICFrZWVwX3RoaXNfaXJtKSB7CiAJCQkvKgogCQkJICogVGhlIGxvY2sgcmVxdWVzdCBmYWlsZWQsIG1heWJlIHRoZSBJUk0KIAkJCSAqIGlzbid0IHJlYWxseSBJUk0gY2FwYWJsZSBhZnRlciBhbGwuIExldCdzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL25ldC5jIGIvZHJpdmVycy9maXJld2lyZS9uZXQuYwppbmRleCBjMmUxOTRjLi43ZWQwOGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL25ldC5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvbmV0LmMKQEAgLTE5MSw2ICsxOTEsNyBAQAogCXN0cnVjdCBmd25ldF9kZXZpY2UgKmRldjsKIAl1NjQgZ3VpZDsKIAl1NjQgZmlmbzsKKwlfX2JlMzIgaXA7CiAKIAkvKiBndWFyZGVkIGJ5IGRldi0+bG9jayAqLwogCXN0cnVjdCBsaXN0X2hlYWQgcGRfbGlzdDsgLyogcmVjZWl2ZWQgcGFydGlhbCBkYXRhZ3JhbXMgKi8KQEAgLTU3MCw2ICs1NzEsOCBAQAogCQkJCXBlZXItPnNwZWVkID0gc3NwZDsKIAkJCWlmIChwZWVyLT5tYXhfcGF5bG9hZCA+IG1heF9wYXlsb2FkKQogCQkJCXBlZXItPm1heF9wYXlsb2FkID0gbWF4X3BheWxvYWQ7CisKKwkJCXBlZXItPmlwID0gYXJwMTM5NC0+c2lwOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOwogCkBAIC0xNDcwLDYgKzE0NzMsNyBAQAogCXBlZXItPmRldiA9IGRldjsKIAlwZWVyLT5ndWlkID0gKHU2NClkZXZpY2UtPmNvbmZpZ19yb21bM10gPDwgMzIgfCBkZXZpY2UtPmNvbmZpZ19yb21bNF07CiAJcGVlci0+ZmlmbyA9IEZXTkVUX05PX0ZJRk9fQUREUjsKKwlwZWVyLT5pcCA9IDA7CiAJSU5JVF9MSVNUX0hFQUQoJnBlZXItPnBkX2xpc3QpOwogCXBlZXItPnBkZ19zaXplID0gMDsKIAlwZWVyLT5kYXRhZ3JhbV9sYWJlbCA9IDA7CkBAIC0xNTg5LDEwICsxNTkzLDEzIEBACiAKIAltdXRleF9sb2NrKCZmd25ldF9kZXZpY2VfbXV0ZXgpOwogCisJbmV0ID0gZGV2LT5uZXRkZXY7CisJaWYgKG5ldCAmJiBwZWVyLT5pcCkKKwkJYXJwX2ludmFsaWRhdGUobmV0LCBwZWVyLT5pcCk7CisKIAlmd25ldF9yZW1vdmVfcGVlcihwZWVyLCBkZXYpOwogCiAJaWYgKGxpc3RfZW1wdHkoJmRldi0+cGVlcl9saXN0KSkgewotCQluZXQgPSBkZXYtPm5ldGRldjsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYobmV0KTsKIAogCQlpZiAoZGV2LT5sb2NhbF9maWZvICE9IEZXTkVUX05PX0ZJRk9fQUREUikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvS2NvbmZpZyBiL2RyaXZlcnMvZmlybXdhcmUvS2NvbmZpZwppbmRleCBlOGI2YTEzLi5lNzEwNDI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL0tjb25maWcKKysrIGIvZHJpdmVycy9maXJtd2FyZS9LY29uZmlnCkBAIC0yNyw3ICsyNyw3IEBACiAJICB1c2luZyB0aGUga2VybmVsIHBhcmFtZXRlciAnZWRkPXtvbnxza2lwbWJyfG9mZn0nLgogCiBjb25maWcgRklSTVdBUkVfTUVNTUFQCi0gICAgYm9vbCAiQWRkIGZpcm13YXJlLXByb3ZpZGVkIG1lbW9yeSBtYXAgdG8gc3lzZnMiIGlmIEVNQkVEREVECisgICAgYm9vbCAiQWRkIGZpcm13YXJlLXByb3ZpZGVkIG1lbW9yeSBtYXAgdG8gc3lzZnMiIGlmIEVYUEVSVAogICAgIGRlZmF1bHQgWDg2CiAgICAgaGVscAogICAgICAgQWRkIHRoZSBmaXJtd2FyZS1wcm92aWRlZCAodW5tb2RpZmllZCkgbWVtb3J5IG1hcCB0byAvc3lzL2Zpcm13YXJlL21lbW1hcC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwppbmRleCBlMjhlNDE2NjguLmJjYjExMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKQEAgLTM3OCwxMCArMzc4LDE3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBkbWlfZHVtcF9pZHModm9pZCkKIHsKKwljb25zdCBjaGFyICpib2FyZDsJLyogQm9hcmQgTmFtZSBpcyBvcHRpb25hbCAqLworCiAJcHJpbnRrKEtFUk5fREVCVUcgIkRNSTogIik7Ci0JcHJpbnRfZmlsdGVyZWQoZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQk9BUkRfTkFNRSkpOwotCXByaW50ayhLRVJOX0NPTlQgIi8iKTsKKwlwcmludF9maWx0ZXJlZChkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9TWVNfVkVORE9SKSk7CisJcHJpbnRrKEtFUk5fQ09OVCAiICIpOwogCXByaW50X2ZpbHRlcmVkKGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1BST0RVQ1RfTkFNRSkpOworCWJvYXJkID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQk9BUkRfTkFNRSk7CisJaWYgKGJvYXJkKSB7CisJCXByaW50ayhLRVJOX0NPTlQgIi8iKTsKKwkJcHJpbnRfZmlsdGVyZWQoYm9hcmQpOworCX0KIAlwcmludGsoS0VSTl9DT05UICIsIEJJT1MgIik7CiAJcHJpbnRfZmlsdGVyZWQoZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRVJTSU9OKSk7CiAJcHJpbnRrKEtFUk5fQ09OVCAiICIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYyBiL2RyaXZlcnMvZ3Bpby9sYW5nd2VsbF9ncGlvLmMKaW5kZXggZDgxY2M3NC4uNTRkNzBhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vbGFuZ3dlbGxfZ3Bpby5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAogc3RhdGljIHZvaWQgbG53X2lycV9oYW5kbGVyKHVuc2lnbmVkIGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCXN0cnVjdCBsbndfZ3BpbyAqbG53ID0gKHN0cnVjdCBsbndfZ3BpbyAqKWdldF9pcnFfZGF0YShpcnEpOworCXN0cnVjdCBsbndfZ3BpbyAqbG53ID0gZ2V0X2lycV9kYXRhKGlycSk7CiAJdTMyIGJhc2UsIGdwaW87CiAJdm9pZCBfX2lvbWVtICpnZWRyOwogCXUzMiBnZWRyX3Y7CkBAIC0yMDYsNyArMjA2LDEyIEBACiAJCS8qIGNsZWFyIHRoZSBlZGdlIGRldGVjdCBzdGF0dXMgYml0ICovCiAJCXdyaXRlbChnZWRyX3YsIGdlZHIpOwogCX0KLQlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKworCWlmIChkZXNjLT5jaGlwLT5pcnFfZW9pKQorCQlkZXNjLT5jaGlwLT5pcnFfZW9pKGlycV9nZXRfaXJxX2RhdGEoaXJxKSk7CisJZWxzZQorCQlkZXZfd2FybihsbnctPmNoaXAuZGV2LCAibWlzc2luZyBFT0kgaGFuZGxlciBmb3IgaXJxICVkXG4iLCBpcnEpOworCiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGxud19ncGlvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3BjYTk1M3guYyBiL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKaW5kZXggYTI2MTk3Mi4uYjQ3MzQyOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKKysrIGIvZHJpdmVycy9ncGlvL3BjYTk1M3guYwpAQCAtNjAsNiArNjAsNyBAQAogCXVuc2lnbmVkIGdwaW9fc3RhcnQ7CiAJdWludDE2X3QgcmVnX291dHB1dDsKIAl1aW50MTZfdCByZWdfZGlyZWN0aW9uOworCXN0cnVjdCBtdXRleCBpMmNfbG9jazsKIAogI2lmZGVmIENPTkZJR19HUElPX1BDQTk1M1hfSVJRCiAJc3RydWN0IG11dGV4IGlycV9sb2NrOwpAQCAtMTE5LDEzICsxMjAsMTcgQEAKIAogCWNoaXAgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBwY2E5NTN4X2NoaXAsIGdwaW9fY2hpcCk7CiAKKwltdXRleF9sb2NrKCZjaGlwLT5pMmNfbG9jayk7CiAJcmVnX3ZhbCA9IGNoaXAtPnJlZ19kaXJlY3Rpb24gfCAoMXUgPDwgb2ZmKTsKIAlyZXQgPSBwY2E5NTN4X3dyaXRlX3JlZyhjaGlwLCBQQ0E5NTNYX0RJUkVDVElPTiwgcmVnX3ZhbCk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBleGl0OwogCiAJY2hpcC0+cmVnX2RpcmVjdGlvbiA9IHJlZ192YWw7Ci0JcmV0dXJuIDA7CisJcmV0ID0gMDsKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pMmNfbG9jayk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBwY2E5NTN4X2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywKQEAgLTEzNyw2ICsxNDIsNyBAQAogCiAJY2hpcCA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHBjYTk1M3hfY2hpcCwgZ3Bpb19jaGlwKTsKIAorCW11dGV4X2xvY2soJmNoaXAtPmkyY19sb2NrKTsKIAkvKiBzZXQgb3V0cHV0IGxldmVsICovCiAJaWYgKHZhbCkKIAkJcmVnX3ZhbCA9IGNoaXAtPnJlZ19vdXRwdXQgfCAoMXUgPDwgb2ZmKTsKQEAgLTE0NSw3ICsxNTEsNyBAQAogCiAJcmV0ID0gcGNhOTUzeF93cml0ZV9yZWcoY2hpcCwgUENBOTUzWF9PVVRQVVQsIHJlZ192YWwpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gZXhpdDsKIAogCWNoaXAtPnJlZ19vdXRwdXQgPSByZWdfdmFsOwogCkBAIC0xNTMsMTAgKzE1OSwxMyBAQAogCXJlZ192YWwgPSBjaGlwLT5yZWdfZGlyZWN0aW9uICYgfigxdSA8PCBvZmYpOwogCXJldCA9IHBjYTk1M3hfd3JpdGVfcmVnKGNoaXAsIFBDQTk1M1hfRElSRUNUSU9OLCByZWdfdmFsKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlnb3RvIGV4aXQ7CiAKIAljaGlwLT5yZWdfZGlyZWN0aW9uID0gcmVnX3ZhbDsKLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworZXhpdDoKKwltdXRleF91bmxvY2soJmNoaXAtPmkyY19sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHBjYTk1M3hfZ3Bpb19nZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIG9mZikKQEAgLTE2Nyw3ICsxNzYsOSBAQAogCiAJY2hpcCA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHBjYTk1M3hfY2hpcCwgZ3Bpb19jaGlwKTsKIAorCW11dGV4X2xvY2soJmNoaXAtPmkyY19sb2NrKTsKIAlyZXQgPSBwY2E5NTN4X3JlYWRfcmVnKGNoaXAsIFBDQTk1M1hfSU5QVVQsICZyZWdfdmFsKTsKKwltdXRleF91bmxvY2soJmNoaXAtPmkyY19sb2NrKTsKIAlpZiAocmV0IDwgMCkgewogCQkvKiBOT1RFOiAgZGlhZ25vc3RpYyBhbHJlYWR5IGVtaXR0ZWQ7IHRoYXQncyBhbGwgd2Ugc2hvdWxkCiAJCSAqIGRvIHVubGVzcyBncGlvXypfdmFsdWVfY2Fuc2xlZXAoKSBjYWxscyBiZWNvbWUgZGlmZmVyZW50CkBAIC0xODcsNiArMTk4LDcgQEAKIAogCWNoaXAgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBwY2E5NTN4X2NoaXAsIGdwaW9fY2hpcCk7CiAKKwltdXRleF9sb2NrKCZjaGlwLT5pMmNfbG9jayk7CiAJaWYgKHZhbCkKIAkJcmVnX3ZhbCA9IGNoaXAtPnJlZ19vdXRwdXQgfCAoMXUgPDwgb2ZmKTsKIAllbHNlCkBAIC0xOTQsOSArMjA2LDExIEBACiAKIAlyZXQgPSBwY2E5NTN4X3dyaXRlX3JlZyhjaGlwLCBQQ0E5NTNYX09VVFBVVCwgcmVnX3ZhbCk7CiAJaWYgKHJldCkKLQkJcmV0dXJuOworCQlnb3RvIGV4aXQ7CiAKIAljaGlwLT5yZWdfb3V0cHV0ID0gcmVnX3ZhbDsKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pMmNfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHBjYTk1M3hfc2V0dXBfZ3BpbyhzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwLCBpbnQgZ3Bpb3MpCkBAIC01MTcsNiArNTMxLDggQEAKIAogCWNoaXAtPm5hbWVzID0gcGRhdGEtPm5hbWVzOwogCisJbXV0ZXhfaW5pdCgmY2hpcC0+aTJjX2xvY2spOworCiAJLyogaW5pdGlhbGl6ZSBjYWNoZWQgcmVnaXN0ZXJzIGZyb20gdGhlaXIgb3JpZ2luYWwgdmFsdWVzLgogCSAqIHdlIGNhbid0IHNoYXJlIHRoaXMgY2hpcCB3aXRoIGFub3RoZXIgaTJjIG1hc3Rlci4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggNjQ4MjhhNy4uMDkwMmQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTIzLDcgKzIzLDcgQEAKIAl0cmlzdGF0ZQogCWRlcGVuZHMgb24gRFJNCiAJc2VsZWN0IEZCCi0Jc2VsZWN0IEZSQU1FQlVGRkVSX0NPTlNPTEUgaWYgIUVNQkVEREVECisJc2VsZWN0IEZSQU1FQlVGRkVSX0NPTlNPTEUgaWYgIUVYUEVSVAogCWhlbHAKIAkgIEZCIGFuZCBDUlRDIGhlbHBlcnMgZm9yIEtNUyBkcml2ZXJzLgogCkBAIC0xMDAsNyArMTAwLDEwIEBACiBjb25maWcgRFJNX0k5MTUKIAl0cmlzdGF0ZSAiaTkxNSBkcml2ZXIiCiAJZGVwZW5kcyBvbiBBR1BfSU5URUwKKwkjIHdlIG5lZWQgc2htZnMgZm9yIHRoZSBzd2FwcGFibGUgYmFja2luZyBzdG9yZSwgYW5kIGluIHBhcnRpY3VsYXIKKwkjIHRoZSBzaG1lbV9yZWFkcGFnZSgpIHdoaWNoIGRlcGVuZHMgdXBvbiB0bXBmcwogCXNlbGVjdCBTSE1FTQorCXNlbGVjdCBUTVBGUwogCXNlbGVjdCBEUk1fS01TX0hFTFBFUgogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCmluZGV4IDJiYWE2NzAuLjY1NGZhYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCkBAIC0yNjc0LDMgKzI2NzQsMjMgQEAKIAltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CisKK3ZvaWQgZHJtX21vZGVfY29uZmlnX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpCisJCWlmIChjcnRjLT5mdW5jcy0+cmVzZXQpCisJCQljcnRjLT5mdW5jcy0+cmVzZXQoY3J0Yyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkKKwkJaWYgKGVuY29kZXItPmZ1bmNzLT5yZXNldCkKKwkJCWVuY29kZXItPmZ1bmNzLT5yZXNldChlbmNvZGVyKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkKKwkJaWYgKGNvbm5lY3Rvci0+ZnVuY3MtPnJlc2V0KQorCQkJY29ubmVjdG9yLT5mdW5jcy0+cmVzZXQoY29ubmVjdG9yKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX21vZGVfY29uZmlnX3Jlc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYwppbmRleCA5NTJiM2Q0Li45MjM2OTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCkBAIC0zNDMsMTMgKzM0MywxMiBAQAogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlib29sIHJldCA9IHRydWU7CiAKLQlhZGp1c3RlZF9tb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRldiwgbW9kZSk7Ci0KIAljcnRjLT5lbmFibGVkID0gZHJtX2hlbHBlcl9jcnRjX2luX3VzZShjcnRjKTsKLQogCWlmICghY3J0Yy0+ZW5hYmxlZCkKIAkJcmV0dXJuIHRydWU7CiAKKwlhZGp1c3RlZF9tb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRldiwgbW9kZSk7CisKIAlzYXZlZF9od21vZGUgPSBjcnRjLT5od21vZGU7CiAJc2F2ZWRfbW9kZSA9IGNydGMtPm1vZGU7CiAJc2F2ZWRfeCA9IGNydGMtPng7CkBAIC00MzcsMTAgKzQzNiw5IEBACiAJICovCiAJZHJtX2NhbGNfdGltZXN0YW1waW5nX2NvbnN0YW50cyhjcnRjKTsKIAotCS8qIFhYWCBmcmVlIGFkanVzdGVkbW9kZSAqLwotCWRybV9tb2RlX2Rlc3Ryb3koZGV2LCBhZGp1c3RlZF9tb2RlKTsKIAkvKiBGSVhNRTogYWRkIHN1YnBpeGVsIG9yZGVyICovCiBkb25lOgorCWRybV9tb2RlX2Rlc3Ryb3koZGV2LCBhZGp1c3RlZF9tb2RlKTsKIAlpZiAoIXJldCkgewogCQljcnRjLT5od21vZGUgPSBzYXZlZF9od21vZGU7CiAJCWNydGMtPm1vZGUgPSBzYXZlZF9tb2RlOwpAQCAtNDk3LDE0ICs0OTUsMTcgQEAKIAogCWNydGNfZnVuY3MgPSBzZXQtPmNydGMtPmhlbHBlcl9wcml2YXRlOwogCisJaWYgKCFzZXQtPm1vZGUpCisJCXNldC0+ZmIgPSBOVUxMOworCiAJaWYgKHNldC0+ZmIpIHsKIAkJRFJNX0RFQlVHX0tNUygiW0NSVEM6JWRdIFtGQjolZF0gI2Nvbm5lY3RvcnM9JWQgKHggeSkgKCVpICVpKVxuIiwKIAkJCQlzZXQtPmNydGMtPmJhc2UuaWQsIHNldC0+ZmItPmJhc2UuaWQsCiAJCQkJKGludClzZXQtPm51bV9jb25uZWN0b3JzLCBzZXQtPngsIHNldC0+eSk7CiAJfSBlbHNlIHsKLQkJRFJNX0RFQlVHX0tNUygiW0NSVEM6JWRdIFtOT0ZCXSAjY29ubmVjdG9ycz0lZCAoeCB5KSAoJWkgJWkpXG4iLAotCQkJCXNldC0+Y3J0Yy0+YmFzZS5pZCwgKGludClzZXQtPm51bV9jb25uZWN0b3JzLAotCQkJCXNldC0+eCwgc2V0LT55KTsKKwkJRFJNX0RFQlVHX0tNUygiW0NSVEM6JWRdIFtOT0ZCXVxuIiwgc2V0LT5jcnRjLT5iYXNlLmlkKTsKKwkJc2V0LT5tb2RlID0gTlVMTDsKKwkJc2V0LT5udW1fY29ubmVjdG9ycyA9IDA7CiAJfQogCiAJZGV2ID0gc2V0LT5jcnRjLT5kZXY7CkBAIC02NDksOCArNjUwLDggQEAKIAkJbW9kZV9jaGFuZ2VkID0gdHJ1ZTsKIAogCWlmIChtb2RlX2NoYW5nZWQpIHsKLQkJc2V0LT5jcnRjLT5lbmFibGVkID0gKHNldC0+bW9kZSAhPSBOVUxMKTsKLQkJaWYgKHNldC0+bW9kZSAhPSBOVUxMKSB7CisJCXNldC0+Y3J0Yy0+ZW5hYmxlZCA9IGRybV9oZWxwZXJfY3J0Y19pbl91c2Uoc2V0LT5jcnRjKTsKKwkJaWYgKHNldC0+Y3J0Yy0+ZW5hYmxlZCkgewogCQkJRFJNX0RFQlVHX0tNUygiYXR0ZW1wdGluZyB0byBzZXQgbW9kZSBmcm9tIgogCQkJCQkiIHVzZXJzcGFjZVxuIik7CiAJCQlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKHNldC0+bW9kZSk7CkBAIC02NjUsNiArNjY2LDEyIEBACiAJCQkJcmV0ID0gLUVJTlZBTDsKIAkJCQlnb3RvIGZhaWw7CiAJCQl9CisJCQlEUk1fREVCVUdfS01TKCJTZXR0aW5nIGNvbm5lY3RvciBEUE1TIHN0YXRlIHRvIG9uXG4iKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBzZXQtPm51bV9jb25uZWN0b3JzOyBpKyspIHsKKwkJCQlEUk1fREVCVUdfS01TKCJcdFtDT05ORUNUT1I6JWQ6JXNdIHNldCBEUE1TIG9uXG4iLCBzZXQtPmNvbm5lY3RvcnNbaV0tPmJhc2UuaWQsCisJCQkJCSAgICAgIGRybV9nZXRfY29ubmVjdG9yX25hbWUoc2V0LT5jb25uZWN0b3JzW2ldKSk7CisJCQkJc2V0LT5jb25uZWN0b3JzW2ldLT5kcG1zID0gRFJNX01PREVfRFBNU19PTjsKKwkJCX0KIAkJfQogCQlkcm1faGVscGVyX2Rpc2FibGVfdW51c2VkX2Z1bmN0aW9ucyhkZXYpOwogCX0gZWxzZSBpZiAoZmJfY2hhbmdlZCkgewpAQCAtNjgxLDEyICs2ODgsNiBAQAogCQkJZ290byBmYWlsOwogCQl9CiAJfQotCURSTV9ERUJVR19LTVMoIlNldHRpbmcgY29ubmVjdG9yIERQTVMgc3RhdGUgdG8gb25cbiIpOwotCWZvciAoaSA9IDA7IGkgPCBzZXQtPm51bV9jb25uZWN0b3JzOyBpKyspIHsKLQkJRFJNX0RFQlVHX0tNUygiXHRbQ09OTkVDVE9SOiVkOiVzXSBzZXQgRFBNUyBvblxuIiwgc2V0LT5jb25uZWN0b3JzW2ldLT5iYXNlLmlkLAotCQkJICAgICAgZHJtX2dldF9jb25uZWN0b3JfbmFtZShzZXQtPmNvbm5lY3RvcnNbaV0pKTsKLQkJc2V0LT5jb25uZWN0b3JzW2ldLT5kcG1zID0gRFJNX01PREVfRFBNU19PTjsKLQl9CiAKIAlrZnJlZShzYXZlX2Nvbm5lY3RvcnMpOwogCWtmcmVlKHNhdmVfZW5jb2RlcnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKaW5kZXggNWM0ZjliOS4uNjk3N2ExYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCkBAIC0xNTMzLDExICsxNTMzLDExIEBACiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfaG90cGx1Z19ldmVudCk7CiAKLS8qIFRoZSBLY29uZmlnIERSTV9LTVNfSEVMUEVSIHNlbGVjdHMgRlJBTUVCVUZGRVJfQ09OU09MRSAoaWYgIUVNQkVEREVEKQorLyogVGhlIEtjb25maWcgRFJNX0tNU19IRUxQRVIgc2VsZWN0cyBGUkFNRUJVRkZFUl9DT05TT0xFIChpZiAhRVhQRVJUKQogICogYnV0IHRoZSBtb2R1bGUgZG9lc24ndCBkZXBlbmQgb24gYW55IGZiIGNvbnNvbGUgc3ltYm9scy4gIEF0IGxlYXN0CiAgKiBhdHRlbXB0IHRvIGxvYWQgZmJjb24gdG8gYXZvaWQgbGVhdmluZyB0aGUgc3lzdGVtIHdpdGhvdXQgYSB1c2FibGUgY29uc29sZS4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfTU9EVUxFKSAmJiAhZGVmaW5lZChDT05GSUdfRU1CRURERUQpCisjaWYgZGVmaW5lZChDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9NT0RVTEUpICYmICFkZWZpbmVkKENPTkZJR19FWFBFUlQpCiBzdGF0aWMgaW50IF9faW5pdCBkcm1fZmJfaGVscGVyX21vZGluaXQodm9pZCkKIHsKIAljb25zdCBjaGFyICpuYW1lID0gImZiY29uIjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW5mby5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pbmZvLmMKaW5kZXggM2NkYmFmMy4uYmU5YTljMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pbmZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pbmZvLmMKQEAgLTI4MywxNyArMjgzLDE4IEBACiAjZW5kaWYKIAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlzZXFfcHJpbnRmKG0sICJ2bWEgdXNlIGNvdW50OiAlZCwgaGlnaF9tZW1vcnkgPSAlcCwgMHglMDhsbHhcbiIsCisJc2VxX3ByaW50ZihtLCAidm1hIHVzZSBjb3VudDogJWQsIGhpZ2hfbWVtb3J5ID0gJXBLLCAweCVwS1xuIiwKIAkJICAgYXRvbWljX3JlYWQoJmRldi0+dm1hX2NvdW50KSwKLQkJICAgaGlnaF9tZW1vcnksICh1NjQpdmlydF90b19waHlzKGhpZ2hfbWVtb3J5KSk7CisJCSAgIGhpZ2hfbWVtb3J5LCAodm9pZCAqKXZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSkpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwdCwgJmRldi0+dm1hbGlzdCwgaGVhZCkgewogCQl2bWEgPSBwdC0+dm1hOwogCQlpZiAoIXZtYSkKIAkJCWNvbnRpbnVlOwogCQlzZXFfcHJpbnRmKG0sCi0JCQkgICAiXG4lNWQgMHglMDhseC0weCUwOGx4ICVjJWMlYyVjJWMlYyAweCUwOGx4MDAwIiwKLQkJCSAgIHB0LT5waWQsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLAorCQkJICAgIlxuJTVkIDB4JXBLLTB4JXBLICVjJWMlYyVjJWMlYyAweCUwOGx4MDAwIiwKKwkJCSAgIHB0LT5waWQsCisJCQkgICAodm9pZCAqKXZtYS0+dm1fc3RhcnQsICh2b2lkICopdm1hLT52bV9lbmQsCiAJCQkgICB2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCA/ICdyJyA6ICctJywKIAkJCSAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSA/ICd3JyA6ICctJywKIAkJCSAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDID8gJ3gnIDogJy0nLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKaW5kZXggMDA1NGU5NS4uNTMxMjBhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCkBAIC0xNjQsOCArMTY0LDEwIEBACiAJICogYXZhaWxhYmxlLiBJbiB0aGF0IGNhc2Ugd2UgY2FuJ3QgYWNjb3VudCBmb3IgdGhpcyBhbmQganVzdAogCSAqIGhvcGUgZm9yIHRoZSBiZXN0LgogCSAqLwotCWlmICgodmJscmMgPiAwKSAmJiAoYWJzKGRpZmZfbnMpID4gMTAwMDAwMCkpCisJaWYgKCh2YmxyYyA+IDApICYmIChhYnM2NChkaWZmX25zKSA+IDEwMDAwMDApKSB7CiAJCWF0b21pY19pbmMoJmRldi0+X3ZibGFua19jb3VudFtjcnRjXSk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCX0KIAogCS8qIEludmFsaWRhdGUgYWxsIHRpbWVzdGFtcHMgd2hpbGUgdmJsYW5rIGlycSdzIGFyZSBvZmYuICovCiAJY2xlYXJfdmJsYW5rX3RpbWVzdGFtcHMoZGV2LCBjcnRjKTsKQEAgLTQ5MSw2ICs0OTMsMTIgQEAKIAkvKiBEb3QgY2xvY2sgaW4gSHo6ICovCiAJZG90Y2xvY2sgPSAodTY0KSBjcnRjLT5od21vZGUuY2xvY2sgKiAxMDAwOwogCisJLyogRmllbGRzIG9mIGludGVybGFjZWQgc2Nhbm91dCBtb2RlcyBhcmUgb25seSBoYWx2ZSBhIGZyYW1lIGR1cmF0aW9uLgorCSAqIERvdWJsZSB0aGUgZG90Y2xvY2sgdG8gZ2V0IGhhbHZlIHRoZSBmcmFtZS0vbGluZS0vcGl4ZWxkdXJhdGlvbi4KKwkgKi8KKwlpZiAoY3J0Yy0+aHdtb2RlLmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpCisJCWRvdGNsb2NrICo9IDI7CisKIAkvKiBWYWxpZCBkb3RjbG9jaz8gKi8KIAlpZiAoZG90Y2xvY2sgPiAwKSB7CiAJCS8qIENvbnZlcnQgc2NhbmxpbmUgbGVuZ3RoIGluIHBpeGVscyBhbmQgdmlkZW8gZG90IGNsb2NrIHRvCkBAIC02MDMsMTQgKzYxMSw2IEBACiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCS8qIERvbid0IGtub3cgeWV0IGhvdyB0byBoYW5kbGUgaW50ZXJsYWNlZCBvcgotCSAqIGRvdWJsZSBzY2FuIG1vZGVzLiBKdXN0IG5vLW9wIGZvciBub3cuCi0JICovCi0JaWYgKG1vZGUtPmZsYWdzICYgKERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFIHwgRFJNX01PREVfRkxBR19EQkxTQ0FOKSkgewotCQlEUk1fREVCVUcoImNydGMgJWQ6IE5vb3AgZHVlIHRvIHVuc3VwcG9ydGVkIG1vZGUuXG4iLCBjcnRjKTsKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQl9Ci0KIAkvKiBHZXQgY3VycmVudCBzY2Fub3V0IHBvc2l0aW9uIHdpdGggc3lzdGVtIHRpbWVzdGFtcC4KIAkgKiBSZXBlYXQgcXVlcnkgdXAgdG8gRFJNX1RJTUVTVEFNUF9NQVhSRVRSSUVTIHRpbWVzCiAJICogaWYgc2luZ2xlIHF1ZXJ5IHRha2VzIGxvbmdlciB0aGFuIG1heF9lcnJvciBuYW5vc2Vjb25kcy4KQEAgLTg1OCwxMCArODU4LDExIEBACiAJaWYgKHJjKSB7CiAJCXRzbG90ID0gYXRvbWljX3JlYWQoJmRldi0+X3ZibGFua19jb3VudFtjcnRjXSkgKyBkaWZmOwogCQl2Ymxhbmt0aW1lc3RhbXAoZGV2LCBjcnRjLCB0c2xvdCkgPSB0X3ZibGFuazsKLQkJc21wX3dtYigpOwogCX0KIAorCXNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKTsKIAlhdG9taWNfYWRkKGRpZmYsICZkZXYtPl92YmxhbmtfY291bnRbY3J0Y10pOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOwogfQogCiAvKioKQEAgLTEyNTAsNyArMTI1MSw3IEBACiAgKiBEcml2ZXJzIHNob3VsZCBjYWxsIHRoaXMgcm91dGluZSBpbiB0aGVpciB2YmxhbmsgaW50ZXJydXB0IGhhbmRsZXJzIHRvCiAgKiB1cGRhdGUgdGhlIHZibGFuayBjb3VudGVyIGFuZCBzZW5kIGFueSBzaWduYWxzIHRoYXQgbWF5IGJlIHBlbmRpbmcuCiAgKi8KLXZvaWQgZHJtX2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCitib29sIGRybV9oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogewogCXUzMiB2Ymxjb3VudDsKIAlzNjQgZGlmZl9uczsKQEAgLTEyNTgsNyArMTI1OSw3IEBACiAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAogCWlmICghZGV2LT5udW1fY3J0Y3MpCi0JCXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCiAJLyogTmVlZCB0aW1lc3RhbXAgbG9jayB0byBwcmV2ZW50IGNvbmN1cnJlbnQgZXhlY3V0aW9uIHdpdGgKIAkgKiB2YmxhbmsgZW5hYmxlL2Rpc2FibGUsIGFzIHRoaXMgd291bGQgY2F1c2UgaW5jb25zaXN0ZW50CkBAIC0xMjY5LDcgKzEyNzAsNyBAQAogCS8qIFZibGFuayBpcnEgaGFuZGxpbmcgZGlzYWJsZWQuIE5vdGhpbmcgdG8gZG8uICovCiAJaWYgKCFkZXYtPnZibGFua19lbmFibGVkW2NydGNdKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsYW5rX3RpbWVfbG9jaywgaXJxZmxhZ3MpOwotCQlyZXR1cm47CisJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKiBGZXRjaCBjb3JyZXNwb25kaW5nIHRpbWVzdGFtcCBmb3IgdGhpcyB2YmxhbmsgaW50ZXJ2YWwgZnJvbQpAQCAtMTI5MywxNSArMTI5NCwxNiBAQAogCSAqIGUuZy4sIGR1ZSB0byBzcHVyaW91cyB2YmxhbmsgaW50ZXJydXB0cy4gV2UgbmVlZCB0bwogCSAqIGlnbm9yZSB0aG9zZSBmb3IgYWNjb3VudGluZy4KIAkgKi8KLQlpZiAoYWJzKGRpZmZfbnMpID4gRFJNX1JFRFVOREFOVF9WQkxJUlFfVEhSRVNIX05TKSB7CisJaWYgKGFiczY0KGRpZmZfbnMpID4gRFJNX1JFRFVOREFOVF9WQkxJUlFfVEhSRVNIX05TKSB7CiAJCS8qIFN0b3JlIG5ldyB0aW1lc3RhbXAgaW4gcmluZ2J1ZmZlci4gKi8KIAkJdmJsYW5rdGltZXN0YW1wKGRldiwgY3J0YywgdmJsY291bnQgKyAxKSA9IHR2Ymxhbms7Ci0JCXNtcF93bWIoKTsKIAogCQkvKiBJbmNyZW1lbnQgY29va2VkIHZibGFuayBjb3VudC4gVGhpcyBhbHNvIGF0b21pY2FsbHkgY29tbWl0cwogCQkgKiB0aGUgdGltZXN0YW1wIGNvbXB1dGVkIGFib3ZlLgogCQkgKi8KKwkJc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpOwogCQlhdG9taWNfaW5jKCZkZXYtPl92YmxhbmtfY291bnRbY3J0Y10pOworCQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKIAl9IGVsc2UgewogCQlEUk1fREVCVUcoImNydGMgJWQ6IFJlZHVuZGFudCB2YmxpcnEgaWdub3JlZC4gZGlmZl9ucyA9ICVkXG4iLAogCQkJICBjcnRjLCAoaW50KSBkaWZmX25zKTsKQEAgLTEzMTEsNSArMTMxMyw2IEBACiAJZHJtX2hhbmRsZV92YmxhbmtfZXZlbnRzKGRldiwgY3J0Yyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibGFua190aW1lX2xvY2ssIGlycWZsYWdzKTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2hhbmRsZV92YmxhbmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggODQ0ZjNjOS4uMTdiZDc2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC0xNTIsNyArMTUyLDcgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZGV2LT5wcmltYXJ5LT5tYXN0ZXItPmRyaXZlcl9wcml2OwotCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZyA9IExQX1JJTkcoZGV2X3ByaXYpOworCWludCByZXQ7CiAKIAltYXN0ZXJfcHJpdi0+c2FyZWEgPSBkcm1fZ2V0c2FyZWEoZGV2KTsKIAlpZiAobWFzdGVyX3ByaXYtPnNhcmVhKSB7CkBAIC0xNjMsMzMgKzE2MywyMiBAQAogCX0KIAogCWlmIChpbml0LT5yaW5nX3NpemUgIT0gMCkgewotCQlpZiAocmluZy0+b2JqICE9IE5VTEwpIHsKKwkJaWYgKExQX1JJTkcoZGV2X3ByaXYpLT5vYmogIT0gTlVMTCkgewogCQkJaTkxNV9kbWFfY2xlYW51cChkZXYpOwogCQkJRFJNX0VSUk9SKCJDbGllbnQgdHJpZWQgdG8gaW5pdGlhbGl6ZSByaW5nYnVmZmVyIGluICIKIAkJCQkgICJHRU0gbW9kZVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCXJpbmctPnNpemUgPSBpbml0LT5yaW5nX3NpemU7Ci0KLQkJcmluZy0+bWFwLm9mZnNldCA9IGluaXQtPnJpbmdfc3RhcnQ7Ci0JCXJpbmctPm1hcC5zaXplID0gaW5pdC0+cmluZ19zaXplOwotCQlyaW5nLT5tYXAudHlwZSA9IDA7Ci0JCXJpbmctPm1hcC5mbGFncyA9IDA7Ci0JCXJpbmctPm1hcC5tdHJyID0gMDsKLQotCQlkcm1fY29yZV9pb3JlbWFwX3djKCZyaW5nLT5tYXAsIGRldik7Ci0KLQkJaWYgKHJpbmctPm1hcC5oYW5kbGUgPT0gTlVMTCkgeworCQlyZXQgPSBpbnRlbF9yZW5kZXJfcmluZ19pbml0X2RyaShkZXYsCisJCQkJCQkgaW5pdC0+cmluZ19zdGFydCwKKwkJCQkJCSBpbml0LT5yaW5nX3NpemUpOworCQlpZiAocmV0KSB7CiAJCQlpOTE1X2RtYV9jbGVhbnVwKGRldik7Ci0JCQlEUk1fRVJST1IoImNhbiBub3QgaW9yZW1hcCB2aXJ0dWFsIGFkZHJlc3MgZm9yIgotCQkJCSAgIiByaW5nIGJ1ZmZlclxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKKwkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKLQlyaW5nLT52aXJ0dWFsX3N0YXJ0ID0gcmluZy0+bWFwLmhhbmRsZTsKLQogCWRldl9wcml2LT5jcHAgPSBpbml0LT5jcHA7CiAJZGV2X3ByaXYtPmJhY2tfb2Zmc2V0ID0gaW5pdC0+YmFja19vZmZzZXQ7CiAJZGV2X3ByaXYtPmZyb250X29mZnNldCA9IGluaXQtPmZyb250X29mZnNldDsKQEAgLTEyMjYsOSArMTIxNSwxNSBAQAogCWlmIChyZXQpCiAJCURSTV9JTkZPKCJmYWlsZWQgdG8gZmluZCBWQklPUyB0YWJsZXNcbiIpOwogCi0JLyogaWYgd2UgaGF2ZSA+IDEgVkdBIGNhcmRzLCB0aGVuIGRpc2FibGUgdGhlIHJhZGVvbiBWR0EgcmVzb3VyY2VzICovCisJLyogSWYgd2UgaGF2ZSA+IDEgVkdBIGNhcmRzLCB0aGVuIHdlIG5lZWQgdG8gYXJiaXRyYXRlIGFjY2VzcworCSAqIHRvIHRoZSBjb21tb24gVkdBIHJlc291cmNlcy4KKwkgKgorCSAqIElmIHdlIGFyZSBhIHNlY29uZGFyeSBkaXNwbGF5IGNvbnRyb2xsZXIgKCFQQ0lfRElTUExBWV9DTEFTU19WR0EpLAorCSAqIHRoZW4gd2UgZG8gbm90IHRha2UgcGFydCBpbiBWR0EgYXJiaXRyYXRpb24gYW5kIHRoZQorCSAqIHZnYV9jbGllbnRfcmVnaXN0ZXIoKSBmYWlscyB3aXRoIC1FTk9ERVYuCisJICovCiAJcmV0ID0gdmdhX2NsaWVudF9yZWdpc3RlcihkZXYtPnBkZXYsIGRldiwgTlVMTCwgaTkxNV92Z2Ffc2V0X2RlY29kZSk7Ci0JaWYgKHJldCkKKwlpZiAocmV0ICYmIHJldCAhPSAtRU5PREVWKQogCQlnb3RvIGNsZWFudXBfcmluZ2J1ZmZlcjsKIAogCWludGVsX3JlZ2lzdGVyX2RzbV9oYW5kbGVyKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCA3MmZlYTJiLi4wYWQ1MzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTQ2LDYgKzQ2LDkgQEAKIHVuc2lnbmVkIGludCBpOTE1X3Bvd2Vyc2F2ZSA9IDE7CiBtb2R1bGVfcGFyYW1fbmFtZWQocG93ZXJzYXZlLCBpOTE1X3Bvd2Vyc2F2ZSwgaW50LCAwNjAwKTsKIAordW5zaWduZWQgaW50IGk5MTVfZW5hYmxlX3JjNiA9IDA7Cittb2R1bGVfcGFyYW1fbmFtZWQoaTkxNV9lbmFibGVfcmM2LCBpOTE1X2VuYWJsZV9yYzYsIGludCwgMDYwMCk7CisKIHVuc2lnbmVkIGludCBpOTE1X2x2ZHNfZG93bmNsb2NrID0gMDsKIG1vZHVsZV9wYXJhbV9uYW1lZChsdmRzX2Rvd25jbG9jaywgaTkxNV9sdmRzX2Rvd25jbG9jaywgaW50LCAwNDAwKTsKIApAQCAtNjAsNyArNjMsNyBAQAogCiAjZGVmaW5lIElOVEVMX1ZHQV9ERVZJQ0UoaWQsIGluZm8pIHsJCVwKIAkuY2xhc3MgPSBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgPDwgOCwJXAotCS5jbGFzc19tYXNrID0gMHhmZmZmMDAsCQkJXAorCS5jbGFzc19tYXNrID0gMHhmZjAwMDAsCQkJXAogCS52ZW5kb3IgPSAweDgwODYsCQkJXAogCS5kZXZpY2UgPSBpZCwJCQkJXAogCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAkJXApAQCAtMzU0LDEyICszNTcsMTMgQEAKIAkJZXJyb3IgPSBpOTE1X2dlbV9pbml0X3JpbmdidWZmZXIoZGV2KTsKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKKwkJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRldik7CiAJCWRybV9pcnFfaW5zdGFsbChkZXYpOwogCiAJCS8qIFJlc3VtZSB0aGUgbW9kZXNldCBmb3IgZXZlcnkgYWN0aXZhdGVkIENSVEMgKi8KIAkJZHJtX2hlbHBlcl9yZXN1bWVfZm9yY2VfbW9kZShkZXYpOwogCi0JCWlmIChkZXZfcHJpdi0+cmVuZGVyY3R4ICYmIGRldl9wcml2LT5wd3JjdHgpCisJCWlmIChJU19JUk9OTEFLRV9NKGRldikpCiAJCQlpcm9ubGFrZV9lbmFibGVfcmM2KGRldik7CiAJfQogCkBAIC01NDIsNiArNTQ2LDcgQEAKIAogCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAkJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKKwkJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRldik7CiAJCWRybV9pcnFfaW5zdGFsbChkZXYpOwogCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJfQpAQCAtNTY2LDYgKzU3MSwxNCBAQAogc3RhdGljIGludCBfX2RldmluaXQKIGk5MTVfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogeworCS8qIE9ubHkgYmluZCB0byBmdW5jdGlvbiAwIG9mIHRoZSBkZXZpY2UuIEVhcmx5IGdlbmVyYXRpb25zCisJICogdXNlZCBmdW5jdGlvbiAxIGFzIGEgcGxhY2Vob2xkZXIgZm9yIG11bHRpLWhlYWQuIFRoaXMgY2F1c2VzCisJICogdXMgY29uZnVzaW9uIGluc3RlYWQsIGVzcGVjaWFsbHkgb24gdGhlIHN5c3RlbXMgd2hlcmUgYm90aAorCSAqIGZ1bmN0aW9ucyBoYXZlIHRoZSBzYW1lIFBDSS1JRCEKKwkgKi8KKwlpZiAoUENJX0ZVTkMocGRldi0+ZGV2Zm4pKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXJldHVybiBkcm1fZ2V0X3BjaV9kZXYocGRldiwgZW50LCAmZHJpdmVyKTsKIH0KIApAQCAtNzUyLDYgKzc2NSw5IEBACiAJCWRyaXZlci5kcml2ZXJfZmVhdHVyZXMgJj0gfkRSSVZFUl9NT0RFU0VUOwogI2VuZGlmCiAKKwlpZiAoIShkcml2ZXIuZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX01PREVTRVQpKQorCQlkcml2ZXIuZ2V0X3ZibGFua190aW1lc3RhbXAgPSBOVUxMOworCiAJcmV0dXJuIGRybV9pbml0KCZkcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCA1OTY5ZjQ2Li42NWRmZTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTU0Myw4ICs1NDMsMTEgQEAKIAkJLyoqIExpc3Qgb2YgYWxsIG9iamVjdHMgaW4gZ3R0X3NwYWNlLiBVc2VkIHRvIHJlc3RvcmUgZ3R0CiAJCSAqIG1hcHBpbmdzIG9uIHJlc3VtZSAqLwogCQlzdHJ1Y3QgbGlzdF9oZWFkIGd0dF9saXN0OwotCQkvKiogRW5kIG9mIG1hcHBhYmxlIHBhcnQgb2YgR1RUICovCisKKwkJLyoqIFVzYWJsZSBwb3J0aW9uIG9mIHRoZSBHVFQgZm9yIEdFTSAqLworCQl1bnNpZ25lZCBsb25nIGd0dF9zdGFydDsKIAkJdW5zaWduZWQgbG9uZyBndHRfbWFwcGFibGVfZW5kOworCQl1bnNpZ25lZCBsb25nIGd0dF9lbmQ7CiAKIAkJc3RydWN0IGlvX21hcHBpbmcgKmd0dF9tYXBwaW5nOwogCQlpbnQgZ3R0X210cnI7CkBAIC05NTUsNiArOTU4LDcgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgaTkxNV9wb3dlcnNhdmU7CiBleHRlcm4gdW5zaWduZWQgaW50IGk5MTVfbHZkc19kb3duY2xvY2s7CiBleHRlcm4gdW5zaWduZWQgaW50IGk5MTVfcGFuZWxfdXNlX3NzYzsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaTkxNV9lbmFibGVfcmM2OwogCiBleHRlcm4gaW50IGk5MTVfc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogZXh0ZXJuIGludCBpOTE1X3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDNkZmM4NDguLmNmNGY3NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMTQwLDEyICsxNDAsMTYgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCWRybV9tbV9pbml0KCZkZXZfcHJpdi0+bW0uZ3R0X3NwYWNlLCBzdGFydCwKLQkJICAgIGVuZCAtIHN0YXJ0KTsKKwlkcm1fbW1faW5pdCgmZGV2X3ByaXYtPm1tLmd0dF9zcGFjZSwgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKIAorCWRldl9wcml2LT5tbS5ndHRfc3RhcnQgPSBzdGFydDsKKwlkZXZfcHJpdi0+bW0uZ3R0X21hcHBhYmxlX2VuZCA9IG1hcHBhYmxlX2VuZDsKKwlkZXZfcHJpdi0+bW0uZ3R0X2VuZCA9IGVuZDsKIAlkZXZfcHJpdi0+bW0uZ3R0X3RvdGFsID0gZW5kIC0gc3RhcnQ7CiAJZGV2X3ByaXYtPm1tLm1hcHBhYmxlX2d0dF90b3RhbCA9IG1pbihlbmQsIG1hcHBhYmxlX2VuZCkgLSBzdGFydDsKLQlkZXZfcHJpdi0+bW0uZ3R0X21hcHBhYmxlX2VuZCA9IG1hcHBhYmxlX2VuZDsKKworCS8qIFRha2Ugb3ZlciB0aGlzIHBvcnRpb24gb2YgdGhlIEdUVCAqLworCWludGVsX2d0dF9jbGVhcl9yYW5nZShzdGFydCAvIFBBR0VfU0laRSwgKGVuZC1zdGFydCkgLyBQQUdFX1NJWkUpOwogfQogCiBpbnQKQEAgLTE4NTcsNyArMTg2MSw3IEBACiAKIAlzZXFubyA9IHJpbmctPmdldF9zZXFubyhyaW5nKTsKIAotCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJpbmctPnN5bmNfc2Vxbm8pOyBpKyspCiAJCWlmIChzZXFubyA+PSByaW5nLT5zeW5jX3NlcW5vW2ldKQogCQkJcmluZy0+c3luY19zZXFub1tpXSA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwppbmRleCBkY2ZkZjQxLi5kMmY0NDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCkBAIC0xMTc1LDcgKzExNzUsNyBAQAogCQlnb3RvIGVycjsKIAogCXNlcW5vID0gaTkxNV9nZW1fbmV4dF9yZXF1ZXN0X3NlcW5vKGRldiwgcmluZyk7Ci0JZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTLTE7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJpbmctPnN5bmNfc2Vxbm8pOyBpKyspIHsKIAkJaWYgKHNlcW5vIDwgcmluZy0+c3luY19zZXFub1tpXSkgewogCQkJLyogVGhlIEdQVSBjYW4gbm90IGhhbmRsZSBpdHMgc2VtYXBob3JlIHZhbHVlIHdyYXBwaW5nLAogCQkJICogc28gZXZlcnkgYmlsbGlvbiBvciBzbyBleGVjYnVmZmVycywgd2UgbmVlZCB0byBzdGFsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwppbmRleCA3MDQzM2FlLi5iMGFiZGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwpAQCAtMzQsNiArMzQsMTAgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAKKwkvKiBGaXJzdCBmaWxsIG91ciBwb3J0aW9uIG9mIHRoZSBHVFQgd2l0aCBzY3JhdGNoIHBhZ2VzICovCisJaW50ZWxfZ3R0X2NsZWFyX3JhbmdlKGRldl9wcml2LT5tbS5ndHRfc3RhcnQgLyBQQUdFX1NJWkUsCisJCQkgICAgICAoZGV2X3ByaXYtPm1tLmd0dF9lbmQgLSBkZXZfcHJpdi0+bW0uZ3R0X3N0YXJ0KSAvIFBBR0VfU0laRSk7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgJmRldl9wcml2LT5tbS5ndHRfbGlzdCwgZ3R0X2xpc3QpIHsKIAkJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwppbmRleCAyMmEzMmI5Li43OWEwNGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiBzdGF0aWMgYm9vbAogaTkxNV90aWxpbmdfb2soc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHN0cmlkZSwgaW50IHNpemUsIGludCB0aWxpbmdfbW9kZSkKIHsKLQlpbnQgdGlsZV93aWR0aDsKKwlpbnQgdGlsZV93aWR0aCwgdGlsZV9oZWlnaHQ7CiAKIAkvKiBMaW5lYXIgaXMgYWx3YXlzIGZpbmUgKi8KIAlpZiAodGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfTk9ORSkKQEAgLTIxNSw2ICsyMTUsMjAgQEAKIAkJfQogCX0KIAorCWlmIChJU19HRU4yKGRldikgfHwKKwkgICAgKHRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1kgJiYgSEFTXzEyOF9CWVRFX1lfVElMSU5HKGRldikpKQorCQl0aWxlX2hlaWdodCA9IDMyOworCWVsc2UKKwkJdGlsZV9oZWlnaHQgPSA4OworCS8qIGk4eHggaXMgc3RyYW5nZTogSXQgaGFzIDIgaW50ZXJsZWF2ZWQgcm93cyBvZiB0aWxlcywgc28gbmVlZHMgYW4gZXZlbgorCSAqIG51bWJlciBvZiB0aWxlIHJvd3MuICovCisJaWYgKElTX0dFTjIoZGV2KSkKKwkJdGlsZV9oZWlnaHQgKj0gMjsKKworCS8qIFNpemUgbmVlZHMgdG8gYmUgYWxpZ25lZCB0byBhIGZ1bGwgdGlsZSByb3cgKi8KKwlpZiAoc2l6ZSAmICh0aWxlX2hlaWdodCAqIHN0cmlkZSAtIDEpKQorCQlyZXR1cm4gZmFsc2U7CisKIAkvKiA5NjUrIGp1c3QgbmVlZHMgbXVsdGlwbGVzIG9mIHRpbGUgd2lkdGggKi8KIAlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNCkgewogCQlpZiAoc3RyaWRlICYgKHRpbGVfd2lkdGggLSAxKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCmluZGV4IGI4ZTUwOWEuLjhhOWUwOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwpAQCAtMjc0LDI0ICsyNzQsMzUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgaTkxNV9nZXRfdmJsYW5rX3RpbWVzdGFtcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YywKK2ludCBpOTE1X2dldF92YmxhbmtfdGltZXN0YW1wKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlLAogCQkJICAgICAgaW50ICptYXhfZXJyb3IsCiAJCQkgICAgICBzdHJ1Y3QgdGltZXZhbCAqdmJsYW5rX3RpbWUsCiAJCQkgICAgICB1bnNpZ25lZCBmbGFncykKIHsKLQlzdHJ1Y3QgZHJtX2NydGMgKmRybWNydGM7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAKLQlpZiAoY3J0YyA8IDAgfHwgY3J0YyA+PSBkZXYtPm51bV9jcnRjcykgewotCQlEUk1fRVJST1IoIkludmFsaWQgY3J0YyAlZFxuIiwgY3J0Yyk7CisJaWYgKHBpcGUgPCAwIHx8IHBpcGUgPj0gZGV2X3ByaXYtPm51bV9waXBlKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBjcnRjICVkXG4iLCBwaXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogR2V0IGRybV9jcnRjIHRvIHRpbWVzdGFtcDogKi8KLQlkcm1jcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2LCBjcnRjKTsKKwljcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2LCBwaXBlKTsKKwlpZiAoY3J0YyA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBjcnRjICVkXG4iLCBwaXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFjcnRjLT5lbmFibGVkKSB7CisJCURSTV9ERUJVR19LTVMoImNydGMgJWQgaXMgZGlzYWJsZWRcbiIsIHBpcGUpOworCQlyZXR1cm4gLUVCVVNZOworCX0KIAogCS8qIEhlbHBlciByb3V0aW5lIGluIERSTSBjb3JlIGRvZXMgYWxsIHRoZSB3b3JrOiAqLwotCXJldHVybiBkcm1fY2FsY192Ymx0aW1lc3RhbXBfZnJvbV9zY2Fub3V0cG9zKGRldiwgY3J0YywgbWF4X2Vycm9yLAotCQkJCQkJICAgICB2YmxhbmtfdGltZSwgZmxhZ3MsIGRybWNydGMpOworCXJldHVybiBkcm1fY2FsY192Ymx0aW1lc3RhbXBfZnJvbV9zY2Fub3V0cG9zKGRldiwgcGlwZSwgbWF4X2Vycm9yLAorCQkJCQkJICAgICB2YmxhbmtfdGltZSwgZmxhZ3MsCisJCQkJCQkgICAgIGNydGMpOwogfQogCiAvKgpAQCAtMzA1LDYgKzMxNiw4IEBACiAJc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqbW9kZV9jb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKIAlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKIAorCURSTV9ERUJVR19LTVMoInJ1bm5pbmcgZW5jb2RlciBob3RwbHVnIGZ1bmN0aW9uc1xuIik7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZtb2RlX2NvbmZpZy0+ZW5jb2Rlcl9saXN0LCBiYXNlLmhlYWQpCiAJCWlmIChlbmNvZGVyLT5ob3RfcGx1ZykKIAkJCWVuY29kZXItPmhvdF9wbHVnKGVuY29kZXIpOwpAQCAtMzQ4LDggKzM2MSwxMiBAQAogCQkJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTMyIHNlcW5vID0gcmluZy0+Z2V0X3NlcW5vKHJpbmcpOworCXUzMiBzZXFubzsKIAorCWlmIChyaW5nLT5vYmogPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc2Vxbm8gPSByaW5nLT5nZXRfc2Vxbm8ocmluZyk7CiAJdHJhY2VfaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZShkZXYsIHNlcW5vKTsKIAogCXJpbmctPmlycV9zZXFubyA9IHNlcW5vOwpAQCAtODMxLDYgKzg0OCw4IEBACiAJCWkrKzsKIAllcnJvci0+cGlubmVkX2JvX2NvdW50ID0gaSAtIGVycm9yLT5hY3RpdmVfYm9fY291bnQ7CiAKKwllcnJvci0+YWN0aXZlX2JvID0gTlVMTDsKKwllcnJvci0+cGlubmVkX2JvID0gTlVMTDsKIAlpZiAoaSkgewogCQllcnJvci0+YWN0aXZlX2JvID0ga21hbGxvYyhzaXplb2YoKmVycm9yLT5hY3RpdmVfYm8pKmksCiAJCQkJCSAgIEdGUF9BVE9NSUMpOwpAQCAtMTE3OSwxOCArMTE5OCwxOCBAQAogCQkJCWludGVsX2ZpbmlzaF9wYWdlX2ZsaXBfcGxhbmUoZGV2LCAxKTsKIAkJfQogCi0JCWlmIChwaXBlYV9zdGF0cyAmIHZibGFua19zdGF0dXMpIHsKKwkJaWYgKHBpcGVhX3N0YXRzICYgdmJsYW5rX3N0YXR1cyAmJgorCQkgICAgZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKSkgewogCQkJdmJsYW5rKys7Ci0JCQlkcm1faGFuZGxlX3ZibGFuayhkZXYsIDApOwogCQkJaWYgKCFkZXZfcHJpdi0+ZmxpcF9wZW5kaW5nX2lzX2RvbmUpIHsKIAkJCQlpOTE1X3BhZ2VmbGlwX3N0YWxsX2NoZWNrKGRldiwgMCk7CiAJCQkJaW50ZWxfZmluaXNoX3BhZ2VfZmxpcChkZXYsIDApOwogCQkJfQogCQl9CiAKLQkJaWYgKHBpcGViX3N0YXRzICYgdmJsYW5rX3N0YXR1cykgeworCQlpZiAocGlwZWJfc3RhdHMgJiB2Ymxhbmtfc3RhdHVzICYmCisJCSAgICBkcm1faGFuZGxlX3ZibGFuayhkZXYsIDEpKSB7CiAJCQl2YmxhbmsrKzsKLQkJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMSk7CiAJCQlpZiAoIWRldl9wcml2LT5mbGlwX3BlbmRpbmdfaXNfZG9uZSkgewogCQkJCWk5MTVfcGFnZWZsaXBfc3RhbGxfY2hlY2soZGV2LCAxKTsKIAkJCQlpbnRlbF9maW5pc2hfcGFnZV9mbGlwKGRldiwgMSk7CkBAIC0xMjc4LDEyICsxMjk3LDEyIEBACiAJaWYgKG1hc3Rlcl9wcml2LT5zYXJlYV9wcml2KQogCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJOTE1X0JPWF9XQUlUOwogCi0JcmV0ID0gLUVOT0RFVjsKIAlpZiAocmluZy0+aXJxX2dldChyaW5nKSkgewogCQlEUk1fV0FJVF9PTihyZXQsIHJpbmctPmlycV9xdWV1ZSwgMyAqIERSTV9IWiwKIAkJCSAgICBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpID49IGlycV9ucik7CiAJCXJpbmctPmlycV9wdXQocmluZyk7Ci0JfQorCX0gZWxzZSBpZiAod2FpdF9mb3IoUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KSA+PSBpcnFfbnIsIDMwMDApKQorCQlyZXQgPSAtRUJVU1k7CiAKIAlpZiAocmV0ID09IC1FQlVTWSkgewogCQlEUk1fRVJST1IoIkVCVVNZIC0tIHJlYzogJWQgZW1pdHRlZDogJWRcbiIsCkBAIC0xNjMyLDkgKzE2NTEsNyBAQAogCX0gZWxzZSB7CiAJCWhvdHBsdWdfbWFzayA9IFNERV9DUlRfSE9UUExVRyB8IFNERV9QT1JUQl9IT1RQTFVHIHwKIAkJCSAgICAgICBTREVfUE9SVENfSE9UUExVRyB8IFNERV9QT1JURF9IT1RQTFVHOwotCQlob3RwbHVnX21hc2sgfD0gU0RFX0FVWF9NQVNLIHwgU0RFX0ZESV9NQVNLIHwgU0RFX1RSQU5TX01BU0s7Ci0JCUk5MTVfV1JJVEUoRkRJX1JYQV9JTVIsIDApOwotCQlJOTE1X1dSSVRFKEZESV9SWEJfSU1SLCAwKTsKKwkJaG90cGx1Z19tYXNrIHw9IFNERV9BVVhfTUFTSzsKIAl9CiAKIAlkZXZfcHJpdi0+cGNoX2lycV9tYXNrID0gfmhvdHBsdWdfbWFzazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IDQwYTQwN2YuLjcyOWQ0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtMTc0LDcgKzE3NCw5IEBACiAgKiAgIGFkZHJlc3MvdmFsdWUgcGFpcnMuIERvbid0IG92ZXJkdWUgaXQsIHRob3VnaCwgeCA8PSAyXjQgbXVzdCBob2xkIQogICovCiAjZGVmaW5lIE1JX0xPQURfUkVHSVNURVJfSU1NKHgpCU1JX0lOU1RSKDB4MjIsIDIqeC0xKQotI2RlZmluZSBNSV9GTFVTSF9EVwkJTUlfSU5TVFIoMHgyNiwgMikgLyogZm9yIEdFTjYgKi8KKyNkZWZpbmUgTUlfRkxVU0hfRFcJCU1JX0lOU1RSKDB4MjYsIDEpIC8qIGZvciBHRU42ICovCisjZGVmaW5lICAgTUlfSU5WQUxJREFURV9UTEIJKDE8PDE4KQorI2RlZmluZSAgIE1JX0lOVkFMSURBVEVfQlNECSgxPDw3KQogI2RlZmluZSBNSV9CQVRDSF9CVUZGRVIJCU1JX0lOU1RSKDB4MzAsIDEpCiAjZGVmaW5lICAgTUlfQkFUQ0hfTk9OX1NFQ1VSRQkoMSkKICNkZWZpbmUgICBNSV9CQVRDSF9OT05fU0VDVVJFX0k5NjUgKDE8PDgpCkBAIC01MTMsNiArNTE1LDEwIEBACiAjZGVmaW5lICAgR0VONl9CTElUVEVSX1NZTkNfU1RBVFVTCQkJKDEgPDwgMjQpCiAjZGVmaW5lICAgR0VONl9CTElUVEVSX1VTRVJfSU5URVJSVVBUCQkJKDEgPDwgMjIpCiAKKyNkZWZpbmUgR0VONl9CTElUVEVSX0VDT1NLUEQJMHgyMjFkMAorI2RlZmluZSAgIEdFTjZfQkxJVFRFUl9MT0NLX1NISUZUCQkJMTYKKyNkZWZpbmUgICBHRU42X0JMSVRURVJfRkJDX05PVElGWQkJCSgxPDwzKQorCiAjZGVmaW5lIEdFTjZfQlNEX1NMRUVQX1BTTUlfQ09OVFJPTAkweDEyMDUwCiAjZGVmaW5lICAgR0VONl9CU0RfU0xFRVBfUFNNSV9DT05UUk9MX1JDX0lMRExfTUVTU0FHRV9NT0RJRllfTUFTSwkoMSA8PCAxNikKICNkZWZpbmUgICBHRU42X0JTRF9TTEVFUF9QU01JX0NPTlRST0xfUkNfSUxETF9NRVNTQUdFX0RJU0FCTEUJCSgxIDw8IDApCkBAIC0xNTQ3LDE3ICsxNTUzLDcgQEAKIAogLyogQmFja2xpZ2h0IGNvbnRyb2wgKi8KICNkZWZpbmUgQkxDX1BXTV9DVEwJCTB4NjEyNTQKLSNkZWZpbmUgICBCQUNLTElHSFRfTU9EVUxBVElPTl9GUkVRX1NISUZUCQkoMTcpCiAjZGVmaW5lIEJMQ19QV01fQ1RMMgkJMHg2MTI1MCAvKiA5NjUrIG9ubHkgKi8KLSNkZWZpbmUgICBCTE1fQ09NQklOQVRJT05fTU9ERSAoMSA8PCAzMCkKLS8qCi0gKiBUaGlzIGlzIHRoZSBtb3N0IHNpZ25pZmljYW50IDE1IGJpdHMgb2YgdGhlIG51bWJlciBvZiBiYWNrbGlnaHQgY3ljbGVzIGluIGEKLSAqIGNvbXBsZXRlIGN5Y2xlIG9mIHRoZSBtb2R1bGF0ZWQgYmFja2xpZ2h0IGNvbnRyb2wuCi0gKgotICogVGhlIGFjdHVhbCB2YWx1ZSBpcyB0aGlzIGZpZWxkIG11bHRpcGxpZWQgYnkgdHdvLgotICovCi0jZGVmaW5lICAgQkFDS0xJR0hUX01PRFVMQVRJT05fRlJFUV9NQVNLCQkoMHg3ZmZmIDw8IDE3KQotI2RlZmluZSAgIEJMTV9MRUdBQ1lfTU9ERQkJCQkoMSA8PCAxNikKIC8qCiAgKiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgY3ljbGVzIG91dCBvZiB0aGUgYmFja2xpZ2h0IG1vZHVsYXRpb24gY3ljbGUgZm9yIHdoaWNoCiAgKiB0aGUgYmFja2xpZ2h0IGlzIG9uLgpAQCAtMjYyNiw2ICsyNjIyLDggQEAKICNkZWZpbmUgRElTUExBWV9QT1JUX1BMTF9CSU9TXzIgICAgICAgICAweDQ2MDE0CiAKICNkZWZpbmUgUENIX0RTUENMS19HQVRFX0QJMHg0MjAyMAorIyBkZWZpbmUgRFBGQ1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA5KQorIyBkZWZpbmUgRFBGQ1JVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgOCkKICMgZGVmaW5lIERQRkRVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgNykKICMgZGVmaW5lIERQQVJCVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDUpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMKaW5kZXggMTcwMzViOC4uOGE3N2ZmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMKQEAgLTUzNSw2ICs1MzUsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgaW50ZWxfY3J0X3Jlc2V0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCBpbnRlbF9jcnQgKmNydCA9IGludGVsX2F0dGFjaGVkX2NydChjb25uZWN0b3IpOworCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKKwkJY3J0LT5mb3JjZV9ob3RwbHVnX3JlcXVpcmVkID0gMTsKK30KKwogLyoKICAqIFJvdXRpbmVzIGZvciBjb250cm9sbGluZyBzdHVmZiBvbiB0aGUgYW5hbG9nIHBvcnQKICAqLwpAQCAtNTQ4LDYgKzU1Nyw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgaW50ZWxfY3J0X2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkucmVzZXQgPSBpbnRlbF9jcnRfcmVzZXQsCiAJLmRwbXMgPSBkcm1faGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAogCS5kZXRlY3QgPSBpbnRlbF9jcnRfZGV0ZWN0LAogCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDk4OTY3ZjMuLmU3OWIyNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTEyMTMsNiArMTIxMywyNiBAQAogCXJldHVybiBJOTE1X1JFQUQoRFBGQ19DT05UUk9MKSAmIERQRkNfQ1RMX0VOOwogfQogCitzdGF0aWMgdm9pZCBzYW5keWJyaWRnZV9ibGl0X2ZiY191cGRhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBibHRfZWNvc2twZDsKKworCS8qIE1ha2Ugc3VyZSBibGl0dGVyIG5vdGlmaWVzIEZCQyBvZiB3cml0ZXMgKi8KKwlfX2dlbjZfZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYpOworCWJsdF9lY29za3BkID0gSTkxNV9SRUFEKEdFTjZfQkxJVFRFUl9FQ09TS1BEKTsKKwlibHRfZWNvc2twZCB8PSBHRU42X0JMSVRURVJfRkJDX05PVElGWSA8PAorCQlHRU42X0JMSVRURVJfTE9DS19TSElGVDsKKwlJOTE1X1dSSVRFKEdFTjZfQkxJVFRFUl9FQ09TS1BELCBibHRfZWNvc2twZCk7CisJYmx0X2Vjb3NrcGQgfD0gR0VONl9CTElUVEVSX0ZCQ19OT1RJRlk7CisJSTkxNV9XUklURShHRU42X0JMSVRURVJfRUNPU0tQRCwgYmx0X2Vjb3NrcGQpOworCWJsdF9lY29za3BkICY9IH4oR0VONl9CTElUVEVSX0ZCQ19OT1RJRlkgPDwKKwkJCSBHRU42X0JMSVRURVJfTE9DS19TSElGVCk7CisJSTkxNV9XUklURShHRU42X0JMSVRURVJfRUNPU0tQRCwgYmx0X2Vjb3NrcGQpOworCVBPU1RJTkdfUkVBRChHRU42X0JMSVRURVJfRUNPU0tQRCk7CisJX19nZW42X2ZvcmNlX3dha2VfcHV0KGRldl9wcml2KTsKK30KKwogc3RhdGljIHZvaWQgaXJvbmxha2VfZW5hYmxlX2ZiYyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKQEAgLTEyNjYsNiArMTI4Niw3IEBACiAJCUk5MTVfV1JJVEUoU05CX0RQRkNfQ1RMX1NBLAogCQkJICAgU05CX0NQVV9GRU5DRV9FTkFCTEUgfCBkZXZfcHJpdi0+Y2ZiX2ZlbmNlKTsKIAkJSTkxNV9XUklURShEUEZDX0NQVV9GRU5DRV9PRkZTRVQsIGNydGMtPnkpOworCQlzYW5keWJyaWRnZV9ibGl0X2ZiY191cGRhdGUoZGV2KTsKIAl9CiAKIAlEUk1fREVCVUdfS01TKCJlbmFibGVkIGZiYyBvbiBwbGFuZSAlZFxuIiwgaW50ZWxfY3J0Yy0+cGxhbmUpOwpAQCAtMTYwOSwxOSArMTYzMCwxOSBAQAogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gdG9faW50ZWxfZnJhbWVidWZmZXIob2xkX2ZiKS0+b2JqOwogCiAJCXdhaXRfZXZlbnQoZGV2X3ByaXYtPnBlbmRpbmdfZmxpcF9xdWV1ZSwKKwkJCSAgIGF0b21pY19yZWFkKCZkZXZfcHJpdi0+bW0ud2VkZ2VkKSB8fAogCQkJICAgYXRvbWljX3JlYWQoJm9iai0+cGVuZGluZ19mbGlwKSA9PSAwKTsKIAogCQkvKiBCaWcgSGFtbWVyLCB3ZSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgYW55IHBlbmRpbmcKIAkJICogTUlfV0FJVF9GT1JfRVZFTlQgaW5zaWRlIGEgdXNlciBiYXRjaCBidWZmZXIgb24gdGhlCiAJCSAqIGN1cnJlbnQgc2Nhbm91dCBpcyByZXRpcmVkIGJlZm9yZSB1bnBpbm5pbmcgdGhlIG9sZAogCQkgKiBmcmFtZWJ1ZmZlci4KKwkJICoKKwkJICogVGhpcyBzaG91bGQgb25seSBmYWlsIHVwb24gYSBodW5nIEdQVSwgaW4gd2hpY2ggY2FzZSB3ZQorCQkgKiBjYW4gc2FmZWx5IGNvbnRpbnVlLgogCQkgKi8KIAkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2dwdShvYmosIGZhbHNlKTsKLQkJaWYgKHJldCkgewotCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKHRvX2ludGVsX2ZyYW1lYnVmZmVyKGNydGMtPmZiKS0+b2JqKTsKLQkJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQkJcmV0dXJuIHJldDsKLQkJfQorCQkodm9pZCkgcmV0OwogCX0KIAogCXJldCA9IGludGVsX3BpcGVfc2V0X2Jhc2VfYXRvbWljKGNydGMsIGNydGMtPmZiLCB4LCB5LApAQCAtMjAyNCw2ICsyMDQ1LDMxIEBACiAJCSAgIGF0b21pY19yZWFkKCZvYmotPnBlbmRpbmdfZmxpcCkgPT0gMCk7CiB9CiAKK3N0YXRpYyBib29sIGludGVsX2NydGNfZHJpdmluZ19wY2goc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqbW9kZV9jb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKKwlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKKworCS8qCisJICogSWYgdGhlcmUncyBhIG5vbi1QQ0ggZURQIG9uIHRoaXMgY3J0YywgaXQgbXVzdCBiZSBEUF9BLCBhbmQgdGhhdAorCSAqIG11c3QgYmUgZHJpdmVuIGJ5IGl0cyBvd24gY3J0Yzsgbm8gc2hhcmluZyBpcyBwb3NzaWJsZS4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZtb2RlX2NvbmZpZy0+ZW5jb2Rlcl9saXN0LCBiYXNlLmhlYWQpIHsKKwkJaWYgKGVuY29kZXItPmJhc2UuY3J0YyAhPSBjcnRjKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoIChlbmNvZGVyLT50eXBlKSB7CisJCWNhc2UgSU5URUxfT1VUUFVUX0VEUDoKKwkJCWlmICghaW50ZWxfZW5jb2Rlcl9pc19wY2hfZWRwKCZlbmNvZGVyLT5iYXNlKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQljb250aW51ZTsKKwkJfQorCX0KKworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgdm9pZCBpcm9ubGFrZV9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKQEAgLTIwMzIsNiArMjA3OCw3IEBACiAJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwogCWludCBwbGFuZSA9IGludGVsX2NydGMtPnBsYW5lOwogCXUzMiByZWcsIHRlbXA7CisJYm9vbCBpc19wY2hfcG9ydCA9IGZhbHNlOwogCiAJaWYgKGludGVsX2NydGMtPmFjdGl2ZSkKIAkJcmV0dXJuOwpAQCAtMjA0NSw3ICsyMDkyLDU2IEBACiAJCQlJOTE1X1dSSVRFKFBDSF9MVkRTLCB0ZW1wIHwgTFZEU19QT1JUX0VOKTsKIAl9CiAKLQlpcm9ubGFrZV9mZGlfZW5hYmxlKGNydGMpOworCWlzX3BjaF9wb3J0ID0gaW50ZWxfY3J0Y19kcml2aW5nX3BjaChjcnRjKTsKKworCWlmIChpc19wY2hfcG9ydCkKKwkJaXJvbmxha2VfZmRpX2VuYWJsZShjcnRjKTsKKwllbHNlIHsKKwkJLyogZGlzYWJsZSBDUFUgRkRJIHR4IGFuZCBQQ0ggRkRJIHJ4ICovCisJCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7CisJCXRlbXAgPSBJOTE1X1JFQUQocmVnKTsKKwkJSTkxNV9XUklURShyZWcsIHRlbXAgJiB+RkRJX1RYX0VOQUJMRSk7CisJCVBPU1RJTkdfUkVBRChyZWcpOworCisJCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7CisJCXRlbXAgPSBJOTE1X1JFQUQocmVnKTsKKwkJdGVtcCAmPSB+KDB4NyA8PCAxNik7CisJCXRlbXAgfD0gKEk5MTVfUkVBRChQSVBFQ09ORihwaXBlKSkgJiBQSVBFX0JQQ19NQVNLKSA8PCAxMTsKKwkJSTkxNV9XUklURShyZWcsIHRlbXAgJiB+RkRJX1JYX0VOQUJMRSk7CisKKwkJUE9TVElOR19SRUFEKHJlZyk7CisJCXVkZWxheSgxMDApOworCisJCS8qIElyb25sYWtlIHdvcmthcm91bmQsIGRpc2FibGUgY2xvY2sgcG9pbnRlciBhZnRlciBkb3duaW5nIEZESSAqLworCQlpZiAoSEFTX1BDSF9JQlgoZGV2KSkKKwkJCUk5MTVfV1JJVEUoRkRJX1JYX0NISUNLRU4ocGlwZSksCisJCQkJICAgSTkxNV9SRUFEKEZESV9SWF9DSElDS0VOKHBpcGUpICYKKwkJCQkJICAgICB+RkRJX1JYX1BIQVNFX1NZTkNfUE9JTlRFUl9FTkFCTEUpKTsKKworCQkvKiBzdGlsbCBzZXQgdHJhaW4gcGF0dGVybiAxICovCisJCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7CisJCXRlbXAgPSBJOTE1X1JFQUQocmVnKTsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzE7CisJCUk5MTVfV1JJVEUocmVnLCB0ZW1wKTsKKworCQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOworCQl0ZW1wID0gSTkxNV9SRUFEKHJlZyk7CisJCWlmIChIQVNfUENIX0NQVChkZXYpKSB7CisJCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9QQVRURVJOX01BU0tfQ1BUOworCQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzFfQ1BUOworCQl9IGVsc2UgeworCQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKKwkJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xOworCQl9CisJCS8qIEJQQyBpbiBGREkgcnggaXMgY29uc2lzdGVudCB3aXRoIHRoYXQgaW4gUElQRUNPTkYgKi8KKwkJdGVtcCAmPSB+KDB4MDcgPDwgMTYpOworCQl0ZW1wIHw9IChJOTE1X1JFQUQoUElQRUNPTkYocGlwZSkpICYgUElQRV9CUENfTUFTSykgPDwgMTE7CisJCUk5MTVfV1JJVEUocmVnLCB0ZW1wKTsKKworCQlQT1NUSU5HX1JFQUQocmVnKTsKKwkJdWRlbGF5KDEwMCk7CisJfQogCiAJLyogRW5hYmxlIHBhbmVsIGZpdHRpbmcgZm9yIExWRFMgKi8KIAlpZiAoZGV2X3ByaXYtPnBjaF9wZl9zaXplICYmCkBAIC0yMDc5LDYgKzIxNzUsMTAgQEAKIAkJaW50ZWxfZmx1c2hfZGlzcGxheV9wbGFuZShkZXYsIHBsYW5lKTsKIAl9CiAKKwkvKiBTa2lwIHRoZSBQQ0ggc3R1ZmYgaWYgcG9zc2libGUgKi8KKwlpZiAoIWlzX3BjaF9wb3J0KQorCQlnb3RvIGRvbmU7CisKIAkvKiBGb3IgUENIIG91dHB1dCwgdHJhaW5pbmcgRkRJIGxpbmsgKi8KIAlpZiAoSVNfR0VONihkZXYpKQogCQlnZW42X2ZkaV9saW5rX3RyYWluKGNydGMpOwpAQCAtMjE2Myw3ICsyMjYzLDcgQEAKIAlJOTE1X1dSSVRFKHJlZywgdGVtcCB8IFRSQU5TX0VOQUJMRSk7CiAJaWYgKHdhaXRfZm9yKEk5MTVfUkVBRChyZWcpICYgVFJBTlNfU1RBVEVfRU5BQkxFLCAxMDApKQogCQlEUk1fRVJST1IoImZhaWxlZCB0byBlbmFibGUgdHJhbnNjb2RlciAlZFxuIiwgcGlwZSk7Ci0KK2RvbmU6CiAJaW50ZWxfY3J0Y19sb2FkX2x1dChjcnRjKTsKIAlpbnRlbF91cGRhdGVfZmJjKGRldik7CiAJaW50ZWxfY3J0Y191cGRhdGVfY3Vyc29yKGNydGMsIHRydWUpOwpAQCAtNTUzMCw2ICs1NjMwLDE2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19yZXNldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCisJLyogUmVzZXQgZmxhZ3MgYmFjayB0byB0aGUgJ3Vua25vd24nIHN0YXR1cyBzbyB0aGF0IHRoZXkKKwkgKiB3aWxsIGJlIGNvcnJlY3RseSBzZXQgb24gdGhlIGluaXRpYWwgbW9kZXNldC4KKwkgKi8KKwlpbnRlbF9jcnRjLT5kcG1zX21vZGUgPSAtMTsKK30KKwogc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgaW50ZWxfaGVscGVyX2Z1bmNzID0gewogCS5kcG1zID0gaW50ZWxfY3J0Y19kcG1zLAogCS5tb2RlX2ZpeHVwID0gaW50ZWxfY3J0Y19tb2RlX2ZpeHVwLApAQCAtNTU0MSw2ICs1NjUxLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgaW50ZWxfY3J0Y19mdW5jcyA9IHsKKwkucmVzZXQgPSBpbnRlbF9jcnRjX3Jlc2V0LAogCS5jdXJzb3Jfc2V0ID0gaW50ZWxfY3J0Y19jdXJzb3Jfc2V0LAogCS5jdXJzb3JfbW92ZSA9IGludGVsX2NydGNfY3Vyc29yX21vdmUsCiAJLmdhbW1hX3NldCA9IGludGVsX2NydGNfZ2FtbWFfc2V0LApAQCAtNTYzMSw4ICs1NzQyLDcgQEAKIAlkZXZfcHJpdi0+cGxhbmVfdG9fY3J0Y19tYXBwaW5nW2ludGVsX2NydGMtPnBsYW5lXSA9ICZpbnRlbF9jcnRjLT5iYXNlOwogCWRldl9wcml2LT5waXBlX3RvX2NydGNfbWFwcGluZ1tpbnRlbF9jcnRjLT5waXBlXSA9ICZpbnRlbF9jcnRjLT5iYXNlOwogCi0JaW50ZWxfY3J0Yy0+Y3Vyc29yX2FkZHIgPSAwOwotCWludGVsX2NydGMtPmRwbXNfbW9kZSA9IC0xOworCWludGVsX2NydGNfcmVzZXQoJmludGVsX2NydGMtPmJhc2UpOwogCWludGVsX2NydGMtPmFjdGl2ZSA9IHRydWU7IC8qIGZvcmNlIHRoZSBwaXBlIG9mZiBvbiBzZXR1cF9pbml0X2NvbmZpZyAqLwogCiAJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgewpAQCAtNjI4Niw3ICs2Mzk2LDkgQEAKIAogCQlpZiAoSVNfR0VONShkZXYpKSB7CiAJCQkvKiBSZXF1aXJlZCBmb3IgRkJDICovCi0JCQlkc3BjbGtfZ2F0ZSB8PSBEUEZEVU5JVF9DTE9DS19HQVRFX0RJU0FCTEU7CisJCQlkc3BjbGtfZ2F0ZSB8PSBEUEZDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkJCURQRkNSVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkJCURQRkRVTklUX0NMT0NLX0dBVEVfRElTQUJMRTsKIAkJCS8qIFJlcXVpcmVkIGZvciBDeFNSICovCiAJCQlkc3BjbGtfZ2F0ZSB8PSBEUEFSQlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFOwogCkBAIC02NDI5LDI5ICs2NTQxLDE5IEBACiAJfQogfQogCi12b2lkIGludGVsX2Rpc2FibGVfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBpcm9ubGFrZV90ZWFyZG93bl9yYzYoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCiAJaWYgKGRldl9wcml2LT5yZW5kZXJjdHgpIHsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGRldl9wcml2LT5yZW5kZXJjdHg7Ci0KLQkJSTkxNV9XUklURShDQ0lELCAwKTsKLQkJUE9TVElOR19SRUFEKENDSUQpOwotCi0JCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKKwkJaTkxNV9nZW1fb2JqZWN0X3VucGluKGRldl9wcml2LT5yZW5kZXJjdHgpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmZGV2X3ByaXYtPnJlbmRlcmN0eC0+YmFzZSk7CiAJCWRldl9wcml2LT5yZW5kZXJjdHggPSBOVUxMOwogCX0KIAogCWlmIChkZXZfcHJpdi0+cHdyY3R4KSB7Ci0JCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBkZXZfcHJpdi0+cHdyY3R4OwotCi0JCUk5MTVfV1JJVEUoUFdSQ1RYQSwgMCk7Ci0JCVBPU1RJTkdfUkVBRChQV1JDVFhBKTsKLQotCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CisJCWk5MTVfZ2VtX29iamVjdF91bnBpbihkZXZfcHJpdi0+cHdyY3R4KTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJmRldl9wcml2LT5wd3JjdHgtPmJhc2UpOwogCQlkZXZfcHJpdi0+cHdyY3R4ID0gTlVMTDsKIAl9CiB9CkBAIC02NDYwLDIxICs2NTYyLDM5IEBACiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCS8qIFdha2UgdGhlIEdQVSwgcHJldmVudCBSQzYsIHRoZW4gcmVzdG9yZSBSU1REQllDVEwgKi8KLQlJOTE1X1dSSVRFKFJTVERCWUNUTCwgSTkxNV9SRUFEKFJTVERCWUNUTCkgfCBSQ1hfU1dfRVhJVCk7Ci0Jd2FpdF9mb3IoKChJOTE1X1JFQUQoUlNUREJZQ1RMKSAmIFJTWF9TVEFUVVNfTUFTSykgPT0gUlNYX1NUQVRVU19PTiksCi0JCSAxMCk7Ci0JUE9TVElOR19SRUFEKENDSUQpOwotCUk5MTVfV1JJVEUoUFdSQ1RYQSwgMCk7Ci0JUE9TVElOR19SRUFEKFBXUkNUWEEpOwotCUk5MTVfV1JJVEUoUlNUREJZQ1RMLCBJOTE1X1JFQUQoUlNUREJZQ1RMKSAmIH5SQ1hfU1dfRVhJVCk7Ci0JUE9TVElOR19SRUFEKFJTVERCWUNUTCk7Ci0JaTkxNV9nZW1fb2JqZWN0X3VucGluKGRldl9wcml2LT5yZW5kZXJjdHgpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZkZXZfcHJpdi0+cmVuZGVyY3R4LT5iYXNlKTsKLQlkZXZfcHJpdi0+cmVuZGVyY3R4ID0gTlVMTDsKLQlpOTE1X2dlbV9vYmplY3RfdW5waW4oZGV2X3ByaXYtPnB3cmN0eCk7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJmRldl9wcml2LT5wd3JjdHgtPmJhc2UpOwotCWRldl9wcml2LT5wd3JjdHggPSBOVUxMOworCWlmIChJOTE1X1JFQUQoUFdSQ1RYQSkpIHsKKwkJLyogV2FrZSB0aGUgR1BVLCBwcmV2ZW50IFJDNiwgdGhlbiByZXN0b3JlIFJTVERCWUNUTCAqLworCQlJOTE1X1dSSVRFKFJTVERCWUNUTCwgSTkxNV9SRUFEKFJTVERCWUNUTCkgfCBSQ1hfU1dfRVhJVCk7CisJCXdhaXRfZm9yKCgoSTkxNV9SRUFEKFJTVERCWUNUTCkgJiBSU1hfU1RBVFVTX01BU0spID09IFJTWF9TVEFUVVNfT04pLAorCQkJIDUwKTsKKworCQlJOTE1X1dSSVRFKFBXUkNUWEEsIDApOworCQlQT1NUSU5HX1JFQUQoUFdSQ1RYQSk7CisKKwkJSTkxNV9XUklURShSU1REQllDVEwsIEk5MTVfUkVBRChSU1REQllDVEwpICYgflJDWF9TV19FWElUKTsKKwkJUE9TVElOR19SRUFEKFJTVERCWUNUTCk7CisJfQorCisJaXJvbmxha2VfdGVhcmRvd25fcmM2KGRldik7Cit9CisKK3N0YXRpYyBpbnQgaXJvbmxha2Vfc2V0dXBfcmM2KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+cmVuZGVyY3R4ID09IE5VTEwpCisJCWRldl9wcml2LT5yZW5kZXJjdHggPSBpbnRlbF9hbGxvY19jb250ZXh0X3BhZ2UoZGV2KTsKKwlpZiAoIWRldl9wcml2LT5yZW5kZXJjdHgpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGRldl9wcml2LT5wd3JjdHggPT0gTlVMTCkKKwkJZGV2X3ByaXYtPnB3cmN0eCA9IGludGVsX2FsbG9jX2NvbnRleHRfcGFnZShkZXYpOworCWlmICghZGV2X3ByaXYtPnB3cmN0eCkgeworCQlpcm9ubGFrZV90ZWFyZG93bl9yYzYoZGV2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgaXJvbmxha2VfZW5hYmxlX3JjNihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQpAQCAtNjQ4MiwxNSArNjYwMiwyNiBAQAogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IHJldDsKIAorCS8qIHJjNiBkaXNhYmxlZCBieSBkZWZhdWx0IGR1ZSB0byByZXBlYXRlZCByZXBvcnRzIG9mIGhhbmdpbmcgZHVyaW5nCisJICogYm9vdCBhbmQgcmVzdW1lLgorCSAqLworCWlmICghaTkxNV9lbmFibGVfcmM2KQorCQlyZXR1cm47CisKKwlyZXQgPSBpcm9ubGFrZV9zZXR1cF9yYzYoZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm47CisKIAkvKgogCSAqIEdQVSBjYW4gYXV0b21hdGljYWxseSBwb3dlciBkb3duIHRoZSByZW5kZXIgdW5pdCBpZiBnaXZlbiBhIHBhZ2UKIAkgKiB0byBzYXZlIHN0YXRlLgogCSAqLwogCXJldCA9IEJFR0lOX0xQX1JJTkcoNik7CiAJaWYgKHJldCkgewotCQlpcm9ubGFrZV9kaXNhYmxlX3JjNihkZXYpOworCQlpcm9ubGFrZV90ZWFyZG93bl9yYzYoZGV2KTsKIAkJcmV0dXJuOwogCX0KKwogCU9VVF9SSU5HKE1JX1NVU1BFTkRfRkxVU0ggfCBNSV9TVVNQRU5EX0ZMVVNIX0VOKTsKIAlPVVRfUklORyhNSV9TRVRfQ09OVEVYVCk7CiAJT1VUX1JJTkcoZGV2X3ByaXYtPnJlbmRlcmN0eC0+Z3R0X29mZnNldCB8CkBAIC02NTA3LDYgKzY2MzgsNyBAQAogCUk5MTVfV1JJVEUoUlNUREJZQ1RMLCBJOTE1X1JFQUQoUlNUREJZQ1RMKSAmIH5SQ1hfU1dfRVhJVCk7CiB9CiAKKwogLyogU2V0IHVwIGNoaXAgc3BlY2lmaWMgZGlzcGxheSBmdW5jdGlvbnMgKi8KIHN0YXRpYyB2b2lkIGludGVsX2luaXRfZGlzcGxheShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewpAQCAtNjc0OSwyMSArNjg4MSw5IEBACiAJaWYgKElTX0dFTjYoZGV2KSkKIAkJZ2VuNl9lbmFibGVfcnBzKGRldl9wcml2KTsKIAotCWlmIChJU19JUk9OTEFLRV9NKGRldikpIHsKLQkJZGV2X3ByaXYtPnJlbmRlcmN0eCA9IGludGVsX2FsbG9jX2NvbnRleHRfcGFnZShkZXYpOwotCQlpZiAoIWRldl9wcml2LT5yZW5kZXJjdHgpCi0JCQlnb3RvIHNraXBfcmM2OwotCQlkZXZfcHJpdi0+cHdyY3R4ID0gaW50ZWxfYWxsb2NfY29udGV4dF9wYWdlKGRldik7Ci0JCWlmICghZGV2X3ByaXYtPnB3cmN0eCkgewotCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKGRldl9wcml2LT5yZW5kZXJjdHgpOwotCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJmRldl9wcml2LT5yZW5kZXJjdHgtPmJhc2UpOwotCQkJZGV2X3ByaXYtPnJlbmRlcmN0eCA9IE5VTEw7Ci0JCQlnb3RvIHNraXBfcmM2OwotCQl9CisJaWYgKElTX0lST05MQUtFX00oZGV2KSkKIAkJaXJvbmxha2VfZW5hYmxlX3JjNihkZXYpOwotCX0KIAotc2tpcF9yYzY6CiAJSU5JVF9XT1JLKCZkZXZfcHJpdi0+aWRsZV93b3JrLCBpbnRlbF9pZGxlX3VwZGF0ZSk7CiAJc2V0dXBfdGltZXIoJmRldl9wcml2LT5pZGxlX3RpbWVyLCBpbnRlbF9ncHVfaWRsZV90aW1lciwKIAkJICAgICh1bnNpZ25lZCBsb25nKWRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwppbmRleCAxZjQyNDJiLi41MWNiNGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKQEAgLTE2MzksNiArMTYzOSwyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgYm9vbAoraW50ZWxfZHBfZGV0ZWN0X2F1ZGlvKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGludGVsX2F0dGFjaGVkX2RwKGNvbm5lY3Rvcik7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJYm9vbCBoYXNfYXVkaW8gPSBmYWxzZTsKKworCWVkaWQgPSBkcm1fZ2V0X2VkaWQoY29ubmVjdG9yLCAmaW50ZWxfZHAtPmFkYXB0ZXIpOworCWlmIChlZGlkKSB7CisJCWhhc19hdWRpbyA9IGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhlZGlkKTsKKworCQljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5yYXdfZWRpZCA9IE5VTEw7CisJCWtmcmVlKGVkaWQpOworCX0KKworCXJldHVybiBoYXNfYXVkaW87Cit9CisKIHN0YXRpYyBpbnQKIGludGVsX2RwX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkgICAgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKQEAgLTE2NTIsMTcgKzE2NzAsMjMgQEAKIAkJcmV0dXJuIHJldDsKIAogCWlmIChwcm9wZXJ0eSA9PSBpbnRlbF9kcC0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpIHsKLQkJaWYgKHZhbCA9PSBpbnRlbF9kcC0+Zm9yY2VfYXVkaW8pCisJCWludCBpID0gdmFsOworCQlib29sIGhhc19hdWRpbzsKKworCQlpZiAoaSA9PSBpbnRlbF9kcC0+Zm9yY2VfYXVkaW8pCiAJCQlyZXR1cm4gMDsKIAotCQlpbnRlbF9kcC0+Zm9yY2VfYXVkaW8gPSB2YWw7CisJCWludGVsX2RwLT5mb3JjZV9hdWRpbyA9IGk7CiAKLQkJaWYgKHZhbCA+IDAgJiYgaW50ZWxfZHAtPmhhc19hdWRpbykKLQkJCXJldHVybiAwOwotCQlpZiAodmFsIDwgMCAmJiAhaW50ZWxfZHAtPmhhc19hdWRpbykKKwkJaWYgKGkgPT0gMCkKKwkJCWhhc19hdWRpbyA9IGludGVsX2RwX2RldGVjdF9hdWRpbyhjb25uZWN0b3IpOworCQllbHNlCisJCQloYXNfYXVkaW8gPSBpID4gMDsKKworCQlpZiAoaGFzX2F1ZGlvID09IGludGVsX2RwLT5oYXNfYXVkaW8pCiAJCQlyZXR1cm4gMDsKIAotCQlpbnRlbF9kcC0+aGFzX2F1ZGlvID0gdmFsID4gMDsKKwkJaW50ZWxfZHAtPmhhc19hdWRpbyA9IGhhc19hdWRpbzsKIAkJZ290byBkb25lOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRleCA3NGRiMjU1Li4yYzQzMTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaApAQCAtMjk4LDcgKzI5OCw2IEBACiBleHRlcm4gdm9pZCBpbnRlbF9jcnRjX2ZiX2dhbW1hX2dldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLCB1MTYgKmdyZWVuLAogCQkJCSAgICB1MTYgKmJsdWUsIGludCByZWdubyk7CiBleHRlcm4gdm9pZCBpbnRlbF9lbmFibGVfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgaW50ZWxfZGlzYWJsZV9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBpcm9ubGFrZV9lbmFibGVfZHJwcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGlyb25sYWtlX2Rpc2FibGVfZHJwcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGdlbjZfZW5hYmxlX3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCmluZGV4IDBkMDI3M2UuLmM2MzVjOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKQEAgLTI1MSw2ICsyNTEsMjcgQEAKIAkJCQkgICAmZGV2X3ByaXYtPmdtYnVzW2ludGVsX2hkbWktPmRkY19idXNdLmFkYXB0ZXIpOwogfQogCitzdGF0aWMgYm9vbAoraW50ZWxfaGRtaV9kZXRlY3RfYXVkaW8oc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfaGRtaSAqaW50ZWxfaGRtaSA9IGludGVsX2F0dGFjaGVkX2hkbWkoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjb25uZWN0b3ItPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJYm9vbCBoYXNfYXVkaW8gPSBmYWxzZTsKKworCWVkaWQgPSBkcm1fZ2V0X2VkaWQoY29ubmVjdG9yLAorCQkJICAgICZkZXZfcHJpdi0+Z21idXNbaW50ZWxfaGRtaS0+ZGRjX2J1c10uYWRhcHRlcik7CisJaWYgKGVkaWQpIHsKKwkJaWYgKGVkaWQtPmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCkKKwkJCWhhc19hdWRpbyA9IGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhlZGlkKTsKKworCQljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5yYXdfZWRpZCA9IE5VTEw7CisJCWtmcmVlKGVkaWQpOworCX0KKworCXJldHVybiBoYXNfYXVkaW87Cit9CisKIHN0YXRpYyBpbnQKIGludGVsX2hkbWlfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCSAgICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LApAQCAtMjY0LDE3ICsyODUsMjMgQEAKIAkJcmV0dXJuIHJldDsKIAogCWlmIChwcm9wZXJ0eSA9PSBpbnRlbF9oZG1pLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewotCQlpZiAodmFsID09IGludGVsX2hkbWktPmZvcmNlX2F1ZGlvKQorCQlpbnQgaSA9IHZhbDsKKwkJYm9vbCBoYXNfYXVkaW87CisKKwkJaWYgKGkgPT0gaW50ZWxfaGRtaS0+Zm9yY2VfYXVkaW8pCiAJCQlyZXR1cm4gMDsKIAotCQlpbnRlbF9oZG1pLT5mb3JjZV9hdWRpbyA9IHZhbDsKKwkJaW50ZWxfaGRtaS0+Zm9yY2VfYXVkaW8gPSBpOwogCi0JCWlmICh2YWwgPiAwICYmIGludGVsX2hkbWktPmhhc19hdWRpbykKLQkJCXJldHVybiAwOwotCQlpZiAodmFsIDwgMCAmJiAhaW50ZWxfaGRtaS0+aGFzX2F1ZGlvKQorCQlpZiAoaSA9PSAwKQorCQkJaGFzX2F1ZGlvID0gaW50ZWxfaGRtaV9kZXRlY3RfYXVkaW8oY29ubmVjdG9yKTsKKwkJZWxzZQorCQkJaGFzX2F1ZGlvID0gaSA+IDA7CisKKwkJaWYgKGhhc19hdWRpbyA9PSBpbnRlbF9oZG1pLT5oYXNfYXVkaW8pCiAJCQlyZXR1cm4gMDsKIAotCQlpbnRlbF9oZG1pLT5oYXNfYXVkaW8gPSB2YWwgPiAwOworCQlpbnRlbF9oZG1pLT5oYXNfYXVkaW8gPSBoYXNfYXVkaW87CiAJCWdvdG8gZG9uZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwppbmRleCBhY2U4ZDVkLi5iY2RiYTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCkBAIC0yNjEsMTIgKzI2MSw2IEBACiAJCXJldHVybiB0cnVlOwogCX0KIAotCS8qIE1ha2Ugc3VyZSBwcmUtOTY1cyBzZXQgZGl0aGVyIGNvcnJlY3RseSAqLwotCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA8IDQpIHsKLQkJaWYgKGRldl9wcml2LT5sdmRzX2RpdGhlcikKLQkJCXBmaXRfY29udHJvbCB8PSBQQU5FTF84VE82X0RJVEhFUl9FTkFCTEU7Ci0JfQotCiAJLyogTmF0aXZlIG1vZGVzIGRvbid0IG5lZWQgZml0dGluZyAqLwogCWlmIChhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSA9PSBtb2RlLT5oZGlzcGxheSAmJgogCSAgICBhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSA9PSBtb2RlLT52ZGlzcGxheSkKQEAgLTM3NCwxMCArMzY4LDE2IEBACiAJfQogCiBvdXQ6CisJLyogSWYgbm90IGVuYWJsaW5nIHNjYWxpbmcsIGJlIGNvbnNpc3RlbnQgYW5kIGFsd2F5cyB1c2UgMC4gKi8KIAlpZiAoKHBmaXRfY29udHJvbCAmIFBGSVRfRU5BQkxFKSA9PSAwKSB7CiAJCXBmaXRfY29udHJvbCA9IDA7CiAJCXBmaXRfcGdtX3JhdGlvcyA9IDA7CiAJfQorCisJLyogTWFrZSBzdXJlIHByZS05NjUgc2V0IGRpdGhlciBjb3JyZWN0bHkgKi8KKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA0ICYmIGRldl9wcml2LT5sdmRzX2RpdGhlcikKKwkJcGZpdF9jb250cm9sIHw9IFBBTkVMXzhUTzZfRElUSEVSX0VOQUJMRTsKKwogCWlmIChwZml0X2NvbnRyb2wgIT0gaW50ZWxfbHZkcy0+cGZpdF9jb250cm9sIHx8CiAJICAgIHBmaXRfcGdtX3JhdGlvcyAhPSBpbnRlbF9sdmRzLT5wZml0X3BnbV9yYXRpb3MpIHsKIAkJaW50ZWxfbHZkcy0+cGZpdF9jb250cm9sID0gcGZpdF9jb250cm9sOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ByZWdpb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX29wcmVnaW9uLmMKaW5kZXggZjI5NWE3YS4uNjRmZDY0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ByZWdpb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vcHJlZ2lvbi5jCkBAIC0yNiw2ICsyNiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpX2lvLmg+CiAjaW5jbHVkZSA8YWNwaS92aWRlby5oPgogCiAjaW5jbHVkZSAiZHJtUC5oIgpAQCAtNDc2LDcgKzQ3Nyw3IEBACiAJCXJldHVybiAtRU5PVFNVUFA7CiAJfQogCi0JYmFzZSA9IGlvcmVtYXAoYXNscywgT1BSRUdJT05fU0laRSk7CisJYmFzZSA9IGFjcGlfb3NfaW9yZW1hcChhc2xzLCBPUFJFR0lPTl9TSVpFKTsKIAlpZiAoIWJhc2UpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYwppbmRleCBjNjU5OTJkLi5kODYwYWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BhbmVsLmMKQEAgLTMwLDggKzMwLDYgQEAKIAogI2luY2x1ZGUgImludGVsX2Rydi5oIgogCi0jZGVmaW5lIFBDSV9MQlBDIDB4ZjQgLyogbGVnYWN5L2NvbWJpbmF0aW9uIGJhY2tsaWdodCBtb2RlcyAqLwotCiB2b2lkCiBpbnRlbF9maXhlZF9wYW5lbF9tb2RlKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpmaXhlZF9tb2RlLAogCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCkBAIC0xMTIsMTkgKzExMCw2IEBACiAJZGV2X3ByaXYtPnBjaF9wZl9zaXplID0gKHdpZHRoIDw8IDE2KSB8IGhlaWdodDsKIH0KIAotc3RhdGljIGludCBpc19iYWNrbGlnaHRfY29tYmluYXRpb25fbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNCkKLQkJcmV0dXJuIEk5MTVfUkVBRChCTENfUFdNX0NUTDIpICYgQkxNX0NPTUJJTkFUSU9OX01PREU7Ci0KLQlpZiAoSVNfR0VOMihkZXYpKQotCQlyZXR1cm4gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKSAmIEJMTV9MRUdBQ1lfTU9ERTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdTMyIGk5MTVfcmVhZF9ibGNfcHdtX2N0bChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJdTMyIHZhbDsKQEAgLTE4MSw5ICsxNjYsNiBAQAogCQkJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgNCkKIAkJCQltYXggJj0gfjE7CiAJCX0KLQotCQlpZiAoaXNfYmFja2xpZ2h0X2NvbWJpbmF0aW9uX21vZGUoZGV2KSkKLQkJCW1heCAqPSAweGZmOwogCX0KIAogCURSTV9ERUJVR19EUklWRVIoIm1heCBiYWNrbGlnaHQgUFdNID0gJWRcbiIsIG1heCk7CkBAIC0yMDEsMTUgKzE4Myw2IEBACiAJCXZhbCA9IEk5MTVfUkVBRChCTENfUFdNX0NUTCkgJiBCQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLOwogCQlpZiAoSVNfUElORVZJRVcoZGV2KSkKIAkJCXZhbCA+Pj0gMTsKLQotCQlpZiAoaXNfYmFja2xpZ2h0X2NvbWJpbmF0aW9uX21vZGUoZGV2KSl7Ci0JCQl1OCBsYnBjOwotCi0JCQl2YWwgJj0gfjE7Ci0JCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYtPnBkZXYsIFBDSV9MQlBDLCAmbGJwYyk7Ci0JCQl2YWwgKj0gbGJwYzsKLQkJCXZhbCA+Pj0gMTsKLQkJfQogCX0KIAogCURSTV9ERUJVR19EUklWRVIoImdldCBiYWNrbGlnaHQgUFdNID0gJWRcbiIsIHZhbCk7CkBAIC0yMzIsMTYgKzIwNSw2IEBACiAKIAlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlyZXR1cm4gaW50ZWxfcGNoX3BhbmVsX3NldF9iYWNrbGlnaHQoZGV2LCBsZXZlbCk7Ci0KLQlpZiAoaXNfYmFja2xpZ2h0X2NvbWJpbmF0aW9uX21vZGUoZGV2KSl7Ci0JCXUzMiBtYXggPSBpbnRlbF9wYW5lbF9nZXRfbWF4X2JhY2tsaWdodChkZXYpOwotCQl1OCBscGJjOwotCi0JCWxwYmMgPSBsZXZlbCAqIDB4ZmUgLyBtYXggKyAxOwotCQlsZXZlbCAvPSBscGJjOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LT5wZGV2LCBQQ0lfTEJQQywgbHBiYyk7Ci0JfQotCiAJdG1wID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKTsKIAlpZiAoSVNfUElORVZJRVcoZGV2KSkgewogCQl0bXAgJj0gfihCQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLIC0gMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKaW5kZXggMDNlMzM3MC4uNDQ1ZjI3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwpAQCAtMzQsNiArMzQsMTQgQEAKICNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCiAjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCiAKK3N0YXRpYyBpbmxpbmUgaW50IHJpbmdfc3BhY2Uoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQoreworCWludCBzcGFjZSA9IChyaW5nLT5oZWFkICYgSEVBRF9BRERSKSAtIChyaW5nLT50YWlsICsgOCk7CisJaWYgKHNwYWNlIDwgMCkKKwkJc3BhY2UgKz0gcmluZy0+c2l6ZTsKKwlyZXR1cm4gc3BhY2U7Cit9CisKIHN0YXRpYyB1MzIgaTkxNV9nZW1fZ2V0X3NlcW5vKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0yMDQsMTEgKzIxMiw5IEBACiAJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKHJpbmctPmRldiwgRFJJVkVSX01PREVTRVQpKQogCQlpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQocmluZy0+ZGV2KTsKIAllbHNlIHsKLQkJcmluZy0+aGVhZCA9IEk5MTVfUkVBRF9IRUFEKHJpbmcpICYgSEVBRF9BRERSOworCQlyaW5nLT5oZWFkID0gSTkxNV9SRUFEX0hFQUQocmluZyk7CiAJCXJpbmctPnRhaWwgPSBJOTE1X1JFQURfVEFJTChyaW5nKSAmIFRBSUxfQUREUjsKLQkJcmluZy0+c3BhY2UgPSByaW5nLT5oZWFkIC0gKHJpbmctPnRhaWwgKyA4KTsKLQkJaWYgKHJpbmctPnNwYWNlIDwgMCkKLQkJCXJpbmctPnNwYWNlICs9IHJpbmctPnNpemU7CisJCXJpbmctPnNwYWNlID0gcmluZ19zcGFjZShyaW5nKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTkyMSw3ICs5MjcsNyBAQAogCX0KIAogCXJpbmctPnRhaWwgPSAwOwotCXJpbmctPnNwYWNlID0gcmluZy0+aGVhZCAtIDg7CisJcmluZy0+c3BhY2UgPSByaW5nX3NwYWNlKHJpbmcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MzMsMjAgKzkzOSwyMiBAQAogCXVuc2lnbmVkIGxvbmcgZW5kOwogCXUzMiBoZWFkOwogCisJLyogSWYgdGhlIHJlcG9ydGVkIGhlYWQgcG9zaXRpb24gaGFzIHdyYXBwZWQgb3IgaGFzbid0IGFkdmFuY2VkLAorCSAqIGZhbGxiYWNrIHRvIHRoZSBzbG93IGFuZCBhY2N1cmF0ZSBwYXRoLgorCSAqLworCWhlYWQgPSBpbnRlbF9yZWFkX3N0YXR1c19wYWdlKHJpbmcsIDQpOworCWlmIChoZWFkID4gcmluZy0+aGVhZCkgeworCQlyaW5nLT5oZWFkID0gaGVhZDsKKwkJcmluZy0+c3BhY2UgPSByaW5nX3NwYWNlKHJpbmcpOworCQlpZiAocmluZy0+c3BhY2UgPj0gbikKKwkJCXJldHVybiAwOworCX0KKwogCXRyYWNlX2k5MTVfcmluZ193YWl0X2JlZ2luIChkZXYpOwogCWVuZCA9IGppZmZpZXMgKyAzICogSFo7CiAJZG8gewotCQkvKiBJZiB0aGUgcmVwb3J0ZWQgaGVhZCBwb3NpdGlvbiBoYXMgd3JhcHBlZCBvciBoYXNuJ3QgYWR2YW5jZWQsCi0JCSAqIGZhbGxiYWNrIHRvIHRoZSBzbG93IGFuZCBhY2N1cmF0ZSBwYXRoLgotCQkgKi8KLQkJaGVhZCA9IGludGVsX3JlYWRfc3RhdHVzX3BhZ2UocmluZywgNCk7Ci0JCWlmIChoZWFkIDwgcmluZy0+YWN0dWFsX2hlYWQpCi0JCQloZWFkID0gSTkxNV9SRUFEX0hFQUQocmluZyk7Ci0JCXJpbmctPmFjdHVhbF9oZWFkID0gaGVhZDsKLQkJcmluZy0+aGVhZCA9IGhlYWQgJiBIRUFEX0FERFI7Ci0JCXJpbmctPnNwYWNlID0gcmluZy0+aGVhZCAtIChyaW5nLT50YWlsICsgOCk7Ci0JCWlmIChyaW5nLT5zcGFjZSA8IDApCi0JCQlyaW5nLT5zcGFjZSArPSByaW5nLT5zaXplOworCQlyaW5nLT5oZWFkID0gSTkxNV9SRUFEX0hFQUQocmluZyk7CisJCXJpbmctPnNwYWNlID0gcmluZ19zcGFjZShyaW5nKTsKIAkJaWYgKHJpbmctPnNwYWNlID49IG4pIHsKIAkJCXRyYWNlX2k5MTVfcmluZ193YWl0X2VuZChkZXYpOwogCQkJcmV0dXJuIDA7CkBAIC0xMDUxLDIyICsxMDU5LDI1IEBACiB9CiAKIHN0YXRpYyBpbnQgZ2VuNl9yaW5nX2ZsdXNoKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKLQkJCSAgIHUzMiBpbnZhbGlkYXRlX2RvbWFpbnMsCi0JCQkgICB1MzIgZmx1c2hfZG9tYWlucykKKwkJCSAgIHUzMiBpbnZhbGlkYXRlLCB1MzIgZmx1c2gpCiB7CisJdWludDMyX3QgY21kOwogCWludCByZXQ7CiAKLQlpZiAoKGZsdXNoX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fUkVOREVSKSA9PSAwKQorCWlmICgoKGludmFsaWRhdGUgfCBmbHVzaCkgJiBJOTE1X0dFTV9HUFVfRE9NQUlOUykgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfRkxVU0hfRFcpOworCWNtZCA9IE1JX0ZMVVNIX0RXOworCWlmIChpbnZhbGlkYXRlICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpCisJCWNtZCB8PSBNSV9JTlZBTElEQVRFX1RMQiB8IE1JX0lOVkFMSURBVEVfQlNEOworCWludGVsX3JpbmdfZW1pdChyaW5nLCBjbWQpOwogCWludGVsX3JpbmdfZW1pdChyaW5nLCAwKTsKIAlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7Ci0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOworCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKIAlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMjIyLDIyICsxMjMzLDI1IEBACiB9CiAKIHN0YXRpYyBpbnQgYmx0X3JpbmdfZmx1c2goc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLAotCQkJICAgdTMyIGludmFsaWRhdGVfZG9tYWlucywKLQkJCSAgIHUzMiBmbHVzaF9kb21haW5zKQorCQkJICB1MzIgaW52YWxpZGF0ZSwgdTMyIGZsdXNoKQogeworCXVpbnQzMl90IGNtZDsKIAlpbnQgcmV0OwogCi0JaWYgKChmbHVzaF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUikgPT0gMCkKKwlpZiAoKChpbnZhbGlkYXRlIHwgZmx1c2gpICYgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUikgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSBibHRfcmluZ19iZWdpbihyaW5nLCA0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX0ZMVVNIX0RXKTsKKwljbWQgPSBNSV9GTFVTSF9EVzsKKwlpZiAoaW52YWxpZGF0ZSAmIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIpCisJCWNtZCB8PSBNSV9JTlZBTElEQVRFX1RMQjsKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgY21kKTsKIAlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7CiAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOwotCWludGVsX3JpbmdfZW1pdChyaW5nLCAwKTsKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfTk9PUCk7CiAJaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwogCXJldHVybiAwOwogfQpAQCAtMTI5MSw2ICsxMzA1LDQ4IEBACiAJcmV0dXJuIGludGVsX2luaXRfcmluZ19idWZmZXIoZGV2LCByaW5nKTsKIH0KIAoraW50IGludGVsX3JlbmRlcl9yaW5nX2luaXRfZHJpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHU2NCBzdGFydCwgdTMyIHNpemUpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nID0gJmRldl9wcml2LT5yaW5nW1JDU107CisKKwkqcmluZyA9IHJlbmRlcl9yaW5nOworCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA2KSB7CisJCXJpbmctPmFkZF9yZXF1ZXN0ID0gZ2VuNl9hZGRfcmVxdWVzdDsKKwkJcmluZy0+aXJxX2dldCA9IGdlbjZfcmVuZGVyX3JpbmdfZ2V0X2lycTsKKwkJcmluZy0+aXJxX3B1dCA9IGdlbjZfcmVuZGVyX3JpbmdfcHV0X2lycTsKKwl9IGVsc2UgaWYgKElTX0dFTjUoZGV2KSkgeworCQlyaW5nLT5hZGRfcmVxdWVzdCA9IHBjX3JlbmRlcl9hZGRfcmVxdWVzdDsKKwkJcmluZy0+Z2V0X3NlcW5vID0gcGNfcmVuZGVyX2dldF9zZXFubzsKKwl9CisKKwlyaW5nLT5kZXYgPSBkZXY7CisJSU5JVF9MSVNUX0hFQUQoJnJpbmctPmFjdGl2ZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcmluZy0+cmVxdWVzdF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcmluZy0+Z3B1X3dyaXRlX2xpc3QpOworCisJcmluZy0+c2l6ZSA9IHNpemU7CisJcmluZy0+ZWZmZWN0aXZlX3NpemUgPSByaW5nLT5zaXplOworCWlmIChJU19JODMwKHJpbmctPmRldikpCisJCXJpbmctPmVmZmVjdGl2ZV9zaXplIC09IDEyODsKKworCXJpbmctPm1hcC5vZmZzZXQgPSBzdGFydDsKKwlyaW5nLT5tYXAuc2l6ZSA9IHNpemU7CisJcmluZy0+bWFwLnR5cGUgPSAwOworCXJpbmctPm1hcC5mbGFncyA9IDA7CisJcmluZy0+bWFwLm10cnIgPSAwOworCisJZHJtX2NvcmVfaW9yZW1hcF93YygmcmluZy0+bWFwLCBkZXYpOworCWlmIChyaW5nLT5tYXAuaGFuZGxlID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJjYW4gbm90IGlvcmVtYXAgdmlydHVhbCBhZGRyZXNzIGZvciIKKwkJCSAgIiByaW5nIGJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJpbmctPnZpcnR1YWxfc3RhcnQgPSAodm9pZCBfX2ZvcmNlIF9faW9tZW0gKilyaW5nLT5tYXAuaGFuZGxlOworCXJldHVybiAwOworfQorCiBpbnQgaW50ZWxfaW5pdF9ic2RfcmluZ19idWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAppbmRleCBiZTkwODdlLi42ZDZmZGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCkBAIC00Nyw3ICs0Nyw2IEBACiAJc3RydWN0CQlkcm1fZGV2aWNlICpkZXY7CiAJc3RydWN0CQlkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAKLQl1MzIJCWFjdHVhbF9oZWFkOwogCXUzMgkJaGVhZDsKIAl1MzIJCXRhaWw7CiAJaW50CQlzcGFjZTsKQEAgLTE2Nyw0ICsxNjYsNyBAQAogdTMyIGludGVsX3JpbmdfZ2V0X2FjdGl2ZV9oZWFkKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZyk7CiB2b2lkIGludGVsX3Jpbmdfc2V0dXBfc3RhdHVzX3BhZ2Uoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKTsKIAorLyogRFJJIHdhcnRzICovCitpbnQgaW50ZWxfcmVuZGVyX3JpbmdfaW5pdF9kcmkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTY0IHN0YXJ0LCB1MzIgc2l6ZSk7CisKICNlbmRpZiAvKiBfSU5URUxfUklOR0JVRkZFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCmluZGV4IDQ1Y2QzNzYuLjdjNTBjZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBTRFZPX1RWX01BU0spCiAKICNkZWZpbmUgSVNfVFYoYykJKGMtPm91dHB1dF9mbGFnICYgU0RWT19UVl9NQVNLKQorI2RlZmluZSBJU19UTURTKGMpCShjLT5vdXRwdXRfZmxhZyAmIFNEVk9fVE1EU19NQVNLKQogI2RlZmluZSBJU19MVkRTKGMpCShjLT5vdXRwdXRfZmxhZyAmIFNEVk9fTFZEU19NQVNLKQogI2RlZmluZSBJU19UVl9PUl9MVkRTKGMpIChjLT5vdXRwdXRfZmxhZyAmIChTRFZPX1RWX01BU0sgfCBTRFZPX0xWRFNfTUFTSykpCiAKQEAgLTQ3MywyMCArNDc0LDYgQEAKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCWkgPSAzOwotCXdoaWxlIChzdGF0dXMgPT0gU0RWT19DTURfU1RBVFVTX1BFTkRJTkcgJiYgaS0tKSB7Ci0JCWlmICghaW50ZWxfc2R2b19yZWFkX2J5dGUoaW50ZWxfc2R2bywKLQkJCQkJICBTRFZPX0kyQ19DTURfU1RBVFVTLAotCQkJCQkgICZzdGF0dXMpKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoc3RhdHVzICE9IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTKSB7Ci0JCURSTV9ERUJVR19LTVMoImNvbW1hbmQgcmV0dXJucyByZXNwb25zZSAlcyBbJWRdXG4iLAotCQkJICAgICAgc3RhdHVzIDw9IFNEVk9fQ01EX1NUQVRVU19TQ0FMSU5HX05PVF9TVVBQID8gY21kX3N0YXR1c19uYW1lc1tzdGF0dXNdIDogIj8/PyIsCi0JCQkgICAgICBzdGF0dXMpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ5Nyw2ICs0ODQsOCBAQAogCXU4IHN0YXR1czsKIAlpbnQgaTsKIAorCURSTV9ERUJVR19LTVMoIiVzOiBSOiAiLCBTRFZPX05BTUUoaW50ZWxfc2R2bykpOworCiAJLyoKIAkgKiBUaGUgZG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBhbGwgY29tbWFuZHMgd2lsbCBiZQogCSAqIHByb2Nlc3NlZCB3aXRoaW4gMTXCtXMsIGFuZCB0aGF0IHdlIG5lZWQgb25seSBwb2xsCkBAIC01MDUsMTQgKzQ5NCwxOSBAQAogCSAqCiAJICogQ2hlY2sgNSB0aW1lcyBpbiBjYXNlIHRoZSBoYXJkd2FyZSBmYWlsZWQgdG8gcmVhZCB0aGUgZG9jcy4KIAkgKi8KLQlkbyB7CisJaWYgKCFpbnRlbF9zZHZvX3JlYWRfYnl0ZShpbnRlbF9zZHZvLAorCQkJCSAgU0RWT19JMkNfQ01EX1NUQVRVUywKKwkJCQkgICZzdGF0dXMpKQorCQlnb3RvIGxvZ19mYWlsOworCisJd2hpbGUgKHN0YXR1cyA9PSBTRFZPX0NNRF9TVEFUVVNfUEVORElORyAmJiByZXRyeS0tKSB7CisJCXVkZWxheSgxNSk7CiAJCWlmICghaW50ZWxfc2R2b19yZWFkX2J5dGUoaW50ZWxfc2R2bywKIAkJCQkJICBTRFZPX0kyQ19DTURfU1RBVFVTLAogCQkJCQkgICZzdGF0dXMpKQotCQkJcmV0dXJuIGZhbHNlOwotCX0gd2hpbGUgKHN0YXR1cyA9PSBTRFZPX0NNRF9TVEFUVVNfUEVORElORyAmJiAtLXJldHJ5KTsKKwkJCWdvdG8gbG9nX2ZhaWw7CisJfQogCi0JRFJNX0RFQlVHX0tNUygiJXM6IFI6ICIsIFNEVk9fTkFNRShpbnRlbF9zZHZvKSk7CiAJaWYgKHN0YXR1cyA8PSBTRFZPX0NNRF9TVEFUVVNfU0NBTElOR19OT1RfU1VQUCkKIAkJRFJNX0xPR19LTVMoIiglcykiLCBjbWRfc3RhdHVzX25hbWVzW3N0YXR1c10pOwogCWVsc2UKQEAgLTUzMyw3ICs1MjcsNyBAQAogCXJldHVybiB0cnVlOwogCiBsb2dfZmFpbDoKLQlEUk1fTE9HX0tNUygiXG4iKTsKKwlEUk1fTE9HX0tNUygiLi4uIGZhaWxlZFxuIik7CiAJcmV0dXJuIGZhbHNlOwogfQogCkBAIC01NTAsNiArNTQ0LDcgQEAKIHN0YXRpYyBib29sIGludGVsX3Nkdm9fc2V0X2NvbnRyb2xfYnVzX3N3aXRjaChzdHJ1Y3QgaW50ZWxfc2R2byAqaW50ZWxfc2R2bywKIAkJCQkJICAgICAgdTggZGRjX2J1cykKIHsKKwkvKiBUaGlzIG11c3QgYmUgdGhlIGltbWVkaWF0ZWx5IHByZWNlZGluZyB3cml0ZSBiZWZvcmUgdGhlIGkyYyB4ZmVyICovCiAJcmV0dXJuIGludGVsX3Nkdm9fd3JpdGVfY21kKGludGVsX3Nkdm8sCiAJCQkJICAgIFNEVk9fQ01EX1NFVF9DT05UUk9MX0JVU19TV0lUQ0gsCiAJCQkJICAgICZkZGNfYnVzLCAxKTsKQEAgLTU1Nyw3ICs1NTIsMTAgQEAKIAogc3RhdGljIGJvb2wgaW50ZWxfc2R2b19zZXRfdmFsdWUoc3RydWN0IGludGVsX3Nkdm8gKmludGVsX3Nkdm8sIHU4IGNtZCwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKLQlyZXR1cm4gaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfc2R2bywgY21kLCBkYXRhLCBsZW4pOworCWlmICghaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfc2R2bywgY21kLCBkYXRhLCBsZW4pKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gaW50ZWxfc2R2b19yZWFkX3Jlc3BvbnNlKGludGVsX3Nkdm8sIE5VTEwsIDApOwogfQogCiBzdGF0aWMgYm9vbApAQCAtODU5LDE4ICs4NTcsMjEgQEAKIAogCWludGVsX2RpcF9pbmZvZnJhbWVfY3N1bSgmYXZpX2lmKTsKIAotCWlmICghaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfc2R2bywgU0RWT19DTURfU0VUX0hCVUZfSU5ERVgsCisJaWYgKCFpbnRlbF9zZHZvX3NldF92YWx1ZShpbnRlbF9zZHZvLAorCQkJCSAgU0RWT19DTURfU0VUX0hCVUZfSU5ERVgsCiAJCQkJICBzZXRfYnVmX2luZGV4LCAyKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJZm9yIChpID0gMDsgaSA8IHNpemVvZihhdmlfaWYpOyBpICs9IDgpIHsKLQkJaWYgKCFpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9zZHZvLCBTRFZPX0NNRF9TRVRfSEJVRl9EQVRBLAorCQlpZiAoIWludGVsX3Nkdm9fc2V0X3ZhbHVlKGludGVsX3Nkdm8sCisJCQkJCSAgU0RWT19DTURfU0VUX0hCVUZfREFUQSwKIAkJCQkJICBkYXRhLCA4KSkKIAkJCXJldHVybiBmYWxzZTsKIAkJZGF0YSsrOwogCX0KIAotCXJldHVybiBpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9zZHZvLCBTRFZPX0NNRF9TRVRfSEJVRl9UWFJBVEUsCisJcmV0dXJuIGludGVsX3Nkdm9fc2V0X3ZhbHVlKGludGVsX3Nkdm8sCisJCQkJICAgIFNEVk9fQ01EX1NFVF9IQlVGX1RYUkFURSwKIAkJCQkgICAgJnR4X3JhdGUsIDEpOwogfQogCkBAIC0xMzU5LDcgKzEzNjAsOCBAQAogCQkJCWludGVsX3Nkdm8tPmhhc19oZG1pX21vbml0b3IgPSBkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihlZGlkKTsKIAkJCQlpbnRlbF9zZHZvLT5oYXNfaGRtaV9hdWRpbyA9IGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhlZGlkKTsKIAkJCX0KLQkJfQorCQl9IGVsc2UKKwkJCXN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwogCQljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5yYXdfZWRpZCA9IE5VTEw7CiAJCWtmcmVlKGVkaWQpOwogCX0KQEAgLTE0MDcsMTAgKzE0MDksMjUgQEAKIAogCWlmICgoaW50ZWxfc2R2b19jb25uZWN0b3ItPm91dHB1dF9mbGFnICYgcmVzcG9uc2UpID09IDApCiAJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwotCWVsc2UgaWYgKHJlc3BvbnNlICYgU0RWT19UTURTX01BU0spCisJZWxzZSBpZiAoSVNfVE1EUyhpbnRlbF9zZHZvX2Nvbm5lY3RvcikpCiAJCXJldCA9IGludGVsX3Nkdm9faGRtaV9zaW5rX2RldGVjdChjb25uZWN0b3IpOwotCWVsc2UKLQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJZWxzZSB7CisJCXN0cnVjdCBlZGlkICplZGlkOworCisJCS8qIGlmIHdlIGhhdmUgYW4gZWRpZCBjaGVjayBpdCBtYXRjaGVzIHRoZSBjb25uZWN0aW9uICovCisJCWVkaWQgPSBpbnRlbF9zZHZvX2dldF9lZGlkKGNvbm5lY3Rvcik7CisJCWlmIChlZGlkID09IE5VTEwpCisJCQllZGlkID0gaW50ZWxfc2R2b19nZXRfYW5hbG9nX2VkaWQoY29ubmVjdG9yKTsKKwkJaWYgKGVkaWQgIT0gTlVMTCkgeworCQkJaWYgKGVkaWQtPmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCkKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwkJCWVsc2UKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnJhd19lZGlkID0gTlVMTDsKKwkJCWtmcmVlKGVkaWQpOworCQl9IGVsc2UKKwkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCX0KIAogCS8qIE1heSB1cGRhdGUgZW5jb2RlciBmbGFnIGZvciBsaWtlIGNsb2NrIGZvciBTRFZPIFRWLCBldGMuKi8KIAlpZiAocmV0ID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKSB7CkBAIC0xNDQ2LDEwICsxNDYzLDE1IEBACiAJCWVkaWQgPSBpbnRlbF9zZHZvX2dldF9hbmFsb2dfZWRpZChjb25uZWN0b3IpOwogCiAJaWYgKGVkaWQgIT0gTlVMTCkgewotCQlpZiAoZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKSB7CisJCXN0cnVjdCBpbnRlbF9zZHZvX2Nvbm5lY3RvciAqaW50ZWxfc2R2b19jb25uZWN0b3IgPSB0b19pbnRlbF9zZHZvX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCQlib29sIG1vbml0b3JfaXNfZGlnaXRhbCA9ICEhKGVkaWQtPmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCk7CisJCWJvb2wgY29ubmVjdG9yX2lzX2RpZ2l0YWwgPSAhIUlTX1RNRFMoaW50ZWxfc2R2b19jb25uZWN0b3IpOworCisJCWlmIChjb25uZWN0b3JfaXNfZGlnaXRhbCA9PSBtb25pdG9yX2lzX2RpZ2l0YWwpIHsKIAkJCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIGVkaWQpOwogCQkJZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7CiAJCX0KKwogCQljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5yYXdfZWRpZCA9IE5VTEw7CiAJCWtmcmVlKGVkaWQpOwogCX0KQEAgLTE2NjgsNiArMTY5MCwyMiBAQAogCWtmcmVlKGNvbm5lY3Rvcik7CiB9CiAKK3N0YXRpYyBib29sIGludGVsX3Nkdm9fZGV0ZWN0X2hkbWlfYXVkaW8oc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfc2R2byAqaW50ZWxfc2R2byA9IGludGVsX2F0dGFjaGVkX3Nkdm8oY29ubmVjdG9yKTsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKwlib29sIGhhc19hdWRpbyA9IGZhbHNlOworCisJaWYgKCFpbnRlbF9zZHZvLT5pc19oZG1pKQorCQlyZXR1cm4gZmFsc2U7CisKKwllZGlkID0gaW50ZWxfc2R2b19nZXRfZWRpZChjb25uZWN0b3IpOworCWlmIChlZGlkICE9IE5VTEwgJiYgZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKQorCQloYXNfYXVkaW8gPSBkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8oZWRpZCk7CisKKwlyZXR1cm4gaGFzX2F1ZGlvOworfQorCiBzdGF0aWMgaW50CiBpbnRlbF9zZHZvX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCkBAIC0xNjg0LDE3ICsxNzIyLDIzIEBACiAJCXJldHVybiByZXQ7CiAKIAlpZiAocHJvcGVydHkgPT0gaW50ZWxfc2R2b19jb25uZWN0b3ItPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7Ci0JCWlmICh2YWwgPT0gaW50ZWxfc2R2b19jb25uZWN0b3ItPmZvcmNlX2F1ZGlvKQorCQlpbnQgaSA9IHZhbDsKKwkJYm9vbCBoYXNfYXVkaW87CisKKwkJaWYgKGkgPT0gaW50ZWxfc2R2b19jb25uZWN0b3ItPmZvcmNlX2F1ZGlvKQogCQkJcmV0dXJuIDA7CiAKLQkJaW50ZWxfc2R2b19jb25uZWN0b3ItPmZvcmNlX2F1ZGlvID0gdmFsOworCQlpbnRlbF9zZHZvX2Nvbm5lY3Rvci0+Zm9yY2VfYXVkaW8gPSBpOwogCi0JCWlmICh2YWwgPiAwICYmIGludGVsX3Nkdm8tPmhhc19oZG1pX2F1ZGlvKQotCQkJcmV0dXJuIDA7Ci0JCWlmICh2YWwgPCAwICYmICFpbnRlbF9zZHZvLT5oYXNfaGRtaV9hdWRpbykKKwkJaWYgKGkgPT0gMCkKKwkJCWhhc19hdWRpbyA9IGludGVsX3Nkdm9fZGV0ZWN0X2hkbWlfYXVkaW8oY29ubmVjdG9yKTsKKwkJZWxzZQorCQkJaGFzX2F1ZGlvID0gaSA+IDA7CisKKwkJaWYgKGhhc19hdWRpbyA9PSBpbnRlbF9zZHZvLT5oYXNfaGRtaV9hdWRpbykKIAkJCXJldHVybiAwOwogCi0JCWludGVsX3Nkdm8tPmhhc19oZG1pX2F1ZGlvID0gdmFsID4gMDsKKwkJaW50ZWxfc2R2by0+aGFzX2hkbWlfYXVkaW8gPSBoYXNfYXVkaW87CiAJCWdvdG8gZG9uZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCmluZGV4IDkzMjA2ZTQuLmZlNGE1M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwpAQCAtMTIzNCw3ICsxMjM0LDggQEAKICAqIFxyZXR1cm4gZmFsc2UgaWYgVFYgaXMgZGlzY29ubmVjdGVkLgogICovCiBzdGF0aWMgaW50Ci1pbnRlbF90dl9kZXRlY3RfdHlwZSAoc3RydWN0IGludGVsX3R2ICppbnRlbF90dikKK2ludGVsX3R2X2RldGVjdF90eXBlIChzdHJ1Y3QgaW50ZWxfdHYgKmludGVsX3R2LAorCQkgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZpbnRlbF90di0+YmFzZS5iYXNlOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CkBAIC0xMjQ1LDExICsxMjQ2LDEzIEBACiAJaW50IHR5cGU7CiAKIAkvKiBEaXNhYmxlIFRWIGludGVycnVwdHMgYXJvdW5kIGxvYWQgZGV0ZWN0IG9yIHdlJ2xsIHJlY3Vyc2UgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7Ci0JaTkxNV9kaXNhYmxlX3BpcGVzdGF0KGRldl9wcml2LCAwLAotCQkJICAgICAgUElQRV9IT1RQTFVHX0lOVEVSUlVQVF9FTkFCTEUgfAotCQkJICAgICAgUElQRV9IT1RQTFVHX1RWX0lOVEVSUlVQVF9FTkFCTEUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCWlmIChjb25uZWN0b3ItPnBvbGxlZCAmIERSTV9DT05ORUNUT1JfUE9MTF9IUEQpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCQlpOTE1X2Rpc2FibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDAsCisJCQkJICAgICAgUElQRV9IT1RQTFVHX0lOVEVSUlVQVF9FTkFCTEUgfAorCQkJCSAgICAgIFBJUEVfSE9UUExVR19UVl9JTlRFUlJVUFRfRU5BQkxFKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7CisJfQogCiAJc2F2ZV90dl9kYWMgPSB0dl9kYWMgPSBJOTE1X1JFQUQoVFZfREFDKTsKIAlzYXZlX3R2X2N0bCA9IHR2X2N0bCA9IEk5MTVfUkVBRChUVl9DVEwpOwpAQCAtMTMwMiwxMSArMTMwNSwxMyBAQAogCUk5MTVfV1JJVEUoVFZfQ1RMLCBzYXZlX3R2X2N0bCk7CiAKIAkvKiBSZXN0b3JlIGludGVycnVwdCBjb25maWcgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7Ci0JaTkxNV9lbmFibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDAsCi0JCQkgICAgIFBJUEVfSE9UUExVR19JTlRFUlJVUFRfRU5BQkxFIHwKLQkJCSAgICAgUElQRV9IT1RQTFVHX1RWX0lOVEVSUlVQVF9FTkFCTEUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCWlmIChjb25uZWN0b3ItPnBvbGxlZCAmIERSTV9DT05ORUNUT1JfUE9MTF9IUEQpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCQlpOTE1X2VuYWJsZV9waXBlc3RhdChkZXZfcHJpdiwgMCwKKwkJCQkgICAgIFBJUEVfSE9UUExVR19JTlRFUlJVUFRfRU5BQkxFIHwKKwkJCQkgICAgIFBJUEVfSE9UUExVR19UVl9JTlRFUlJVUFRfRU5BQkxFKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7CisJfQogCiAJcmV0dXJuIHR5cGU7CiB9CkBAIC0xMzU2LDcgKzEzNjEsNyBAQAogCWRybV9tb2RlX3NldF9jcnRjaW5mbygmbW9kZSwgQ1JUQ19JTlRFUkxBQ0VfSEFMVkVfVik7CiAKIAlpZiAoaW50ZWxfdHYtPmJhc2UuYmFzZS5jcnRjICYmIGludGVsX3R2LT5iYXNlLmJhc2UuY3J0Yy0+ZW5hYmxlZCkgewotCQl0eXBlID0gaW50ZWxfdHZfZGV0ZWN0X3R5cGUoaW50ZWxfdHYpOworCQl0eXBlID0gaW50ZWxfdHZfZGV0ZWN0X3R5cGUoaW50ZWxfdHYsIGNvbm5lY3Rvcik7CiAJfSBlbHNlIGlmIChmb3JjZSkgewogCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJCWludCBkcG1zX21vZGU7CkBAIC0xMzY0LDcgKzEzNjksNyBAQAogCQljcnRjID0gaW50ZWxfZ2V0X2xvYWRfZGV0ZWN0X3BpcGUoJmludGVsX3R2LT5iYXNlLCBjb25uZWN0b3IsCiAJCQkJCQkgICZtb2RlLCAmZHBtc19tb2RlKTsKIAkJaWYgKGNydGMpIHsKLQkJCXR5cGUgPSBpbnRlbF90dl9kZXRlY3RfdHlwZShpbnRlbF90dik7CisJCQl0eXBlID0gaW50ZWxfdHZfZGV0ZWN0X3R5cGUoaW50ZWxfdHYsIGNvbm5lY3Rvcik7CiAJCQlpbnRlbF9yZWxlYXNlX2xvYWRfZGV0ZWN0X3BpcGUoJmludGVsX3R2LT5iYXNlLCBjb25uZWN0b3IsCiAJCQkJCQkgICAgICAgZHBtc19tb2RlKTsKIAkJfSBlbHNlCkBAIC0xNjU4LDYgKzE2NjMsMTggQEAKIAlpbnRlbF9lbmNvZGVyID0gJmludGVsX3R2LT5iYXNlOwogCWNvbm5lY3RvciA9ICZpbnRlbF9jb25uZWN0b3ItPmJhc2U7CiAKKwkvKiBUaGUgZG9jdW1lbnRhdGlvbiwgZm9yIHRoZSBvbGRlciBjaGlwc2V0cyBhdCBsZWFzdCwgcmVjb21tZW5kCisJICogdXNpbmcgYSBwb2xsaW5nIG1ldGhvZCByYXRoZXIgdGhhbiBob3RwbHVnIGRldGVjdGlvbiBmb3IgVFZzLgorCSAqIFRoaXMgaXMgYmVjYXVzZSBpbiBvcmRlciB0byBwZXJmb3JtIHRoZSBob3RwbHVnIGRldGVjdGlvbiwgdGhlIFBMTHMKKwkgKiBmb3IgdGhlIFRWIG11c3QgYmUga2VwdCBhbGl2ZSBpbmNyZWFzaW5nIHBvd2VyIGRyYWluIGFuZCBzdGFydmluZworCSAqIGJhbmR3aWR0aCBmcm9tIG90aGVyIGVuY29kZXJzLiBOb3RhYmx5IGZvciBpbnN0YW5jZSwgaXQgY2F1c2VzCisJICogcGlwZSB1bmRlcnJ1bnMgb24gQ3Jlc3RsaW5lIHdoZW4gdGhpcyBlbmNvZGVyIGlzIHN1cHBvc2VkbHkgaWRsZS4KKwkgKgorCSAqIE1vcmUgcmVjZW50IGNoaXBzZXRzIGZhdm91ciBIRE1JIHJhdGhlciB0aGFuIGludGVncmF0ZWQgUy1WaWRlby4KKwkgKi8KKwljb25uZWN0b3ItPnBvbGxlZCA9CisJCURSTV9DT05ORUNUT1JfUE9MTF9DT05ORUNUIHwgRFJNX0NPTk5FQ1RPUl9QT0xMX0RJU0NPTk5FQ1Q7CisKIAlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZpbnRlbF90dl9jb25uZWN0b3JfZnVuY3MsCiAJCQkgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWcKaW5kZXggMjFkNmMyOS4uZGU3MDk1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnCkBAIC04LDcgKzgsNyBAQAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAogCXNlbGVjdCBGQgotCXNlbGVjdCBGUkFNRUJVRkZFUl9DT05TT0xFIGlmICFFTUJFRERFRAorCXNlbGVjdCBGUkFNRUJVRkZFUl9DT05TT0xFIGlmICFFWFBFUlQKIAlzZWxlY3QgRkJfQkFDS0xJR0hUIGlmIERSTV9OT1VWRUFVX0JBQ0tMSUdIVAogCXNlbGVjdCBBQ1BJX1ZJREVPIGlmIEFDUEkgJiYgWDg2ICYmIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgJiYgVklERU9fT1VUUFVUX0NPTlRST0wgJiYgSU5QVVQKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCmluZGV4IDJhZWY1Y2QuLjZiZGFiODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCkBAIC02MjI4LDcgKzYyMjgsNyBAQAogCQllbnRyeS0+dHZjb25mLmhhc19jb21wb25lbnRfb3V0cHV0ID0gZmFsc2U7CiAJCWJyZWFrOwogCWNhc2UgT1VUUFVUX0xWRFM6Ci0JCWlmICgoY29ubiAmIDB4MDAwMDNmMDApICE9IDB4MTApCisJCWlmICgoY29ubiAmIDB4MDAwMDNmMDApID4+IDggIT0gMHgxMCkKIAkJCWVudHJ5LT5sdmRzY29uZi51c2Vfc3RyYXBzX2Zvcl9tb2RlID0gdHJ1ZTsKIAkJZW50cnktPmx2ZHNjb25mLnVzZV9wb3dlcl9zY3JpcHRzID0gdHJ1ZTsKIAkJYnJlYWs7CkBAIC02MzEwLDYgKzYzMTAsOSBAQAogc3RhdGljIGJvb2wKIGFwcGx5X2RjYl9lbmNvZGVyX3F1aXJrcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaWR4LCB1MzIgKmNvbm4sIHUzMiAqY29uZikKIHsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkY2JfdGFibGUgKmRjYiA9ICZkZXZfcHJpdi0+dmJpb3MuZGNiOworCiAJLyogRGVsbCBQcmVjaXNpb24gTTYzMDAKIAkgKiAgIERDQiBlbnRyeSAyOiAwMjAyNTMxMiAwMDAwMDAxMAogCSAqICAgRENCIGVudHJ5IDM6IDAyMDI2MzEyIDAwMDAwMDIwCkBAIC02MzI3LDYgKzYzMzAsMTggQEAKIAkJCXJldHVybiBmYWxzZTsKIAl9CiAKKwkvKiBHZUZvcmNlMyBUaSAyMDAKKwkgKgorCSAqIERDQiByZXBvcnRzIGFuIExWRFMgb3V0cHV0IHRoYXQgc2hvdWxkIGJlIFRNRFM6CisJICogICBEQ0IgZW50cnkgMTogZjIwMDUwMTQgZmZmZmZmZmYKKwkgKi8KKwlpZiAobnZfbWF0Y2hfZGV2aWNlKGRldiwgMHgwMjAxLCAweDE0NjIsIDB4ODg1MSkpIHsKKwkJaWYgKCpjb25uID09IDB4ZjIwMDUwMTQgJiYgKmNvbmYgPT0gMHhmZmZmZmZmZikgeworCQkJZmFicmljYXRlX2RjYl9vdXRwdXQoZGNiLCBPVVRQVVRfVE1EUywgMSwgMSwgMSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5jCmluZGV4IGE3ZmFlMjYuLmQzOGE0ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMKQEAgLTEyOCw2ICsxMjgsNyBAQAogCQl9CiAJfQogCisJbnZiby0+Ym8ubWVtLm51bV9wYWdlcyA9IHNpemUgPj4gUEFHRV9TSElGVDsKIAlub3V2ZWF1X2JvX3BsYWNlbWVudF9zZXQobnZibywgZmxhZ3MsIDApOwogCiAJbnZiby0+Y2hhbm5lbCA9IGNoYW47CkBAIC0xNjYsMTcgKzE2NywxNyBAQAogc2V0X3BsYWNlbWVudF9yYW5nZShzdHJ1Y3Qgbm91dmVhdV9ibyAqbnZibywgdWludDMyX3QgdHlwZSkKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub3V2ZWF1X2JkZXYobnZiby0+Ym8uYmRldik7CisJaW50IHZyYW1fcGFnZXMgPSBkZXZfcHJpdi0+dnJhbV9zaXplID4+IFBBR0VfU0hJRlQ7CiAKIAlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl8xMCAmJgotCSAgICBudmJvLT50aWxlX21vZGUgJiYgKHR5cGUgJiBUVE1fUExfRkxBR19WUkFNKSkgeworCSAgICBudmJvLT50aWxlX21vZGUgJiYgKHR5cGUgJiBUVE1fUExfRkxBR19WUkFNKSAmJgorCSAgICBudmJvLT5iby5tZW0ubnVtX3BhZ2VzIDwgdnJhbV9wYWdlcyAvIDIpIHsKIAkJLyoKIAkJICogTWFrZSBzdXJlIHRoYXQgdGhlIGNvbG9yIGFuZCBkZXB0aCBidWZmZXJzIGFyZSBoYW5kbGVkCiAJCSAqIGJ5IGluZGVwZW5kZW50IG1lbW9yeSBjb250cm9sbGVyIHVuaXRzLiBVcCB0byBhIDl4CiAJCSAqIHNwZWVkIHVwIHdoZW4gYWxwaGEtYmxlbmRpbmcgYW5kIGRlcHRoLXRlc3QgYXJlIGVuYWJsZWQKIAkJICogYXQgdGhlIHNhbWUgdGltZS4KIAkJICovCi0JCWludCB2cmFtX3BhZ2VzID0gZGV2X3ByaXYtPnZyYW1fc2l6ZSA+PiBQQUdFX1NISUZUOwotCiAJCWlmIChudmJvLT50aWxlX2ZsYWdzICYgTk9VVkVBVV9HRU1fVElMRV9aRVRBKSB7CiAJCQludmJvLT5wbGFjZW1lbnQuZnBmbiA9IHZyYW1fcGFnZXMgLyAyOwogCQkJbnZiby0+cGxhY2VtZW50LmxwZm4gPSB+MDsKQEAgLTc4NSw3ICs3ODYsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gdHRtX2JvX21vdmVfdHRtKGJvLCBldmljdCwgbm9fd2FpdF9yZXNlcnZlLCBub193YWl0X2dwdSwgbmV3X21lbSk7CisJcmV0ID0gdHRtX2JvX21vdmVfdHRtKGJvLCB0cnVlLCBub193YWl0X3Jlc2VydmUsIG5vX3dhaXRfZ3B1LCBuZXdfbWVtKTsKIG91dDoKIAl0dG1fYm9fbWVtX3B1dChibywgJnRtcF9tZW0pOwogCXJldHVybiByZXQ7CkBAIC04MTEsMTEgKzgxMiwxMSBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB0dG1fYm9fbW92ZV90dG0oYm8sIGV2aWN0LCBub193YWl0X3Jlc2VydmUsIG5vX3dhaXRfZ3B1LCAmdG1wX21lbSk7CisJcmV0ID0gdHRtX2JvX21vdmVfdHRtKGJvLCB0cnVlLCBub193YWl0X3Jlc2VydmUsIG5vX3dhaXRfZ3B1LCAmdG1wX21lbSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSBub3V2ZWF1X2JvX21vdmVfbTJtZihibywgZXZpY3QsIGludHIsIG5vX3dhaXRfcmVzZXJ2ZSwgbm9fd2FpdF9ncHUsIG5ld19tZW0pOworCXJldCA9IG5vdXZlYXVfYm9fbW92ZV9tMm1mKGJvLCB0cnVlLCBpbnRyLCBub193YWl0X3Jlc2VydmUsIG5vX3dhaXRfZ3B1LCBuZXdfbWVtKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMKaW5kZXggYTIxZTAwMC4uMzkwZDgyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jCkBAIC01MDcsNiArNTA3LDcgQEAKIAlpbnQgaGlnaF93ID0gMCwgaGlnaF9oID0gMCwgaGlnaF92ID0gMDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kZSwgJm52X2Nvbm5lY3Rvci0+YmFzZS5wcm9iZWRfbW9kZXMsIGhlYWQpIHsKKwkJbW9kZS0+dnJlZnJlc2ggPSBkcm1fbW9kZV92cmVmcmVzaChtb2RlKTsKIAkJaWYgKGhlbHBlci0+bW9kZV92YWxpZChjb25uZWN0b3IsIG1vZGUpICE9IE1PREVfT0sgfHwKIAkJICAgIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMKaW5kZXggMTNiYjY3Mi4uZjY1OGEwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jCkBAIC0yMzQsOSArMjM0LDkgQEAKIAkJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwogCX0KIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlub3V2ZWF1X2ZiY29uX3NldF9zdXNwZW5kKGRldiwgMSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJbm91dmVhdV9mYmNvbl9yZXN0b3JlX2FjY2VsKGRldik7CiAJcmV0dXJuIDA7CiAKQEAgLTM1OSw5ICszNTksOSBAQAogCQludl9jcnRjLT5sdXQuZGVwdGggPSAwOwogCX0KIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlub3V2ZWF1X2ZiY29uX3NldF9zdXNwZW5kKGRldiwgMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlub3V2ZWF1X2ZiY29uX3pmaWxsX2FsbChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaAppbmRleCAwMWJmZmM0Li45ODIxZmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKQEAgLTg0OCw5ICs4NDgsNiBAQAogCQkJCSAgICAgc3RydWN0IG5vdXZlYXVfZmVuY2UgKmZlbmNlKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXJfZnVuYyBub3V2ZWF1X3ZyYW1fbWFuYWdlcjsKIAotLyogbnZjMF92cmFtLmMgKi8KLWV4dGVybiBjb25zdCBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXJfZnVuYyBudmMwX3ZyYW1fbWFuYWdlcjsKLQogLyogbm91dmVhdV9ub3RpZmllci5jICovCiBleHRlcm4gaW50ICBub3V2ZWF1X25vdGlmaWVyX2luaXRfY2hhbm5lbChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwogZXh0ZXJuIHZvaWQgbm91dmVhdV9ub3RpZmllcl90YWtlZG93bl9jaGFubmVsKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3BtLmMKaW5kZXggZmI4NDZhMy4uNDM5OWUyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcG0uYwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAJc3RydWN0IG5vdXZlYXVfcG1fZW5naW5lICpwbSA9ICZkZXZfcHJpdi0+ZW5naW5lLnBtOwogCiAJaWYgKHBtLT5od21vbikgewotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBtLT5od21vbi0+a29iaiwgJmh3bW9uX2F0dHJncm91cCk7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5wZGV2LT5kZXYua29iaiwgJmh3bW9uX2F0dHJncm91cCk7CiAJCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKHBtLT5od21vbik7CiAJfQogI2VuZGlmCkBAIC01NDMsNyArNTQzLDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9wbV9lbmdpbmUgKnBtID0gJmRldl9wcml2LT5lbmdpbmUucG07CiAJc3RydWN0IG5vdXZlYXVfcG1fbGV2ZWwgKnBlcmZsdmw7CiAKLQlpZiAocG0tPmN1ciA9PSAmcG0tPmJvb3QpCisJaWYgKCFwbS0+Y3VyIHx8IHBtLT5jdXIgPT0gJnBtLT5ib290KQogCQlyZXR1cm47CiAKIAlwZXJmbHZsID0gcG0tPmN1cjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdGVtcC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90ZW1wLmMKaW5kZXggN2VjYzRhZC4uOGQ5OTY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90ZW1wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90ZW1wLmMKQEAgLTI2NSw4ICsyNjUsOCBAQAogCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvW10gPSB7CiAJCXsgSTJDX0JPQVJEX0lORk8oInc4M2w3ODV0cyIsIDB4MmQpIH0sCiAJCXsgSTJDX0JPQVJEX0lORk8oInc4Mzc4MWQiLCAweDJkKSB9LAotCQl7IEkyQ19CT0FSRF9JTkZPKCJmNzUzNzUiLCAweDJlKSB9LAogCQl7IEkyQ19CT0FSRF9JTkZPKCJhZHQ3NDczIiwgMHgyZSkgfSwKKwkJeyBJMkNfQk9BUkRfSU5GTygiZjc1Mzc1IiwgMHgyZSkgfSwKIAkJeyBJMkNfQk9BUkRfSU5GTygibG05OSIsIDB4NGMpIH0sCiAJCXsgfQogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kZnAuYwppbmRleCBlZjIzNTUwLi5jODJkYjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMKQEAgLTM0Miw4ICszNDIsOCBAQAogCWlmIChudl9lbmNvZGVyLT5kY2ItPnR5cGUgPT0gT1VUUFVUX0xWRFMpIHsKIAkJYm9vbCBkdWFsbGluaywgZHVtbXk7CiAKLQkJbm91dmVhdV9iaW9zX3BhcnNlX2x2ZHNfdGFibGUoZGV2LCBudl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlLT4KLQkJCQkJICAgICAgY2xvY2ssICZkdWFsbGluaywgJmR1bW15KTsKKwkJbm91dmVhdV9iaW9zX3BhcnNlX2x2ZHNfdGFibGUoZGV2LCBvdXRwdXRfbW9kZS0+Y2xvY2ssCisJCQkJCSAgICAgICZkdWFsbGluaywgJmR1bW15KTsKIAkJaWYgKGR1YWxsaW5rKQogCQkJcmVncC0+ZnBfY29udHJvbCB8PSAoOCA8PCAyOCk7CiAJfSBlbHNlCkBAIC01MTgsOCArNTE4LDYgQEAKIAkJcmV0dXJuOwogCiAJaWYgKG52X2VuY29kZXItPmRjYi0+bHZkc2NvbmYudXNlX3Bvd2VyX3NjcmlwdHMpIHsKLQkJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpudl9jb25uZWN0b3IgPSBub3V2ZWF1X2VuY29kZXJfY29ubmVjdG9yX2dldChudl9lbmNvZGVyKTsKLQogCQkvKiB3aGVuIHJlbW92aW5nIGFuIG91dHB1dCwgY3J0YyBtYXkgbm90IGJlIHNldCwgYnV0IFBBTkVMX09GRgogCQkgKiBtdXN0IHN0aWxsIGJlIHJ1bgogCQkgKi8KQEAgLTUyNywxMiArNTI1LDggQEAKIAkJCSAgIG52MDRfZGZwX2dldF9ib3VuZF9oZWFkKGRldiwgbnZfZW5jb2Rlci0+ZGNiKTsKIAogCQlpZiAobW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKSB7Ci0JCQlpZiAoIW52X2Nvbm5lY3Rvci0+bmF0aXZlX21vZGUpIHsKLQkJCQlOVl9FUlJPUihkZXYsICJOb3QgdHVybmluZyBvbiBMVkRTIHdpdGhvdXQgbmF0aXZlIG1vZGVcbiIpOwotCQkJCXJldHVybjsKLQkJCX0KIAkJCWNhbGxfbHZkc19zY3JpcHQoZGV2LCBudl9lbmNvZGVyLT5kY2IsIGhlYWQsCi0JCQkJCSBMVkRTX1BBTkVMX09OLCBudl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlLT5jbG9jayk7CisJCQkJCSBMVkRTX1BBTkVMX09OLCBudl9lbmNvZGVyLT5tb2RlLmNsb2NrKTsKIAkJfSBlbHNlCiAJCQkvKiBweGNsayBvZiAwIGlzIGZpbmUgZm9yIFBBTkVMX09GRiwgYW5kIGZvciBhCiAJCQkgKiBkaXNjb25uZWN0ZWQgTFZEUyBlbmNvZGVyIHRoZXJlIGlzIG5vIG5hdGl2ZV9tb2RlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMKaW5kZXggODg3MGQ3Mi4uMThkMzBjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JhcGguYwpAQCAtMjExLDMwICsyMTEsMzUgQEAKIAlzdHJ1Y3Qgbm91dmVhdV90aWxlX3JlZyAqdGlsZSA9ICZkZXZfcHJpdi0+dGlsZS5yZWdbaV07CiAKIAlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7Ci0JY2FzZSAweDQ0OgotCWNhc2UgMHg0YToKKwljYXNlIDB4NDA6CisJY2FzZSAweDQxOiAvKiBndWVzcyAqLworCWNhc2UgMHg0MjoKKwljYXNlIDB4NDM6CisJY2FzZSAweDQ1OiAvKiBndWVzcyAqLwogCWNhc2UgMHg0ZToKIAkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RTSVpFKGkpLCB0aWxlLT5waXRjaCk7CiAJCW52X3dyMzIoZGV2LCBOVjIwX1BHUkFQSF9UTElNSVQoaSksIHRpbGUtPmxpbWl0KTsKIAkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RJTEUoaSksIHRpbGUtPmFkZHIpOwotCQlicmVhazsKLQotCWNhc2UgMHg0NjoKLQljYXNlIDB4NDc6Ci0JY2FzZSAweDQ5OgotCWNhc2UgMHg0YjoKLQkJbnZfd3IzMihkZXYsIE5WNDdfUEdSQVBIX1RTSVpFKGkpLCB0aWxlLT5waXRjaCk7Ci0JCW52X3dyMzIoZGV2LCBOVjQ3X1BHUkFQSF9UTElNSVQoaSksIHRpbGUtPmxpbWl0KTsKLQkJbnZfd3IzMihkZXYsIE5WNDdfUEdSQVBIX1RJTEUoaSksIHRpbGUtPmFkZHIpOwogCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVFNJWkUxKGkpLCB0aWxlLT5waXRjaCk7CiAJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9UTElNSVQxKGkpLCB0aWxlLT5saW1pdCk7CiAJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9USUxFMShpKSwgdGlsZS0+YWRkcik7CiAJCWJyZWFrOwotCi0JZGVmYXVsdDoKKwljYXNlIDB4NDQ6CisJY2FzZSAweDRhOgogCQludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfVFNJWkUoaSksIHRpbGUtPnBpdGNoKTsKIAkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RMSU1JVChpKSwgdGlsZS0+bGltaXQpOwogCQludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfVElMRShpKSwgdGlsZS0+YWRkcik7CisJCWJyZWFrOworCWNhc2UgMHg0NjoKKwljYXNlIDB4NDc6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwljYXNlIDB4NGM6CisJY2FzZSAweDY3OgorCWRlZmF1bHQ6CisJCW52X3dyMzIoZGV2LCBOVjQ3X1BHUkFQSF9UU0laRShpKSwgdGlsZS0+cGl0Y2gpOworCQludl93cjMyKGRldiwgTlY0N19QR1JBUEhfVExJTUlUKGkpLCB0aWxlLT5saW1pdCk7CisJCW52X3dyMzIoZGV2LCBOVjQ3X1BHUkFQSF9USUxFKGkpLCB0aWxlLT5hZGRyKTsKIAkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RTSVpFMShpKSwgdGlsZS0+cGl0Y2gpOwogCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVExJTUlUMShpKSwgdGlsZS0+bGltaXQpOwogCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVElMRTEoaSksIHRpbGUtPmFkZHIpOwpAQCAtMzk2LDE3ICs0MDEsMjAgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgewotCQljYXNlIDB4NDY6Ci0JCWNhc2UgMHg0NzoKLQkJY2FzZSAweDQ5OgotCQljYXNlIDB4NGI6Ci0JCQludl93cjMyKGRldiwgMHg0MDBERjAsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcwKSk7Ci0JCQludl93cjMyKGRldiwgMHg0MDBERjQsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcxKSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKKwkJY2FzZSAweDQxOgorCQljYXNlIDB4NDI6CisJCWNhc2UgMHg0MzoKKwkJY2FzZSAweDQ1OgorCQljYXNlIDB4NGU6CisJCWNhc2UgMHg0NDoKKwkJY2FzZSAweDRhOgogCQkJbnZfd3IzMihkZXYsIDB4NDAwOUYwLCBudl9yZDMyKGRldiwgTlYwNF9QRkJfQ0ZHMCkpOwogCQkJbnZfd3IzMihkZXYsIDB4NDAwOUY0LCBudl9yZDMyKGRldiwgTlYwNF9QRkJfQ0ZHMSkpOwogCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQludl93cjMyKGRldiwgMHg0MDBERjAsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcwKSk7CisJCQludl93cjMyKGRldiwgMHg0MDBERjQsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcxKSk7CisJCQlicmVhazsKIAkJfQogCQludl93cjMyKGRldiwgMHg0MDY5RjAsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcwKSk7CiAJCW52X3dyMzIoZGV2LCAweDQwNjlGNCwgbnZfcmQzMihkZXYsIE5WMDRfUEZCX0NGRzEpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZXZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2V2by5jCmluZGV4IDE0ZTI0ZTkuLjBlYTA5MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZXZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ldm8uYwpAQCAtMjgzLDggKzI4Myw3IEBACiAJCQludjUwX2V2b19jaGFubmVsX2RlbCgmZGV2X3ByaXYtPmV2byk7CiAJCQlyZXR1cm4gcmV0OwogCQl9Ci0JfSBlbHNlCi0JaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NTApIHsKKwl9IGVsc2UgewogCQlyZXQgPSBudjUwX2V2b19kbWFvYmpfbmV3KGV2bywgMHgzZCwgTnZFdm9GQjE2LCAweDcwLCAweDE5LAogCQkJCQkgIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMTAwMDApOwogCQlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMKaW5kZXggMmQ3ZWE3NS4uMzdlMjFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYwpAQCAtMjU2LDYgKzI1Niw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCXN0cnVjdCBub3V2ZWF1X2ZpZm9fZW5naW5lICpwZmlmbyA9ICZkZXZfcHJpdi0+ZW5naW5lLmZpZm87CiAJaW50IGksIGhkciA9IChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKSA/IDB4MjAwIDogMHgyMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yNjUsNiArMjY2LDcgQEAKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CisJcGZpZm8tPnJlYXNzaWduKGRldiwgZmFsc2UpOwogCXBncmFwaC0+Zmlmb19hY2Nlc3MoZGV2LCBmYWxzZSk7CiAKIAlpZiAocGdyYXBoLT5jaGFubmVsKGRldikgPT0gY2hhbikKQEAgLTI3NSw2ICsyNzcsNyBAQAogCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOwogCiAJcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIHRydWUpOworCXBmaWZvLT5yZWFzc2lnbihkZXYsIHRydWUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CiAKIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJmNoYW4tPnJhbWluX2dyY3R4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfdm0uYwppbmRleCAzOGU1MjNlLi40NTlmZjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3ZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF92bS5jCkBAIC00NSwxMSArNDUsNiBAQAogCX0KIAogCWlmIChwaHlzICYgMSkgewotCQlpZiAoZGV2X3ByaXYtPnZyYW1fc3lzX2Jhc2UpIHsKLQkJCXBoeXMgKz0gZGV2X3ByaXYtPnZyYW1fc3lzX2Jhc2U7Ci0JCQlwaHlzIHw9IDB4MzA7Ci0JCX0KLQogCQlpZiAoY292ZXJhZ2UgPD0gMzIgKiAxMDI0ICogMTAyNCkKIAkJCXBoeXMgfD0gMHg2MDsKIAkJZWxzZSBpZiAoY292ZXJhZ2UgPD0gNjQgKiAxMDI0ICogMTAyNCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JhcGguYwppbmRleCBlNmVhN2Q4Li5lYjE4YTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9ncmFwaC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAibnZjMF9ncmFwaC5oIgogCiBzdGF0aWMgdm9pZCBudmMwX2dyYXBoX2lzcihzdHJ1Y3QgZHJtX2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIG52YzBfcnVuazE0MF9pc3Ioc3RydWN0IGRybV9kZXZpY2UgKik7CiBzdGF0aWMgaW50ICBudmMwX2dyYXBoX3VubG9hZF9jb250ZXh0X3RvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHU2NCBjaGFuKTsKIAogdm9pZApAQCAtMjgxLDYgKzI4Miw3IEBACiAJCXJldHVybjsKIAogCW5vdXZlYXVfaXJxX3VucmVnaXN0ZXIoZGV2LCAxMik7CisJbm91dmVhdV9pcnFfdW5yZWdpc3RlcihkZXYsIDI1KTsKIAogCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmcHJpdi0+dW5rNDE4OGI4KTsKIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJnByaXYtPnVuazQxODhiNCk7CkBAIC0zOTAsNiArMzkyLDcgQEAKIAl9CiAKIAlub3V2ZWF1X2lycV9yZWdpc3RlcihkZXYsIDEyLCBudmMwX2dyYXBoX2lzcik7CisJbm91dmVhdV9pcnFfcmVnaXN0ZXIoZGV2LCAyNSwgbnZjMF9ydW5rMTQwX2lzcik7CiAJTlZPQkpfQ0xBU1MoZGV2LCAweDkwMmQsIEdSKTsgLyogMkQgKi8KIAlOVk9CSl9DTEFTUyhkZXYsIDB4OTAzOSwgR1IpOyAvKiBNMk1GICovCiAJTlZPQkpfQ0xBU1MoZGV2LCAweDkwOTcsIEdSKTsgLyogM0QgKi8KQEAgLTUxMiw4ICs1MTUsOCBAQAogCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHgyMjQpLCAweGMwMDAwMDAwKTsKIAkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4NDhjKSwgMHhjMDAwMDAwMCk7CiAJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDA4NCksIDB4YzAwMDAwMDApOwotCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHhlNDQpLCAweDAwMWZmZmZlKTsKLQkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4ZTRjKSwgMHgwMDAwMDAwZik7CisJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDY0NCksIDB4MDAxZmZmZmUpOworCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHg2NGMpLCAweDAwMDAwMDBmKTsKIAkJfQogCQludl93cjMyKGRldiwgR1BDX1VOSVQoZ3BjLCAweDJjOTApLCAweGZmZmZmZmZmKTsKIAkJbnZfd3IzMihkZXYsIEdQQ19VTklUKGdwYywgMHgyYzk0KSwgMHhmZmZmZmZmZik7CkBAIC03NzcsMyArNzgwLDE5IEBACiAKIAludl93cjMyKGRldiwgMHg0MDA1MDAsIDB4MDAwMTAwMDEpOwogfQorCitzdGF0aWMgdm9pZAorbnZjMF9ydW5rMTQwX2lzcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXUzMiB1bml0cyA9IG52X3JkMzIoZGV2LCAweDAwMDE3YykgJiAweDFmOworCisJd2hpbGUgKHVuaXRzKSB7CisJCXUzMiB1bml0ID0gZmZzKHVuaXRzKSAtIDE7CisJCXUzMiByZWcgPSAweDE0MDAwMCArIHVuaXQgKiAweDIwMDA7CisJCXUzMiBzdDAgPSBudl9tYXNrKGRldiwgcmVnICsgMHgxMDIwLCAwLCAwKTsKKwkJdTMyIHN0MSA9IG52X21hc2soZGV2LCByZWcgKyAweDE0MjAsIDAsIDApOworCisJCU5WX0lORk8oZGV2LCAiUFJVTksxNDA6ICVkIDB4JTA4eCAweCUwOHhcbiIsIHVuaXQsIHN0MCwgc3QxKTsKKwkJdW5pdHMgJj0gfigxIDw8IHVuaXQpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JjdHguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JjdHguYwppbmRleCBiOWU2OGIyLi5mODgwZmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2dyY3R4LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9ncmN0eC5jCkBAIC0xODMwLDcgKzE4MzAsNyBAQAogCiAJZm9yICh0cCA9IDAsIGlkID0gMDsgdHAgPCA0OyB0cCsrKSB7CiAJCWZvciAoZ3BjID0gMDsgZ3BjIDwgcHJpdi0+Z3BjX25yOyBncGMrKykgewotCQkJaWYgKHRwIDw9IHByaXYtPnRwX25yW2dwY10pIHsKKwkJCWlmICh0cCA8IHByaXYtPnRwX25yW2dwY10pIHsKIAkJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDY5OCksIGlkKTsKIAkJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDRlOCksIGlkKTsKIAkJCQludl93cjMyKGRldiwgR1BDX1VOSVQoZ3BjLCAweDBjMTAgKyB0cCAqIDQpLCBpZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCmluZGV4IGIwYWIxODUuLmE0ZTVlNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCkBAIC00OCwyOSArNDgsMjkgQEAKIAogCXN3aXRjaCAocmFkZW9uX2NydGMtPnJteF90eXBlKSB7CiAJY2FzZSBSTVhfQ0VOVEVSOgotCQlhcmdzLnVzT3ZlcnNjYW5Ub3AgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIG1vZGUtPmNydGNfdmRpc3BsYXkpIC8gMjsKLQkJYXJncy51c092ZXJzY2FuQm90dG9tID0gKGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgLSBtb2RlLT5jcnRjX3ZkaXNwbGF5KSAvIDI7Ci0JCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIG1vZGUtPmNydGNfaGRpc3BsYXkpIC8gMjsKLQkJYXJncy51c092ZXJzY2FuUmlnaHQgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIG1vZGUtPmNydGNfaGRpc3BsYXkpIC8gMjsKKwkJYXJncy51c092ZXJzY2FuVG9wID0gY3B1X3RvX2xlMTYoKGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgLSBtb2RlLT5jcnRjX3ZkaXNwbGF5KSAvIDIpOworCQlhcmdzLnVzT3ZlcnNjYW5Cb3R0b20gPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIG1vZGUtPmNydGNfdmRpc3BsYXkpIC8gMik7CisJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIG1vZGUtPmNydGNfaGRpc3BsYXkpIC8gMik7CisJCWFyZ3MudXNPdmVyc2NhblJpZ2h0ID0gY3B1X3RvX2xlMTYoKGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgLSBtb2RlLT5jcnRjX2hkaXNwbGF5KSAvIDIpOwogCQlicmVhazsKIAljYXNlIFJNWF9BU1BFQ1Q6CiAJCWExID0gbW9kZS0+Y3J0Y192ZGlzcGxheSAqIGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXk7CiAJCWEyID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAqIG1vZGUtPmNydGNfaGRpc3BsYXk7CiAKIAkJaWYgKGExID4gYTIpIHsKLQkJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIChhMiAvIG1vZGUtPmNydGNfdmRpc3BsYXkpKSAvIDI7Ci0JCQlhcmdzLnVzT3ZlcnNjYW5SaWdodCA9IChhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5IC0gKGEyIC8gbW9kZS0+Y3J0Y192ZGlzcGxheSkpIC8gMjsKKwkJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIChhMiAvIG1vZGUtPmNydGNfdmRpc3BsYXkpKSAvIDIpOworCQkJYXJncy51c092ZXJzY2FuUmlnaHQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIChhMiAvIG1vZGUtPmNydGNfdmRpc3BsYXkpKSAvIDIpOwogCQl9IGVsc2UgaWYgKGEyID4gYTEpIHsKLQkJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIChhMSAvIG1vZGUtPmNydGNfaGRpc3BsYXkpKSAvIDI7Ci0JCQlhcmdzLnVzT3ZlcnNjYW5SaWdodCA9IChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5IC0gKGExIC8gbW9kZS0+Y3J0Y19oZGlzcGxheSkpIC8gMjsKKwkJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIChhMSAvIG1vZGUtPmNydGNfaGRpc3BsYXkpKSAvIDIpOworCQkJYXJncy51c092ZXJzY2FuUmlnaHQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIChhMSAvIG1vZGUtPmNydGNfaGRpc3BsYXkpKSAvIDIpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUk1YX0ZVTEw6CiAJZGVmYXVsdDoKLQkJYXJncy51c092ZXJzY2FuUmlnaHQgPSByYWRlb25fY3J0Yy0+aF9ib3JkZXI7Ci0JCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSByYWRlb25fY3J0Yy0+aF9ib3JkZXI7Ci0JCWFyZ3MudXNPdmVyc2NhbkJvdHRvbSA9IHJhZGVvbl9jcnRjLT52X2JvcmRlcjsKLQkJYXJncy51c092ZXJzY2FuVG9wID0gcmFkZW9uX2NydGMtPnZfYm9yZGVyOworCQlhcmdzLnVzT3ZlcnNjYW5SaWdodCA9IGNwdV90b19sZTE2KHJhZGVvbl9jcnRjLT5oX2JvcmRlcik7CisJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSBjcHVfdG9fbGUxNihyYWRlb25fY3J0Yy0+aF9ib3JkZXIpOworCQlhcmdzLnVzT3ZlcnNjYW5Cb3R0b20gPSBjcHVfdG9fbGUxNihyYWRlb25fY3J0Yy0+dl9ib3JkZXIpOworCQlhcmdzLnVzT3ZlcnNjYW5Ub3AgPSBjcHVfdG9fbGUxNihyYWRlb25fY3J0Yy0+dl9ib3JkZXIpOwogCQlicmVhazsKIAl9CiAJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CkBAIC00MTksMjMgKzQxOSwyMyBAQAogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIAogCWlmIChBU0lDX0lTX0RDRTUocmRldikpIHsKLQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50RnJhYyA9IDA7CisJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bUFtb3VudEZyYWMgPSBjcHVfdG9fbGUxNigwKTsKIAkJYXJncy52My51Y1NwcmVhZFNwZWN0cnVtVHlwZSA9IHNzLT50eXBlOwogCQlzd2l0Y2ggKHBsbF9pZCkgewogCQljYXNlIEFUT01fUFBMTDE6CiAJCQlhcmdzLnYzLnVjU3ByZWFkU3BlY3RydW1UeXBlIHw9IEFUT01fUFBMTF9TU19UWVBFX1YzX1AxUExMOwotCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gc3MtPmFtb3VudDsKLQkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bVN0ZXAgPSBzcy0+c3RlcDsKKwkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bUFtb3VudCA9IGNwdV90b19sZTE2KHNzLT5hbW91bnQpOworCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IGNwdV90b19sZTE2KHNzLT5zdGVwKTsKIAkJCWJyZWFrOwogCQljYXNlIEFUT01fUFBMTDI6CiAJCQlhcmdzLnYzLnVjU3ByZWFkU3BlY3RydW1UeXBlIHw9IEFUT01fUFBMTF9TU19UWVBFX1YzX1AyUExMOwotCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gc3MtPmFtb3VudDsKLQkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bVN0ZXAgPSBzcy0+c3RlcDsKKwkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bUFtb3VudCA9IGNwdV90b19sZTE2KHNzLT5hbW91bnQpOworCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IGNwdV90b19sZTE2KHNzLT5zdGVwKTsKIAkJCWJyZWFrOwogCQljYXNlIEFUT01fRENQTEw6CiAJCQlhcmdzLnYzLnVjU3ByZWFkU3BlY3RydW1UeXBlIHw9IEFUT01fUFBMTF9TU19UWVBFX1YzX0RDUExMOwotCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gMDsKLQkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bVN0ZXAgPSAwOworCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gY3B1X3RvX2xlMTYoMCk7CisJCQlhcmdzLnYzLnVzU3ByZWFkU3BlY3RydW1TdGVwID0gY3B1X3RvX2xlMTYoMCk7CiAJCQlicmVhazsKIAkJY2FzZSBBVE9NX1BQTExfSU5WQUxJRDoKIAkJCXJldHVybjsKQEAgLTQ0NywxOCArNDQ3LDE4IEBACiAJCXN3aXRjaCAocGxsX2lkKSB7CiAJCWNhc2UgQVRPTV9QUExMMToKIAkJCWFyZ3MudjIudWNTcHJlYWRTcGVjdHJ1bVR5cGUgfD0gQVRPTV9QUExMX1NTX1RZUEVfVjJfUDFQTEw7Ci0JCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSBzcy0+YW1vdW50OwotCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IHNzLT5zdGVwOworCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gY3B1X3RvX2xlMTYoc3MtPmFtb3VudCk7CisJCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1TdGVwID0gY3B1X3RvX2xlMTYoc3MtPnN0ZXApOwogCQkJYnJlYWs7CiAJCWNhc2UgQVRPTV9QUExMMjoKIAkJCWFyZ3MudjIudWNTcHJlYWRTcGVjdHJ1bVR5cGUgfD0gQVRPTV9QUExMX1NTX1RZUEVfVjJfUDJQTEw7Ci0JCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSBzcy0+YW1vdW50OwotCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IHNzLT5zdGVwOworCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gY3B1X3RvX2xlMTYoc3MtPmFtb3VudCk7CisJCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1TdGVwID0gY3B1X3RvX2xlMTYoc3MtPnN0ZXApOwogCQkJYnJlYWs7CiAJCWNhc2UgQVRPTV9EQ1BMTDoKIAkJCWFyZ3MudjIudWNTcHJlYWRTcGVjdHJ1bVR5cGUgfD0gQVRPTV9QUExMX1NTX1RZUEVfVjJfRENQTEw7Ci0JCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSAwOwotCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IDA7CisJCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSBjcHVfdG9fbGUxNigwKTsKKwkJCWFyZ3MudjIudXNTcHJlYWRTcGVjdHJ1bVN0ZXAgPSBjcHVfdG9fbGUxNigwKTsKIAkJCWJyZWFrOwogCQljYXNlIEFUT01fUFBMTF9JTlZBTElEOgogCQkJcmV0dXJuOwpAQCAtNTM4LDcgKzUzOCw2IEBACiAJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0hJR0hfRkJfRElWOwogCQllbHNlCiAJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0xPV19SRUZfRElWOwotCiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKQEAgLTU1NSwyMyArNTU0LDI4IEBACiAJCQkJCWRwX2Nsb2NrID0gZGlnX2Nvbm5lY3Rvci0+ZHBfY2xvY2s7CiAJCQkJfQogCQkJfQotI2lmIDAgLyogZG9lc24ndCB3b3JrIHByb3Blcmx5IG9uIHNvbWUgbGFwdG9wcyAqLworCiAJCQkvKiB1c2UgcmVjb21tZW5kZWQgcmVmX2RpdiBmb3Igc3MgKi8KIAkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKIAkJCQlpZiAoc3NfZW5hYmxlZCkgewogCQkJCQlpZiAoc3MtPnJlZmRpdikgeworCQkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX1BSRUZFUl9NSU5NX09WRVJfTUFYUDsKIAkJCQkJCXBsbC0+ZmxhZ3MgfD0gUkFERU9OX1BMTF9VU0VfUkVGX0RJVjsKIAkJCQkJCXBsbC0+cmVmZXJlbmNlX2RpdiA9IHNzLT5yZWZkaXY7CisJCQkJCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfVVNFX0ZSQUNfRkJfRElWOwogCQkJCQl9CiAJCQkJfQogCQkJfQotI2VuZGlmCisKIAkJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CiAJCQkJLyogRFZPIHdhbnRzIDJ4IHBpeGVsIGNsb2NrIGlmIHRoZSBEVk8gY2hpcCBpcyBpbiAxMiBiaXQgbW9kZSAqLwogCQkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCA9PSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfRFZPMSkKIAkJCQkJYWRqdXN0ZWRfY2xvY2sgPSBtb2RlLT5jbG9jayAqIDI7CiAJCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQogCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0NMT1NFU1RfTE9XRVI7CisJCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkKKwkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX0lTX0xDRDsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGVuY29kZXItPmVuY29kZXJfdHlwZSAhPSBEUk1fTU9ERV9FTkNPREVSX0RBQykKIAkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX05PX09ERF9QT1NUX0RJVjsKQEAgLTYwNiwxNCArNjEwLDkgQEAKIAkJCQlhcmdzLnYxLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KG1vZGUtPmNsb2NrIC8gMTApOwogCQkJCWFyZ3MudjEudWNUcmFuc21pdHRlcklEID0gcmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQ7CiAJCQkJYXJncy52MS51Y0VuY29kZU1vZGUgPSBlbmNvZGVyX21vZGU7Ci0JCQkJaWYgKGVuY29kZXJfbW9kZSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9EUCkgewotCQkJCQlpZiAoc3NfZW5hYmxlZCkKLQkJCQkJCWFyZ3MudjEudWNDb25maWcgfD0KLQkJCQkJCQlBREpVU1RfRElTUExBWV9DT05GSUdfU1NfRU5BQkxFOwotCQkJCX0gZWxzZSBpZiAoZW5jb2Rlcl9tb2RlID09IEFUT01fRU5DT0RFUl9NT0RFX0xWRFMpIHsKKwkJCQlpZiAoc3NfZW5hYmxlZCkKIAkJCQkJYXJncy52MS51Y0NvbmZpZyB8PQogCQkJCQkJQURKVVNUX0RJU1BMQVlfQ09ORklHX1NTX0VOQUJMRTsKLQkJCQl9CiAKIAkJCQlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwKIAkJCQkJCSAgIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CkBAIC02MjQsMTIgKzYyMywxMiBAQAogCQkJCWFyZ3MudjMuc0lucHV0LnVjVHJhbnNtaXR0ZXJJRCA9IHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkOwogCQkJCWFyZ3MudjMuc0lucHV0LnVjRW5jb2RlTW9kZSA9IGVuY29kZXJfbW9kZTsKIAkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgPSAwOworCQkJCWlmIChzc19lbmFibGVkKQorCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KKwkJCQkJCURJU1BQTExfQ09ORklHX1NTX0VOQUJMRTsKIAkJCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfREZQX1NVUFBPUlQpKSB7CiAJCQkJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OwogCQkJCQlpZiAoZW5jb2Rlcl9tb2RlID09IEFUT01fRU5DT0RFUl9NT0RFX0RQKSB7Ci0JCQkJCQlpZiAoc3NfZW5hYmxlZCkKLQkJCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KLQkJCQkJCQkJRElTUFBMTF9DT05GSUdfU1NfRU5BQkxFOwogCQkJCQkJYXJncy52My5zSW5wdXQudWNEaXNwUGxsQ29uZmlnIHw9CiAJCQkJCQkJRElTUFBMTF9DT05GSUdfQ09IRVJFTlRfTU9ERTsKIAkJCQkJCS8qIDE2MjAwIG9yIDI3MDAwICovCkBAIC02NDksMTggKzY0OCwxMSBAQAogCQkJCQl9CiAJCQkJfSBlbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKIAkJCQkJaWYgKGVuY29kZXJfbW9kZSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9EUCkgewotCQkJCQkJaWYgKHNzX2VuYWJsZWQpCi0JCQkJCQkJYXJncy52My5zSW5wdXQudWNEaXNwUGxsQ29uZmlnIHw9Ci0JCQkJCQkJCURJU1BQTExfQ09ORklHX1NTX0VOQUJMRTsKIAkJCQkJCWFyZ3MudjMuc0lucHV0LnVjRGlzcFBsbENvbmZpZyB8PQogCQkJCQkJCURJU1BQTExfQ09ORklHX0NPSEVSRU5UX01PREU7CiAJCQkJCQkvKiAxNjIwMCBvciAyNzAwMCAqLwogCQkJCQkJYXJncy52My5zSW5wdXQudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoZHBfY2xvY2sgLyAxMCk7Ci0JCQkJCX0gZWxzZSBpZiAoZW5jb2Rlcl9tb2RlID09IEFUT01fRU5DT0RFUl9NT0RFX0xWRFMpIHsKLQkJCQkJCWlmIChzc19lbmFibGVkKQotCQkJCQkJCWFyZ3MudjMuc0lucHV0LnVjRGlzcFBsbENvbmZpZyB8PQotCQkJCQkJCQlESVNQUExMX0NPTkZJR19TU19FTkFCTEU7Ci0JCQkJCX0gZWxzZSB7CisJCQkJCX0gZWxzZSBpZiAoZW5jb2Rlcl9tb2RlICE9IEFUT01fRU5DT0RFUl9NT0RFX0xWRFMpIHsKIAkJCQkJCWlmIChtb2RlLT5jbG9jayA+IDE2NTAwMCkKIAkJCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KIAkJCQkJCQkJRElTUFBMTF9DT05GSUdfRFVBTF9MSU5LOwpAQCAtNjcwLDEwICs2NjIsMTIgQEAKIAkJCQkJCSAgIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CiAJCQkJYWRqdXN0ZWRfY2xvY2sgPSBsZTMyX3RvX2NwdShhcmdzLnYzLnNPdXRwdXQudWxEaXNwUGxsRnJlcSkgKiAxMDsKIAkJCQlpZiAoYXJncy52My5zT3V0cHV0LnVjUmVmRGl2KSB7CisJCQkJCXBsbC0+ZmxhZ3MgfD0gUkFERU9OX1BMTF9VU0VfRlJBQ19GQl9ESVY7CiAJCQkJCXBsbC0+ZmxhZ3MgfD0gUkFERU9OX1BMTF9VU0VfUkVGX0RJVjsKIAkJCQkJcGxsLT5yZWZlcmVuY2VfZGl2ID0gYXJncy52My5zT3V0cHV0LnVjUmVmRGl2OwogCQkJCX0KIAkJCQlpZiAoYXJncy52My5zT3V0cHV0LnVjUG9zdERpdikgeworCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfVVNFX0ZSQUNfRkJfRElWOwogCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfVVNFX1BPU1RfRElWOwogCQkJCQlwbGwtPnBvc3RfZGl2ID0gYXJncy52My5zT3V0cHV0LnVjUG9zdERpdjsKIAkJCQl9CkBAIC03MjcsMTQgKzcyMSwxNCBAQAogCQkJICogU2V0UGl4ZWxDbG9jayBwcm92aWRlcyB0aGUgZGl2aWRlcnMKIAkJCSAqLwogCQkJYXJncy52NS51Y0NSVEMgPSBBVE9NX0NSVENfSU5WQUxJRDsKLQkJCWFyZ3MudjUudXNQaXhlbENsb2NrID0gZGlzcGNsazsKKwkJCWFyZ3MudjUudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoZGlzcGNsayk7CiAJCQlhcmdzLnY1LnVjUHBsbCA9IEFUT01fRENQTEw7CiAJCQlicmVhazsKIAkJY2FzZSA2OgogCQkJLyogaWYgdGhlIGRlZmF1bHQgZGNwbGwgY2xvY2sgaXMgc3BlY2lmaWVkLAogCQkJICogU2V0UGl4ZWxDbG9jayBwcm92aWRlcyB0aGUgZGl2aWRlcnMKIAkJCSAqLwotCQkJYXJncy52Ni51bERpc3BFbmdDbGtGcmVxID0gZGlzcGNsazsKKwkJCWFyZ3MudjYudWxEaXNwRW5nQ2xrRnJlcSA9IGNwdV90b19sZTMyKGRpc3BjbGspOwogCQkJYXJncy52Ni51Y1BwbGwgPSBBVE9NX0RDUExMOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC05NjMsOCArOTU3LDEyIEBACiAJLyogYWRqdXN0IHBpeGVsIGNsb2NrIGFzIG5lZWRlZCAqLwogCWFkanVzdGVkX2Nsb2NrID0gYXRvbWJpb3NfYWRqdXN0X3BsbChjcnRjLCBtb2RlLCBwbGwsIHNzX2VuYWJsZWQsICZzcyk7CiAKLQlyYWRlb25fY29tcHV0ZV9wbGwocGxsLCBhZGp1c3RlZF9jbG9jaywgJnBsbF9jbG9jaywgJmZiX2RpdiwgJmZyYWNfZmJfZGl2LAotCQkJICAgJnJlZl9kaXYsICZwb3N0X2Rpdik7CisJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCXJhZGVvbl9jb21wdXRlX3BsbF9hdml2byhwbGwsIGFkanVzdGVkX2Nsb2NrLCAmcGxsX2Nsb2NrLCAmZmJfZGl2LCAmZnJhY19mYl9kaXYsCisJCQkJCSAmcmVmX2RpdiwgJnBvc3RfZGl2KTsKKwllbHNlCisJCXJhZGVvbl9jb21wdXRlX3BsbF9sZWdhY3kocGxsLCBhZGp1c3RlZF9jbG9jaywgJnBsbF9jbG9jaywgJmZiX2RpdiwgJmZyYWNfZmJfZGl2LAorCQkJCQkgICZyZWZfZGl2LCAmcG9zdF9kaXYpOwogCiAJYXRvbWJpb3NfY3J0Y19wcm9ncmFtX3NzKGNydGMsIEFUT01fRElTQUJMRSwgcmFkZW9uX2NydGMtPnBsbF9pZCwgJnNzKTsKIApAQCAtOTkzLDkgKzk5MSw5IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGV2ZXJncmVlbl9jcnRjX2RvX3NldF9iYXNlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCQkgICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKLQkJCQkgICAgICBpbnQgeCwgaW50IHksIGludCBhdG9taWMpCitzdGF0aWMgaW50IGRjZTRfY3J0Y19kb19zZXRfYmFzZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCSBpbnQgeCwgaW50IHksIGludCBhdG9taWMpCiB7CiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CkBAIC0xMDA2LDYgKzEwMDQsNyBAQAogCXN0cnVjdCByYWRlb25fYm8gKnJibzsKIAl1aW50NjRfdCBmYl9sb2NhdGlvbjsKIAl1aW50MzJfdCBmYl9mb3JtYXQsIGZiX3BpdGNoX3BpeGVscywgdGlsaW5nX2ZsYWdzOworCXUzMiBmYl9zd2FwID0gRVZFUkdSRUVOX0dSUEhfRU5ESUFOX1NXQVAoRVZFUkdSRUVOX0dSUEhfRU5ESUFOX05PTkUpOwogCWludCByOwogCiAJLyogbm8gZmIgYm91bmQgKi8KQEAgLTEwNTcsMTEgKzEwNTYsMTcgQEAKIAljYXNlIDE2OgogCQlmYl9mb3JtYXQgPSAoRVZFUkdSRUVOX0dSUEhfREVQVEgoRVZFUkdSRUVOX0dSUEhfREVQVEhfMTZCUFApIHwKIAkJCSAgICAgRVZFUkdSRUVOX0dSUEhfRk9STUFUKEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9BUkdCNTY1KSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCWZiX3N3YXAgPSBFVkVSR1JFRU5fR1JQSF9FTkRJQU5fU1dBUChFVkVSR1JFRU5fR1JQSF9FTkRJQU5fOElOMTYpOworI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgMjQ6CiAJY2FzZSAzMjoKIAkJZmJfZm9ybWF0ID0gKEVWRVJHUkVFTl9HUlBIX0RFUFRIKEVWRVJHUkVFTl9HUlBIX0RFUFRIXzMyQlBQKSB8CiAJCQkgICAgIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVChFVkVSR1JFRU5fR1JQSF9GT1JNQVRfQVJHQjg4ODgpKTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJZmJfc3dhcCA9IEVWRVJHUkVFTl9HUlBIX0VORElBTl9TV0FQKEVWRVJHUkVFTl9HUlBIX0VORElBTl84SU4zMik7CisjZW5kaWYKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0VSUk9SKCJVbnN1cHBvcnRlZCBzY3JlZW4gZGVwdGggJWRcbiIsCkBAIC0xMTA2LDYgKzExMTEsNyBAQAogCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAogCSAgICAgICAodTMyKSBmYl9sb2NhdGlvbiAmIEVWRVJHUkVFTl9HUlBIX1NVUkZBQ0VfQUREUkVTU19NQVNLKTsKIAlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfQ09OVFJPTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgZmJfZm9ybWF0KTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU1dBUF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBmYl9zd2FwKTsKIAogCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TVVJGQUNFX09GRlNFVF9YICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKIAlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU1VSRkFDRV9PRkZTRVRfWSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CkBAIC0xMTI3LDEyICsxMTMzLDYgQEAKIAlXUkVHMzIoRVZFUkdSRUVOX1ZJRVdQT1JUX1NJWkUgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCiAJICAgICAgIChjcnRjLT5tb2RlLmhkaXNwbGF5IDw8IDE2KSB8IGNydGMtPm1vZGUudmRpc3BsYXkpOwogCi0JaWYgKGNydGMtPm1vZGUuZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKLQkJV1JFRzMyKEVWRVJHUkVFTl9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKLQkJICAgICAgIEVWRVJHUkVFTl9JTlRFUkxFQVZFX0VOKTsKLQllbHNlCi0JCVdSRUczMihFVkVSR1JFRU5fREFUQV9GT1JNQVQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOwotCiAJaWYgKCFhdG9taWMgJiYgZmIgJiYgZmIgIT0gY3J0Yy0+ZmIpIHsKIAkJcmFkZW9uX2ZiID0gdG9fcmFkZW9uX2ZyYW1lYnVmZmVyKGZiKTsKIAkJcmJvID0gcmFkZW9uX2ZiLT5vYmotPmRyaXZlcl9wcml2YXRlOwpAQCAtMTE2Miw2ICsxMTYyLDcgQEAKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICp0YXJnZXRfZmI7CiAJdWludDY0X3QgZmJfbG9jYXRpb247CiAJdWludDMyX3QgZmJfZm9ybWF0LCBmYl9waXRjaF9waXhlbHMsIHRpbGluZ19mbGFnczsKKwl1MzIgZmJfc3dhcCA9IFI2MDBfRDFHUlBIX1NXQVBfRU5ESUFOX05PTkU7CiAJaW50IHI7CiAKIAkvKiBubyBmYiBib3VuZCAqLwpAQCAtMTIxNSwxMiArMTIxNiwxOCBAQAogCQlmYl9mb3JtYXQgPQogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfREVQVEhfMTZCUFAgfAogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfMTZCUFBfUkdCNTY1OworI2lmZGVmIF9fQklHX0VORElBTgorCQlmYl9zd2FwID0gUjYwMF9EMUdSUEhfU1dBUF9FTkRJQU5fMTZCSVQ7CisjZW5kaWYKIAkJYnJlYWs7CiAJY2FzZSAyNDoKIAljYXNlIDMyOgogCQlmYl9mb3JtYXQgPQogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfREVQVEhfMzJCUFAgfAogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfMzJCUFBfQVJHQjg4ODg7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCWZiX3N3YXAgPSBSNjAwX0QxR1JQSF9TV0FQX0VORElBTl8zMkJJVDsKKyNlbmRpZgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIHNjcmVlbiBkZXB0aCAlZFxuIiwKQEAgLTEyNjAsNiArMTI2Nyw4IEBACiAJV1JFRzMyKEFWSVZPX0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICsKIAkgICAgICAgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAodTMyKSBmYl9sb2NhdGlvbik7CiAJV1JFRzMyKEFWSVZPX0QxR1JQSF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBmYl9mb3JtYXQpOworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKQorCQlXUkVHMzIoUjYwMF9EMUdSUEhfU1dBUF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBmYl9zd2FwKTsKIAogCVdSRUczMihBVklWT19EMUdSUEhfU1VSRkFDRV9PRkZTRVRfWCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CiAJV1JFRzMyKEFWSVZPX0QxR1JQSF9TVVJGQUNFX09GRlNFVF9ZICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKQEAgLTEyODEsMTIgKzEyOTAsNiBAQAogCVdSRUczMihBVklWT19EMU1PREVfVklFV1BPUlRfU0laRSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKIAkgICAgICAgKGNydGMtPm1vZGUuaGRpc3BsYXkgPDwgMTYpIHwgY3J0Yy0+bW9kZS52ZGlzcGxheSk7CiAKLQlpZiAoY3J0Yy0+bW9kZS5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKQotCQlXUkVHMzIoQVZJVk9fRDFNT0RFX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAotCQkgICAgICAgQVZJVk9fRDFNT0RFX0lOVEVSTEVBVkVfRU4pOwotCWVsc2UKLQkJV1JFRzMyKEFWSVZPX0QxTU9ERV9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7Ci0KIAlpZiAoIWF0b21pYyAmJiBmYiAmJiBmYiAhPSBjcnRjLT5mYikgewogCQlyYWRlb25fZmIgPSB0b19yYWRlb25fZnJhbWVidWZmZXIoZmIpOwogCQlyYm8gPSByYWRlb25fZmItPm9iai0+ZHJpdmVyX3ByaXZhdGU7CkBAIC0xMzEwLDcgKzEzMTMsNyBAQAogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAogCWlmIChBU0lDX0lTX0RDRTQocmRldikpCi0JCXJldHVybiBldmVyZ3JlZW5fY3J0Y19kb19zZXRfYmFzZShjcnRjLCBvbGRfZmIsIHgsIHksIDApOworCQlyZXR1cm4gZGNlNF9jcnRjX2RvX3NldF9iYXNlKGNydGMsIG9sZF9mYiwgeCwgeSwgMCk7CiAJZWxzZSBpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKIAkJcmV0dXJuIGF2aXZvX2NydGNfZG9fc2V0X2Jhc2UoY3J0Yywgb2xkX2ZiLCB4LCB5LCAwKTsKIAllbHNlCkBAIC0xMzI1LDcgKzEzMjgsNyBAQAogICAgICAgIHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAogCWlmIChBU0lDX0lTX0RDRTQocmRldikpCi0JCXJldHVybiBldmVyZ3JlZW5fY3J0Y19kb19zZXRfYmFzZShjcnRjLCBmYiwgeCwgeSwgMSk7CisJCXJldHVybiBkY2U0X2NydGNfZG9fc2V0X2Jhc2UoY3J0YywgZmIsIHgsIHksIDEpOwogCWVsc2UgaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCiAJCXJldHVybiBhdml2b19jcnRjX2RvX3NldF9iYXNlKGNydGMsIGZiLCB4LCB5LCAxKTsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMKaW5kZXggNGU3Nzc4ZC4uNjk1ZGU5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYwpAQCAtMTg3LDkgKzE4Nyw5IEBACiBpbnQgZHBfbW9kZV92YWxpZCh1OCBkcGNkW0RQX0RQQ0RfU0laRV0sIGludCBtb2RlX2Nsb2NrKQogewogCWludCBsYW5lcyA9IGRwX2xhbmVzX2Zvcl9tb2RlX2Nsb2NrKGRwY2QsIG1vZGVfY2xvY2spOwotCWludCBidyA9IGRwX2xhbmVzX2Zvcl9tb2RlX2Nsb2NrKGRwY2QsIG1vZGVfY2xvY2spOworCWludCBkcF9jbG9jayA9IGRwX2xpbmtfY2xvY2tfZm9yX21vZGVfY2xvY2soZHBjZCwgbW9kZV9jbG9jayk7CiAKLQlpZiAoKGxhbmVzID09IDApIHx8IChidyA9PSAwKSkKKwlpZiAoKGxhbmVzID09IDApIHx8IChkcF9jbG9jayA9PSAwKSkKIAkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKIAogCXJldHVybiBNT0RFX09LOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKaW5kZXggYTg5NzNhYy4uZDI3MGIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCkBAIC05NywyNiArOTcsMjkgQEAKIH0KIAogLyogZ2V0IHRlbXBlcmF0dXJlIGluIG1pbGxpZGVncmVlcyAqLwotdTMyIGV2ZXJncmVlbl9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK2ludCBldmVyZ3JlZW5fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdTMyIHRlbXAgPSAoUlJFRzMyKENHX01VTFRfVEhFUk1BTF9TVEFUVVMpICYgQVNJQ19UX01BU0spID4+CiAJCUFTSUNfVF9TSElGVDsKIAl1MzIgYWN0dWFsX3RlbXAgPSAwOwogCi0JaWYgKCh0ZW1wID4+IDEwKSAmIDEpCi0JCWFjdHVhbF90ZW1wID0gMDsKLQllbHNlIGlmICgodGVtcCA+PiA5KSAmIDEpCisJaWYgKHRlbXAgJiAweDQwMCkKKwkJYWN0dWFsX3RlbXAgPSAtMjU2OworCWVsc2UgaWYgKHRlbXAgJiAweDIwMCkKIAkJYWN0dWFsX3RlbXAgPSAyNTU7Ci0JZWxzZQotCQlhY3R1YWxfdGVtcCA9ICh0ZW1wID4+IDEpICYgMHhmZjsKKwllbHNlIGlmICh0ZW1wICYgMHgxMDApIHsKKwkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHgxZmY7CisJCWFjdHVhbF90ZW1wIHw9IH4weDFmZjsKKwl9IGVsc2UKKwkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHhmZjsKIAotCXJldHVybiBhY3R1YWxfdGVtcCAqIDEwMDA7CisJcmV0dXJuIChhY3R1YWxfdGVtcCAqIDEwMDApIC8gMjsKIH0KIAotdTMyIHN1bW9fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitpbnQgc3Vtb19nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1MzIgdGVtcCA9IFJSRUczMihDR19USEVSTUFMX1NUQVRVUykgJiAweGZmOwotCXUzMiBhY3R1YWxfdGVtcCA9ICh0ZW1wID4+IDEpICYgMHhmZjsKKwlpbnQgYWN0dWFsX3RlbXAgPSB0ZW1wIC0gNDk7CiAKIAlyZXR1cm4gYWN0dWFsX3RlbXAgKiAxMDAwOwogfQpAQCAtMTE4Miw2ICsxMTg1LDIyIEBACiAvKgogICogQ1AuCiAgKi8KK3ZvaWQgZXZlcmdyZWVuX3JpbmdfaWJfZXhlY3V0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpCit7CisJLyogc2V0IHRvIERYMTAvMTEgbW9kZSAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19NT0RFX0NPTlRST0wsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAxKTsKKwkvKiBGSVhNRTogaW1wbGVtZW50ICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0lORElSRUNUX0JVRkZFUiwgMikpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJCQkgICgyIDw8IDApIHwKKyNlbmRpZgorCQkJICAoaWItPmdwdV9hZGRyICYgMHhGRkZGRkZGQykpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHVwcGVyXzMyX2JpdHMoaWItPmdwdV9hZGRyKSAmIDB4RkYpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGliLT5sZW5ndGhfZHcpOworfQorCiAKIHN0YXRpYyBpbnQgZXZlcmdyZWVuX2NwX2xvYWRfbWljcm9jb2RlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewpAQCAtMTE5Miw3ICsxMjExLDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcjcwMF9jcF9zdG9wKHJkZXYpOwotCVdSRUczMihDUF9SQl9DTlRMLCBSQl9OT19VUERBVEUgfCAoMTUgPDwgOCkgfCAoMyA8PCAwKSk7CisJV1JFRzMyKENQX1JCX0NOVEwsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJICAgICAgIEJVRl9TV0FQXzMyQklUIHwKKyNlbmRpZgorCSAgICAgICBSQl9OT19VUERBVEUgfCBSQl9CTEtTWigxNSkgfCBSQl9CVUZTWigzKSk7CiAKIAlmd19kYXRhID0gKGNvbnN0IF9fYmUzMiAqKXJkZXYtPnBmcF9mdy0+ZGF0YTsKIAlXUkVHMzIoQ1BfUEZQX1VDT0RFX0FERFIsIDApOwpAQCAtMTIzMyw3ICsxMjU2LDcgQEAKIAljcF9tZSA9IDB4ZmY7CiAJV1JFRzMyKENQX01FX0NOVEwsIGNwX21lKTsKIAotCXIgPSByYWRlb25fcmluZ19sb2NrKHJkZXYsIGV2ZXJncmVlbl9kZWZhdWx0X3NpemUgKyAxNSk7CisJciA9IHJhZGVvbl9yaW5nX2xvY2socmRldiwgZXZlcmdyZWVuX2RlZmF1bHRfc2l6ZSArIDE5KTsKIAlpZiAocikgewogCQlEUk1fRVJST1IoInJhZGVvbjogY3AgZmFpbGVkIHRvIGxvY2sgcmluZyAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwpAQCAtMTI2Niw2ICsxMjg5LDExIEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHhmZmZmZmZmZik7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHhmZmZmZmZmZik7CiAKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweGMwMDI2OTAwKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMzE2KTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMDBlKTsgLyogVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHgwMDAwMDAxMCk7IC8qICAqLworCiAJcmFkZW9uX3JpbmdfdW5sb2NrX2NvbW1pdChyZGV2KTsKIAogCXJldHVybiAwOwpAQCAtMTMwNiw3ICsxMzM0LDExIEBACiAJV1JFRzMyKENQX1JCX1dQVFIsIDApOwogCiAJLyogc2V0IHRoZSB3YiBhZGRyZXNzIHdldGhlciBpdCdzIGVuYWJsZWQgb3Igbm90ICovCi0JV1JFRzMyKENQX1JCX1JQVFJfQUREUiwgKHJkZXYtPndiLmdwdV9hZGRyICsgUkFERU9OX1dCX0NQX1JQVFJfT0ZGU0VUKSAmIDB4RkZGRkZGRkMpOworCVdSRUczMihDUF9SQl9SUFRSX0FERFIsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJICAgICAgIFJCX1JQVFJfU1dBUCgyKSB8CisjZW5kaWYKKwkgICAgICAgKChyZGV2LT53Yi5ncHVfYWRkciArIFJBREVPTl9XQl9DUF9SUFRSX09GRlNFVCkgJiAweEZGRkZGRkZDKSk7CiAJV1JFRzMyKENQX1JCX1JQVFJfQUREUl9ISSwgdXBwZXJfMzJfYml0cyhyZGV2LT53Yi5ncHVfYWRkciArIFJBREVPTl9XQl9DUF9SUFRSX09GRlNFVCkgJiAweEZGKTsKIAlXUkVHMzIoU0NSQVRDSF9BRERSLCAoKHJkZXYtPndiLmdwdV9hZGRyICsgUkFERU9OX1dCX1NDUkFUQ0hfT0ZGU0VUKSA+PiA4KSAmIDB4RkZGRkZGRkYpOwogCkBAIC0yMDcyLDYgKzIxMDQsNyBAQAogCVdSRUczMihWR1RfQ0FDSEVfSU5WQUxJREFUSU9OLCB2Z3RfY2FjaGVfaW52YWxpZGF0aW9uKTsKIAogCVdSRUczMihWR1RfR1NfVkVSVEVYX1JFVVNFLCAxNik7CisJV1JFRzMyKFBBX1NVX0xJTkVfU1RJUFBMRV9WQUxVRSwgMCk7CiAJV1JFRzMyKFBBX1NDX0xJTkVfU1RJUFBMRV9TVEFURSwgMCk7CiAKIAlXUkVHMzIoVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMLCAxNCk7CkBAIC0yMjAxLDYgKzIyMzQsOSBAQAogCXN0cnVjdCBldmVyZ3JlZW5fbWNfc2F2ZSBzYXZlOwogCXUzMiBncmJtX3Jlc2V0ID0gMDsKIAorCWlmICghKFJSRUczMihHUkJNX1NUQVRVUykgJiBHVUlfQUNUSVZFKSkKKwkJcmV0dXJuIDA7CisKIAlkZXZfaW5mbyhyZGV2LT5kZXYsICJHUFUgc29mdHJlc2V0IFxuIik7CiAJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBHUkJNX1NUQVRVUz0weCUwOFhcbiIsCiAJCVJSRUczMihHUkJNX1NUQVRVUykpOwpAQCAtMjYwMyw4ICsyNjM5LDggQEAKIAl3aGlsZSAocnB0ciAhPSB3cHRyKSB7CiAJCS8qIHdwdHIvcnB0ciBhcmUgaW4gYnl0ZXMhICovCiAJCXJpbmdfaW5kZXggPSBycHRyIC8gNDsKLQkJc3JjX2lkID0gIHJkZXYtPmloLnJpbmdbcmluZ19pbmRleF0gJiAweGZmOwotCQlzcmNfZGF0YSA9IHJkZXYtPmloLnJpbmdbcmluZ19pbmRleCArIDFdICYgMHhmZmZmZmZmOworCQlzcmNfaWQgPSAgbGUzMl90b19jcHUocmRldi0+aWgucmluZ1tyaW5nX2luZGV4XSkgJiAweGZmOworCQlzcmNfZGF0YSA9IGxlMzJfdG9fY3B1KHJkZXYtPmloLnJpbmdbcmluZ19pbmRleCArIDFdKSAmIDB4ZmZmZmZmZjsKIAogCQlzd2l0Y2ggKHNyY19pZCkgewogCQljYXNlIDE6IC8qIEQxIHZibGFuay92bGluZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2JsaXRfa21zLmMKaW5kZXggYjc1OGRjNy4uMmFkZmIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X2ttcy5jCkBAIC01NSw3ICs1NSw3IEBACiAJaWYgKGggPCA4KQogCQloID0gODsKIAotCWNiX2NvbG9yX2luZm8gPSAoKGZvcm1hdCA8PCAyKSB8ICgxIDw8IDI0KSk7CisJY2JfY29sb3JfaW5mbyA9ICgoZm9ybWF0IDw8IDIpIHwgKDEgPDwgMjQpIHwgKDEgPDwgOCkpOwogCXBpdGNoID0gKHcgLyA4KSAtIDE7CiAJc2xpY2UgPSAoKHcgKiBoKSAvIDY0KSAtIDE7CiAKQEAgLTEzMyw2ICsxMzMsOSBAQAogCiAJLyogaGlnaCBhZGRyLCBzdHJpZGUgKi8KIAlzcV92dHhfY29uc3RhbnRfd29yZDIgPSAoKHVwcGVyXzMyX2JpdHMoZ3B1X2FkZHIpICYgMHhmZikgfCAoMTYgPDwgOCkpOworI2lmZGVmIF9fQklHX0VORElBTgorCXNxX3Z0eF9jb25zdGFudF93b3JkMiB8PSAoMiA8PCAzMCk7CisjZW5kaWYKIAkvKiB4eXp3IHN3aXp6bGVzICovCiAJc3FfdnR4X2NvbnN0YW50X3dvcmQzID0gKDAgPDwgMykgfCAoMSA8PCA2KSB8ICgyIDw8IDkpIHwgKDMgPDwgMTIpOwogCkBAIC0xNzMsNyArMTc2LDcgQEAKIAlzcV90ZXhfcmVzb3VyY2Vfd29yZDAgPSAoMSA8PCAwKTsgLyogMkQgKi8KIAlzcV90ZXhfcmVzb3VyY2Vfd29yZDAgfD0gKCgoKHBpdGNoID4+IDMpIC0gMSkgPDwgNikgfAogCQkJCSAgKCh3IC0gMSkgPDwgMTgpKTsKLQlzcV90ZXhfcmVzb3VyY2Vfd29yZDEgPSAoKGggLSAxKSA8PCAwKTsKKwlzcV90ZXhfcmVzb3VyY2Vfd29yZDEgPSAoKGggLSAxKSA8PCAwKSB8ICgxIDw8IDI4KTsKIAkvKiB4eXp3IHN3aXp6bGVzICovCiAJc3FfdGV4X3Jlc291cmNlX3dvcmQ0ID0gKDAgPDwgMTYpIHwgKDEgPDwgMTkpIHwgKDIgPDwgMjIpIHwgKDMgPDwgMjUpOwogCkBAIC0yMjEsNyArMjI0LDExIEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgRElfUFRfUkVDVExJU1QpOwogCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0lOREVYX1RZUEUsIDApKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBESV9JTkRFWF9TSVpFXzE2X0JJVCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCSAgKDIgPDwgMikgfAorI2VuZGlmCisJCQkgIERJX0lOREVYX1NJWkVfMTZfQklUKTsKIAogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19OVU1fSU5TVEFOQ0VTLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMSk7CkBAIC0yMzIsNyArMjM5LDcgQEAKIAogfQogCi0vKiBlbWl0cyAzMCAqLworLyogZW1pdHMgMzYgKi8KIHN0YXRpYyB2b2lkCiBzZXRfZGVmYXVsdF9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKQEAgLTI0NSw2ICsyNTIsOCBAQAogCWludCBudW1faHNfdGhyZWFkcywgbnVtX2xzX3RocmVhZHM7CiAJaW50IG51bV9wc19zdGFja19lbnRyaWVzLCBudW1fdnNfc3RhY2tfZW50cmllcywgbnVtX2dzX3N0YWNrX2VudHJpZXMsIG51bV9lc19zdGFja19lbnRyaWVzOwogCWludCBudW1faHNfc3RhY2tfZW50cmllcywgbnVtX2xzX3N0YWNrX2VudHJpZXM7CisJdTY0IGdwdV9hZGRyOworCWludCBkd29yZHM7CiAKIAlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCWNhc2UgQ0hJUF9DRURBUjoKQEAgLTQ5Nyw2ICs1MDYsMTggQEAKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMDAwKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMDAwKTsKIAorCS8qIHNldCB0byBEWDEwLzExIG1vZGUgKi8KKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfTU9ERV9DT05UUk9MLCAwKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMSk7CisKKwkvKiBlbWl0IGFuIElCIHBvaW50aW5nIGF0IGRlZmF1bHQgc3RhdGUgKi8KKwlkd29yZHMgPSBBTElHTihyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuLCAweDEwKTsKKwlncHVfYWRkciA9IHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfZ3B1X2FkZHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0OworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19JTkRJUkVDVF9CVUZGRVIsIDIpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBncHVfYWRkciAmIDB4RkZGRkZGRkMpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHVwcGVyXzMyX2JpdHMoZ3B1X2FkZHIpICYgMHhGRik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZHdvcmRzKTsKKwogfQogCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90IGkyZih1aW50MzJfdCBpbnB1dCkKQEAgLTUyNyw4ICs1NDgsMTAgQEAKIGludCBldmVyZ3JlZW5fYmxpdF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXUzMiBvYmpfc2l6ZTsKLQlpbnQgcjsKKwlpbnQgaSwgciwgZHdvcmRzOwogCXZvaWQgKnB0cjsKKwl1MzIgcGFja2V0MnNbMTZdOworCWludCBudW1fcGFja2V0MnMgPSAwOwogCiAJLyogcGluIGNvcHkgc2hhZGVyIGludG8gdnJhbSBpZiBhbHJlYWR5IGluaXRpYWxpemVkICovCiAJaWYgKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKQpAQCAtNTM2LDggKzU1OSwxNyBAQAogCiAJbXV0ZXhfaW5pdCgmcmRldi0+cjYwMF9ibGl0Lm11dGV4KTsKIAlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ID0gMDsKLQlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuID0gMDsKLQlvYmpfc2l6ZSA9IDA7CisKKwlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuID0gZXZlcmdyZWVuX2RlZmF1bHRfc2l6ZTsKKworCWR3b3JkcyA9IHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW47CisJd2hpbGUgKGR3b3JkcyAmIDB4ZikgeworCQlwYWNrZXQyc1tudW1fcGFja2V0MnMrK10gPSBjcHVfdG9fbGUzMihQQUNLRVQyKDApKTsKKwkJZHdvcmRzKys7CisJfQorCisJb2JqX3NpemUgPSBkd29yZHMgKiA0OworCW9ial9zaXplID0gQUxJR04ob2JqX3NpemUsIDI1Nik7CiAKIAlyZGV2LT5yNjAwX2JsaXQudnNfb2Zmc2V0ID0gb2JqX3NpemU7CiAJb2JqX3NpemUgKz0gZXZlcmdyZWVuX3ZzX3NpemUgKiA0OwpAQCAtNTY3LDggKzU5OSwxNiBAQAogCQlyZXR1cm4gcjsKIAl9CiAKLQltZW1jcHkocHRyICsgcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCwgZXZlcmdyZWVuX3ZzLCBldmVyZ3JlZW5fdnNfc2l6ZSAqIDQpOwotCW1lbWNweShwdHIgKyByZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0LCBldmVyZ3JlZW5fcHMsIGV2ZXJncmVlbl9wc19zaXplICogNCk7CisJbWVtY3B5X3RvaW8ocHRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCwKKwkJICAgIGV2ZXJncmVlbl9kZWZhdWx0X3N0YXRlLCByZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICogNCk7CisKKwlpZiAobnVtX3BhY2tldDJzKQorCQltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ICsgKHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKiA0KSwKKwkJCSAgICBwYWNrZXQycywgbnVtX3BhY2tldDJzICogNCk7CisJZm9yIChpID0gMDsgaSA8IGV2ZXJncmVlbl92c19zaXplOyBpKyspCisJCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihldmVyZ3JlZW5fdnNbaV0pOworCWZvciAoaSA9IDA7IGkgPCBldmVyZ3JlZW5fcHNfc2l6ZTsgaSsrKQorCQkqKHUzMiAqKSgodW5zaWduZWQgbG9uZylwdHIgKyByZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0ICsgaSAqIDQpID0gY3B1X3RvX2xlMzIoZXZlcmdyZWVuX3BzW2ldKTsKIAlyYWRlb25fYm9fa3VubWFwKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIAlyYWRlb25fYm9fdW5yZXNlcnZlKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIApAQCAtNjUyLDcgKzY5Miw3IEBACiAJLyogY2FsY3VsYXRlIG51bWJlciBvZiBsb29wcyBjb3JyZWN0bHkgKi8KIAlyaW5nX3NpemUgPSBudW1fbG9vcHMgKiBkd29yZHNfcGVyX2xvb3A7CiAJLyogc2V0IGRlZmF1bHQgICsgc2hhZGVycyAqLwotCXJpbmdfc2l6ZSArPSA0NjsgLyogc2hhZGVycyArIGRlZiBzdGF0ZSAqLworCXJpbmdfc2l6ZSArPSA1MjsgLyogc2hhZGVycyArIGRlZiBzdGF0ZSAqLwogCXJpbmdfc2l6ZSArPSAxMDsgLyogZmVuY2UgZW1pdCBmb3IgVkIgSUIgKi8KIAlyaW5nX3NpemUgKz0gNTsgLyogZG9uZSBjb3B5ICovCiAJcmluZ19zaXplICs9IDEwOyAvKiBmZW5jZSBlbWl0IGZvciBkb25lIGNvcHkgKi8KQEAgLTY2MCw3ICs3MDAsNyBAQAogCWlmIChyKQogCQlyZXR1cm4gcjsKIAotCXNldF9kZWZhdWx0X3N0YXRlKHJkZXYpOyAvKiAzMCAqLworCXNldF9kZWZhdWx0X3N0YXRlKHJkZXYpOyAvKiAzNiAqLwogCXNldF9zaGFkZXJzKHJkZXYpOyAvKiAxNiAqLwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9zaGFkZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X3NoYWRlcnMuYwppbmRleCBlZjFkMjhjLi4zYTEwMzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X3NoYWRlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X3NoYWRlcnMuYwpAQCAtMzExLDExICszMTEsMTkgQEAKIAkweDAwMDAwMDAwLAogCTB4M2MwMDAwMDAsCiAJMHg2Nzk2MTAwMSwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkweDAwMGEwMDAwLAorI2Vsc2UKIAkweDAwMDgwMDAwLAorI2VuZGlmCiAJMHgwMDAwMDAwMCwKIAkweDFjMDAwMDAwLAogCTB4Njc5NjEwMDAsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJMHgwMDAyMDAwOCwKKyNlbHNlCiAJMHgwMDAwMDAwOCwKKyNlbmRpZgogCTB4MDAwMDAwMDAsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCmluZGV4IDM2ZDMyZDguLmViNGFjZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCkBAIC05OCw2ICs5OCw3IEBACiAjZGVmaW5lCQlCVUZfU1dBUF8zMkJJVAkJCQkJKDIgPDwgMTYpCiAjZGVmaW5lCUNQX1JCX1JQVFIJCQkJCTB4ODcwMAogI2RlZmluZQlDUF9SQl9SUFRSX0FERFIJCQkJCTB4QzEwQworI2RlZmluZQkJUkJfUlBUUl9TV0FQKHgpCQkJCQkoKHgpIDw8IDApCiAjZGVmaW5lCUNQX1JCX1JQVFJfQUREUl9ISQkJCQkweEMxMTAKICNkZWZpbmUJQ1BfUkJfUlBUUl9XUgkJCQkJMHhDMTA4CiAjZGVmaW5lCUNQX1JCX1dQVFIJCQkJCTB4QzExNApAQCAtMjQwLDYgKzI0MSw3IEBACiAjZGVmaW5lCQlGT1JDRV9FT1ZfTUFYX0NMS19DTlQoeCkJCQkoKHgpIDw8IDApCiAjZGVmaW5lCQlGT1JDRV9FT1ZfTUFYX1JFWl9DTlQoeCkJCQkoKHgpIDw8IDE2KQogI2RlZmluZSBQQV9TQ19MSU5FX1NUSVBQTEUJCQkJMHgyOEEwQworI2RlZmluZQlQQV9TVV9MSU5FX1NUSVBQTEVfVkFMVUUJCQkweDhBNjAKICNkZWZpbmUJUEFfU0NfTElORV9TVElQUExFX1NUQVRFCQkJMHg4QjEwCiAKICNkZWZpbmUJU0NSQVRDSF9SRUcwCQkJCQkweDg1MDAKQEAgLTY1Miw2ICs2NTQsNyBAQAogI2RlZmluZQlQQUNLRVQzX0RJU1BBVENIX0RJUkVDVAkJCQkweDE1CiAjZGVmaW5lCVBBQ0tFVDNfRElTUEFUQ0hfSU5ESVJFQ1QJCQkweDE2CiAjZGVmaW5lCVBBQ0tFVDNfSU5ESVJFQ1RfQlVGRkVSX0VORAkJCTB4MTcKKyNkZWZpbmUJUEFDS0VUM19NT0RFX0NPTlRST0wJCQkJMHgxOAogI2RlZmluZQlQQUNLRVQzX1NFVF9QUkVESUNBVElPTgkJCQkweDIwCiAjZGVmaW5lCVBBQ0tFVDNfUkVHX1JNVwkJCQkJMHgyMQogI2RlZmluZQlQQUNLRVQzX0NPTkRfRVhFQwkJCQkweDIyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL21rcmVndGFibGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jCmluZGV4IDYwNzI0MWMuLjVhODJiNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jCkBAIC02NzMsOCArNjczLDEwIEBACiAJbGFzdF9yZWcgPSBzdHJ0b2wobGFzdF9yZWdfcywgTlVMTCwgMTYpOwogCiAJZG8gewotCQlpZiAoZmdldHMoYnVmLCAxMDI0LCBmaWxlKSA9PSBOVUxMKQorCQlpZiAoZmdldHMoYnVmLCAxMDI0LCBmaWxlKSA9PSBOVUxMKSB7CisJCQlmY2xvc2UoZmlsZSk7CiAJCQlyZXR1cm4gLTE7CisJCX0KIAkJbGVuID0gc3RybGVuKGJ1Zik7CiAJCWlmIChmdGVsbChmaWxlKSA9PSBlbmQpCiAJCQlkb25lID0gMTsKQEAgLTY4NSw2ICs2ODcsNyBAQAogCQkJCWZwcmludGYoc3RkZXJyLAogCQkJCQkiRXJyb3IgbWF0Y2hpbmcgcmVndWxhciBleHByZXNzaW9uICVkIGluICVzXG4iLAogCQkJCQlyLCBmaWxlbmFtZSk7CisJCQkJZmNsb3NlKGZpbGUpOwogCQkJCXJldHVybiAtMTsKIAkJCX0gZWxzZSB7CiAJCQkJYnVmW21hdGNoWzBdLnJtX2VvXSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCmluZGV4IDQ2ZGE1MTQuLjkzZmE3MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCkBAIC0xMDMxLDggKzEwMzEsOCBAQAogCVdSRUczMihSQURFT05fQ1BfQ1NRX01PREUsCiAJICAgICAgIFJFR19TRVQoUkFERU9OX0lORElSRUNUMl9TVEFSVCwgaW5kaXJlY3QyX3N0YXJ0KSB8CiAJICAgICAgIFJFR19TRVQoUkFERU9OX0lORElSRUNUMV9TVEFSVCwgaW5kaXJlY3QxX3N0YXJ0KSk7Ci0JV1JFRzMyKDB4NzE4LCAwKTsKLQlXUkVHMzIoMHg3NDQsIDB4MDAwMDRENEQpOworCVdSRUczMihSQURFT05fQ1BfUkJfV1BUUl9ERUxBWSwgMCk7CisJV1JFRzMyKFJBREVPTl9DUF9DU1FfTU9ERSwgMHgwMDAwNEQ0RCk7CiAJV1JFRzMyKFJBREVPTl9DUF9DU1FfQ05UTCwgUkFERU9OX0NTUV9QUklCTV9JTkRCTSk7CiAJcmFkZW9uX3Jpbmdfc3RhcnQocmRldik7CiAJciA9IHJhZGVvbl9yaW5nX3Rlc3QocmRldik7CkBAIC0xNDI3LDYgKzE0MjcsNyBAQAogCQl9CiAJCXRyYWNrLT56Yi5yb2JqID0gcmVsb2MtPnJvYmo7CiAJCXRyYWNrLT56Yi5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DT0xPUk9GRlNFVDoKQEAgLTE0MzksNiArMTQ0MCw3IEBACiAJCX0KIAkJdHJhY2stPmNiWzBdLnJvYmogPSByZWxvYy0+cm9iajsKIAkJdHJhY2stPmNiWzBdLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QUF9UWE9GRlNFVF8wOgpAQCAtMTQ1NCw2ICsxNDU2LDcgQEAKIAkJfQogCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDBfMDoKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDBfMToKQEAgLTE0NzEsNiArMTQ3NCw3IEBACiAJCXRyYWNrLT50ZXh0dXJlc1swXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWR4X3ZhbHVlOwogCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1swXS5jdWJlX2luZm9baV0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QxXzA6CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QxXzE6CkBAIC0xNDg4LDYgKzE0OTIsNyBAQAogCQl0cmFjay0+dGV4dHVyZXNbMV0uY3ViZV9pbmZvW2ldLm9mZnNldCA9IGlkeF92YWx1ZTsKIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbMV0uY3ViZV9pbmZvW2ldLnJvYmogPSByZWxvYy0+cm9iajsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMl8wOgogCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMl8xOgpAQCAtMTUwNSw5ICsxNTEwLDEyIEBACiAJCXRyYWNrLT50ZXh0dXJlc1syXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWR4X3ZhbHVlOwogCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1syXS5jdWJlX2luZm9baV0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkVfV0lEVEhfSEVJR0hUOgogCQl0cmFjay0+bWF4eSA9ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDB4N0ZGKTsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DT0xPUlBJVENIOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMTUyOCw5ICsxNTM2LDExIEBACiAJCWliW2lkeF0gPSB0bXA7CiAKIAkJdHJhY2stPmNiWzBdLnBpdGNoID0gaWR4X3ZhbHVlICYgUkFERU9OX0NPTE9SUElUQ0hfTUFTSzsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9ERVBUSFBJVENIOgogCQl0cmFjay0+emIucGl0Y2ggPSBpZHhfdmFsdWUgJiBSQURFT05fREVQVEhQSVRDSF9NQVNLOworCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0NOVEw6CiAJCXN3aXRjaCAoKGlkeF92YWx1ZSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikgewpAQCAtMTU1NSw2ICsxNTY1LDggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXRyYWNrLT56X2VuYWJsZWQgPSAhIShpZHhfdmFsdWUgJiBSQURFT05fWl9FTkFCTEUpOworCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOworCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX1pTVEVOQ0lMQ05UTDoKIAkJc3dpdGNoIChpZHhfdmFsdWUgJiAweGYpIHsKQEAgLTE1NzIsNiArMTU4NCw3IEBACiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQorCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX1pQQVNTX0FERFI6CiAJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CkBAIC0xNTg4LDYgKzE2MDEsNyBAQAogCQkJdWludDMyX3QgdGVtcCA9IGlkeF92YWx1ZSA+PiA0OwogCQkJZm9yIChpID0gMDsgaSA8IHRyYWNrLT5udW1fdGV4dHVyZTsgaSsrKQogCQkJCXRyYWNrLT50ZXh0dXJlc1tpXS5lbmFibGVkID0gISEodGVtcCAmICgxIDw8IGkpKTsKKwkJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFX1ZGX0NOVEw6CkBAIC0xNjAyLDEyICsxNjE2LDE0IEBACiAJCWkgPSAocmVnIC0gUkFERU9OX1BQX1RFWF9TSVpFXzApIC8gODsKIAkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gKGlkeF92YWx1ZSAmIFJBREVPTl9URVhfVVNJWkVfTUFTSykgKyAxOwogCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0ID0gKChpZHhfdmFsdWUgJiBSQURFT05fVEVYX1ZTSVpFX01BU0spID4+IFJBREVPTl9URVhfVlNJWkVfU0hJRlQpICsgMTsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8wOgogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8xOgogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8yOgogCQlpID0gKHJlZyAtIFJBREVPTl9QUF9URVhfUElUQ0hfMCkgLyA4OwogCQl0cmFjay0+dGV4dHVyZXNbaV0ucGl0Y2ggPSBpZHhfdmFsdWUgKyAzMjsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX1RYRklMVEVSXzA6CiAJY2FzZSBSQURFT05fUFBfVFhGSUxURVJfMToKQEAgLTE2MjEsNiArMTYzNyw3IEBACiAJCXRtcCA9IChpZHhfdmFsdWUgPj4gMjcpICYgMHg3OwogCQlpZiAodG1wID09IDIgfHwgdG1wID09IDYpCiAJCQl0cmFjay0+dGV4dHVyZXNbaV0ucm91bmR1cF9oID0gZmFsc2U7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QUF9UWEZPUk1BVF8wOgogCWNhc2UgUkFERU9OX1BQX1RYRk9STUFUXzE6CkBAIC0xNjczLDYgKzE2OTAsNyBAQAogCQl9CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bNF0ud2lkdGggPSAxIDw8ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDB4Zik7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bNF0uaGVpZ2h0ID0gMSA8PCAoKGlkeF92YWx1ZSA+PiAyMCkgJiAweGYpOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfRkFDRVNfMDoKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19GQUNFU18xOgpAQCAtMTY4Myw2ICsxNzAxLDcgQEAKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZV0ud2lkdGggPSAxIDw8ICgodG1wID4+IChmYWNlICogOCkpICYgMHhmKTsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZV0uaGVpZ2h0ID0gMSA8PCAoKHRtcCA+PiAoKGZhY2UgKiA4KSArIDQpKSAmIDB4Zik7CiAJCX0KKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAiRm9yYmlkZGVuIHJlZ2lzdGVyIDB4JTA0WCBpbiBjcyBhdCAlZFxuIiwKQEAgLTIzNDcsMTAgKzIzNjYsMTAgQEAKIAogCXRlbXAgPSBSUkVHMzIoUkFERU9OX0NPTkZJR19DTlRMKTsKIAlpZiAoc3RhdGUgPT0gZmFsc2UpIHsKLQkJdGVtcCAmPSB+KDE8PDgpOwotCQl0ZW1wIHw9ICgxPDw5KTsKKwkJdGVtcCAmPSB+UkFERU9OX0NGR19WR0FfUkFNX0VOOworCQl0ZW1wIHw9IFJBREVPTl9DRkdfVkdBX0lPX0RJUzsKIAl9IGVsc2UgewotCQl0ZW1wICY9IH4oMTw8OSk7CisJCXRlbXAgJj0gflJBREVPTl9DRkdfVkdBX0lPX0RJUzsKIAl9CiAJV1JFRzMyKFJBREVPTl9DT05GSUdfQ05UTCwgdGVtcCk7CiB9CkBAIC0zMzE4LDkgKzMzMzcsOSBAQAogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAl1bnNpZ25lZCBwcmltX3dhbGs7CiAJdW5zaWduZWQgbnZlcnRzOwotCXVuc2lnbmVkIG51bV9jYiA9IHRyYWNrLT5udW1fY2I7CisJdW5zaWduZWQgbnVtX2NiID0gdHJhY2stPmNiX2RpcnR5ID8gdHJhY2stPm51bV9jYiA6IDA7CiAKLQlpZiAoIXRyYWNrLT56Yl9jYl9jbGVhciAmJiAhdHJhY2stPmNvbG9yX2NoYW5uZWxfbWFzayAmJgorCWlmIChudW1fY2IgJiYgIXRyYWNrLT56Yl9jYl9jbGVhciAmJiAhdHJhY2stPmNvbG9yX2NoYW5uZWxfbWFzayAmJgogCSAgICAhdHJhY2stPmJsZW5kX3JlYWRfZW5hYmxlKQogCQludW1fY2IgPSAwOwogCkBAIC0zMzQxLDcgKzMzNjAsOSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9Ci0JaWYgKHRyYWNrLT56X2VuYWJsZWQpIHsKKwl0cmFjay0+Y2JfZGlydHkgPSBmYWxzZTsKKworCWlmICh0cmFjay0+emJfZGlydHkgJiYgdHJhY2stPnpfZW5hYmxlZCkgewogCQlpZiAodHJhY2stPnpiLnJvYmogPT0gTlVMTCkgewogCQkJRFJNX0VSUk9SKCJbZHJtXSBObyBidWZmZXIgZm9yIHogYnVmZmVyICFcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMzU4LDYgKzMzNzksMjggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQorCXRyYWNrLT56Yl9kaXJ0eSA9IGZhbHNlOworCisJaWYgKHRyYWNrLT5hYV9kaXJ0eSAmJiB0cmFjay0+YWFyZXNvbHZlKSB7CisJCWlmICh0cmFjay0+YWEucm9iaiA9PSBOVUxMKSB7CisJCQlEUk1fRVJST1IoIltkcm1dIE5vIGJ1ZmZlciBmb3IgQUEgcmVzb2x2ZSBidWZmZXIgJWQgIVxuIiwgaSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQkvKiBJIGJlbGlldmUgdGhlIGZvcm1hdCBjb21lcyBmcm9tIGNvbG9yYnVmZmVyMC4gKi8KKwkJc2l6ZSA9IHRyYWNrLT5hYS5waXRjaCAqIHRyYWNrLT5jYlswXS5jcHAgKiB0cmFjay0+bWF4eTsKKwkJc2l6ZSArPSB0cmFjay0+YWEub2Zmc2V0OworCQlpZiAoc2l6ZSA+IHJhZGVvbl9ib19zaXplKHRyYWNrLT5hYS5yb2JqKSkgeworCQkJRFJNX0VSUk9SKCJbZHJtXSBCdWZmZXIgdG9vIHNtYWxsIGZvciBBQSByZXNvbHZlIGJ1ZmZlciAlZCAiCisJCQkJICAiKG5lZWQgJWx1IGhhdmUgJWx1KSAhXG4iLCBpLCBzaXplLAorCQkJCSAgcmFkZW9uX2JvX3NpemUodHJhY2stPmFhLnJvYmopKTsKKwkJCURSTV9FUlJPUigiW2RybV0gQUEgcmVzb2x2ZSBidWZmZXIgJWQgKCV1ICV1ICV1ICV1KVxuIiwKKwkJCQkgIGksIHRyYWNrLT5hYS5waXRjaCwgdHJhY2stPmNiWzBdLmNwcCwKKwkJCQkgIHRyYWNrLT5hYS5vZmZzZXQsIHRyYWNrLT5tYXh5KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCXRyYWNrLT5hYV9kaXJ0eSA9IGZhbHNlOworCiAJcHJpbV93YWxrID0gKHRyYWNrLT52YXBfdmZfY250bCA+PiA0KSAmIDB4MzsKIAlpZiAodHJhY2stPnZhcF92Zl9jbnRsICYgKDEgPDwgMTQpKSB7CiAJCW52ZXJ0cyA9IHRyYWNrLT52YXBfYWx0X252ZXJ0czsKQEAgLTM0MTcsMTMgKzM0NjAsMjMgQEAKIAkJCSAgcHJpbV93YWxrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXJldHVybiByMTAwX2NzX3RyYWNrX3RleHR1cmVfY2hlY2socmRldiwgdHJhY2spOworCisJaWYgKHRyYWNrLT50ZXhfZGlydHkpIHsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IGZhbHNlOworCQlyZXR1cm4gcjEwMF9jc190cmFja190ZXh0dXJlX2NoZWNrKHJkZXYsIHRyYWNrKTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgcjEwMF9jc190cmFja19jbGVhcihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrKQogewogCXVuc2lnbmVkIGksIGZhY2U7CiAKKwl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOworCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CisJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CisJdHJhY2stPmFhX2RpcnR5ID0gdHJ1ZTsKKwogCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX1IzMDApIHsKIAkJdHJhY2stPm51bV9jYiA9IDE7CiAJCWlmIChyZGV2LT5mYW1pbHkgPD0gQ0hJUF9SUzIwMCkKQEAgLTM0MzcsNiArMzQ5MCw4IEBACiAJCXRyYWNrLT5udW1fdGV4dHVyZSA9IDE2OwogCQl0cmFjay0+bWF4eSA9IDQwOTY7CiAJCXRyYWNrLT5zZXBhcmF0ZV9jdWJlID0gMDsKKwkJdHJhY2stPmFhcmVzb2x2ZSA9IGZhbHNlOworCQl0cmFjay0+YWEucm9iaiA9IE5VTEw7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IHRyYWNrLT5udW1fY2I7IGkrKykgewpAQCAtMzUyMiw3ICszNTc3LDcgQEAKIAlpZiAoaSA8IHJkZXYtPnVzZWNfdGltZW91dCkgewogCQlEUk1fSU5GTygicmluZyB0ZXN0IHN1Y2NlZWRlZCBpbiAlZCB1c2Vjc1xuIiwgaSk7CiAJfSBlbHNlIHsKLQkJRFJNX0VSUk9SKCJyYWRlb246IHJpbmcgdGVzdCBmYWlsZWQgKHNyYWN0aCgweCUwNFgpPTB4JTA4WClcbiIsCisJCURSTV9FUlJPUigicmFkZW9uOiByaW5nIHRlc3QgZmFpbGVkIChzY3JhdGNoKDB4JTA0WCk9MHglMDhYKVxuIiwKIAkJCSAgc2NyYXRjaCwgdG1wKTsKIAkJciA9IC1FSU5WQUw7CiAJfQpAQCAtMzc0Niw4ICszODAxLDYgQEAKIAlyMTAwX21jX3Byb2dyYW0ocmRldik7CiAJLyogUmVzdW1lIGNsb2NrICovCiAJcjEwMF9jbG9ja19zdGFydHVwKHJkZXYpOwotCS8qIEluaXRpYWxpemUgR1BVIGNvbmZpZ3VyYXRpb24gKCMgcGlwZXMsIC4uLikgKi8KLS8vCXIxMDBfZ3B1X2luaXQocmRldik7CiAJLyogSW5pdGlhbGl6ZSBHQVJUIChpbml0aWFsaXplIGFmdGVyIFRUTSBzbyB3ZSBjYW4gYWxsb2NhdGUKIAkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KIAlyMTAwX2VuYWJsZV9ibShyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKaW5kZXggYWY2NTYwMC4uMmZlZjlkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKQEAgLTUyLDE0ICs1Miw3IEBACiAJdW5zaWduZWQgICAgICAgICAgICAgICAgY29tcHJlc3NfZm9ybWF0OwogfTsKIAotc3RydWN0IHIxMDBfY3NfdHJhY2tfbGltaXRzIHsKLQl1bnNpZ25lZCBudW1fY2I7Ci0JdW5zaWduZWQgbnVtX3RleHR1cmU7Ci0JdW5zaWduZWQgbWF4X2xldmVsczsKLX07Ci0KIHN0cnVjdCByMTAwX2NzX3RyYWNrIHsKLQlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldjsKIAl1bnNpZ25lZAkJCW51bV9jYjsKIAl1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgIG51bV90ZXh0dXJlOwogCXVuc2lnbmVkCQkJbWF4eTsKQEAgLTczLDExICs2NiwxNyBAQAogCXN0cnVjdCByMTAwX2NzX3RyYWNrX2FycmF5CWFycmF5c1sxMV07CiAJc3RydWN0IHIxMDBfY3NfdHJhY2tfY2IgCWNiW1IzMDBfTUFYX0NCXTsKIAlzdHJ1Y3QgcjEwMF9jc190cmFja19jYiAJemI7CisJc3RydWN0IHIxMDBfY3NfdHJhY2tfY2IgCWFhOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrX3RleHR1cmUJdGV4dHVyZXNbUjMwMF9UUkFDS19NQVhfVEVYVFVSRV07CiAJYm9vbAkJCQl6X2VuYWJsZWQ7CiAJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZV9jdWJlOwogCWJvb2wJCQkJemJfY2JfY2xlYXI7CiAJYm9vbAkJCQlibGVuZF9yZWFkX2VuYWJsZTsKKwlib29sCQkJCWNiX2RpcnR5OworCWJvb2wJCQkJemJfZGlydHk7CisJYm9vbAkJCQl0ZXhfZGlydHk7CisJYm9vbAkJCQlhYV9kaXJ0eTsKKwlib29sCQkJCWFhcmVzb2x2ZTsKIH07CiAKIGludCByMTAwX2NzX3RyYWNrX2NoZWNrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYwppbmRleCBkMjQwOGMzLi5mMjQwNTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYwpAQCAtMTg0LDYgKzE4NCw3IEBACiAJCX0KIAkJdHJhY2stPnpiLnJvYmogPSByZWxvYy0+cm9iajsKIAkJdHJhY2stPnpiLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0NPTE9ST0ZGU0VUOgpAQCAtMTk2LDYgKzE5Nyw3IEBACiAJCX0KIAkJdHJhY2stPmNiWzBdLnJvYmogPSByZWxvYy0+cm9iajsKIAkJdHJhY2stPmNiWzBdLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFIyMDBfUFBfVFhPRkZTRVRfMDoKQEAgLTIxNCw2ICsyMTYsNyBAQAogCQl9CiAJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnJvYmogPSByZWxvYy0+cm9iajsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfMDoKIAljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YyXzA6CkBAIC0yNTcsOSArMjYwLDEyIEBACiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZSAtIDFdLm9mZnNldCA9IGlkeF92YWx1ZTsKIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvW2ZhY2UgLSAxXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SRV9XSURUSF9IRUlHSFQ6CiAJCXRyYWNrLT5tYXh5ID0gKChpZHhfdmFsdWUgPj4gMTYpICYgMHg3RkYpOworCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOworCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0NPTE9SUElUQ0g6CiAJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CkBAIC0yODAsOSArMjg2LDExIEBACiAJCWliW2lkeF0gPSB0bXA7CiAKIAkJdHJhY2stPmNiWzBdLnBpdGNoID0gaWR4X3ZhbHVlICYgUkFERU9OX0NPTE9SUElUQ0hfTUFTSzsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9ERVBUSFBJVENIOgogCQl0cmFjay0+emIucGl0Y2ggPSBpZHhfdmFsdWUgJiBSQURFT05fREVQVEhQSVRDSF9NQVNLOworCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0NOVEw6CiAJCXN3aXRjaCAoKGlkeF92YWx1ZSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikgewpAQCAtMzEyLDYgKzMyMCw4IEBACiAJCX0KIAogCQl0cmFjay0+el9lbmFibGVkID0gISEoaWR4X3ZhbHVlICYgUkFERU9OX1pfRU5BQkxFKTsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9aU1RFTkNJTENOVEw6CiAJCXN3aXRjaCAoaWR4X3ZhbHVlICYgMHhmKSB7CkBAIC0zMjksNiArMzM5LDcgQEAKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfWlBBU1NfQUREUjoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTM0NSw2ICszNTYsNyBAQAogCQkJdWludDMyX3QgdGVtcCA9IGlkeF92YWx1ZSA+PiA0OwogCQkJZm9yIChpID0gMDsgaSA8IHRyYWNrLT5udW1fdGV4dHVyZTsgaSsrKQogCQkJCXRyYWNrLT50ZXh0dXJlc1tpXS5lbmFibGVkID0gISEodGVtcCAmICgxIDw8IGkpKTsKKwkJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFX1ZGX0NOVEw6CkBAIC0zNjksNiArMzgxLDcgQEAKIAkJaSA9IChyZWcgLSBSMjAwX1BQX1RYU0laRV8wKSAvIDMyOwogCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAoaWR4X3ZhbHVlICYgUkFERU9OX1RFWF9VU0laRV9NQVNLKSArIDE7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAoKGlkeF92YWx1ZSAmIFJBREVPTl9URVhfVlNJWkVfTUFTSykgPj4gUkFERU9OX1RFWF9WU0laRV9TSElGVCkgKyAxOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX1RYUElUQ0hfMDoKIAljYXNlIFIyMDBfUFBfVFhQSVRDSF8xOgpAQCAtMzc4LDYgKzM5MSw3IEBACiAJY2FzZSBSMjAwX1BQX1RYUElUQ0hfNToKIAkJaSA9IChyZWcgLSBSMjAwX1BQX1RYUElUQ0hfMCkgLyAzMjsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnBpdGNoID0gaWR4X3ZhbHVlICsgMzI7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFIyMDBfUFBfVFhGSUxURVJfMDoKIAljYXNlIFIyMDBfUFBfVFhGSUxURVJfMToKQEAgLTM5NCw2ICs0MDgsNyBAQAogCQl0bXAgPSAoaWR4X3ZhbHVlID4+IDI3KSAmIDB4NzsKIAkJaWYgKHRtcCA9PSAyIHx8IHRtcCA9PSA2KQogCQkJdHJhY2stPnRleHR1cmVzW2ldLnJvdW5kdXBfaCA9IGZhbHNlOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX1RYTVVMVElfQ1RMXzA6CiAJY2FzZSBSMjAwX1BQX1RYTVVMVElfQ1RMXzE6CkBAIC00MzIsNiArNDQ3LDcgQEAKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS50ZXhfY29vcmRfdHlwZSA9IDE7CiAJCQlicmVhazsKIAkJfQorCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX1RYRk9STUFUXzA6CiAJY2FzZSBSMjAwX1BQX1RYRk9STUFUXzE6CkBAIC00ODgsNiArNTA0LDcgQEAKIAkJfQogCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLndpZHRoID0gMSA8PCAoKGlkeF92YWx1ZSA+PiAxNikgJiAweGYpOwogCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gMjApICYgMHhmKTsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9DVUJJQ19GQUNFU18wOgogCWNhc2UgUjIwMF9QUF9DVUJJQ19GQUNFU18xOgpAQCAtNTAxLDYgKzUxOCw3IEBACiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvW2ZhY2VdLndpZHRoID0gMSA8PCAoKHRtcCA+PiAoZmFjZSAqIDgpKSAmIDB4Zik7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvW2ZhY2VdLmhlaWdodCA9IDEgPDwgKCh0bXAgPj4gKChmYWNlICogOCkgKyA0KSkgJiAweGYpOwogCQl9CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIkZvcmJpZGRlbiByZWdpc3RlciAweCUwNFggaW4gY3MgYXQgJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCmluZGV4IGNmODYyY2EuLjA2OWVmYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCkBAIC02OSw2ICs2OSw5IEBACiAJbWIoKTsKIH0KIAorI2RlZmluZSBSMzAwX1BURV9XUklURUFCTEUgKDEgPDwgMikKKyNkZWZpbmUgUjMwMF9QVEVfUkVBREFCTEUgICgxIDw8IDMpCisKIGludCBydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKQogewogCXZvaWQgX19pb21lbSAqcHRyID0gKHZvaWQgKilyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucHRyOwpAQCAtNzgsNyArODEsNyBAQAogCX0KIAlhZGRyID0gKGxvd2VyXzMyX2JpdHMoYWRkcikgPj4gOCkgfAogCSAgICAgICAoKHVwcGVyXzMyX2JpdHMoYWRkcikgJiAweGZmKSA8PCAyNCkgfAotCSAgICAgICAweGM7CisJICAgICAgIFIzMDBfUFRFX1dSSVRFQUJMRSB8IFIzMDBfUFRFX1JFQURBQkxFOwogCS8qIG9uIHg4NiB3ZSB3YW50IHRoaXMgdG8gYmUgQ1BVIGVuZGlhbiwgb24gcG93ZXJwYwogCSAqIG9uIHBvd2VycGMgd2l0aG91dCBIVyBzd2FwcGVycywgaXQnbGwgZ2V0IHN3YXBwZWQgb24gd2F5CiAJICogaW50byBWUkFNIC0gc28gbm8gbmVlZCBmb3IgY3B1X3RvX2xlMzIgb24gVlJBTSB0YWJsZXMgKi8KQEAgLTEzNSw3ICsxMzgsNyBAQAogCVdSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0RJU0NBUkRfUkRfQUREUl9MTywgcmRldi0+bWMudnJhbV9zdGFydCk7CiAJV1JFRzMyX1BDSUUoUkFERU9OX1BDSUVfVFhfRElTQ0FSRF9SRF9BRERSX0hJLCAwKTsKIAkvKiBDbGVhciBlcnJvciAqLwotCVdSRUczMl9QQ0lFKDB4MTgsIDApOworCVdSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0dBUlRfRVJST1IsIDApOwogCXRtcCA9IFJSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0dBUlRfQ05UTCk7CiAJdG1wIHw9IFJBREVPTl9QQ0lFX1RYX0dBUlRfRU47CiAJdG1wIHw9IFJBREVPTl9QQ0lFX1RYX0dBUlRfVU5NQVBQRURfQUNDRVNTX0RJU0NBUkQ7CkBAIC02NjQsNiArNjY3LDcgQEAKIAkJfQogCQl0cmFjay0+Y2JbaV0ucm9iaiA9IHJlbG9jLT5yb2JqOwogCQl0cmFjay0+Y2JbaV0ub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOwogCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCWJyZWFrOwogCWNhc2UgUjMwMF9aQl9ERVBUSE9GRlNFVDoKQEAgLTY3Niw2ICs2ODAsNyBAQAogCQl9CiAJCXRyYWNrLT56Yi5yb2JqID0gcmVsb2MtPnJvYmo7CiAJCXRyYWNrLT56Yi5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSMzAwX1RYX09GRlNFVF8wOgpAQCAtNzE0LDYgKzcxOSw3IEBACiAJCXRtcCB8PSB0aWxlX2ZsYWdzOwogCQlpYltpZHhdID0gdG1wOwogCQl0cmFjay0+dGV4dHVyZXNbaV0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJLyogVHJhY2tlZCByZWdpc3RlcnMgKi8KIAljYXNlIDB4MjA4NDoKQEAgLTc0MCw2ICs3NDYsOCBAQAogCQlpZiAocC0+cmRldi0+ZmFtaWx5IDwgQ0hJUF9SVjUxNSkgewogCQkJdHJhY2stPm1heHkgLT0gMTQ0MDsKIAkJfQorCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOworCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIDB4NEUwMDoKIAkJLyogUkIzRF9DQ1RMICovCkBAIC03NDksNiArNzU3LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXRyYWNrLT5udW1fY2IgPSAoKGlkeF92YWx1ZSA+PiA1KSAmIDB4MykgKyAxOworCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIDB4NEUzODoKIAljYXNlIDB4NEUzQzoKQEAgLTgxMSw2ICs4MjAsNyBAQAogCQkJCSAgKChpZHhfdmFsdWUgPj4gMjEpICYgMHhGKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIDB4NEYwMDoKIAkJLyogWkJfQ05UTCAqLwpAQCAtODE5LDYgKzgyOSw3IEBACiAJCX0gZWxzZSB7CiAJCQl0cmFjay0+el9lbmFibGVkID0gZmFsc2U7CiAJCX0KKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDRGMTA6CiAJCS8qIFpCX0ZPUk1BVCAqLwpAQCAtODM1LDYgKzg0Niw3IEBACiAJCQkJICAoaWR4X3ZhbHVlICYgMHhGKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIDB4NEYyNDoKIAkJLyogWkJfREVQVEhQSVRDSCAqLwpAQCAtODU4LDE0ICs4NzAsMTcgQEAKIAkJaWJbaWR4XSA9IHRtcDsKIAogCQl0cmFjay0+emIucGl0Y2ggPSBpZHhfdmFsdWUgJiAweDNGRkM7CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgMHg0MTA0OgorCQkvKiBUWF9FTkFCTEUgKi8KIAkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKIAkJCWJvb2wgZW5hYmxlZDsKIAogCQkJZW5hYmxlZCA9ICEhKGlkeF92YWx1ZSAmICgxIDw8IGkpKTsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5lbmFibGVkID0gZW5hYmxlZDsKIAkJfQorCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDQ0QzA6CiAJY2FzZSAweDQ0QzQ6CkBAIC04OTUsNiArOTEwLDcgQEAKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jb21wcmVzc19mb3JtYXQgPSBSMTAwX1RSQUNLX0NPTVBfTk9ORTsKIAkJCWJyZWFrOwogCQljYXNlIFIzMDBfVFhfRk9STUFUX1gxNjoKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9GTF9JMTY6CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWThYODoKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9aNVk2WDU6CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWjZZNVg1OgpAQCAtOTA3LDYgKzkyMyw3IEBACiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY29tcHJlc3NfZm9ybWF0ID0gUjEwMF9UUkFDS19DT01QX05PTkU7CiAJCQlicmVhazsKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9ZMTZYMTY6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfRkxfSTE2QTE2OgogCQljYXNlIFIzMDBfVFhfRk9STUFUX1oxMVkxMVgxMDoKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9aMTBZMTFYMTE6CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfVzhaOFk4WDg6CkBAIC05NDgsOCArOTY1LDggQEAKIAkJCURSTV9FUlJPUigiSW52YWxpZCB0ZXh0dXJlIGZvcm1hdCAldVxuIiwKIAkJCQkgIChpZHhfdmFsdWUgJiAweDFGKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWJyZWFrOwogCQl9CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIDB4NDQwMDoKIAljYXNlIDB4NDQwNDoKQEAgLTk3Nyw2ICs5OTQsNyBAQAogCQlpZiAodG1wID09IDIgfHwgdG1wID09IDQgfHwgdG1wID09IDYpIHsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX2ggPSBmYWxzZTsKIAkJfQorCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDQ1MDA6CiAJY2FzZSAweDQ1MDQ6CkBAIC0xMDE0LDYgKzEwMzIsNyBAQAogCQkJRFJNX0VSUk9SKCJGb3JiaWRkZW4gYml0IFRYRk9STUFUX01TQlxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDQ0ODA6CiAJY2FzZSAweDQ0ODQ6CkBAIC0xMDQzLDYgKzEwNjIsNyBAQAogCQl0cmFjay0+dGV4dHVyZXNbaV0udXNlX3BpdGNoID0gISF0bXA7CiAJCXRtcCA9IChpZHhfdmFsdWUgPj4gMjIpICYgMHhGOwogCQl0cmFjay0+dGV4dHVyZXNbaV0udHhkZXB0aCA9IHRtcDsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUjMwMF9aQl9aUEFTU19BRERSOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMTA1Nyw2ICsxMDc3LDcgQEAKIAljYXNlIDB4NGUwYzoKIAkJLyogUkIzRF9DT0xPUl9DSEFOTkVMX01BU0sgKi8KIAkJdHJhY2stPmNvbG9yX2NoYW5uZWxfbWFzayA9IGlkeF92YWx1ZTsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDQzYTQ6CiAJCS8qIFNDX0hZUEVSWl9FTiAqLwpAQCAtMTA3MCw2ICsxMDkxLDggQEAKIAljYXNlIDB4NGYxYzoKIAkJLyogWkJfQldfQ05UTCAqLwogCQl0cmFjay0+emJfY2JfY2xlYXIgPSAhIShpZHhfdmFsdWUgJiAoMSA8PCA1KSk7CisJCXRyYWNrLT5jYl9kaXJ0eSA9IHRydWU7CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWlmIChwLT5yZGV2LT5oeXBlcnpfZmlscCAhPSBwLT5maWxwKSB7CiAJCQlpZiAoaWR4X3ZhbHVlICYgKFIzMDBfSElaX0VOQUJMRSB8CiAJCQkJCSBSMzAwX1JEX0NPTVBfRU5BQkxFIHwKQEAgLTEwODEsOCArMTEwNCwyOCBAQAogCWNhc2UgMHg0ZTA0OgogCQkvKiBSQjNEX0JMRU5EQ05UTCAqLwogCQl0cmFjay0+YmxlbmRfcmVhZF9lbmFibGUgPSAhIShpZHhfdmFsdWUgJiAoMSA8PCAyKSk7CisJCXRyYWNrLT5jYl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwotCWNhc2UgMHg0ZjI4OiAvKiBaQl9ERVBUSENMRUFSVkFMVUUgKi8KKwljYXNlIFIzMDBfUkIzRF9BQVJFU09MVkVfT0ZGU0VUOgorCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgaWJbJWRdPTB4JTA0WFxuIiwKKwkJCQkgIGlkeCwgcmVnKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisJCXRyYWNrLT5hYS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCXRyYWNrLT5hYS5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCXRyYWNrLT5hYV9kaXJ0eSA9IHRydWU7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSBSMzAwX1JCM0RfQUFSRVNPTFZFX1BJVENIOgorCQl0cmFjay0+YWEucGl0Y2ggPSBpZHhfdmFsdWUgJiAweDNGRkU7CisJCXRyYWNrLT5hYV9kaXJ0eSA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgUjMwMF9SQjNEX0FBUkVTT0xWRV9DVEw6CisJCXRyYWNrLT5hYXJlc29sdmUgPSBpZHhfdmFsdWUgJiAweDE7CisJCXRyYWNrLT5hYV9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgMHg0ZjMwOiAvKiBaQl9NQVNLX09GRlNFVCAqLwogCWNhc2UgMHg0ZjM0OiAvKiBaQl9aTUFTS19QSVRDSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oCmluZGV4IDFhMGQ1MzYuLmYwYmNlMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfcmVnLmgKQEAgLTEzNzEsNiArMTM3MSw4IEBACiAjZGVmaW5lIFIzMDBfUkIzRF9DT0xPUlBJVENIMiAgICAgICAgICAgICAgIDB4NEU0MCAvKiBHVUVTUyAqLwogI2RlZmluZSBSMzAwX1JCM0RfQ09MT1JQSVRDSDMgICAgICAgICAgICAgICAweDRFNDQgLyogR1VFU1MgKi8KIAorI2RlZmluZSBSMzAwX1JCM0RfQUFSRVNPTFZFX09GRlNFVCAgICAgICAgICAweDRFODAKKyNkZWZpbmUgUjMwMF9SQjNEX0FBUkVTT0xWRV9QSVRDSCAgICAgICAgICAgMHg0RTg0CiAjZGVmaW5lIFIzMDBfUkIzRF9BQVJFU09MVkVfQ1RMICAgICAgICAgICAgIDB4NEU4OAogLyogZ2FwICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKaW5kZXggYzM4NzM0Ni4uMGI1OWVkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKQEAgLTk2LDcgKzk2LDcgQEAKIAkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKIAl9CiAJLyogZ2V0IG1heCBudW1iZXIgb2YgcGlwZXMgKi8KLQlnYl9waXBlX3NlbGVjdCA9IFJSRUczMigweDQwMkMpOworCWdiX3BpcGVfc2VsZWN0ID0gUlJFRzMyKFI0MDBfR0JfUElQRV9TRUxFQ1QpOwogCW51bV9waXBlcyA9ICgoZ2JfcGlwZV9zZWxlY3QgPj4gMTIpICYgMykgKyAxOwogCiAJLyogU0UgY2hpcHMgaGF2ZSAxIHBpcGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKaW5kZXggM2M4Njc3Zi4uMmNlODBkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKQEAgLTc5LDggKzc5LDggQEAKIAkJV1JFRzMyKDB4NDEyOCwgMHhGRik7CiAJfQogCXI0MjBfcGlwZXNfaW5pdChyZGV2KTsKLQlnYl9waXBlX3NlbGVjdCA9IFJSRUczMigweDQwMkMpOwotCXRtcCA9IFJSRUczMigweDE3MEMpOworCWdiX3BpcGVfc2VsZWN0ID0gUlJFRzMyKFI0MDBfR0JfUElQRV9TRUxFQ1QpOworCXRtcCA9IFJSRUczMihSMzAwX0RTVF9QSVBFX0NPTkZJRyk7CiAJcGlwZV9zZWxlY3RfY3VycmVudCA9ICh0bXAgPj4gMikgJiAzOwogCXRtcCA9ICgxIDw8IHBpcGVfc2VsZWN0X2N1cnJlbnQpIHwKIAkgICAgICAoKChnYl9waXBlX3NlbGVjdCA+PiA4KSAmIDB4RikgPDwgNCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCmluZGV4IGFjYTIyMzYuLmRlODg2MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCkBAIC05NywxMiArOTcsMTYgQEAKIHN0YXRpYyB2b2lkIHI2MDBfcGNpZV9nZW4yX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIC8qIGdldCB0ZW1wZXJhdHVyZSBpbiBtaWxsaWRlZ3JlZXMgKi8KLXUzMiBydjZ4eF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK2ludCBydjZ4eF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1MzIgdGVtcCA9IChSUkVHMzIoQ0dfVEhFUk1BTF9TVEFUVVMpICYgQVNJQ19UX01BU0spID4+CiAJCUFTSUNfVF9TSElGVDsKKwlpbnQgYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHhmZjsKIAotCXJldHVybiB0ZW1wICogMTAwMDsKKwlpZiAodGVtcCAmIDB4MTAwKQorCQlhY3R1YWxfdGVtcCAtPSAyNTY7CisKKwlyZXR1cm4gYWN0dWFsX3RlbXAgKiAxMDAwOwogfQogCiB2b2lkIHI2MDBfcG1fZ2V0X2R5bnBtX3N0YXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpAQCAtMTI4Nyw2ICsxMjkxLDkgQEAKIAkJCVNfMDA4MDE0X0NCMl9CVVNZKDEpIHwgU18wMDgwMTRfQ0IzX0JVU1koMSk7CiAJdTMyIHRtcDsKIAorCWlmICghKFJSRUczMihHUkJNX1NUQVRVUykgJiBHVUlfQUNUSVZFKSkKKwkJcmV0dXJuIDA7CisKIAlkZXZfaW5mbyhyZGV2LT5kZXYsICJHUFUgc29mdHJlc2V0IFxuIik7CiAJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBSXzAwODAxMF9HUkJNX1NUQVRVUz0weCUwOFhcbiIsCiAJCVJSRUczMihSXzAwODAxMF9HUkJNX1NUQVRVUykpOwpAQCAtMjA5OCw3ICsyMTA1LDExIEBACiAKIAlyNjAwX2NwX3N0b3AocmRldik7CiAKLQlXUkVHMzIoQ1BfUkJfQ05UTCwgUkJfTk9fVVBEQVRFIHwgUkJfQkxLU1ooMTUpIHwgUkJfQlVGU1ooMykpOworCVdSRUczMihDUF9SQl9DTlRMLAorI2lmZGVmIF9fQklHX0VORElBTgorCSAgICAgICBCVUZfU1dBUF8zMkJJVCB8CisjZW5kaWYKKwkgICAgICAgUkJfTk9fVVBEQVRFIHwgUkJfQkxLU1ooMTUpIHwgUkJfQlVGU1ooMykpOwogCiAJLyogUmVzZXQgY3AgKi8KIAlXUkVHMzIoR1JCTV9TT0ZUX1JFU0VULCBTT0ZUX1JFU0VUX0NQKTsKQEAgLTIxODUsNyArMjE5NiwxMSBAQAogCVdSRUczMihDUF9SQl9XUFRSLCAwKTsKIAogCS8qIHNldCB0aGUgd2IgYWRkcmVzcyB3aGV0aGVyIGl0J3MgZW5hYmxlZCBvciBub3QgKi8KLQlXUkVHMzIoQ1BfUkJfUlBUUl9BRERSLCAocmRldi0+d2IuZ3B1X2FkZHIgKyBSQURFT05fV0JfQ1BfUlBUUl9PRkZTRVQpICYgMHhGRkZGRkZGQyk7CisJV1JFRzMyKENQX1JCX1JQVFJfQUREUiwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkgICAgICAgUkJfUlBUUl9TV0FQKDIpIHwKKyNlbmRpZgorCSAgICAgICAoKHJkZXYtPndiLmdwdV9hZGRyICsgUkFERU9OX1dCX0NQX1JQVFJfT0ZGU0VUKSAmIDB4RkZGRkZGRkMpKTsKIAlXUkVHMzIoQ1BfUkJfUlBUUl9BRERSX0hJLCB1cHBlcl8zMl9iaXRzKHJkZXYtPndiLmdwdV9hZGRyICsgUkFERU9OX1dCX0NQX1JQVFJfT0ZGU0VUKSAmIDB4RkYpOwogCVdSRUczMihTQ1JBVENIX0FERFIsICgocmRldi0+d2IuZ3B1X2FkZHIgKyBSQURFT05fV0JfU0NSQVRDSF9PRkZTRVQpID4+IDgpICYgMHhGRkZGRkZGRik7CiAKQEAgLTI2MjEsNyArMjYzNiwxMSBAQAogewogCS8qIEZJWE1FOiBpbXBsZW1lbnQgKi8KIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfSU5ESVJFQ1RfQlVGRkVSLCAyKSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgaWItPmdwdV9hZGRyICYgMHhGRkZGRkZGQyk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCSAgKDIgPDwgMCkgfAorI2VuZGlmCisJCQkgIChpYi0+Z3B1X2FkZHIgJiAweEZGRkZGRkZDKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgdXBwZXJfMzJfYml0cyhpYi0+Z3B1X2FkZHIpICYgMHhGRik7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgaWItPmxlbmd0aF9kdyk7CiB9CkBAIC0zMjkwLDggKzMzMDksOCBAQAogCXdoaWxlIChycHRyICE9IHdwdHIpIHsKIAkJLyogd3B0ci9ycHRyIGFyZSBpbiBieXRlcyEgKi8KIAkJcmluZ19pbmRleCA9IHJwdHIgLyA0OwotCQlzcmNfaWQgPSAgcmRldi0+aWgucmluZ1tyaW5nX2luZGV4XSAmIDB4ZmY7Ci0JCXNyY19kYXRhID0gcmRldi0+aWgucmluZ1tyaW5nX2luZGV4ICsgMV0gJiAweGZmZmZmZmY7CisJCXNyY19pZCA9IGxlMzJfdG9fY3B1KHJkZXYtPmloLnJpbmdbcmluZ19pbmRleF0pICYgMHhmZjsKKwkJc3JjX2RhdGEgPSBsZTMyX3RvX2NwdShyZGV2LT5paC5yaW5nW3JpbmdfaW5kZXggKyAxXSkgJiAweGZmZmZmZmY7CiAKIAkJc3dpdGNoIChzcmNfaWQpIHsKIAkJY2FzZSAxOiAvKiBEMSB2YmxhbmsvdmxpbmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jCmluZGV4IGNhNWMyOWYuLjdmMTA0MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYwpAQCAtMTM3LDkgKzEzNyw5IEBACiAJcHMgPSAodTMyICopICgoY2hhciAqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSArIGRldl9wcml2LT5ibGl0X3ZiLT5vZmZzZXQgKyAyNTYpOwogCiAJZm9yIChpID0gMDsgaSA8IHI2eHhfdnNfc2l6ZTsgaSsrKQotCQl2c1tpXSA9IHI2eHhfdnNbaV07CisJCXZzW2ldID0gY3B1X3RvX2xlMzIocjZ4eF92c1tpXSk7CiAJZm9yIChpID0gMDsgaSA8IHI2eHhfcHNfc2l6ZTsgaSsrKQotCQlwc1tpXSA9IHI2eHhfcHNbaV07CisJCXBzW2ldID0gY3B1X3RvX2xlMzIocjZ4eF9wc1tpXSk7CiAKIAlkZXZfcHJpdi0+YmxpdF92Yi0+dXNlZCA9IDUxMjsKIApAQCAtMTkyLDYgKzE5Miw5IEBACiAJRFJNX0RFQlVHKCJcbiIpOwogCiAJc3FfdnR4X2NvbnN0YW50X3dvcmQyID0gKCgoZ3B1X2FkZHIgPj4gMzIpICYgMHhmZikgfCAoMTYgPDwgOCkpOworI2lmZGVmIF9fQklHX0VORElBTgorCXNxX3Z0eF9jb25zdGFudF93b3JkMiB8PSAoMiA8PCAzMCk7CisjZW5kaWYKIAogCUJFR0lOX1JJTkcoOSk7CiAJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9SRVNPVVJDRSwgNykpOwpAQCAtMjkxLDcgKzI5NCwxMSBAQAogCU9VVF9SSU5HKERJX1BUX1JFQ1RMSVNUKTsKIAogCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9JTkRFWF9UWVBFLCAwKSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJT1VUX1JJTkcoKDIgPDwgMikgfCBESV9JTkRFWF9TSVpFXzE2X0JJVCk7CisjZWxzZQogCU9VVF9SSU5HKERJX0lOREVYX1NJWkVfMTZfQklUKTsKKyNlbmRpZgogCiAJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX05VTV9JTlNUQU5DRVMsIDApKTsKIAlPVVRfUklORygxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKaW5kZXggODZlNWFhMC4uNDFmN2FhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAlpZiAoaCA8IDgpCiAJCWggPSA4OwogCi0JY2JfY29sb3JfaW5mbyA9ICgoZm9ybWF0IDw8IDIpIHwgKDEgPDwgMjcpKTsKKwljYl9jb2xvcl9pbmZvID0gKChmb3JtYXQgPDwgMikgfCAoMSA8PCAyNykgfCAoMSA8PCA4KSk7CiAJcGl0Y2ggPSAodyAvIDgpIC0gMTsKIAlzbGljZSA9ICgodyAqIGgpIC8gNjQpIC0gMTsKIApAQCAtMTY1LDYgKzE2NSw5IEBACiAJdTMyIHNxX3Z0eF9jb25zdGFudF93b3JkMjsKIAogCXNxX3Z0eF9jb25zdGFudF93b3JkMiA9ICgodXBwZXJfMzJfYml0cyhncHVfYWRkcikgJiAweGZmKSB8ICgxNiA8PCA4KSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJc3FfdnR4X2NvbnN0YW50X3dvcmQyIHw9ICgyIDw8IDMwKTsKKyNlbmRpZgogCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9SRVNPVVJDRSwgNykpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDB4NDYwKTsKQEAgLTE5OSw3ICsyMDIsNyBAQAogCWlmIChoIDwgMSkKIAkJaCA9IDE7CiAKLQlzcV90ZXhfcmVzb3VyY2Vfd29yZDAgPSAoMSA8PCAwKTsKKwlzcV90ZXhfcmVzb3VyY2Vfd29yZDAgPSAoMSA8PCAwKSB8ICgxIDw8IDMpOwogCXNxX3RleF9yZXNvdXJjZV93b3JkMCB8PSAoKCgocGl0Y2ggPj4gMykgLSAxKSA8PCA4KSB8CiAJCQkJICAoKHcgLSAxKSA8PCAxOSkpOwogCkBAIC0yNTMsNyArMjU2LDExIEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgRElfUFRfUkVDVExJU1QpOwogCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0lOREVYX1RZUEUsIDApKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBESV9JTkRFWF9TSVpFXzE2X0JJVCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCSAgKDIgPDwgMikgfAorI2VuZGlmCisJCQkgIERJX0lOREVYX1NJWkVfMTZfQklUKTsKIAogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19OVU1fSU5TVEFOQ0VTLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMSk7CkBAIC00MjQsNyArNDMxLDExIEBACiAJZHdvcmRzID0gQUxJR04ocmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiwgMHgxMCk7CiAJZ3B1X2FkZHIgPSByZGV2LT5yNjAwX2JsaXQuc2hhZGVyX2dwdV9hZGRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldDsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfSU5ESVJFQ1RfQlVGRkVSLCAyKSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZ3B1X2FkZHIgJiAweEZGRkZGRkZDKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LAorI2lmZGVmIF9fQklHX0VORElBTgorCQkJICAoMiA8PCAwKSB8CisjZW5kaWYKKwkJCSAgKGdwdV9hZGRyICYgMHhGRkZGRkZGQykpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHVwcGVyXzMyX2JpdHMoZ3B1X2FkZHIpICYgMHhGRik7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZHdvcmRzKTsKIApAQCAtNDY3LDcgKzQ3OCw3IEBACiBpbnQgcjYwMF9ibGl0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdTMyIG9ial9zaXplOwotCWludCByLCBkd29yZHM7CisJaW50IGksIHIsIGR3b3JkczsKIAl2b2lkICpwdHI7CiAJdTMyIHBhY2tldDJzWzE2XTsKIAlpbnQgbnVtX3BhY2tldDJzID0gMDsKQEAgLTQ4Niw3ICs0OTcsNyBAQAogCiAJZHdvcmRzID0gcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbjsKIAl3aGlsZSAoZHdvcmRzICYgMHhmKSB7Ci0JCXBhY2tldDJzW251bV9wYWNrZXQycysrXSA9IFBBQ0tFVDIoMCk7CisJCXBhY2tldDJzW251bV9wYWNrZXQycysrXSA9IGNwdV90b19sZTMyKFBBQ0tFVDIoMCkpOwogCQlkd29yZHMrKzsKIAl9CiAKQEAgLTUyOSw4ICs1NDAsMTAgQEAKIAlpZiAobnVtX3BhY2tldDJzKQogCQltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ICsgKHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKiA0KSwKIAkJCSAgICBwYWNrZXQycywgbnVtX3BhY2tldDJzICogNCk7Ci0JbWVtY3B5KHB0ciArIHJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQsIHI2eHhfdnMsIHI2eHhfdnNfc2l6ZSAqIDQpOwotCW1lbWNweShwdHIgKyByZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0LCByNnh4X3BzLCByNnh4X3BzX3NpemUgKiA0KTsKKwlmb3IgKGkgPSAwOyBpIDwgcjZ4eF92c19zaXplOyBpKyspCisJCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihyNnh4X3ZzW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgcjZ4eF9wc19zaXplOyBpKyspCisJCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC5wc19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihyNnh4X3BzW2ldKTsKIAlyYWRlb25fYm9fa3VubWFwKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIAlyYWRlb25fYm9fdW5yZXNlcnZlKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfc2hhZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfc2hhZGVycy5jCmluZGV4IGU4MTUxYzEuLjJkMWY2YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X3NoYWRlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9zaGFkZXJzLmMKQEAgLTY4NCw3ICs2ODQsMTEgQEAKIAkweDAwMDAwMDAwLAogCTB4M2MwMDAwMDAsCiAJMHg2OGNkMTAwMCwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkweDAwMGEwMDAwLAorI2Vsc2UKIAkweDAwMDgwMDAwLAorI2VuZGlmCiAJMHgwMDAwMDAwMCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMKaW5kZXggNGY0Y2Q4Yi4uYzNhYjk1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMKQEAgLTM5Niw2ICszOTYsOSBAQAogCXI2MDBfZG9fY3Bfc3RvcChkZXZfcHJpdik7CiAKIAlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9DTlRMLAorI2lmZGVmIF9fQklHX0VORElBTgorCQkgICAgIFI2MDBfQlVGX1NXQVBfMzJCSVQgfAorI2VuZGlmCiAJCSAgICAgUjYwMF9SQl9OT19VUERBVEUgfAogCQkgICAgIFI2MDBfUkJfQkxLU1ooMTUpIHwKIAkJICAgICBSNjAwX1JCX0JVRlNaKDMpKTsKQEAgLTQ4Niw5ICs0ODksMTIgQEAKIAlyNjAwX2RvX2NwX3N0b3AoZGV2X3ByaXYpOwogCiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJICAgICBSNjAwX0JVRl9TV0FQXzMyQklUIHwKKyNlbmRpZgogCQkgICAgIFI2MDBfUkJfTk9fVVBEQVRFIHwKLQkJICAgICAoMTUgPDwgOCkgfAotCQkgICAgICgzIDw8IDApKTsKKwkJICAgICBSNjAwX1JCX0JMS1NaKDE1KSB8CisJCSAgICAgUjYwMF9SQl9CVUZTWigzKSk7CiAKIAlSQURFT05fV1JJVEUoUjYwMF9HUkJNX1NPRlRfUkVTRVQsIFI2MDBfU09GVF9SRVNFVF9DUCk7CiAJUkFERU9OX1JFQUQoUjYwMF9HUkJNX1NPRlRfUkVTRVQpOwpAQCAtNTUwLDggKzU1NiwxMiBAQAogCiAJaWYgKCFkZXZfcHJpdi0+d3JpdGViYWNrX3dvcmtzKSB7CiAJCS8qIERpc2FibGUgd3JpdGViYWNrIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGJ1cyBtYXN0ZXIgdHJhbnNmZXIgKi8KLQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwgUkFERU9OX1JFQUQoUjYwMF9DUF9SQl9DTlRMKSB8Ci0JCQkgICAgIFJBREVPTl9SQl9OT19VUERBVEUpOworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9DTlRMLAorI2lmZGVmIF9fQklHX0VORElBTgorCQkJICAgICBSNjAwX0JVRl9TV0FQXzMyQklUIHwKKyNlbmRpZgorCQkJICAgICBSQURFT05fUkVBRChSNjAwX0NQX1JCX0NOVEwpIHwKKwkJCSAgICAgUjYwMF9SQl9OT19VUERBVEUpOwogCQlSQURFT05fV1JJVEUoUjYwMF9TQ1JBVENIX1VNU0ssIDApOwogCX0KIH0KQEAgLTU3NSw3ICs1ODUsMTEgQEAKIAogCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1dQVFJfREVMQVksIDApOwogCWNwX3JiX2NudGwgPSBSQURFT05fUkVBRChSNjAwX0NQX1JCX0NOVEwpOwotCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsIFI2MDBfUkJfUlBUUl9XUl9FTkEpOworCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJCSAgICAgUjYwMF9CVUZfU1dBUF8zMkJJVCB8CisjZW5kaWYKKwkJICAgICBSNjAwX1JCX1JQVFJfV1JfRU5BKTsKIAogCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1JQVFJfV1IsIGNwX3B0cik7CiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfV1BUUiwgY3BfcHRyKTsKQEAgLTE4MzgsNyArMTg1MiwxMCBAQAogCQkJKyBkZXZfcHJpdi0+Z2FydF92bV9zdGFydDsKIAl9CiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfUlBUUl9BRERSLAotCQkgICAgIHJwdHJfYWRkciAmIDB4ZmZmZmZmZmYpOworI2lmZGVmIF9fQklHX0VORElBTgorCQkgICAgICgyIDw8IDApIHwKKyNlbmRpZgorCQkgICAgIChycHRyX2FkZHIgJiAweGZmZmZmZmZjKSk7CiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfUlBUUl9BRERSX0hJLAogCQkgICAgIHVwcGVyXzMyX2JpdHMocnB0cl9hZGRyKSk7CiAKQEAgLTE4ODksNyArMTkwNiw3IEBACiAJewogCQl1NjQgc2NyYXRjaF9hZGRyOwogCi0JCXNjcmF0Y2hfYWRkciA9IFJBREVPTl9SRUFEKFI2MDBfQ1BfUkJfUlBUUl9BRERSKTsKKwkJc2NyYXRjaF9hZGRyID0gUkFERU9OX1JFQUQoUjYwMF9DUF9SQl9SUFRSX0FERFIpICYgMHhGRkZGRkZGQzsKIAkJc2NyYXRjaF9hZGRyIHw9ICgodTY0KVJBREVPTl9SRUFEKFI2MDBfQ1BfUkJfUlBUUl9BRERSX0hJKSkgPDwgMzI7CiAJCXNjcmF0Y2hfYWRkciArPSBSNjAwX1NDUkFUQ0hfUkVHX09GRlNFVDsKIAkJc2NyYXRjaF9hZGRyID4+PSA4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwppbmRleCA3ODMxZTA4Li4xNTMwOTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwpAQCAtMjk1LDE3ICsyOTUsMTggQEAKIAl9CiAKIAlpZiAoIUlTX0FMSUdORUQocGl0Y2gsIHBpdGNoX2FsaWduKSkgewotCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBjYiBwaXRjaCAoJWQpIGludmFsaWRcbiIsCi0JCQkgX19mdW5jX18sIF9fTElORV9fLCBwaXRjaCk7CisJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGNiIHBpdGNoICglZCwgMHgleCwgJWQpIGludmFsaWRcbiIsCisJCQkgX19mdW5jX18sIF9fTElORV9fLCBwaXRjaCwgcGl0Y2hfYWxpZ24sIGFycmF5X21vZGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKCFJU19BTElHTkVEKGhlaWdodCwgaGVpZ2h0X2FsaWduKSkgewotCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBjYiBoZWlnaHQgKCVkKSBpbnZhbGlkXG4iLAotCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgaGVpZ2h0KTsKKwkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgY2IgaGVpZ2h0ICglZCwgMHgleCwgJWQpIGludmFsaWRcbiIsCisJCQkgX19mdW5jX18sIF9fTElORV9fLCBoZWlnaHQsIGhlaWdodF9hbGlnbiwgYXJyYXlfbW9kZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoIUlTX0FMSUdORUQoYmFzZV9vZmZzZXQsIGJhc2VfYWxpZ24pKSB7Ci0JCWRldl93YXJuKHAtPmRldiwgIiVzIG9mZnNldFslZF0gMHglbGx4IG5vdCBhbGlnbmVkXG4iLCBfX2Z1bmNfXywgaSwgYmFzZV9vZmZzZXQpOworCQlkZXZfd2FybihwLT5kZXYsICIlcyBvZmZzZXRbJWRdIDB4JWxseCAweCVsbHgsICVkIG5vdCBhbGlnbmVkXG4iLCBfX2Z1bmNfXywgaSwKKwkJCSBiYXNlX29mZnNldCwgYmFzZV9hbGlnbiwgYXJyYXlfbW9kZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzIwLDcgKzMyMSwxMCBAQAogCQkJICogYnJva2VuIHVzZXJzcGFjZS4KIAkJCSAqLwogCQl9IGVsc2UgewotCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXMgb2Zmc2V0WyVkXSAlZCAlZCAlbHUgdG9vIGJpZ1xuIiwgX19mdW5jX18sIGksIHRyYWNrLT5jYl9jb2xvcl9ib19vZmZzZXRbaV0sIHRtcCwgcmFkZW9uX2JvX3NpemUodHJhY2stPmNiX2NvbG9yX2JvW2ldKSk7CisJCQlkZXZfd2FybihwLT5kZXYsICIlcyBvZmZzZXRbJWRdICVkICVkICVkICVsdSB0b28gYmlnXG4iLCBfX2Z1bmNfXywgaSwKKwkJCQkgYXJyYXlfbW9kZSwKKwkJCQkgdHJhY2stPmNiX2NvbG9yX2JvX29mZnNldFtpXSwgdG1wLAorCQkJCSByYWRlb25fYm9fc2l6ZSh0cmFjay0+Y2JfY29sb3JfYm9baV0pKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtNDU1LDE3ICs0NTksMTggQEAKIAkJCX0KIAogCQkJaWYgKCFJU19BTElHTkVEKHBpdGNoLCBwaXRjaF9hbGlnbikpIHsKLQkJCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBkYiBwaXRjaCAoJWQpIGludmFsaWRcbiIsCi0JCQkJCSBfX2Z1bmNfXywgX19MSU5FX18sIHBpdGNoKTsKKwkJCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBkYiBwaXRjaCAoJWQsIDB4JXgsICVkKSBpbnZhbGlkXG4iLAorCQkJCQkgX19mdW5jX18sIF9fTElORV9fLCBwaXRjaCwgcGl0Y2hfYWxpZ24sIGFycmF5X21vZGUpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQkJaWYgKCFJU19BTElHTkVEKGhlaWdodCwgaGVpZ2h0X2FsaWduKSkgewotCQkJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGRiIGhlaWdodCAoJWQpIGludmFsaWRcbiIsCi0JCQkJCSBfX2Z1bmNfXywgX19MSU5FX18sIGhlaWdodCk7CisJCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgZGIgaGVpZ2h0ICglZCwgMHgleCwgJWQpIGludmFsaWRcbiIsCisJCQkJCSBfX2Z1bmNfXywgX19MSU5FX18sIGhlaWdodCwgaGVpZ2h0X2FsaWduLCBhcnJheV9tb2RlKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJCWlmICghSVNfQUxJR05FRChiYXNlX29mZnNldCwgYmFzZV9hbGlnbikpIHsKLQkJCQlkZXZfd2FybihwLT5kZXYsICIlcyBvZmZzZXRbJWRdIDB4JWxseCBub3QgYWxpZ25lZFxuIiwgX19mdW5jX18sIGksIGJhc2Vfb2Zmc2V0KTsKKwkJCQlkZXZfd2FybihwLT5kZXYsICIlcyBvZmZzZXRbJWRdIDB4JWxseCwgMHglbGx4LCAlZCBub3QgYWxpZ25lZFxuIiwgX19mdW5jX18sIGksCisJCQkJCSBiYXNlX29mZnNldCwgYmFzZV9hbGlnbiwgYXJyYXlfbW9kZSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAKQEAgLTQ3Myw5ICs0NzgsMTAgQEAKIAkJCW52aWV3cyA9IEdfMDI4MDA0X1NMSUNFX01BWCh0cmFjay0+ZGJfZGVwdGhfdmlldykgKyAxOwogCQkJdG1wID0gbnRpbGVzICogYnBlICogNjQgKiBudmlld3M7CiAJCQlpZiAoKHRtcCArIHRyYWNrLT5kYl9vZmZzZXQpID4gcmFkZW9uX2JvX3NpemUodHJhY2stPmRiX2JvKSkgewotCQkJCWRldl93YXJuKHAtPmRldiwgInovc3RlbmNpbCBidWZmZXIgdG9vIHNtYWxsICgweCUwOFggJWQgJWQgJWQgLT4gJXUgaGF2ZSAlbHUpXG4iLAotCQkJCQkJdHJhY2stPmRiX2RlcHRoX3NpemUsIG50aWxlcywgbnZpZXdzLCBicGUsIHRtcCArIHRyYWNrLT5kYl9vZmZzZXQsCi0JCQkJCQlyYWRlb25fYm9fc2l6ZSh0cmFjay0+ZGJfYm8pKTsKKwkJCQlkZXZfd2FybihwLT5kZXYsICJ6L3N0ZW5jaWwgYnVmZmVyICglZCkgdG9vIHNtYWxsICgweCUwOFggJWQgJWQgJWQgLT4gJXUgaGF2ZSAlbHUpXG4iLAorCQkJCQkgYXJyYXlfbW9kZSwKKwkJCQkJIHRyYWNrLT5kYl9kZXB0aF9zaXplLCBudGlsZXMsIG52aWV3cywgYnBlLCB0bXAgKyB0cmFjay0+ZGJfb2Zmc2V0LAorCQkJCQkgcmFkZW9uX2JvX3NpemUodHJhY2stPmRiX2JvKSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCX0KQEAgLTEyMjcsMTggKzEyMzMsMTggQEAKIAkvKiBYWFggY2hlY2sgaGVpZ2h0IGFzIHdlbGwuLi4gKi8KIAogCWlmICghSVNfQUxJR05FRChwaXRjaCwgcGl0Y2hfYWxpZ24pKSB7Ci0JCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIHRleCBwaXRjaCAoJWQpIGludmFsaWRcbiIsCi0JCQkgX19mdW5jX18sIF9fTElORV9fLCBwaXRjaCk7CisJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIHRleCBwaXRjaCAoJWQsIDB4JXgsICVkKSBpbnZhbGlkXG4iLAorCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgcGl0Y2gsIHBpdGNoX2FsaWduLCBHXzAzODAwMF9USUxFX01PREUod29yZDApKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmICghSVNfQUxJR05FRChiYXNlX29mZnNldCwgYmFzZV9hbGlnbikpIHsKLQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgdGV4IGJhc2Ugb2Zmc2V0ICgweCVsbHgpIGludmFsaWRcbiIsCi0JCQkgX19mdW5jX18sIF9fTElORV9fLCBiYXNlX29mZnNldCk7CisJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIHRleCBiYXNlIG9mZnNldCAoMHglbGx4LCAweCVsbHgsICVkKSBpbnZhbGlkXG4iLAorCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgYmFzZV9vZmZzZXQsIGJhc2VfYWxpZ24sIEdfMDM4MDAwX1RJTEVfTU9ERSh3b3JkMCkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKCFJU19BTElHTkVEKG1pcF9vZmZzZXQsIGJhc2VfYWxpZ24pKSB7Ci0JCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIHRleCBtaXAgb2Zmc2V0ICgweCVsbHgpIGludmFsaWRcbiIsCi0JCQkgX19mdW5jX18sIF9fTElORV9fLCBtaXBfb2Zmc2V0KTsKKwkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgdGV4IG1pcCBvZmZzZXQgKDB4JWxseCwgMHglbGx4LCAlZCkgaW52YWxpZFxuIiwKKwkJCSBfX2Z1bmNfXywgX19MSU5FX18sIG1pcF9vZmZzZXQsIGJhc2VfYWxpZ24sIEdfMDM4MDAwX1RJTEVfTU9ERSh3b3JkMCkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9yZWcuaAppbmRleCAzM2NkYTAxLi5mODY5ODk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX3JlZy5oCkBAIC04MSw3ICs4MSwxMSBAQAogI2RlZmluZSBSNjAwX01FRElVTV9WSURfTE9XRVJfR1BJT19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzIwCiAjZGVmaW5lIFI2MDBfTE9XX1ZJRF9MT1dFUl9HUElPX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MjQKIAotCisjZGVmaW5lIFI2MDBfRDFHUlBIX1NXQVBfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYxMEMKKyMgICAgICAgZGVmaW5lIFI2MDBfRDFHUlBIX1NXQVBfRU5ESUFOX05PTkUgICAgICAgICAgICAgICAgICAgICgwIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX0QxR1JQSF9TV0FQX0VORElBTl8xNkJJVCAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9EMUdSUEhfU1dBUF9FTkRJQU5fMzJCSVQgICAgICAgICAgICAgICAgICAgKDIgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfRDFHUlBIX1NXQVBfRU5ESUFOXzY0QklUICAgICAgICAgICAgICAgICAgICgzIDw8IDApCiAKICNkZWZpbmUgUjYwMF9IRFBfTk9OU1VSRkFDRV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJjMDQKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCmluZGV4IGE1ZDg5OGIuLjA0YmFjMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKQEAgLTE1NCwxMyArMTU0LDE0IEBACiAjZGVmaW5lCQlST1FfSUIyX1NUQVJUKHgpCQkJCSgoeCkgPDwgOCkKICNkZWZpbmUJQ1BfUkJfQkFTRQkJCQkJMHhDMTAwCiAjZGVmaW5lCUNQX1JCX0NOVEwJCQkJCTB4QzEwNAotI2RlZmluZQkJUkJfQlVGU1ooeCkJCQkJCSgoeCk8PDApCi0jZGVmaW5lCQlSQl9CTEtTWih4KQkJCQkJKCh4KTw8OCkKLSNkZWZpbmUJCVJCX05PX1VQREFURQkJCQkJKDE8PDI3KQotI2RlZmluZQkJUkJfUlBUUl9XUl9FTkEJCQkJCSgxPDwzMSkKKyNkZWZpbmUJCVJCX0JVRlNaKHgpCQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCQlSQl9CTEtTWih4KQkJCQkJKCh4KSA8PCA4KQorI2RlZmluZQkJUkJfTk9fVVBEQVRFCQkJCQkoMSA8PCAyNykKKyNkZWZpbmUJCVJCX1JQVFJfV1JfRU5BCQkJCQkoMSA8PCAzMSkKICNkZWZpbmUJCUJVRl9TV0FQXzMyQklUCQkJCQkoMiA8PCAxNikKICNkZWZpbmUJQ1BfUkJfUlBUUgkJCQkJMHg4NzAwCiAjZGVmaW5lCUNQX1JCX1JQVFJfQUREUgkJCQkJMHhDMTBDCisjZGVmaW5lCQlSQl9SUFRSX1NXQVAoeCkJCQkJCSgoeCkgPDwgMCkKICNkZWZpbmUJQ1BfUkJfUlBUUl9BRERSX0hJCQkJCTB4QzExMAogI2RlZmluZQlDUF9SQl9SUFRSX1dSCQkJCQkweEMxMDgKICNkZWZpbmUJQ1BfUkJfV1BUUgkJCQkJMHhDMTE0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAppbmRleCA3MWQyYTU1Li41NmM0OGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKQEAgLTE3OSwxMCArMTc5LDEwIEBACiB2b2lkIHJhZGVvbl9hdG9tYmlvc19nZXRfcG93ZXJfbW9kZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByYWRlb25fYXRvbV9zZXRfdm9sdGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdTE2IGxldmVsKTsKIHZvaWQgcnM2OTBfcG1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1leHRlcm4gdTMyIHJ2Nnh4X2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiB1MzIgcnY3NzBfZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotZXh0ZXJuIHUzMiBldmVyZ3JlZW5fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotZXh0ZXJuIHUzMiBzdW1vX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnY2eHhfZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCBydjc3MF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IGV2ZXJncmVlbl9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHN1bW9fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiAvKgogICogRmVuY2VzLgpAQCAtODEyLDggKzgxMiw3IEBACiAJZml4ZWQyMF8xMgkJc2NsazsKIAlmaXhlZDIwXzEyCQltY2xrOwogCWZpeGVkMjBfMTIJCW5lZWRlZF9iYW5kd2lkdGg7Ci0JLyogWFhYOiB1c2UgYSBkZWZpbmUgZm9yIG51bSBwb3dlciBtb2RlcyAqLwotCXN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUgcG93ZXJfc3RhdGVbOF07CisJc3RydWN0IHJhZGVvbl9wb3dlcl9zdGF0ZSAqcG93ZXJfc3RhdGU7CiAJLyogbnVtYmVyIG9mIHZhbGlkIHBvd2VyIHN0YXRlcyAqLwogCWludCAgICAgICAgICAgICAgICAgICAgIG51bV9wb3dlcl9zdGF0ZXM7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9wb3dlcl9zdGF0ZV9pbmRleDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYwppbmRleCAzYTFiMTYxLi5lNzVkNjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jCkBAIC03NTksNyArNzU5LDcgQEAKIAkuZ2FydF90bGJfZmx1c2ggPSAmZXZlcmdyZWVuX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAkucmluZ190ZXN0ID0gJnI2MDBfcmluZ190ZXN0LAotCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjYwMF9yaW5nX2liX2V4ZWN1dGUsCisJLnJpbmdfaWJfZXhlY3V0ZSA9ICZldmVyZ3JlZW5fcmluZ19pYl9leGVjdXRlLAogCS5pcnFfc2V0ID0gJmV2ZXJncmVlbl9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZldmVyZ3JlZW5faXJxX3Byb2Nlc3MsCiAJLmdldF92YmxhbmtfY291bnRlciA9ICZldmVyZ3JlZW5fZ2V0X3ZibGFua19jb3VudGVyLApAQCAtODA1LDcgKzgwNSw3IEBACiAJLmdhcnRfdGxiX2ZsdXNoID0gJmV2ZXJncmVlbl9wY2llX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCiAJLnJpbmdfdGVzdCA9ICZyNjAwX3JpbmdfdGVzdCwKLQkucmluZ19pYl9leGVjdXRlID0gJnI2MDBfcmluZ19pYl9leGVjdXRlLAorCS5yaW5nX2liX2V4ZWN1dGUgPSAmZXZlcmdyZWVuX3JpbmdfaWJfZXhlY3V0ZSwKIAkuaXJxX3NldCA9ICZldmVyZ3JlZW5faXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmZXZlcmdyZWVuX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmZXZlcmdyZWVuX2dldF92YmxhbmtfY291bnRlciwKQEAgLTg0OCw3ICs4NDgsNyBAQAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZldmVyZ3JlZW5fcGNpZV9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCS5yaW5nX3Rlc3QgPSAmcjYwMF9yaW5nX3Rlc3QsCi0JLnJpbmdfaWJfZXhlY3V0ZSA9ICZyNjAwX3JpbmdfaWJfZXhlY3V0ZSwKKwkucmluZ19pYl9leGVjdXRlID0gJmV2ZXJncmVlbl9yaW5nX2liX2V4ZWN1dGUsCiAJLmlycV9zZXQgPSAmZXZlcmdyZWVuX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJmV2ZXJncmVlbl9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJmV2ZXJncmVlbl9nZXRfdmJsYW5rX2NvdW50ZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKaW5kZXggZTAxZjA3Ny4uYzU5YmQ5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaApAQCAtMzU1LDYgKzM1NSw3IEBACiBib29sIGV2ZXJncmVlbl9ncHVfaXNfbG9ja3VwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCBldmVyZ3JlZW5fYXNpY19yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIGV2ZXJncmVlbl9iYW5kd2lkdGhfdXBkYXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgZXZlcmdyZWVuX3JpbmdfaWJfZXhlY3V0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpOwogaW50IGV2ZXJncmVlbl9jb3B5X2JsaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCQl1aW50NjRfdCBzcmNfb2Zmc2V0LCB1aW50NjRfdCBkc3Rfb2Zmc2V0LAogCQkJdW5zaWduZWQgbnVtX3BhZ2VzLCBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYwppbmRleCAxNTczMjAyLi4wMmQ1YzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKQEAgLTg4LDcgKzg4LDcgQEAKIAkJCS8qIHNvbWUgZXZlcmdyZWVuIGJvYXJkcyBoYXZlIGJhZCBkYXRhIGZvciB0aGlzIGVudHJ5ICovCiAJCQlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKSB7CiAJCQkJaWYgKChpID09IDcpICYmCi0JCQkJICAgIChncGlvLT51c0Nsa01hc2tSZWdpc3RlckluZGV4ID09IDB4MTkzNikgJiYKKwkJCQkgICAgKGxlMTZfdG9fY3B1KGdwaW8tPnVzQ2xrTWFza1JlZ2lzdGVySW5kZXgpID09IDB4MTkzNikgJiYKIAkJCQkgICAgKGdwaW8tPnN1Y0kyY0lkLnVjQWNjZXNzID09IDApKSB7CiAJCQkJCWdwaW8tPnN1Y0kyY0lkLnVjQWNjZXNzID0gMHg5NzsKIAkJCQkJZ3Bpby0+dWNEYXRhTWFza1NoaWZ0ID0gODsKQEAgLTEwMSw3ICsxMDEsNyBAQAogCQkJLyogc29tZSBEQ0UzIGJvYXJkcyBoYXZlIGJhZCBkYXRhIGZvciB0aGlzIGVudHJ5ICovCiAJCQlpZiAoQVNJQ19JU19EQ0UzKHJkZXYpKSB7CiAJCQkJaWYgKChpID09IDQpICYmCi0JCQkJICAgIChncGlvLT51c0Nsa01hc2tSZWdpc3RlckluZGV4ID09IDB4MWZkYSkgJiYKKwkJCQkgICAgKGxlMTZfdG9fY3B1KGdwaW8tPnVzQ2xrTWFza1JlZ2lzdGVySW5kZXgpID09IDB4MWZkYSkgJiYKIAkJCQkgICAgKGdwaW8tPnN1Y0kyY0lkLnVjQWNjZXNzID09IDB4OTQpKQogCQkJCQlncGlvLT5zdWNJMmNJZC51Y0FjY2VzcyA9IDB4MTQ7CiAJCQl9CkBAIC0xNzIsNyArMTcyLDcgQEAKIAkJCS8qIHNvbWUgZXZlcmdyZWVuIGJvYXJkcyBoYXZlIGJhZCBkYXRhIGZvciB0aGlzIGVudHJ5ICovCiAJCQlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKSB7CiAJCQkJaWYgKChpID09IDcpICYmCi0JCQkJICAgIChncGlvLT51c0Nsa01hc2tSZWdpc3RlckluZGV4ID09IDB4MTkzNikgJiYKKwkJCQkgICAgKGxlMTZfdG9fY3B1KGdwaW8tPnVzQ2xrTWFza1JlZ2lzdGVySW5kZXgpID09IDB4MTkzNikgJiYKIAkJCQkgICAgKGdwaW8tPnN1Y0kyY0lkLnVjQWNjZXNzID09IDApKSB7CiAJCQkJCWdwaW8tPnN1Y0kyY0lkLnVjQWNjZXNzID0gMHg5NzsKIAkJCQkJZ3Bpby0+dWNEYXRhTWFza1NoaWZ0ID0gODsKQEAgLTE4NSw3ICsxODUsNyBAQAogCQkJLyogc29tZSBEQ0UzIGJvYXJkcyBoYXZlIGJhZCBkYXRhIGZvciB0aGlzIGVudHJ5ICovCiAJCQlpZiAoQVNJQ19JU19EQ0UzKHJkZXYpKSB7CiAJCQkJaWYgKChpID09IDQpICYmCi0JCQkJICAgIChncGlvLT51c0Nsa01hc2tSZWdpc3RlckluZGV4ID09IDB4MWZkYSkgJiYKKwkJCQkgICAgKGxlMTZfdG9fY3B1KGdwaW8tPnVzQ2xrTWFza1JlZ2lzdGVySW5kZXgpID09IDB4MWZkYSkgJiYKIAkJCQkgICAgKGdwaW8tPnN1Y0kyY0lkLnVjQWNjZXNzID09IDB4OTQpKQogCQkJCQlncGlvLT5zdWNJMmNJZC51Y0FjY2VzcyA9IDB4MTQ7CiAJCQl9CkBAIC0yNTIsNyArMjUyLDcgQEAKIAkJCXBpbiA9ICZncGlvX2luZm8tPmFzR1BJT19QaW5baV07CiAJCQlpZiAoaWQgPT0gcGluLT51Y0dQSU9fSUQpIHsKIAkJCQlncGlvLmlkID0gcGluLT51Y0dQSU9fSUQ7Ci0JCQkJZ3Bpby5yZWcgPSBwaW4tPnVzR3Bpb1Bpbl9BSW5kZXggKiA0OworCQkJCWdwaW8ucmVnID0gbGUxNl90b19jcHUocGluLT51c0dwaW9QaW5fQUluZGV4KSAqIDQ7CiAJCQkJZ3Bpby5tYXNrID0gKDEgPDwgcGluLT51Y0dwaW9QaW5CaXRTaGlmdCk7CiAJCQkJZ3Bpby52YWxpZCA9IHRydWU7CiAJCQkJYnJlYWs7CkBAIC0zODcsMTUgKzM4NywxMSBAQAogCQkJKmxpbmVfbXV4ID0gMHg5MDsKIAl9CiAKLQkvKiBtYWMgcnY2MzAgKi8KLQlpZiAoKGRldi0+cGRldi0+ZGV2aWNlID09IDB4OTU4OCkgJiYKLQkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwNmIpICYmCi0JICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgwMGE2KSkgewotCQlpZiAoKHN1cHBvcnRlZF9kZXZpY2UgPT0gQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpICYmCi0JCSAgICAoKmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKSkgewotCQkJKmNvbm5lY3Rvcl90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SXzlQaW5ESU47Ci0JCQkqbGluZV9tdXggPSBDT05ORUNUT1JfN1BJTl9ESU5fRU5VTV9JRDE7Ci0JCX0KKwkvKiBtYWMgcnY2MzAsIHJ2NzMwLCBvdGhlcnMgKi8KKwlpZiAoKHN1cHBvcnRlZF9kZXZpY2UgPT0gQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpICYmCisJICAgICgqY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpKSB7CisJCSpjb25uZWN0b3JfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl85UGluRElOOworCQkqbGluZV9tdXggPSBDT05ORUNUT1JfN1BJTl9ESU5fRU5VTV9JRDE7CiAJfQogCiAJLyogQVNVUyBIRCAzNjAwIFhUIGJvYXJkIGxpc3RzIHRoZSBEVkkgcG9ydCBhcyBIRE1JICovCkBAIC0xMTY3LDE2ICsxMTYzLDYgQEAKIAkJCQlwMXBsbC0+cGxsX291dF9taW4gPSA2NDgwMDsKIAkJCWVsc2UKIAkJCQlwMXBsbC0+cGxsX291dF9taW4gPSAyMDAwMDsKLQkJfSBlbHNlIGlmIChwMXBsbC0+cGxsX291dF9taW4gPiA2NDgwMCkgewotCQkJLyogTGltaXRpbmcgdGhlIHBsbCBvdXRwdXQgcmFuZ2UgaXMgYSBnb29kIHRoaW5nIGdlbmVyYWxseSBhcwotCQkJICogaXQgbGltaXRzIHRoZSBudW1iZXIgb2YgcG9zc2libGUgcGxsIGNvbWJpbmF0aW9ucyBmb3IgYSBnaXZlbgotCQkJICogZnJlcXVlbmN5IHByZXN1bWFibHkgdG8gdGhlIG9uZXMgdGhhdCB3b3JrIGJlc3Qgb24gZWFjaCBjYXJkLgotCQkJICogSG93ZXZlciwgY2VydGFpbiBkdWFsbGluayBEVkkgbW9uaXRvcnMgc2VlbSB0byBsaWtlCi0JCQkgKiBwbGwgY29tYmluYXRpb25zIHRoYXQgd291bGQgYmUgbGltaXRlZCBieSB0aGlzIGF0IGxlYXN0IG9uCi0JCQkgKiBwcmUtRENFIDMuMCByNnh4IGhhcmR3YXJlLiAgVGhpcyBtaWdodCBuZWVkIHRvIGJlIGFkanVzdGVkIHBlcgotCQkJICogZmFtaWx5LgotCQkJICovCi0JCQlwMXBsbC0+cGxsX291dF9taW4gPSA2NDgwMDsKIAkJfQogCiAJCXAxcGxsLT5wbGxfaW5fbWluID0KQEAgLTEyODgsMTEgKzEyNzQsMTEgQEAKIAkJCQkgICAgICBkYXRhX29mZnNldCk7CiAJCXN3aXRjaCAoY3JldikgewogCQljYXNlIDE6Ci0JCQlpZiAoaWdwX2luZm8tPmluZm8udWxCb290VXBNZW1vcnlDbG9jaykKKwkJCWlmIChsZTMyX3RvX2NwdShpZ3BfaW5mby0+aW5mby51bEJvb3RVcE1lbW9yeUNsb2NrKSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCWJyZWFrOwogCQljYXNlIDI6Ci0JCQlpZiAoaWdwX2luZm8tPmluZm9fMi51bEJvb3RVcFNpZGVQb3J0Q2xvY2spCisJCQlpZiAobGUzMl90b19jcHUoaWdwX2luZm8tPmluZm9fMi51bEJvb3RVcFNpZGVQb3J0Q2xvY2spKQogCQkJCXJldHVybiB0cnVlOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC0xNDU2LDcgKzE0NDIsNyBAQAogCiAJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2luZGljZXM7IGkrKykgewogCQkJCWlmICgoc3NfaW5mby0+aW5mby5hc1NwcmVhZFNwZWN0cnVtW2ldLnVjQ2xvY2tJbmRpY2F0aW9uID09IGlkKSAmJgotCQkJCSAgICAoY2xvY2sgPD0gc3NfaW5mby0+aW5mby5hc1NwcmVhZFNwZWN0cnVtW2ldLnVsVGFyZ2V0Q2xvY2tSYW5nZSkpIHsKKwkJCQkgICAgKGNsb2NrIDw9IGxlMzJfdG9fY3B1KHNzX2luZm8tPmluZm8uYXNTcHJlYWRTcGVjdHJ1bVtpXS51bFRhcmdldENsb2NrUmFuZ2UpKSkgewogCQkJCQlzcy0+cGVyY2VudGFnZSA9CiAJCQkJCQlsZTE2X3RvX2NwdShzc19pbmZvLT5pbmZvLmFzU3ByZWFkU3BlY3RydW1baV0udXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2UpOwogCQkJCQlzcy0+dHlwZSA9IHNzX2luZm8tPmluZm8uYXNTcHJlYWRTcGVjdHJ1bVtpXS51Y1NwcmVhZFNwZWN0cnVtTW9kZTsKQEAgLTE0NzAsNyArMTQ1Niw3IEBACiAJCQkJc2l6ZW9mKEFUT01fQVNJQ19TU19BU1NJR05NRU5UX1YyKTsKIAkJCWZvciAoaSA9IDA7IGkgPCBudW1faW5kaWNlczsgaSsrKSB7CiAJCQkJaWYgKChzc19pbmZvLT5pbmZvXzIuYXNTcHJlYWRTcGVjdHJ1bVtpXS51Y0Nsb2NrSW5kaWNhdGlvbiA9PSBpZCkgJiYKLQkJCQkgICAgKGNsb2NrIDw9IHNzX2luZm8tPmluZm9fMi5hc1NwcmVhZFNwZWN0cnVtW2ldLnVsVGFyZ2V0Q2xvY2tSYW5nZSkpIHsKKwkJCQkgICAgKGNsb2NrIDw9IGxlMzJfdG9fY3B1KHNzX2luZm8tPmluZm9fMi5hc1NwcmVhZFNwZWN0cnVtW2ldLnVsVGFyZ2V0Q2xvY2tSYW5nZSkpKSB7CiAJCQkJCXNzLT5wZXJjZW50YWdlID0KIAkJCQkJCWxlMTZfdG9fY3B1KHNzX2luZm8tPmluZm9fMi5hc1NwcmVhZFNwZWN0cnVtW2ldLnVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlKTsKIAkJCQkJc3MtPnR5cGUgPSBzc19pbmZvLT5pbmZvXzIuYXNTcHJlYWRTcGVjdHJ1bVtpXS51Y1NwcmVhZFNwZWN0cnVtTW9kZTsKQEAgLTE0ODQsNyArMTQ3MCw3IEBACiAJCQkJc2l6ZW9mKEFUT01fQVNJQ19TU19BU1NJR05NRU5UX1YzKTsKIAkJCWZvciAoaSA9IDA7IGkgPCBudW1faW5kaWNlczsgaSsrKSB7CiAJCQkJaWYgKChzc19pbmZvLT5pbmZvXzMuYXNTcHJlYWRTcGVjdHJ1bVtpXS51Y0Nsb2NrSW5kaWNhdGlvbiA9PSBpZCkgJiYKLQkJCQkgICAgKGNsb2NrIDw9IHNzX2luZm8tPmluZm9fMy5hc1NwcmVhZFNwZWN0cnVtW2ldLnVsVGFyZ2V0Q2xvY2tSYW5nZSkpIHsKKwkJCQkgICAgKGNsb2NrIDw9IGxlMzJfdG9fY3B1KHNzX2luZm8tPmluZm9fMy5hc1NwcmVhZFNwZWN0cnVtW2ldLnVsVGFyZ2V0Q2xvY2tSYW5nZSkpKSB7CiAJCQkJCXNzLT5wZXJjZW50YWdlID0KIAkJCQkJCWxlMTZfdG9fY3B1KHNzX2luZm8tPmluZm9fMy5hc1NwcmVhZFNwZWN0cnVtW2ldLnVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlKTsKIAkJCQkJc3MtPnR5cGUgPSBzc19pbmZvLT5pbmZvXzMuYXNTcHJlYWRTcGVjdHJ1bVtpXS51Y1NwcmVhZFNwZWN0cnVtTW9kZTsKQEAgLTE1NjcsOCArMTU1Myw4IEBACiAJCWlmIChtaXNjICYgQVRPTV9ET1VCTEVfQ0xPQ0tfTU9ERSkKIAkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfREJMU0NBTjsKIAotCQlsdmRzLT5uYXRpdmVfbW9kZS53aWR0aF9tbSA9IGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSW1hZ2VIU2l6ZTsKLQkJbHZkcy0+bmF0aXZlX21vZGUuaGVpZ2h0X21tID0gbHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNJbWFnZVZTaXplOworCQlsdmRzLT5uYXRpdmVfbW9kZS53aWR0aF9tbSA9IGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSW1hZ2VIU2l6ZSk7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhlaWdodF9tbSA9IGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSW1hZ2VWU2l6ZSk7CiAKIAkJLyogc2V0IGNydGMgdmFsdWVzICovCiAJCWRybV9tb2RlX3NldF9jcnRjaW5mbygmbHZkcy0+bmF0aXZlX21vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOwpAQCAtMTU4MywxMyArMTU2OSwxMyBAQAogCQkJbHZkcy0+bGlua2IgPSBmYWxzZTsKIAogCQkvKiBwYXJzZSB0aGUgbGNkIHJlY29yZCB0YWJsZSAqLwotCQlpZiAobHZkc19pbmZvLT5pbmZvLnVzTW9kZVBhdGNoVGFibGVPZmZzZXQpIHsKKwkJaWYgKGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby51c01vZGVQYXRjaFRhYmxlT2Zmc2V0KSkgewogCQkJQVRPTV9GQUtFX0VESURfUEFUQ0hfUkVDT1JEICpmYWtlX2VkaWRfcmVjb3JkOwogCQkJQVRPTV9QQU5FTF9SRVNPTFVUSU9OX1BBVENIX1JFQ09SRCAqcGFuZWxfcmVzX3JlY29yZDsKIAkJCWJvb2wgYmFkX3JlY29yZCA9IGZhbHNlOwogCQkJdTggKnJlY29yZCA9ICh1OCAqKShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArCiAJCQkJCSAgICBkYXRhX29mZnNldCArCi0JCQkJCSAgICBsdmRzX2luZm8tPmluZm8udXNNb2RlUGF0Y2hUYWJsZU9mZnNldCk7CisJCQkJCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8udXNNb2RlUGF0Y2hUYWJsZU9mZnNldCkpOwogCQkJd2hpbGUgKCpyZWNvcmQgIT0gQVRPTV9SRUNPUkRfRU5EX1RZUEUpIHsKIAkJCQlzd2l0Y2ggKCpyZWNvcmQpIHsKIAkJCQljYXNlIExDRF9NT0RFX1BBVENIX1JFQ09SRF9NT0RFX1RZUEU6CkBAIC0xOTkxLDYgKzE5NzcsOSBAQAogCW51bV9tb2RlcyA9IHBvd2VyX2luZm8tPmluZm8udWNOdW1PZlBvd2VyTW9kZUVudHJpZXM7CiAJaWYgKG51bV9tb2RlcyA+IEFUT01fTUFYX05VTUJFUk9GX1BPV0VSX0JMT0NLKQogCQludW1fbW9kZXMgPSBBVE9NX01BWF9OVU1CRVJPRl9QT1dFUl9CTE9DSzsKKwlyZGV2LT5wbS5wb3dlcl9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUpICogbnVtX21vZGVzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJkZXYtPnBtLnBvd2VyX3N0YXRlKQorCQlyZXR1cm4gc3RhdGVfaW5kZXg7CiAJLyogbGFzdCBtb2RlIGlzIHVzdWFsbHkgZGVmYXVsdCwgYXJyYXkgaXMgbG93IHRvIGhpZ2ggKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX21vZGVzOyBpKyspIHsKIAkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS50eXBlID0gVk9MVEFHRV9OT05FOwpAQCAtMjIwMCw3ICsyMTg5LDcgQEAKIAkJZmlybXdhcmVfaW5mbyA9CiAJCQkodW5pb24gZmlybXdhcmVfaW5mbyAqKShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArCiAJCQkJCQlkYXRhX29mZnNldCk7Ci0JCXZkZGMgPSBmaXJtd2FyZV9pbmZvLT5pbmZvXzE0LnVzQm9vdFVwVkREQ1ZvbHRhZ2U7CisJCXZkZGMgPSBsZTE2X3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvXzE0LnVzQm9vdFVwVkREQ1ZvbHRhZ2UpOwogCX0KIAogCXJldHVybiB2ZGRjOwpAQCAtMjI5NSw3ICsyMjg0LDcgQEAKIAkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0udm9sdGFnZS50eXBlID0KIAkJCVZPTFRBR0VfU1c7CiAJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnZvbHRhZ2Uudm9sdGFnZSA9Ci0JCQljbG9ja19pbmZvLT5ldmVyZ3JlZW4udXNWRERDOworCQkJbGUxNl90b19jcHUoY2xvY2tfaW5mby0+ZXZlcmdyZWVuLnVzVkREQyk7CiAJfSBlbHNlIHsKIAkJc2NsayA9IGxlMTZfdG9fY3B1KGNsb2NrX2luZm8tPnI2MDAudXNFbmdpbmVDbG9ja0xvdyk7CiAJCXNjbGsgfD0gY2xvY2tfaW5mby0+cjYwMC51Y0VuZ2luZUNsb2NrSGlnaCA8PCAxNjsKQEAgLTIzMDYsNyArMjI5NSw3IEBACiAJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnZvbHRhZ2UudHlwZSA9CiAJCQlWT0xUQUdFX1NXOwogCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS52b2x0YWdlLnZvbHRhZ2UgPQotCQkJY2xvY2tfaW5mby0+cjYwMC51c1ZEREM7CisJCQlsZTE2X3RvX2NwdShjbG9ja19pbmZvLT5yNjAwLnVzVkREQyk7CiAJfQogCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgewpAQCAtMjM0Miw2ICsyMzMxLDEwIEBACiAJcG93ZXJfaW5mbyA9ICh1bmlvbiBwb3dlcl9pbmZvICopKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsgZGF0YV9vZmZzZXQpOwogCiAJcmFkZW9uX2F0b21iaW9zX2FkZF9wcGxpYl90aGVybWFsX2NvbnRyb2xsZXIocmRldiwgJnBvd2VyX2luZm8tPnBwbGliLnNUaGVybWFsQ29udHJvbGxlcik7CisJcmRldi0+cG0ucG93ZXJfc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlKSAqCisJCQkJICAgICAgIHBvd2VyX2luZm8tPnBwbGliLnVjTnVtU3RhdGVzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJkZXYtPnBtLnBvd2VyX3N0YXRlKQorCQlyZXR1cm4gc3RhdGVfaW5kZXg7CiAJLyogZmlyc3QgbW9kZSBpcyB1c3VhbGx5IGRlZmF1bHQsIGZvbGxvd2VkIGJ5IGxvdyB0byBoaWdoICovCiAJZm9yIChpID0gMDsgaSA8IHBvd2VyX2luZm8tPnBwbGliLnVjTnVtU3RhdGVzOyBpKyspIHsKIAkJbW9kZV9pbmRleCA9IDA7CkBAIC0yNDE1LDEzICsyNDA4LDE3IEBACiAJcmFkZW9uX2F0b21iaW9zX2FkZF9wcGxpYl90aGVybWFsX2NvbnRyb2xsZXIocmRldiwgJnBvd2VyX2luZm8tPnBwbGliLnNUaGVybWFsQ29udHJvbGxlcik7CiAJc3RhdGVfYXJyYXkgPSAoc3RydWN0IFN0YXRlQXJyYXkgKikKIAkJKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsgZGF0YV9vZmZzZXQgKwotCQkgcG93ZXJfaW5mby0+cHBsaWIudXNTdGF0ZUFycmF5T2Zmc2V0KTsKKwkJIGxlMTZfdG9fY3B1KHBvd2VyX2luZm8tPnBwbGliLnVzU3RhdGVBcnJheU9mZnNldCkpOwogCWNsb2NrX2luZm9fYXJyYXkgPSAoc3RydWN0IENsb2NrSW5mb0FycmF5ICopCiAJCShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArIGRhdGFfb2Zmc2V0ICsKLQkJIHBvd2VyX2luZm8tPnBwbGliLnVzQ2xvY2tJbmZvQXJyYXlPZmZzZXQpOworCQkgbGUxNl90b19jcHUocG93ZXJfaW5mby0+cHBsaWIudXNDbG9ja0luZm9BcnJheU9mZnNldCkpOwogCW5vbl9jbG9ja19pbmZvX2FycmF5ID0gKHN0cnVjdCBOb25DbG9ja0luZm9BcnJheSAqKQogCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCArCi0JCSBwb3dlcl9pbmZvLT5wcGxpYi51c05vbkNsb2NrSW5mb0FycmF5T2Zmc2V0KTsKKwkJIGxlMTZfdG9fY3B1KHBvd2VyX2luZm8tPnBwbGliLnVzTm9uQ2xvY2tJbmZvQXJyYXlPZmZzZXQpKTsKKwlyZGV2LT5wbS5wb3dlcl9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUpICoKKwkJCQkgICAgICAgc3RhdGVfYXJyYXktPnVjTnVtRW50cmllcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZGV2LT5wbS5wb3dlcl9zdGF0ZSkKKwkJcmV0dXJuIHN0YXRlX2luZGV4OwogCWZvciAoaSA9IDA7IGkgPCBzdGF0ZV9hcnJheS0+dWNOdW1FbnRyaWVzOyBpKyspIHsKIAkJbW9kZV9pbmRleCA9IDA7CiAJCXBvd2VyX3N0YXRlID0gKHVuaW9uIHBwbGliX3Bvd2VyX3N0YXRlICopJnN0YXRlX2FycmF5LT5zdGF0ZXNbaV07CkBAIC0yNDk1LDE5ICsyNDkyLDIyIEBACiAJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7Ci0JCS8qIGFkZCB0aGUgZGVmYXVsdCBtb2RlICovCi0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KLQkJCVBPV0VSX1NUQVRFX1RZUEVfREVGQVVMVDsKLQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm51bV9jbG9ja19tb2RlcyA9IDE7Ci0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPSByZGV2LT5jbG9jay5kZWZhdWx0X21jbGs7Ci0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnNjbGsgPSByZGV2LT5jbG9jay5kZWZhdWx0X3NjbGs7Ci0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5kZWZhdWx0X2Nsb2NrX21vZGUgPQotCQkJJnJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdOwotCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPSBWT0xUQUdFX05PTkU7Ci0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5wY2llX2xhbmVzID0gMTY7Ci0JCXJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGVfaW5kZXggPSBzdGF0ZV9pbmRleDsKLQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmZsYWdzID0gMDsKLQkJc3RhdGVfaW5kZXgrKzsKKwkJcmRldi0+cG0ucG93ZXJfc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZGV2LT5wbS5wb3dlcl9zdGF0ZSkgeworCQkJLyogYWRkIHRoZSBkZWZhdWx0IG1vZGUgKi8KKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQlQT1dFUl9TVEFURV9UWVBFX0RFRkFVTFQ7CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubnVtX2Nsb2NrX21vZGVzID0gMTsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPSByZGV2LT5jbG9jay5kZWZhdWx0X21jbGs7CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID0gcmRldi0+Y2xvY2suZGVmYXVsdF9zY2xrOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmRlZmF1bHRfY2xvY2tfbW9kZSA9CisJCQkJJnJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS50eXBlID0gVk9MVEFHRV9OT05FOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnBjaWVfbGFuZXMgPSAxNjsKKwkJCXJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGVfaW5kZXggPSBzdGF0ZV9pbmRleDsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5mbGFncyA9IDA7CisJCQlzdGF0ZV9pbmRleCsrOworCQl9CiAJfQogCiAJcmRldi0+cG0ubnVtX3Bvd2VyX3N0YXRlcyA9IHN0YXRlX2luZGV4OwpAQCAtMjUzMyw3ICsyNTMzLDcgQEAKIAlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBHZXRFbmdpbmVDbG9jayk7CiAKIAlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKLQlyZXR1cm4gYXJncy51bFJldHVybkVuZ2luZUNsb2NrOworCXJldHVybiBsZTMyX3RvX2NwdShhcmdzLnVsUmV0dXJuRW5naW5lQ2xvY2spOwogfQogCiB1aW50MzJfdCByYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpAQCAtMjU0Miw3ICsyNTQyLDcgQEAKIAlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBHZXRNZW1vcnlDbG9jayk7CiAKIAlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKLQlyZXR1cm4gYXJncy51bFJldHVybk1lbW9yeUNsb2NrOworCXJldHVybiBsZTMyX3RvX2NwdShhcmdzLnVsUmV0dXJuTWVtb3J5Q2xvY2spOwogfQogCiB2b2lkIHJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCkBAIC0yNTUxLDcgKzI1NTEsNyBAQAogCVNFVF9FTkdJTkVfQ0xPQ0tfUFNfQUxMT0NBVElPTiBhcmdzOwogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldEVuZ2luZUNsb2NrKTsKIAotCWFyZ3MudWxUYXJnZXRFbmdpbmVDbG9jayA9IGVuZ19jbG9jazsJLyogMTAga2h6ICovCisJYXJncy51bFRhcmdldEVuZ2luZUNsb2NrID0gY3B1X3RvX2xlMzIoZW5nX2Nsb2NrKTsJLyogMTAga2h6ICovCiAKIAlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIH0KQEAgLTI1NjUsNyArMjU2NSw3IEBACiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkKIAkJcmV0dXJuOwogCi0JYXJncy51bFRhcmdldE1lbW9yeUNsb2NrID0gbWVtX2Nsb2NrOwkvKiAxMCBraHogKi8KKwlhcmdzLnVsVGFyZ2V0TWVtb3J5Q2xvY2sgPSBjcHVfdG9fbGUzMihtZW1fY2xvY2spOwkvKiAxMCBraHogKi8KIAogCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOwogfQpAQCAtMjYyMyw3ICsyNjIzLDcgQEAKIAliaW9zXzJfc2NyYXRjaCAmPSB+QVRPTV9TMl9WUklfQlJJR0hUX0VOQUJMRTsKIAogCS8qIHRlbGwgdGhlIGJpb3Mgbm90IHRvIGhhbmRsZSBtb2RlIHN3aXRjaGluZyAqLwotCWJpb3NfNl9zY3JhdGNoIHw9IChBVE9NX1M2X0FDQ19CTE9DS19ESVNQTEFZX1NXSVRDSCB8IEFUT01fUzZfQUNDX01PREUpOworCWJpb3NfNl9zY3JhdGNoIHw9IEFUT01fUzZfQUNDX0JMT0NLX0RJU1BMQVlfU1dJVENIOwogCiAJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApIHsKIAkJV1JFRzMyKFI2MDBfQklPU18yX1NDUkFUQ0gsIGJpb3NfMl9zY3JhdGNoKTsKQEAgLTI2NzQsMTAgKzI2NzQsMTMgQEAKIAllbHNlCiAJCWJpb3NfNl9zY3JhdGNoID0gUlJFRzMyKFJBREVPTl9CSU9TXzZfU0NSQVRDSCk7CiAKLQlpZiAobG9jaykKKwlpZiAobG9jaykgewogCQliaW9zXzZfc2NyYXRjaCB8PSBBVE9NX1M2X0NSSVRJQ0FMX1NUQVRFOwotCWVsc2UKKwkJYmlvc182X3NjcmF0Y2ggJj0gfkFUT01fUzZfQUNDX01PREU7CisJfSBlbHNlIHsKIAkJYmlvc182X3NjcmF0Y2ggJj0gfkFUT01fUzZfQ1JJVElDQUxfU1RBVEU7CisJCWJpb3NfNl9zY3JhdGNoIHw9IEFUT01fUzZfQUNDX01PREU7CisJfQogCiAJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApCiAJCVdSRUczMihSNjAwX0JJT1NfNl9TQ1JBVENILCBiaW9zXzZfc2NyYXRjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKaW5kZXggNTkxZmNhZS4uY2Y3YzhkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYwpAQCAtMTUwNCw2ICsxNTA0LDExIEBACiAJCQkgICAocmRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDRhNDgpKSB7CiAJCQkvKiBNYWMgWDgwMCAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX01BQ19YODAwOworCQl9IGVsc2UgaWYgKChyZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg0MTUwKSAmJgorCQkJICAgKHJkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDAyKSAmJgorCQkJICAgKHJkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHg0MTUwKSkgeworCQkJLyogTWFjIEc1IDk2MDAgKi8KKwkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9NQUNfRzVfOTYwMDsKIAkJfSBlbHNlCiAjZW5kaWYgLyogQ09ORklHX1BQQ19QTUFDICovCiAjaWZkZWYgQ09ORklHX1BQQzY0CkBAIC0yMDIyLDYgKzIwMjcsNDggQEAKIAkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9JLAogCQkJCQkgICAgJmhwZCk7CiAJCWJyZWFrOworCWNhc2UgQ1RfTUFDX0c1Xzk2MDA6CisJCURSTV9JTkZPKCJDb25uZWN0b3IgVGFibGU6ICVkIChtYWMgZzUgOTYwMClcbiIsCisJCQkgcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSk7CisJCS8qIERWSSAtIHR2IGRhYywgZHZvICovCisJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMocmRldiwgRERDX0RWSSwgMCwgMCk7CisJCWhwZC5ocGQgPSBSQURFT05fSFBEXzE7IC8qID8/PyAqLworCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKKwkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfZW51bShkZXYsCisJCQkJCQkJCSAgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JULAorCQkJCQkJCQkgIDApLAorCQkJCQkgIEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCk7CisJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAorCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9lbnVtKGRldiwKKwkJCQkJCQkJICBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQsCisJCQkJCQkJCSAgMiksCisJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKTsKKwkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwKKwkJCQkJICAgIEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCB8CisJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQsCisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JLAorCQkJCQkgICAgJmhwZCk7CisJCS8qIEFEQyAtIHByaW1hcnkgZGFjLCBpbnRlcm5hbCB0bWRzICovCisJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMocmRldiwgRERDX1ZHQSwgMCwgMCk7CisJCWhwZC5ocGQgPSBSQURFT05fSFBEXzI7IC8qID8/PyAqLworCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKKwkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfZW51bShkZXYsCisJCQkJCQkJCSAgQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JULAorCQkJCQkJCQkgIDApLAorCQkJCQkgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCk7CisJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAorCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9lbnVtKGRldiwKKwkJCQkJCQkJICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCisJCQkJCQkJCSAgMSksCisJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUKTsKKwkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwKKwkJCQkJICAgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCB8CisJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JLAorCQkJCQkgICAgJmhwZCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgdGFibGU6ICVkIChpbnZhbGlkKVxuIiwKIAkJCSByZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlKTsKQEAgLTI0NDIsNiArMjQ4OSwxNyBAQAogCiAJcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZV9pbmRleCA9IC0xOwogCisJLyogYWxsb2NhdGUgMiBwb3dlciBzdGF0ZXMgKi8KKwlyZGV2LT5wbS5wb3dlcl9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUpICogMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZGV2LT5wbS5wb3dlcl9zdGF0ZSkgeworCQlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID0gc3RhdGVfaW5kZXg7CisJCXJkZXYtPnBtLm51bV9wb3dlcl9zdGF0ZXMgPSAwOworCisJCXJkZXYtPnBtLmN1cnJlbnRfcG93ZXJfc3RhdGVfaW5kZXggPSByZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4OworCQlyZGV2LT5wbS5jdXJyZW50X2Nsb2NrX21vZGVfaW5kZXggPSAwOworCQlyZXR1cm47CisJfQorCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX01PQklMSVRZKSB7CiAJCW9mZnNldCA9IGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfUE9XRVJQTEFZX0lORk9fVEFCTEUpOwogCQlpZiAob2Zmc2V0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCmluZGV4IDI2MDkxZDYuLjQ5NTRlMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCkBAIC04OTEsOSArODkxLDkgQEAKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldi0+cGRldik7CiAJCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LT5wZGV2LCBQQ0lfRDNob3QpOwogCX0KLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcmFkZW9uX2ZiZGV2X3NldF9zdXNwZW5kKHJkZXYsIDEpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiAwOwogfQogCkBAIC05MDUsMTEgKzkwNSwxMSBAQAogCWlmIChkZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSA9PSBEUk1fU1dJVENIX1BPV0VSX09GRikKIAkJcmV0dXJuIDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYtPnBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUoZGV2LT5wZGV2KTsKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2LT5wZGV2KSkgewotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybiAtMTsKIAl9CiAJcGNpX3NldF9tYXN0ZXIoZGV2LT5wZGV2KTsKQEAgLTkyMCw3ICs5MjAsNyBAQAogCXJhZGVvbl9yZXN0b3JlX2Jpb3Nfc2NyYXRjaF9yZWdzKHJkZXYpOwogCiAJcmFkZW9uX2ZiZGV2X3NldF9zdXNwZW5kKHJkZXYsIDApOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJLyogcmVzZXQgaHBkIHN0YXRlICovCiAJcmFkZW9uX2hwZF9pbml0KHJkZXYpOwpAQCAtOTM2LDggKzkzNiwxMSBAQAogaW50IHJhZGVvbl9ncHVfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJaW50IHI7CisJaW50IHJlc2NoZWQ7CiAKIAlyYWRlb25fc2F2ZV9iaW9zX3NjcmF0Y2hfcmVncyhyZGV2KTsKKwkvKiBibG9jayBUVE0gKi8KKwlyZXNjaGVkID0gdHRtX2JvX2xvY2tfZGVsYXllZF93b3JrcXVldWUoJnJkZXYtPm1tYW4uYmRldik7CiAJcmFkZW9uX3N1c3BlbmQocmRldik7CiAKIAlyID0gcmFkZW9uX2FzaWNfcmVzZXQocmRldik7CkBAIC05NDYsNiArOTQ5LDcgQEAKIAkJcmFkZW9uX3Jlc3VtZShyZGV2KTsKIAkJcmFkZW9uX3Jlc3RvcmVfYmlvc19zY3JhdGNoX3JlZ3MocmRldik7CiAJCWRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUocmRldi0+ZGRldik7CisJCXR0bV9ib191bmxvY2tfZGVsYXllZF93b3JrcXVldWUoJnJkZXYtPm1tYW4uYmRldiwgcmVzY2hlZCk7CiAJCXJldHVybiAwOwogCX0KIAkvKiBiYWQgbmV3cywgaG93IHRvIHRlbGwgaXQgdG8gdXNlcnNwYWNlID8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwppbmRleCBkMjZkYWJmLi4zZTdlN2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCkBAIC03ODAsNiArNzgwLDEyNSBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIGF2aXZvICovCitzdGF0aWMgdm9pZCBhdml2b19nZXRfZmJfZGl2KHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCQkgICAgIHUzMiB0YXJnZXRfY2xvY2ssCisJCQkgICAgIHUzMiBwb3N0X2RpdiwKKwkJCSAgICAgdTMyIHJlZl9kaXYsCisJCQkgICAgIHUzMiAqZmJfZGl2LAorCQkJICAgICB1MzIgKmZyYWNfZmJfZGl2KQoreworCXUzMiB0bXAgPSBwb3N0X2RpdiAqIHJlZl9kaXY7CisKKwl0bXAgKj0gdGFyZ2V0X2Nsb2NrOworCSpmYl9kaXYgPSB0bXAgLyBwbGwtPnJlZmVyZW5jZV9mcmVxOworCSpmcmFjX2ZiX2RpdiA9IHRtcCAlIHBsbC0+cmVmZXJlbmNlX2ZyZXE7CisKKyAgICAgICAgaWYgKCpmYl9kaXYgPiBwbGwtPm1heF9mZWVkYmFja19kaXYpCisJCSpmYl9kaXYgPSBwbGwtPm1heF9mZWVkYmFja19kaXY7CisgICAgICAgIGVsc2UgaWYgKCpmYl9kaXYgPCBwbGwtPm1pbl9mZWVkYmFja19kaXYpCisgICAgICAgICAgICAgICAgKmZiX2RpdiA9IHBsbC0+bWluX2ZlZWRiYWNrX2RpdjsKK30KKworc3RhdGljIHUzMiBhdml2b19nZXRfcG9zdF9kaXYoc3RydWN0IHJhZGVvbl9wbGwgKnBsbCwKKwkJCSAgICAgIHUzMiB0YXJnZXRfY2xvY2spCit7CisJdTMyIHZjbywgcG9zdF9kaXYsIHRtcDsKKworCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9VU0VfUE9TVF9ESVYpCisJCXJldHVybiBwbGwtPnBvc3RfZGl2OworCisJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1BSRUZFUl9NSU5NX09WRVJfTUFYUCkgeworCQlpZiAocGxsLT5mbGFncyAmIFJBREVPTl9QTExfSVNfTENEKQorCQkJdmNvID0gcGxsLT5sY2RfcGxsX291dF9taW47CisJCWVsc2UKKwkJCXZjbyA9IHBsbC0+cGxsX291dF9taW47CisJfSBlbHNlIHsKKwkJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX0lTX0xDRCkKKwkJCXZjbyA9IHBsbC0+bGNkX3BsbF9vdXRfbWF4OworCQllbHNlCisJCQl2Y28gPSBwbGwtPnBsbF9vdXRfbWF4OworCX0KKworCXBvc3RfZGl2ID0gdmNvIC8gdGFyZ2V0X2Nsb2NrOworCXRtcCA9IHZjbyAlIHRhcmdldF9jbG9jazsKKworCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9QUkVGRVJfTUlOTV9PVkVSX01BWFApIHsKKwkJaWYgKHRtcCkKKwkJCXBvc3RfZGl2Kys7CisJfSBlbHNlIHsKKwkJaWYgKCF0bXApCisJCQlwb3N0X2Rpdi0tOworCX0KKworCWlmIChwb3N0X2RpdiA+IHBsbC0+bWF4X3Bvc3RfZGl2KQorCQlwb3N0X2RpdiA9IHBsbC0+bWF4X3Bvc3RfZGl2OworCWVsc2UgaWYgKHBvc3RfZGl2IDwgcGxsLT5taW5fcG9zdF9kaXYpCisJCXBvc3RfZGl2ID0gcGxsLT5taW5fcG9zdF9kaXY7CisKKwlyZXR1cm4gcG9zdF9kaXY7Cit9CisKKyNkZWZpbmUgTUFYX1RPTEVSQU5DRSAxMAorCit2b2lkIHJhZGVvbl9jb21wdXRlX3BsbF9hdml2byhzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAorCQkJICAgICAgdTMyIGZyZXEsCisJCQkgICAgICB1MzIgKmRvdF9jbG9ja19wLAorCQkJICAgICAgdTMyICpmYl9kaXZfcCwKKwkJCSAgICAgIHUzMiAqZnJhY19mYl9kaXZfcCwKKwkJCSAgICAgIHUzMiAqcmVmX2Rpdl9wLAorCQkJICAgICAgdTMyICpwb3N0X2Rpdl9wKQoreworCXUzMiB0YXJnZXRfY2xvY2sgPSBmcmVxIC8gMTA7CisJdTMyIHBvc3RfZGl2ID0gYXZpdm9fZ2V0X3Bvc3RfZGl2KHBsbCwgdGFyZ2V0X2Nsb2NrKTsKKwl1MzIgcmVmX2RpdiA9IHBsbC0+bWluX3JlZl9kaXY7CisJdTMyIGZiX2RpdiA9IDAsIGZyYWNfZmJfZGl2ID0gMCwgdG1wOworCisJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1VTRV9SRUZfRElWKQorCQlyZWZfZGl2ID0gcGxsLT5yZWZlcmVuY2VfZGl2OworCisJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1VTRV9GUkFDX0ZCX0RJVikgeworCQlhdml2b19nZXRfZmJfZGl2KHBsbCwgdGFyZ2V0X2Nsb2NrLCBwb3N0X2RpdiwgcmVmX2RpdiwgJmZiX2RpdiwgJmZyYWNfZmJfZGl2KTsKKwkJZnJhY19mYl9kaXYgPSAoMTAwICogZnJhY19mYl9kaXYpIC8gcGxsLT5yZWZlcmVuY2VfZnJlcTsKKwkJaWYgKGZyYWNfZmJfZGl2ID49IDUpIHsKKwkJCWZyYWNfZmJfZGl2IC09IDU7CisJCQlmcmFjX2ZiX2RpdiA9IGZyYWNfZmJfZGl2IC8gMTA7CisJCQlmcmFjX2ZiX2RpdisrOworCQl9CisJCWlmIChmcmFjX2ZiX2RpdiA+PSAxMCkgeworCQkJZmJfZGl2Kys7CisJCQlmcmFjX2ZiX2RpdiA9IDA7CisJCX0KKwl9IGVsc2UgeworCQl3aGlsZSAocmVmX2RpdiA8PSBwbGwtPm1heF9yZWZfZGl2KSB7CisJCQlhdml2b19nZXRfZmJfZGl2KHBsbCwgdGFyZ2V0X2Nsb2NrLCBwb3N0X2RpdiwgcmVmX2RpdiwKKwkJCQkJICZmYl9kaXYsICZmcmFjX2ZiX2Rpdik7CisJCQlpZiAoZnJhY19mYl9kaXYgPj0gKHBsbC0+cmVmZXJlbmNlX2ZyZXEgLyAyKSkKKwkJCQlmYl9kaXYrKzsKKwkJCWZyYWNfZmJfZGl2ID0gMDsKKwkJCXRtcCA9IChwbGwtPnJlZmVyZW5jZV9mcmVxICogZmJfZGl2KSAvIChwb3N0X2RpdiAqIHJlZl9kaXYpOworCQkJdG1wID0gKHRtcCAqIDEwMDAwKSAvIHRhcmdldF9jbG9jazsKKworCQkJaWYgKHRtcCA+ICgxMDAwMCArIE1BWF9UT0xFUkFOQ0UpKQorCQkJCXJlZl9kaXYrKzsKKwkJCWVsc2UgaWYgKHRtcCA+PSAoMTAwMDAgLSBNQVhfVE9MRVJBTkNFKSkKKwkJCQlicmVhazsKKwkJCWVsc2UKKwkJCQlyZWZfZGl2Kys7CisJCX0KKwl9CisKKwkqZG90X2Nsb2NrX3AgPSAoKHBsbC0+cmVmZXJlbmNlX2ZyZXEgKiBmYl9kaXYgKiAxMCkgKyAocGxsLT5yZWZlcmVuY2VfZnJlcSAqIGZyYWNfZmJfZGl2KSkgLworCQkocmVmX2RpdiAqIHBvc3RfZGl2ICogMTApOworCSpmYl9kaXZfcCA9IGZiX2RpdjsKKwkqZnJhY19mYl9kaXZfcCA9IGZyYWNfZmJfZGl2OworCSpyZWZfZGl2X3AgPSByZWZfZGl2OworCSpwb3N0X2Rpdl9wID0gcG9zdF9kaXY7CisJRFJNX0RFQlVHX0tNUygiJWQsIHBsbCBkaXZpZGVycyAtIGZiOiAlZC4lZCByZWY6ICVkLCBwb3N0ICVkXG4iLAorCQkgICAgICAqZG90X2Nsb2NrX3AsIGZiX2RpdiwgZnJhY19mYl9kaXYsIHJlZl9kaXYsIHBvc3RfZGl2KTsKK30KKworLyogcHJlLWF2aXZvICovCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90IHJhZGVvbl9kaXYodWludDY0X3QgbiwgdWludDMyX3QgZCkKIHsKIAl1aW50NjRfdCBtb2Q7CkBAIC03OTAsMTMgKzkwOSwxMyBAQAogCXJldHVybiBuOwogfQogCi12b2lkIHJhZGVvbl9jb21wdXRlX3BsbChzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAotCQkJdWludDY0X3QgZnJlcSwKLQkJCXVpbnQzMl90ICpkb3RfY2xvY2tfcCwKLQkJCXVpbnQzMl90ICpmYl9kaXZfcCwKLQkJCXVpbnQzMl90ICpmcmFjX2ZiX2Rpdl9wLAotCQkJdWludDMyX3QgKnJlZl9kaXZfcCwKLQkJCXVpbnQzMl90ICpwb3N0X2Rpdl9wKQordm9pZCByYWRlb25fY29tcHV0ZV9wbGxfbGVnYWN5KHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCQkgICAgICAgdWludDY0X3QgZnJlcSwKKwkJCSAgICAgICB1aW50MzJfdCAqZG90X2Nsb2NrX3AsCisJCQkgICAgICAgdWludDMyX3QgKmZiX2Rpdl9wLAorCQkJICAgICAgIHVpbnQzMl90ICpmcmFjX2ZiX2Rpdl9wLAorCQkJICAgICAgIHVpbnQzMl90ICpyZWZfZGl2X3AsCisJCQkgICAgICAgdWludDMyX3QgKnBvc3RfZGl2X3ApCiB7CiAJdWludDMyX3QgbWluX3JlZl9kaXYgPSBwbGwtPm1pbl9yZWZfZGl2OwogCXVpbnQzMl90IG1heF9yZWZfZGl2ID0gcGxsLT5tYXhfcmVmX2RpdjsKQEAgLTgyNiw2ICs5NDUsOSBAQAogCQlwbGxfb3V0X21heCA9IHBsbC0+cGxsX291dF9tYXg7CiAJfQogCisJaWYgKHBsbF9vdXRfbWluID4gNjQ4MDApCisJCXBsbF9vdXRfbWluID0gNjQ4MDA7CisKIAlpZiAocGxsLT5mbGFncyAmIFJBREVPTl9QTExfVVNFX1JFRl9ESVYpCiAJCW1pbl9yZWZfZGl2ID0gbWF4X3JlZl9kaXYgPSBwbGwtPnJlZmVyZW5jZV9kaXY7CiAJZWxzZSB7CkBAIC05NjUsNiArMTA4NywxMCBAQAogCSpmcmFjX2ZiX2Rpdl9wID0gYmVzdF9mcmFjX2ZlZWRiYWNrX2RpdjsKIAkqcmVmX2Rpdl9wID0gYmVzdF9yZWZfZGl2OwogCSpwb3N0X2Rpdl9wID0gYmVzdF9wb3N0X2RpdjsKKwlEUk1fREVCVUdfS01TKCIlZCAlZCwgcGxsIGRpdmlkZXJzIC0gZmI6ICVkLiVkIHJlZjogJWQsIHBvc3QgJWRcbiIsCisJCSAgICAgIGZyZXEsIGJlc3RfZnJlcSAvIDEwMDAsIGJlc3RfZmVlZGJhY2tfZGl2LCBiZXN0X2ZyYWNfZmVlZGJhY2tfZGl2LAorCQkgICAgICBiZXN0X3JlZl9kaXYsIGJlc3RfcG9zdF9kaXYpOworCiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl91c2VyX2ZyYW1lYnVmZmVyX2Rlc3Ryb3koc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCmluZGV4IGQ1NjgwYTAuLjI3NWIyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCkBAIC00OCw3ICs0OCw3IEBACiAgKiAtIDIuNS4wIC0gYWRkIGdldCBhY2NlbCAyIHRvIHdvcmsgYXJvdW5kIGRkeCBicmVha2FnZSBmb3IgZXZlcmdyZWVuCiAgKiAtIDIuNi4wIC0gYWRkIHRpbGluZyBjb25maWcgcXVlcnkgKHI2eHgrKSwgYWRkIGluaXRpYWwgSGlaIHN1cHBvcnQgKHIzMDAtPnI1MDApCiAgKiAgIDIuNy4wIC0gZml4dXBzIGZvciByNjAwIDJEIHRpbGluZyBzdXBwb3J0LiAobm8gZXh0ZXJuYWwgQUJJIGNoYW5nZSksIGFkZCBlZyBkeW4gZ3ByIHJlZ3MKLSAqICAgMi44LjAgLSBwYWdlZmxpcCBzdXBwb3J0LCByNTAwIFVTX0ZPUk1BVCByZWdzLiByNTAwIEFSR0IyMTAxMDEwIGNvbG9yYnVmLCByMzAwLT5yNTAwIENNQVNLCisgKiAgIDIuOC4wIC0gcGFnZWZsaXAgc3VwcG9ydCwgcjUwMCBVU19GT1JNQVQgcmVncy4gcjUwMCBBUkdCMjEwMTAxMCBjb2xvcmJ1ZiwgcjMwMC0+cjUwMCBDTUFTSywgY2xvY2sgY3J5c3RhbCBxdWVyeQogICovCiAjZGVmaW5lIEtNU19EUklWRVJfTUFKT1IJMgogI2RlZmluZSBLTVNfRFJJVkVSX01JTk9SCTgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKaW5kZXggNDQ4ZWJhOC4uNWNiYTQ2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKQEAgLTE1MjQsNiArMTUyNCw3IEBACiAjZGVmaW5lIFI2MDBfQ1BfUkJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMxMDQKICMgICAgICAgZGVmaW5lIFI2MDBfUkJfQlVGU1ooeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKICMgICAgICAgZGVmaW5lIFI2MDBfUkJfQkxLU1ooeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgOCkKKyMJZGVmaW5lIFI2MDBfQlVGX1NXQVBfMzJCSVQJCSAgICAgICAgICAgICAgICgyIDw8IDE2KQogIyAgICAgICBkZWZpbmUgUjYwMF9SQl9OT19VUERBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjcpCiAjICAgICAgIGRlZmluZSBSNjAwX1JCX1JQVFJfV1JfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKICNkZWZpbmUgUjYwMF9DUF9SQl9SUFRSX1dSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzEwOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKaW5kZXggOGZkMTg0Mi4uYjQyNzQ4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCkBAIC02NDEsNyArNjQxLDcgQEAKIAlzd2l0Y2ggKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpIHsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOgogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlCOiAvKiBIRE1JLUIgaXMgYmFzaWNhbGx5IERMLURWSTsgYW5hbG9nIHdvcmtzIGZpbmUgKi8KLQkJaWYgKGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkgeworCQlpZiAoZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpICYmIHJhZGVvbl9hdWRpbykgewogCQkJLyogZml4IG1lICovCiAJCQlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKQogCQkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9EVkk7CkBAIC02NTUsNyArNjU1LDcgQEAKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOgogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBOgogCWRlZmF1bHQ6Ci0JCWlmIChkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8ocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpIHsKKwkJaWYgKGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhyYWRlb25fY29ubmVjdG9yLT5lZGlkKSAmJiByYWRlb25fYXVkaW8pIHsKIAkJCS8qIGZpeCBtZSAqLwogCQkJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkKIAkJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFZJOwpAQCAtNjczLDcgKzY3Myw3IEBACiAJCWlmICgoZGlnX2Nvbm5lY3Rvci0+ZHBfc2lua190eXBlID09IENPTk5FQ1RPUl9PQkpFQ1RfSURfRElTUExBWVBPUlQpIHx8CiAJCSAgICAoZGlnX2Nvbm5lY3Rvci0+ZHBfc2lua190eXBlID09IENPTk5FQ1RPUl9PQkpFQ1RfSURfZURQKSkKIAkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9EUDsKLQkJZWxzZSBpZiAoZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKSB7CisJCWVsc2UgaWYgKGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhyYWRlb25fY29ubmVjdG9yLT5lZGlkKSAmJiByYWRlb25fYXVkaW8pIHsKIAkJCS8qIGZpeCBtZSAqLwogCQkJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkKIAkJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFZJOwpAQCAtOTEwLDcgKzkxMCw3IEBACiAKIAlhcmdzLnYxLnVjQWN0aW9uID0gYWN0aW9uOwogCWlmIChhY3Rpb24gPT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fSU5JVCkgewotCQlhcmdzLnYxLnVzSW5pdEluZm8gPSBjb25uZWN0b3Jfb2JqZWN0X2lkOworCQlhcmdzLnYxLnVzSW5pdEluZm8gPSBjcHVfdG9fbGUxNihjb25uZWN0b3Jfb2JqZWN0X2lkKTsKIAl9IGVsc2UgaWYgKGFjdGlvbiA9PSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9TRVRVUF9WU0VNUEgpIHsKIAkJYXJncy52MS5hc01vZGUudWNMYW5lU2VsID0gbGFuZV9udW07CiAJCWFyZ3MudjEuYXNNb2RlLnVjTGFuZVNldCA9IGxhbmVfc2V0OwpAQCAtMTA2Myw3ICsxMDYzLDcgQEAKIAlpZiAoIUFTSUNfSVNfRENFNChyZGV2KSkKIAkJcmV0dXJuOwogCi0JaWYgKChhY3Rpb24gIT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fUE9XRVJfT04pIHx8CisJaWYgKChhY3Rpb24gIT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fUE9XRVJfT04pICYmCiAJICAgIChhY3Rpb24gIT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fUE9XRVJfT0ZGKSkKIAkJcmV0dXJuOwogCkBAIC0xMTQwLDcgKzExNDAsNyBAQAogCQljYXNlIDM6CiAJCQlhcmdzLnYzLnNFeHRFbmNvZGVyLnVjQWN0aW9uID0gYWN0aW9uOwogCQkJaWYgKGFjdGlvbiA9PSBFWFRFUk5BTF9FTkNPREVSX0FDVElPTl9WM19FTkNPREVSX0lOSVQpCi0JCQkJYXJncy52My5zRXh0RW5jb2Rlci51c0Nvbm5lY3RvcklkID0gY29ubmVjdG9yX29iamVjdF9pZDsKKwkJCQlhcmdzLnYzLnNFeHRFbmNvZGVyLnVzQ29ubmVjdG9ySWQgPSBjcHVfdG9fbGUxNihjb25uZWN0b3Jfb2JqZWN0X2lkKTsKIAkJCWVsc2UKIAkJCQlhcmdzLnYzLnNFeHRFbmNvZGVyLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAvIDEwKTsKIAkJCWFyZ3MudjMuc0V4dEVuY29kZXIudWNFbmNvZGVyTW9kZSA9IGF0b21iaW9zX2dldF9lbmNvZGVyX21vZGUoZW5jb2Rlcik7CkBAIC0xNTcwLDExICsxNTcwLDIxIEBACiAJfQogCiAJLyogc2V0IHNjYWxlciBjbGVhcnMgdGhpcyBvbiBzb21lIGNoaXBzICovCi0JLyogWFhYIGNoZWNrIERDRTQgKi8KLQlpZiAoIShyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkpIHsKLQkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikgJiYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpKQotCQkJV1JFRzMyKEFWSVZPX0QxTU9ERV9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKLQkJCSAgICAgICBBVklWT19EMU1PREVfSU5URVJMRUFWRV9FTik7CisJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikgJiYKKwkgICAgKCEocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpKSkgeworCQlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKSB7CisJCQlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKKwkJCQlXUkVHMzIoRVZFUkdSRUVOX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCQkJCSAgICAgICBFVkVSR1JFRU5fSU5URVJMRUFWRV9FTik7CisJCQllbHNlCisJCQkJV1JFRzMyKEVWRVJHUkVFTl9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CisJCX0gZWxzZSB7CisJCQlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKKwkJCQlXUkVHMzIoQVZJVk9fRDFNT0RFX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCQkJCSAgICAgICBBVklWT19EMU1PREVfSU5URVJMRUFWRV9FTik7CisJCQllbHNlCisJCQkJV1JFRzMyKEFWSVZPX0QxTU9ERV9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CisJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCmluZGV4IDY2MzI0YjUuLmNjNDRiZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYwpAQCAtMTEzLDExICsxMTMsMTQgQEAKIAl1MzIgdGlsaW5nX2ZsYWdzID0gMDsKIAlpbnQgcmV0OwogCWludCBhbGlnbmVkX3NpemUsIHNpemU7CisJaW50IGhlaWdodCA9IG1vZGVfY21kLT5oZWlnaHQ7CiAKIAkvKiBuZWVkIHRvIGFsaWduIHBpdGNoIHdpdGggY3J0YyBsaW1pdHMgKi8KIAltb2RlX2NtZC0+cGl0Y2ggPSByYWRlb25fYWxpZ25fcGl0Y2gocmRldiwgbW9kZV9jbWQtPndpZHRoLCBtb2RlX2NtZC0+YnBwLCBmYl90aWxlZCkgKiAoKG1vZGVfY21kLT5icHAgKyAxKSAvIDgpOwogCi0Jc2l6ZSA9IG1vZGVfY21kLT5waXRjaCAqIG1vZGVfY21kLT5oZWlnaHQ7CisJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApCisJCWhlaWdodCA9IEFMSUdOKG1vZGVfY21kLT5oZWlnaHQsIDgpOworCXNpemUgPSBtb2RlX2NtZC0+cGl0Y2ggKiBoZWlnaHQ7CiAJYWxpZ25lZF9zaXplID0gQUxJR04oc2l6ZSwgUEFHRV9TSVpFKTsKIAlyZXQgPSByYWRlb25fZ2VtX29iamVjdF9jcmVhdGUocmRldiwgYWxpZ25lZF9zaXplLCAwLAogCQkJCSAgICAgICBSQURFT05fR0VNX0RPTUFJTl9WUkFNLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCmluZGV4IGEyODk2NDYuLjllYzgzMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKQEAgLTExMCwxMSArMTEwLDE0IEBACiAKIGludCByYWRlb25faXJxX2ttc19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogeworCWludCBpOwogCWludCByID0gMDsKIAogCUlOSVRfV09SSygmcmRldi0+aG90cGx1Z193b3JrLCByYWRlb25faG90cGx1Z193b3JrX2Z1bmMpOwogCiAJc3Bpbl9sb2NrX2luaXQoJnJkZXYtPmlycS5zd19sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmRldi0+bnVtX2NydGM7IGkrKykKKwkJc3Bpbl9sb2NrX2luaXQoJnJkZXYtPmlycS5wZmxpcF9sb2NrW2ldKTsKIAlyID0gZHJtX3ZibGFua19pbml0KHJkZXYtPmRkZXYsIHJkZXYtPm51bV9jcnRjKTsKIAlpZiAocikgewogCQlyZXR1cm4gcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKaW5kZXggMjhhNTNlNGEuLjgzODdkMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jCkBAIC0yMDEsNiArMjAxLDEwIEBACiAJCX0KIAkJcmFkZW9uX3NldF9maWxwX3JpZ2h0cyhkZXYsICZyZGV2LT5jbWFza19maWxwLCBmaWxwLCAmdmFsdWUpOwogCQlicmVhazsKKwljYXNlIFJBREVPTl9JTkZPX0NMT0NLX0NSWVNUQUxfRlJFUToKKwkJLyogcmV0dXJuIGNsb2NrIHZhbHVlIGluIEtIeiAqLworCQl2YWx1ZSA9IHJkZXYtPmNsb2NrLnNwbGwucmVmZXJlbmNlX2ZyZXEgKiAxMDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0RFQlVHX0tNUygiSW52YWxpZCByZXF1ZXN0ICVkXG4iLCBpbmZvLT5yZXF1ZXN0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNDMsNiArMjQ3LDggQEAKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaWYgKHJkZXYtPmh5cGVyel9maWxwID09IGZpbGVfcHJpdikKIAkJcmRldi0+aHlwZXJ6X2ZpbHAgPSBOVUxMOworCWlmIChyZGV2LT5jbWFza19maWxwID09IGZpbGVfcHJpdikKKwkJcmRldi0+Y21hc2tfZmlscCA9IE5VTEw7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYwppbmRleCBhY2UyZTYzLi5jZjA2MzhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKQEAgLTc3OCw5ICs3NzgsOSBAQAogCURSTV9ERUJVR19LTVMoIlxuIik7CiAKIAlpZiAoIXVzZV9iaW9zX2RpdnMpIHsKLQkJcmFkZW9uX2NvbXB1dGVfcGxsKHBsbCwgbW9kZS0+Y2xvY2ssCi0JCQkJICAgJmZyZXEsICZmZWVkYmFja19kaXYsICZmcmFjX2ZiX2RpdiwKLQkJCQkgICAmcmVmZXJlbmNlX2RpdiwgJnBvc3RfZGl2aWRlcik7CisJCXJhZGVvbl9jb21wdXRlX3BsbF9sZWdhY3kocGxsLCBtb2RlLT5jbG9jaywKKwkJCQkJICAmZnJlcSwgJmZlZWRiYWNrX2RpdiwgJmZyYWNfZmJfZGl2LAorCQkJCQkgICZyZWZlcmVuY2VfZGl2LCAmcG9zdF9kaXZpZGVyKTsKIAogCQlmb3IgKHBvc3RfZGl2ID0gJnBvc3RfZGl2c1swXTsgcG9zdF9kaXYtPmRpdmlkZXI7ICsrcG9zdF9kaXYpIHsKIAkJCWlmIChwb3N0X2Rpdi0+ZGl2aWRlciA9PSBwb3N0X2RpdmlkZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKaW5kZXggMTJiZGVhYi4uYTY3MGNhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaApAQCAtMTQ5LDYgKzE0OSw3IEBACiAjZGVmaW5lIFJBREVPTl9QTExfUFJFRkVSX0NMT1NFU1RfTE9XRVIgKDEgPDwgMTEpCiAjZGVmaW5lIFJBREVPTl9QTExfVVNFX1BPU1RfRElWICAgICAgICAgKDEgPDwgMTIpCiAjZGVmaW5lIFJBREVPTl9QTExfSVNfTENEICAgICAgICAgICAgICAgKDEgPDwgMTMpCisjZGVmaW5lIFJBREVPTl9QTExfUFJFRkVSX01JTk1fT1ZFUl9NQVhQICgxIDw8IDE0KQogCiBzdHJ1Y3QgcmFkZW9uX3BsbCB7CiAJLyogcmVmZXJlbmNlIGZyZXF1ZW5jeSAqLwpAQCAtMjA4LDYgKzIwOSw3IEBACiAJQ1RfRU1BQywKIAlDVF9STjUwX1BPV0VSLAogCUNUX01BQ19YODAwLAorCUNUX01BQ19HNV85NjAwLAogfTsKIAogZW51bSByYWRlb25fZHZvX2NoaXAgewpAQCAtNTEwLDEzICs1MTIsMjEgQEAKIAkJCQkJICAgICBzdHJ1Y3QgcmFkZW9uX2F0b21fc3MgKnNzLAogCQkJCQkgICAgIGludCBpZCwgdTMyIGNsb2NrKTsKIAotZXh0ZXJuIHZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsKHN0cnVjdCByYWRlb25fcGxsICpwbGwsCi0JCQkgICAgICAgdWludDY0X3QgZnJlcSwKLQkJCSAgICAgICB1aW50MzJfdCAqZG90X2Nsb2NrX3AsCi0JCQkgICAgICAgdWludDMyX3QgKmZiX2Rpdl9wLAotCQkJICAgICAgIHVpbnQzMl90ICpmcmFjX2ZiX2Rpdl9wLAotCQkJICAgICAgIHVpbnQzMl90ICpyZWZfZGl2X3AsCi0JCQkgICAgICAgdWludDMyX3QgKnBvc3RfZGl2X3ApOworZXh0ZXJuIHZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsX2xlZ2FjeShzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAorCQkJCSAgICAgIHVpbnQ2NF90IGZyZXEsCisJCQkJICAgICAgdWludDMyX3QgKmRvdF9jbG9ja19wLAorCQkJCSAgICAgIHVpbnQzMl90ICpmYl9kaXZfcCwKKwkJCQkgICAgICB1aW50MzJfdCAqZnJhY19mYl9kaXZfcCwKKwkJCQkgICAgICB1aW50MzJfdCAqcmVmX2Rpdl9wLAorCQkJCSAgICAgIHVpbnQzMl90ICpwb3N0X2Rpdl9wKTsKKworZXh0ZXJuIHZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsX2F2aXZvKHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCQkJICAgICB1MzIgZnJlcSwKKwkJCQkgICAgIHUzMiAqZG90X2Nsb2NrX3AsCisJCQkJICAgICB1MzIgKmZiX2Rpdl9wLAorCQkJCSAgICAgdTMyICpmcmFjX2ZiX2Rpdl9wLAorCQkJCSAgICAgdTMyICpyZWZfZGl2X3AsCisJCQkJICAgICB1MzIgKnBvc3RfZGl2X3ApOwogCiBleHRlcm4gdm9pZCByYWRlb25fc2V0dXBfZW5jb2Rlcl9jbG9uZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCmluZGV4IDNiMWIyYmYuLjJhZWQwM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYwpAQCAtNDMwLDcgKzQzMCw3IEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBwY2lfZ2V0X2RydmRhdGEodG9fcGNpX2RldihkZXYpKTsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRkZXYtPmRldl9wcml2YXRlOwotCXUzMiB0ZW1wOworCWludCB0ZW1wOwogCiAJc3dpdGNoIChyZGV2LT5wbS5pbnRfdGhlcm1hbF90eXBlKSB7CiAJY2FzZSBUSEVSTUFMX1RZUEVfUlY2WFg6CkBAIC02NDYsNiArNjQ2LDkgQEAKICNlbmRpZgogCX0KIAorCWlmIChyZGV2LT5wbS5wb3dlcl9zdGF0ZSkKKwkJa2ZyZWUocmRldi0+cG0ucG93ZXJfc3RhdGUpOworCiAJcmFkZW9uX2h3bW9uX2ZpbmkocmRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKaW5kZXggM2NkNGRhYy4uZWM5M2E3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKQEAgLTM3NSw2ICszNzUsOCBAQAogI2RlZmluZSBSQURFT05fQ09ORklHX0FQRVJfU0laRSAgICAgICAgICAgICAweDAxMDgKICNkZWZpbmUgUkFERU9OX0NPTkZJR19CT05EUyAgICAgICAgICAgICAgICAgMHgwMGU4CiAjZGVmaW5lIFJBREVPTl9DT05GSUdfQ05UTCAgICAgICAgICAgICAgICAgIDB4MDBlMAorIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19WR0FfUkFNX0VOICAgICAgICAoMSA8PCA4KQorIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19WR0FfSU9fRElTICAgICAgICAoMSA8PCA5KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19BVElfUkVWX0ExMSAgICAgICAoMCAgIDw8IDE2KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19BVElfUkVWX0ExMiAgICAgICAoMSAgIDw8IDE2KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0NGR19BVElfUkVWX0ExMyAgICAgICAoMiAgIDw8IDE2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYwppbmRleCAxMjcyZTRiLi5lNWIyY2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYwpAQCAtNzg3LDkgKzc4Nyw5IEBACiAJCXJhZGVvbl9tZW1fdHlwZXNfbGlzdFtpXS5zaG93ID0gJnJhZGVvbl9tbV9kdW1wX3RhYmxlOwogCQlyYWRlb25fbWVtX3R5cGVzX2xpc3RbaV0uZHJpdmVyX2ZlYXR1cmVzID0gMDsKIAkJaWYgKGkgPT0gMCkKLQkJCXJhZGVvbl9tZW1fdHlwZXNfbGlzdFtpXS5kYXRhID0gJnJkZXYtPm1tYW4uYmRldi5tYW5bVFRNX1BMX1ZSQU1dLnByaXY7CisJCQlyYWRlb25fbWVtX3R5cGVzX2xpc3RbaV0uZGF0YSA9IHJkZXYtPm1tYW4uYmRldi5tYW5bVFRNX1BMX1ZSQU1dLnByaXY7CiAJCWVsc2UKLQkJCXJhZGVvbl9tZW1fdHlwZXNfbGlzdFtpXS5kYXRhID0gJnJkZXYtPm1tYW4uYmRldi5tYW5bVFRNX1BMX1RUXS5wcml2OworCQkJcmFkZW9uX21lbV90eXBlc19saXN0W2ldLmRhdGEgPSByZGV2LT5tbWFuLmJkZXYubWFuW1RUTV9QTF9UVF0ucHJpdjsKIAogCX0KIAkvKiBBZGQgdHRtIHBhZ2UgcG9vbCB0byBkZWJ1Z2ZzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3IzMDAgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3IzMDAKaW5kZXggYjUwNmVjMS4uZThhMTc4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yMzAwCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjMwMApAQCAtNjgzLDkgKzY4Myw3IEBACiAweDRERjQgVVNfQUxVX0NPTlNUX0dfMzEKIDB4NERGOCBVU19BTFVfQ09OU1RfQl8zMQogMHg0REZDIFVTX0FMVV9DT05TVF9BXzMxCi0weDRFMDQgUkIzRF9CTEVORENOVExfUjMKIDB4NEUwOCBSQjNEX0FCTEVORENOVExfUjMKLTB4NEUwQyBSQjNEX0NPTE9SX0NIQU5ORUxfTUFTSwogMHg0RTEwIFJCM0RfQ09OU1RBTlRfQ09MT1IKIDB4NEUxNCBSQjNEX0NPTE9SX0NMRUFSX1ZBTFVFCiAweDRFMTggUkIzRF9ST1BDTlRMX1IzCkBAIC03MDYsMTMgKzcwNCwxMSBAQAogMHg0RTc0IFJCM0RfQ01BU0tfV1JJTkRFWAogMHg0RTc4IFJCM0RfQ01BU0tfRFdPUkQKIDB4NEU3QyBSQjNEX0NNQVNLX1JESU5ERVgKLTB4NEU4MCBSQjNEX0FBUkVTT0xWRV9PRkZTRVQKLTB4NEU4NCBSQjNEX0FBUkVTT0xWRV9QSVRDSAotMHg0RTg4IFJCM0RfQUFSRVNPTFZFX0NUTAogMHg0RUEwIFJCM0RfRElTQ0FSRF9TUkNfUElYRUxfTFRFX1RIUkVTSE9MRAogMHg0RUE0IFJCM0RfRElTQ0FSRF9TUkNfUElYRUxfR1RFX1RIUkVTSE9MRAogMHg0RjA0IFpCX1pTVEVOQ0lMQ05UTAogMHg0RjA4IFpCX1NURU5DSUxSRUZNQVNLCiAweDRGMTQgWkJfWlRPUAogMHg0RjE4IFpCX1pDQUNIRV9DVExTVEFUCisweDRGMjggWkJfREVQVEhDTEVBUlZBTFVFCiAweDRGNTggWkJfWlBBU1NfREFUQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNDIwIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNDIwCmluZGV4IDhjMTIxNGMuLjcyMjA3NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjQyMAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I0MjAKQEAgLTEzMCw3ICsxMzAsNiBAQAogMHg0MDFDIEdCX1NFTEVDVAogMHg0MDIwIEdCX0FBX0NPTkZJRwogMHg0MDI0IEdCX0ZJRk9fU0laRQotMHg0MDI4IEdCX1pfUEVRX0NPTkZJRwogMHg0MTAwIFRYX0lOVkFMVEFHUwogMHg0MjAwIEdBX1BPSU5UX1MwCiAweDQyMDQgR0FfUE9JTlRfVDAKQEAgLTc1MCw5ICs3NDksNyBAQAogMHg0REY0IFVTX0FMVV9DT05TVF9HXzMxCiAweDRERjggVVNfQUxVX0NPTlNUX0JfMzEKIDB4NERGQyBVU19BTFVfQ09OU1RfQV8zMQotMHg0RTA0IFJCM0RfQkxFTkRDTlRMX1IzCiAweDRFMDggUkIzRF9BQkxFTkRDTlRMX1IzCi0weDRFMEMgUkIzRF9DT0xPUl9DSEFOTkVMX01BU0sKIDB4NEUxMCBSQjNEX0NPTlNUQU5UX0NPTE9SCiAweDRFMTQgUkIzRF9DT0xPUl9DTEVBUl9WQUxVRQogMHg0RTE4IFJCM0RfUk9QQ05UTF9SMwpAQCAtNzczLDEzICs3NzAsMTEgQEAKIDB4NEU3NCBSQjNEX0NNQVNLX1dSSU5ERVgKIDB4NEU3OCBSQjNEX0NNQVNLX0RXT1JECiAweDRFN0MgUkIzRF9DTUFTS19SRElOREVYCi0weDRFODAgUkIzRF9BQVJFU09MVkVfT0ZGU0VUCi0weDRFODQgUkIzRF9BQVJFU09MVkVfUElUQ0gKLTB4NEU4OCBSQjNEX0FBUkVTT0xWRV9DVEwKIDB4NEVBMCBSQjNEX0RJU0NBUkRfU1JDX1BJWEVMX0xURV9USFJFU0hPTEQKIDB4NEVBNCBSQjNEX0RJU0NBUkRfU1JDX1BJWEVMX0dURV9USFJFU0hPTEQKIDB4NEYwNCBaQl9aU1RFTkNJTENOVEwKIDB4NEYwOCBaQl9TVEVOQ0lMUkVGTUFTSwogMHg0RjE0IFpCX1pUT1AKIDB4NEYxOCBaQl9aQ0FDSEVfQ1RMU1RBVAorMHg0RjI4IFpCX0RFUFRIQ0xFQVJWQUxVRQogMHg0RjU4IFpCX1pQQVNTX0RBVEEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnM2MDAgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3JzNjAwCmluZGV4IDA4MjhkODAuLmQ5ZjYyODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnM2MDAKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yczYwMApAQCAtNzQ5LDkgKzc0OSw3IEBACiAweDRERjQgVVNfQUxVX0NPTlNUX0dfMzEKIDB4NERGOCBVU19BTFVfQ09OU1RfQl8zMQogMHg0REZDIFVTX0FMVV9DT05TVF9BXzMxCi0weDRFMDQgUkIzRF9CTEVORENOVExfUjMKIDB4NEUwOCBSQjNEX0FCTEVORENOVExfUjMKLTB4NEUwQyBSQjNEX0NPTE9SX0NIQU5ORUxfTUFTSwogMHg0RTEwIFJCM0RfQ09OU1RBTlRfQ09MT1IKIDB4NEUxNCBSQjNEX0NPTE9SX0NMRUFSX1ZBTFVFCiAweDRFMTggUkIzRF9ST1BDTlRMX1IzCkBAIC03NzIsMTMgKzc3MCwxMSBAQAogMHg0RTc0IFJCM0RfQ01BU0tfV1JJTkRFWAogMHg0RTc4IFJCM0RfQ01BU0tfRFdPUkQKIDB4NEU3QyBSQjNEX0NNQVNLX1JESU5ERVgKLTB4NEU4MCBSQjNEX0FBUkVTT0xWRV9PRkZTRVQKLTB4NEU4NCBSQjNEX0FBUkVTT0xWRV9QSVRDSAotMHg0RTg4IFJCM0RfQUFSRVNPTFZFX0NUTAogMHg0RUEwIFJCM0RfRElTQ0FSRF9TUkNfUElYRUxfTFRFX1RIUkVTSE9MRAogMHg0RUE0IFJCM0RfRElTQ0FSRF9TUkNfUElYRUxfR1RFX1RIUkVTSE9MRAogMHg0RjA0IFpCX1pTVEVOQ0lMQ05UTAogMHg0RjA4IFpCX1NURU5DSUxSRUZNQVNLCiAweDRGMTQgWkJfWlRPUAogMHg0RjE4IFpCX1pDQUNIRV9DVExTVEFUCisweDRGMjggWkJfREVQVEhDTEVBUlZBTFVFCiAweDRGNTggWkJfWlBBU1NfREFUQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ydjUxNSBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnY1MTUKaW5kZXggZWY0MjJiYi4uOTExYThmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ydjUxNQorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3J2NTE1CkBAIC0xNjQsNyArMTY0LDYgQEAKIDB4NDAxQyBHQl9TRUxFQ1QKIDB4NDAyMCBHQl9BQV9DT05GSUcKIDB4NDAyNCBHQl9GSUZPX1NJWkUKLTB4NDAyOCBHQl9aX1BFUV9DT05GSUcKIDB4NDEwMCBUWF9JTlZBTFRBR1MKIDB4NDExNCBTVV9URVhfV1JBUF9QUzMKIDB4NDExOCBQUzNfRU5BQkxFCkBAIC00NjEsOSArNDYwLDcgQEAKIDB4NERGNCBVU19BTFVfQ09OU1RfR18zMQogMHg0REY4IFVTX0FMVV9DT05TVF9CXzMxCiAweDRERkMgVVNfQUxVX0NPTlNUX0FfMzEKLTB4NEUwNCBSQjNEX0JMRU5EQ05UTF9SMwogMHg0RTA4IFJCM0RfQUJMRU5EQ05UTF9SMwotMHg0RTBDIFJCM0RfQ09MT1JfQ0hBTk5FTF9NQVNLCiAweDRFMTAgUkIzRF9DT05TVEFOVF9DT0xPUgogMHg0RTE0IFJCM0RfQ09MT1JfQ0xFQVJfVkFMVUUKIDB4NEUxOCBSQjNEX1JPUENOVExfUjMKQEAgLTQ4NCw5ICs0ODEsNiBAQAogMHg0RTc0IFJCM0RfQ01BU0tfV1JJTkRFWAogMHg0RTc4IFJCM0RfQ01BU0tfRFdPUkQKIDB4NEU3QyBSQjNEX0NNQVNLX1JESU5ERVgKLTB4NEU4MCBSQjNEX0FBUkVTT0xWRV9PRkZTRVQKLTB4NEU4NCBSQjNEX0FBUkVTT0xWRV9QSVRDSAotMHg0RTg4IFJCM0RfQUFSRVNPTFZFX0NUTAogMHg0RUEwIFJCM0RfRElTQ0FSRF9TUkNfUElYRUxfTFRFX1RIUkVTSE9MRAogMHg0RUE0IFJCM0RfRElTQ0FSRF9TUkNfUElYRUxfR1RFX1RIUkVTSE9MRAogMHg0RUY4IFJCM0RfQ09OU1RBTlRfQ09MT1JfQVIKQEAgLTQ5Niw0ICs0OTAsNSBAQAogMHg0RjE0IFpCX1pUT1AKIDB4NEYxOCBaQl9aQ0FDSEVfQ1RMU1RBVAogMHg0RjU4IFpCX1pQQVNTX0RBVEEKKzB4NEYyOCBaQl9ERVBUSENMRUFSVkFMVUUKIDB4NEZENCBaQl9TVEVOQ0lMUkVGTUFTS19CRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCmluZGV4IDU1MTJlNGUuLmM3NjI4M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKQEAgLTIwMyw2ICsyMDMsOSBAQAogCXJhZGVvbl9nYXJ0X3RhYmxlX3JhbV9mcmVlKHJkZXYpOwogfQogCisjZGVmaW5lIFJTNDAwX1BURV9XUklURUFCTEUgKDEgPDwgMikKKyNkZWZpbmUgUlM0MDBfUFRFX1JFQURBQkxFICAoMSA8PCAzKQorCiBpbnQgcnM0MDBfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGksIHVpbnQ2NF90IGFkZHIpCiB7CiAJdWludDMyX3QgZW50cnk7CkBAIC0yMTMsNyArMjE2LDcgQEAKIAogCWVudHJ5ID0gKGxvd2VyXzMyX2JpdHMoYWRkcikgJiBQQUdFX01BU0spIHwKIAkJKCh1cHBlcl8zMl9iaXRzKGFkZHIpICYgMHhmZikgPDwgNCkgfAotCQkweGM7CisJCVJTNDAwX1BURV9XUklURUFCTEUgfCBSUzQwMF9QVEVfUkVBREFCTEU7CiAJZW50cnkgPSBjcHVfdG9fbGUzMihlbnRyeSk7CiAJcmRldi0+Z2FydC50YWJsZS5yYW0ucHRyW2ldID0gZW50cnk7CiAJcmV0dXJuIDA7CkBAIC0yMjYsOCArMjI5LDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCByZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewogCQkvKiByZWFkIE1DX1NUQVRVUyAqLwotCQl0bXAgPSBSUkVHMzIoMHgwMTUwKTsKLQkJaWYgKHRtcCAmICgxIDw8IDIpKSB7CisJCXRtcCA9IFJSRUczMihSQURFT05fTUNfU1RBVFVTKTsKKwkJaWYgKHRtcCAmIFJBREVPTl9NQ19JRExFKSB7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlEUk1fVURFTEFZKDEpOwpAQCAtMjQxLDcgKzI0NCw3IEBACiAJcjQyMF9waXBlc19pbml0KHJkZXYpOwogCWlmIChyczQwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInJzNDAwOiBGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uICUwOHhcbiIsIFJSRUczMigweDE1MCkpOworCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi4gJTA4eFxuIiwgUlJFRzMyKFJBREVPTl9NQ19TVEFUVVMpKTsKIAl9CiB9CiAKQEAgLTMwMCw5ICszMDMsOSBAQAogCQlzZXFfcHJpbnRmKG0sICJNQ0NGR19BR1BfQkFTRV8yIDB4JTA4eFxuIiwgdG1wKTsKIAkJdG1wID0gUlJFRzMyX01DKFJTNjkwX01DQ0ZHX0FHUF9MT0NBVElPTik7CiAJCXNlcV9wcmludGYobSwgIk1DQ0ZHX0FHUF9MT0NBVElPTiAweCUwOHhcbiIsIHRtcCk7Ci0JCXRtcCA9IFJSRUczMl9NQygweDEwMCk7CisJCXRtcCA9IFJSRUczMl9NQyhSUzY5MF9NQ0NGR19GQl9MT0NBVElPTik7CiAJCXNlcV9wcmludGYobSwgIk1DQ0ZHX0ZCX0xPQ0FUSU9OIDB4JTA4eFxuIiwgdG1wKTsKLQkJdG1wID0gUlJFRzMyKDB4MTM0KTsKKwkJdG1wID0gUlJFRzMyKFJTNjkwX0hEUF9GQl9MT0NBVElPTik7CiAJCXNlcV9wcmludGYobSwgIkhEUF9GQl9MT0NBVElPTiAweCUwOHhcbiIsIHRtcCk7CiAJfSBlbHNlIHsKIAkJdG1wID0gUlJFRzMyKFJBREVPTl9BR1BfQkFTRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKaW5kZXggMDEzN2QzZS4uNjYzOGM4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYwpAQCAtNzcsOSArNzcsOSBAQAogCQlzd2l0Y2ggKGNyZXYpIHsKIAkJY2FzZSAxOgogCQkJdG1wLmZ1bGwgPSBkZml4ZWRfY29uc3QoMTAwKTsKLQkJCXJkZXYtPnBtLmlncF9zaWRlcG9ydF9tY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QoaW5mby0+aW5mby51bEJvb3RVcE1lbW9yeUNsb2NrKTsKKwkJCXJkZXYtPnBtLmlncF9zaWRlcG9ydF9tY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QobGUzMl90b19jcHUoaW5mby0+aW5mby51bEJvb3RVcE1lbW9yeUNsb2NrKSk7CiAJCQlyZGV2LT5wbS5pZ3Bfc2lkZXBvcnRfbWNsay5mdWxsID0gZGZpeGVkX2RpdihyZGV2LT5wbS5pZ3Bfc2lkZXBvcnRfbWNsaywgdG1wKTsKLQkJCWlmIChpbmZvLT5pbmZvLnVzSzhNZW1vcnlDbG9jaykKKwkJCWlmIChsZTE2X3RvX2NwdShpbmZvLT5pbmZvLnVzSzhNZW1vcnlDbG9jaykpCiAJCQkJcmRldi0+cG0uaWdwX3N5c3RlbV9tY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QobGUxNl90b19jcHUoaW5mby0+aW5mby51c0s4TWVtb3J5Q2xvY2spKTsKIAkJCWVsc2UgaWYgKHJkZXYtPmNsb2NrLmRlZmF1bHRfbWNsaykgewogCQkJCXJkZXYtPnBtLmlncF9zeXN0ZW1fbWNsay5mdWxsID0gZGZpeGVkX2NvbnN0KHJkZXYtPmNsb2NrLmRlZmF1bHRfbWNsayk7CkBAIC05MSwxNiArOTEsMTYgQEAKIAkJCWJyZWFrOwogCQljYXNlIDI6CiAJCQl0bXAuZnVsbCA9IGRmaXhlZF9jb25zdCgxMDApOwotCQkJcmRldi0+cG0uaWdwX3NpZGVwb3J0X21jbGsuZnVsbCA9IGRmaXhlZF9jb25zdChpbmZvLT5pbmZvX3YyLnVsQm9vdFVwU2lkZVBvcnRDbG9jayk7CisJCQlyZGV2LT5wbS5pZ3Bfc2lkZXBvcnRfbWNsay5mdWxsID0gZGZpeGVkX2NvbnN0KGxlMzJfdG9fY3B1KGluZm8tPmluZm9fdjIudWxCb290VXBTaWRlUG9ydENsb2NrKSk7CiAJCQlyZGV2LT5wbS5pZ3Bfc2lkZXBvcnRfbWNsay5mdWxsID0gZGZpeGVkX2RpdihyZGV2LT5wbS5pZ3Bfc2lkZXBvcnRfbWNsaywgdG1wKTsKLQkJCWlmIChpbmZvLT5pbmZvX3YyLnVsQm9vdFVwVU1BQ2xvY2spCi0JCQkJcmRldi0+cG0uaWdwX3N5c3RlbV9tY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QoaW5mby0+aW5mb192Mi51bEJvb3RVcFVNQUNsb2NrKTsKKwkJCWlmIChsZTMyX3RvX2NwdShpbmZvLT5pbmZvX3YyLnVsQm9vdFVwVU1BQ2xvY2spKQorCQkJCXJkZXYtPnBtLmlncF9zeXN0ZW1fbWNsay5mdWxsID0gZGZpeGVkX2NvbnN0KGxlMzJfdG9fY3B1KGluZm8tPmluZm9fdjIudWxCb290VXBVTUFDbG9jaykpOwogCQkJZWxzZSBpZiAocmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrKQogCQkJCXJkZXYtPnBtLmlncF9zeXN0ZW1fbWNsay5mdWxsID0gZGZpeGVkX2NvbnN0KHJkZXYtPmNsb2NrLmRlZmF1bHRfbWNsayk7CiAJCQllbHNlCiAJCQkJcmRldi0+cG0uaWdwX3N5c3RlbV9tY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QoNjY3MDApOwogCQkJcmRldi0+cG0uaWdwX3N5c3RlbV9tY2xrLmZ1bGwgPSBkZml4ZWRfZGl2KHJkZXYtPnBtLmlncF9zeXN0ZW1fbWNsaywgdG1wKTsKLQkJCXJkZXYtPnBtLmlncF9odF9saW5rX2Nsay5mdWxsID0gZGZpeGVkX2NvbnN0KGluZm8tPmluZm9fdjIudWxIVExpbmtGcmVxKTsKKwkJCXJkZXYtPnBtLmlncF9odF9saW5rX2Nsay5mdWxsID0gZGZpeGVkX2NvbnN0KGxlMzJfdG9fY3B1KGluZm8tPmluZm9fdjIudWxIVExpbmtGcmVxKSk7CiAJCQlyZGV2LT5wbS5pZ3BfaHRfbGlua19jbGsuZnVsbCA9IGRmaXhlZF9kaXYocmRldi0+cG0uaWdwX2h0X2xpbmtfY2xrLCB0bXApOwogCQkJcmRldi0+cG0uaWdwX2h0X2xpbmtfd2lkdGguZnVsbCA9IGRmaXhlZF9jb25zdChsZTE2X3RvX2NwdShpbmZvLT5pbmZvX3YyLnVzTWluSFRMaW5rV2lkdGgpKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCmluZGV4IDVkNTY5ZjQuLjY0YjU3YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKQEAgLTY5LDEzICs2OSwxMyBAQAogCQkJICBJU1lOQ19DUFNDUkFUQ0hfSURMRUdVSSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChXQUlUX1VOVElMLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgV0FJVF8yRF9JRExFQ0xFQU4gfCBXQUlUXzNEX0lETEVDTEVBTik7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMCgweDE3MEMsIDApKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAxIDw8IDMxKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFIzMDBfRFNUX1BJUEVfQ09ORklHLCAwKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUjMwMF9QSVBFX0FVVE9fQ09ORklHKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKEdCX1NFTEVDVCwgMCkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDApOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoR0JfRU5BQkxFLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMCgweDQyQzgsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFI1MDBfU1VfUkVHX0RFU1QsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoMSA8PCByZGV2LT5udW1fZ2JfcGlwZXMpIC0gMSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChWQVBfSU5ERVhfT0ZGU0VULCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CkBAIC0xNTMsOCArMTUzLDggQEAKIAl9CiAJcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOwogCXI0MjBfcGlwZXNfaW5pdChyZGV2KTsKLQlnYl9waXBlX3NlbGVjdCA9IFJSRUczMigweDQwMkMpOwotCXRtcCA9IFJSRUczMigweDE3MEMpOworCWdiX3BpcGVfc2VsZWN0ID0gUlJFRzMyKFI0MDBfR0JfUElQRV9TRUxFQ1QpOworCXRtcCA9IFJSRUczMihSMzAwX0RTVF9QSVBFX0NPTkZJRyk7CiAJcGlwZV9zZWxlY3RfY3VycmVudCA9ICh0bXAgPj4gMikgJiAzOwogCXRtcCA9ICgxIDw8IHBpcGVfc2VsZWN0X2N1cnJlbnQpIHwKIAkgICAgICAoKChnYl9waXBlX3NlbGVjdCA+PiA4KSAmIDB4RikgPDwgNCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKaW5kZXggNDkxZGM5MC4uZDhiYTY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwpAQCAtNzgsMTggKzc4LDIzIEBACiB9CiAKIC8qIGdldCB0ZW1wZXJhdHVyZSBpbiBtaWxsaWRlZ3JlZXMgKi8KLXUzMiBydjc3MF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK2ludCBydjc3MF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1MzIgdGVtcCA9IChSUkVHMzIoQ0dfTVVMVF9USEVSTUFMX1NUQVRVUykgJiBBU0lDX1RfTUFTSykgPj4KIAkJQVNJQ19UX1NISUZUOwotCXUzMiBhY3R1YWxfdGVtcCA9IDA7CisJaW50IGFjdHVhbF90ZW1wOwogCi0JaWYgKCh0ZW1wID4+IDkpICYgMSkKLQkJYWN0dWFsX3RlbXAgPSAwOwotCWVsc2UKLQkJYWN0dWFsX3RlbXAgPSAodGVtcCA+PiAxKSAmIDB4ZmY7CisJaWYgKHRlbXAgJiAweDQwMCkKKwkJYWN0dWFsX3RlbXAgPSAtMjU2OworCWVsc2UgaWYgKHRlbXAgJiAweDIwMCkKKwkJYWN0dWFsX3RlbXAgPSAyNTU7CisJZWxzZSBpZiAodGVtcCAmIDB4MTAwKSB7CisJCWFjdHVhbF90ZW1wID0gdGVtcCAmIDB4MWZmOworCQlhY3R1YWxfdGVtcCB8PSB+MHgxZmY7CisJfSBlbHNlCisJCWFjdHVhbF90ZW1wID0gdGVtcCAmIDB4ZmY7CiAKLQlyZXR1cm4gYWN0dWFsX3RlbXAgKiAxMDAwOworCXJldHVybiAoYWN0dWFsX3RlbXAgKiAxMDAwKSAvIDI7CiB9CiAKIHZvaWQgcnY3NzBfcG1fbWlzYyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTMxNiw3ICszMjEsMTEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyNzAwX2NwX3N0b3AocmRldik7Ci0JV1JFRzMyKENQX1JCX0NOVEwsIFJCX05PX1VQREFURSB8ICgxNSA8PCA4KSB8ICgzIDw8IDApKTsKKwlXUkVHMzIoQ1BfUkJfQ05UTCwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkgICAgICAgQlVGX1NXQVBfMzJCSVQgfAorI2VuZGlmCisJICAgICAgIFJCX05PX1VQREFURSB8IFJCX0JMS1NaKDE1KSB8IFJCX0JVRlNaKDMpKTsKIAogCS8qIFJlc2V0IGNwICovCiAJV1JFRzMyKEdSQk1fU09GVF9SRVNFVCwgU09GVF9SRVNFVF9DUCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MGQuaAppbmRleCBhYmM4Y2Y1Li43OWZhNTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmgKQEAgLTc2LDEwICs3NiwxMCBAQAogI2RlZmluZQkJUk9RX0lCMV9TVEFSVCh4KQkJCQkoKHgpIDw8IDApCiAjZGVmaW5lCQlST1FfSUIyX1NUQVJUKHgpCQkJCSgoeCkgPDwgOCkKICNkZWZpbmUJQ1BfUkJfQ05UTAkJCQkJMHhDMTA0Ci0jZGVmaW5lCQlSQl9CVUZTWih4KQkJCQkJKCh4KTw8MCkKLSNkZWZpbmUJCVJCX0JMS1NaKHgpCQkJCQkoKHgpPDw4KQotI2RlZmluZQkJUkJfTk9fVVBEQVRFCQkJCQkoMTw8MjcpCi0jZGVmaW5lCQlSQl9SUFRSX1dSX0VOQQkJCQkJKDE8PDMxKQorI2RlZmluZQkJUkJfQlVGU1ooeCkJCQkJCSgoeCkgPDwgMCkKKyNkZWZpbmUJCVJCX0JMS1NaKHgpCQkJCQkoKHgpIDw8IDgpCisjZGVmaW5lCQlSQl9OT19VUERBVEUJCQkJCSgxIDw8IDI3KQorI2RlZmluZQkJUkJfUlBUUl9XUl9FTkEJCQkJCSgxIDw8IDMxKQogI2RlZmluZQkJQlVGX1NXQVBfMzJCSVQJCQkJCSgyIDw8IDE2KQogI2RlZmluZQlDUF9SQl9SUFRSCQkJCQkweDg3MDAKICNkZWZpbmUJQ1BfUkJfUlBUUl9BRERSCQkJCQkweEMxMEMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L3N0dWIvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L3N0dWIvS2NvbmZpZwppbmRleCAwOWFlYTVmLi43MGU2MGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9zdHViL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvc3R1Yi9LY29uZmlnCkBAIC0xLDExICsxLDEzIEBACiBjb25maWcgU1RVQl9QT1VMU0JPCiAJdHJpc3RhdGUgIkludGVsIEdNQTUwMCBTdHViIERyaXZlciIKIAlkZXBlbmRzIG9uIFBDSQorCWRlcGVuZHMgb24gTkVUICMgZm9yIFRIRVJNQUwKIAkjIFBvdWxzYm8gc3R1YiBkZXBlbmRzIG9uIEFDUElfVklERU8gd2hlbiBBQ1BJIGlzIGVuYWJsZWQKIAkjIGJ1dCBmb3Igc2VsZWN0IHRvIHdvcmssIG5lZWQgdG8gc2VsZWN0IEFDUElfVklERU8ncyBkZXBlbmRlbmNpZXMsIGljawogCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFIGlmIEFDUEkKIAlzZWxlY3QgSU5QVVQgaWYgQUNQSQogCXNlbGVjdCBBQ1BJX1ZJREVPIGlmIEFDUEkKKwlzZWxlY3QgVEhFUk1BTCBpZiBBQ1BJCiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgc3lzdGVtIHRoYXQgaGFzIEludGVsIEdNQTUwMAogCSAgKFBvdWxzYm8pIGludGVncmF0ZWQgZ3JhcGhpY3MuIElmIE0gaXMgc2VsZWN0ZWQsIHRoZSBtb2R1bGUgd2lsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvdmdhL0tjb25maWcgYi9kcml2ZXJzL2dwdS92Z2EvS2NvbmZpZwppbmRleCA4ZDBlMzFhLi45NmM4M2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS92Z2EvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS92Z2EvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKIGNvbmZpZyBWR0FfQVJCCi0JYm9vbCAiVkdBIEFyYml0cmF0aW9uIiBpZiBFTUJFRERFRAorCWJvb2wgIlZHQSBBcmJpdHJhdGlvbiIgaWYgRVhQRVJUCiAJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiBQQ0kKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS92Z2EvdmdhYXJiLmMgYi9kcml2ZXJzL2dwdS92Z2EvdmdhYXJiLmMKaW5kZXggYzM4MGM2NS4uYWNlMmIxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvdmdhL3ZnYWFyYi5jCisrKyBiL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYwpAQCAtNjM2LDcgKzYzNiw3IEBACiAJCQl2b2lkICgqaXJxX3NldF9zdGF0ZSkodm9pZCAqY29va2llLCBib29sIHN0YXRlKSwKIAkJCXVuc2lnbmVkIGludCAoKnNldF92Z2FfZGVjb2RlKSh2b2lkICpjb29raWUsIGJvb2wgZGVjb2RlKSkKIHsKLQlpbnQgcmV0ID0gLTE7CisJaW50IHJldCA9IC1FTk9ERVY7CiAJc3RydWN0IHZnYV9kZXZpY2UgKnZnYWRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9LY29uZmlnIGIvZHJpdmVycy9oaWQvS2NvbmZpZwppbmRleCAyNGNjYTJmLi4yNTYwZjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaGlkL0tjb25maWcKQEAgLTYyLDkgKzYyLDkgQEAKIAlTdXBwb3J0IGZvciAzTSBQQ1QgdG91Y2ggc2NyZWVucy4KIAogY29uZmlnIEhJRF9BNFRFQ0gKLQl0cmlzdGF0ZSAiQTQgdGVjaCBtaWNlIiBpZiBFTUJFRERFRAorCXRyaXN0YXRlICJBNCB0ZWNoIG1pY2UiIGlmIEVYUEVSVAogCWRlcGVuZHMgb24gVVNCX0hJRAotCWRlZmF1bHQgIUVNQkVEREVECisJZGVmYXVsdCAhRVhQRVJUCiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIEE0IHRlY2ggWDUgYW5kIFdPUC0zNSAvIFRydXN0IDQ1MEwgbWljZS4KIApAQCAtNzcsOSArNzcsOSBAQAogCWdhbWUgY29udHJvbGxlcnMuCiAKIGNvbmZpZyBISURfQVBQTEUKLQl0cmlzdGF0ZSAiQXBwbGUge2ksUG93ZXIsTWFjfUJvb2tzIiBpZiBFTUJFRERFRAorCXRyaXN0YXRlICJBcHBsZSB7aSxQb3dlcixNYWN9Qm9va3MiIGlmIEVYUEVSVAogCWRlcGVuZHMgb24gKFVTQl9ISUQgfHwgQlRfSElEUCkKLQlkZWZhdWx0ICFFTUJFRERFRAorCWRlZmF1bHQgIUVYUEVSVAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBzb21lIEFwcGxlIGRldmljZXMgd2hpY2ggbGVzcyBvciBtb3JlIGJyZWFrCiAJSElEIHNwZWNpZmljYXRpb24uCkBAIC04OCw5ICs4OCw5IEBACiAJTWFjQm9va3MsIE1hY0Jvb2sgUHJvcyBhbmQgQXBwbGUgQWx1bWludW0uCiAKIGNvbmZpZyBISURfQkVMS0lOCi0JdHJpc3RhdGUgIkJlbGtpbiBGbGlwIEtWTSBhbmQgV2lyZWxlc3Mga2V5Ym9hcmQiIGlmIEVNQkVEREVECisJdHJpc3RhdGUgIkJlbGtpbiBGbGlwIEtWTSBhbmQgV2lyZWxlc3Mga2V5Ym9hcmQiIGlmIEVYUEVSVAogCWRlcGVuZHMgb24gVVNCX0hJRAotCWRlZmF1bHQgIUVNQkVEREVECisJZGVmYXVsdCAhRVhQRVJUCiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIEJlbGtpbiBGbGlwIEtWTSBhbmQgV2lyZWxlc3Mga2V5Ym9hcmQuCiAKQEAgLTEwMSwxNiArMTAxLDE2IEBACiAJU3VwcG9ydCBmb3IgQ2FuZG8gZHVhbCB0b3VjaCBwYW5lbC4KIAogY29uZmlnIEhJRF9DSEVSUlkKLQl0cmlzdGF0ZSAiQ2hlcnJ5IEN5bW90aW9uIGtleWJvYXJkIiBpZiBFTUJFRERFRAorCXRyaXN0YXRlICJDaGVycnkgQ3ltb3Rpb24ga2V5Ym9hcmQiIGlmIEVYUEVSVAogCWRlcGVuZHMgb24gVVNCX0hJRAotCWRlZmF1bHQgIUVNQkVEREVECisJZGVmYXVsdCAhRVhQRVJUCiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIENoZXJyeSBDeW1vdGlvbiBrZXlib2FyZC4KIAogY29uZmlnIEhJRF9DSElDT05ZCi0JdHJpc3RhdGUgIkNoaWNvbnkgVGFjdGljYWwgcGFkIiBpZiBFTUJFRERFRAorCXRyaXN0YXRlICJDaGljb255IFRhY3RpY2FsIHBhZCIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBVU0JfSElECi0JZGVmYXVsdCAhRU1CRURERUQKKwlkZWZhdWx0ICFFWFBFUlQKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgQ2hpY29ueSBUYWN0aWNhbCBwYWQuCiAKQEAgLTEzMCw5ICsxMzAsOSBAQAogCSAgYW5kIHNvbWUgYWRkaXRpb25hbCBtdWx0aW1lZGlhIGtleXMuCiAKIGNvbmZpZyBISURfQ1lQUkVTUwotCXRyaXN0YXRlICJDeXByZXNzIG1vdXNlIGFuZCBiYXJjb2RlIHJlYWRlcnMiIGlmIEVNQkVEREVECisJdHJpc3RhdGUgIkN5cHJlc3MgbW91c2UgYW5kIGJhcmNvZGUgcmVhZGVycyIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBVU0JfSElECi0JZGVmYXVsdCAhRU1CRURERUQKKwlkZWZhdWx0ICFFWFBFUlQKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgY3lwcmVzcyBtb3VzZSBhbmQgYmFyY29kZSByZWFkZXJzLgogCkBAIC0xNzQsMTYgKzE3NCwxNiBAQAogCVN1cHBvcnQgZm9yIHRoZSBFTEVDT00gQk0wODQgKGJsdWV0b290aCBtb3VzZSkuCiAKIGNvbmZpZyBISURfRVpLRVkKLQl0cmlzdGF0ZSAiRXprZXkgQlRDIDgxOTMga2V5Ym9hcmQiIGlmIEVNQkVEREVECisJdHJpc3RhdGUgIkV6a2V5IEJUQyA4MTkzIGtleWJvYXJkIiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKLQlkZWZhdWx0ICFFTUJFRERFRAorCWRlZmF1bHQgIUVYUEVSVAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBFemtleSBCVEMgODE5MyBrZXlib2FyZC4KIAogY29uZmlnIEhJRF9LWUUKLQl0cmlzdGF0ZSAiS3llL0dlbml1cyBFcmdvIE1vdXNlIiBpZiBFTUJFRERFRAorCXRyaXN0YXRlICJLeWUvR2VuaXVzIEVyZ28gTW91c2UiIGlmIEVYUEVSVAogCWRlcGVuZHMgb24gVVNCX0hJRAotCWRlZmF1bHQgIUVNQkVEREVECisJZGVmYXVsdCAhRVhQRVJUCiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIEt5ZS9HZW5pdXMgRXJnbyBNb3VzZS4KIApAQCAtMjEyLDE2ICsyMTIsMTYgQEAKIAlTdXBwb3J0IGZvciBUd2luaGFuIElSIHJlbW90ZSBjb250cm9sLgogCiBjb25maWcgSElEX0tFTlNJTkdUT04KLQl0cmlzdGF0ZSAiS2Vuc2luZ3RvbiBTbGltYmxhZGUgVHJhY2tiYWxsIiBpZiBFTUJFRERFRAorCXRyaXN0YXRlICJLZW5zaW5ndG9uIFNsaW1ibGFkZSBUcmFja2JhbGwiIGlmIEVYUEVSVAogCWRlcGVuZHMgb24gVVNCX0hJRAotCWRlZmF1bHQgIUVNQkVEREVECisJZGVmYXVsdCAhRVhQRVJUCiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIEtlbnNpbmd0b24gU2xpbWJsYWRlIFRyYWNrYmFsbC4KIAogY29uZmlnIEhJRF9MT0dJVEVDSAotCXRyaXN0YXRlICJMb2dpdGVjaCBkZXZpY2VzIiBpZiBFTUJFRERFRAorCXRyaXN0YXRlICJMb2dpdGVjaCBkZXZpY2VzIiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKLQlkZWZhdWx0ICFFTUJFRERFRAorCWRlZmF1bHQgIUVYUEVSVAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBMb2dpdGVjaCBkZXZpY2VzIHRoYXQgYXJlIG5vdCBmdWxseSBjb21wbGlhbnQgd2l0aCBISUQgc3RhbmRhcmQuCiAKQEAgLTI3Niw5ICsyNzYsOSBAQAogCUFwcGxlIFdpcmVsZXNzICJNYWdpYyIgTW91c2UuCiAKIGNvbmZpZyBISURfTUlDUk9TT0ZUCi0JdHJpc3RhdGUgIk1pY3Jvc29mdCBub24tZnVsbHkgSElELWNvbXBsaWFudCBkZXZpY2VzIiBpZiBFTUJFRERFRAorCXRyaXN0YXRlICJNaWNyb3NvZnQgbm9uLWZ1bGx5IEhJRC1jb21wbGlhbnQgZGV2aWNlcyIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBVU0JfSElECi0JZGVmYXVsdCAhRU1CRURERUQKKwlkZWZhdWx0ICFFWFBFUlQKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgTWljcm9zb2Z0IGRldmljZXMgdGhhdCBhcmUgbm90IGZ1bGx5IGNvbXBsaWFudCB3aXRoIEhJRCBzdGFuZGFyZC4KIApAQCAtMjg5LDkgKzI4OSw5IEBACiAJU3VwcG9ydCBmb3IgTW9zQXJ0IGR1YWwtdG91Y2ggcGFuZWxzLgogCiBjb25maWcgSElEX01PTlRFUkVZCi0JdHJpc3RhdGUgIk1vbnRlcmV5IEdlbml1cyBLQjI5RSBrZXlib2FyZCIgaWYgRU1CRURERUQKKwl0cmlzdGF0ZSAiTW9udGVyZXkgR2VuaXVzIEtCMjlFIGtleWJvYXJkIiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKLQlkZWZhdWx0ICFFTUJFRERFRAorCWRlZmF1bHQgIUVYUEVSVAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBNb250ZXJleSBHZW5pdXMgS0IyOUUuCiAKQEAgLTM2NSw4ICszNjUsOCBAQAogCSAgLSBJUgogCiBjb25maWcgSElEX1BJQ09MQ0RfRkIKLQlib29sICJGcmFtZWJ1ZmZlciBzdXBwb3J0IiBpZiBFTUJFRERFRAotCWRlZmF1bHQgIUVNQkVEREVECisJYm9vbCAiRnJhbWVidWZmZXIgc3VwcG9ydCIgaWYgRVhQRVJUCisJZGVmYXVsdCAhRVhQRVJUCiAJZGVwZW5kcyBvbiBISURfUElDT0xDRAogCWRlcGVuZHMgb24gSElEX1BJQ09MQ0Q9RkIgfHwgRkI9eQogCXNlbGVjdCBGQl9ERUZFUlJFRF9JTwpAQCAtMzc5LDggKzM3OSw4IEBACiAJICBmcmFtYnVmZmVyIGRldmljZS4KIAogY29uZmlnIEhJRF9QSUNPTENEX0JBQ0tMSUdIVAotCWJvb2wgIkJhY2tsaWdodCBjb250cm9sIiBpZiBFTUJFRERFRAotCWRlZmF1bHQgIUVNQkVEREVECisJYm9vbCAiQmFja2xpZ2h0IGNvbnRyb2wiIGlmIEVYUEVSVAorCWRlZmF1bHQgIUVYUEVSVAogCWRlcGVuZHMgb24gSElEX1BJQ09MQ0QKIAlkZXBlbmRzIG9uIEhJRF9QSUNPTENEPUJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgfHwgQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CiAJLS0taGVscC0tLQpAQCAtMzg4LDE2ICszODgsMTYgQEAKIAkgIGNsYXNzLgogCiBjb25maWcgSElEX1BJQ09MQ0RfTENECi0JYm9vbCAiQ29udHJhc3QgY29udHJvbCIgaWYgRU1CRURERUQKLQlkZWZhdWx0ICFFTUJFRERFRAorCWJvb2wgIkNvbnRyYXN0IGNvbnRyb2wiIGlmIEVYUEVSVAorCWRlZmF1bHQgIUVYUEVSVAogCWRlcGVuZHMgb24gSElEX1BJQ09MQ0QKIAlkZXBlbmRzIG9uIEhJRF9QSUNPTENEPUxDRF9DTEFTU19ERVZJQ0UgfHwgTENEX0NMQVNTX0RFVklDRT15CiAJLS0taGVscC0tLQogCSAgUHJvdmlkZSBhY2Nlc3MgdG8gUGljb0xDRCdzIExDRCBjb250cmFzdCB2aWEgbGNkIGNsYXNzLgogCiBjb25maWcgSElEX1BJQ09MQ0RfTEVEUwotCWJvb2wgIkdQTyB2aWEgbGVkcyBjbGFzcyIgaWYgRU1CRURERUQKLQlkZWZhdWx0ICFFTUJFRERFRAorCWJvb2wgIkdQTyB2aWEgbGVkcyBjbGFzcyIgaWYgRVhQRVJUCisJZGVmYXVsdCAhRVhQRVJUCiAJZGVwZW5kcyBvbiBISURfUElDT0xDRAogCWRlcGVuZHMgb24gSElEX1BJQ09MQ0Q9TEVEU19DTEFTUyB8fCBMRURTX0NMQVNTPXkKIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9LY29uZmlnCmluZGV4IDRlZGIzYmUuLjBmMjBmZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9LY29uZmlnCkBAIC00NSw3ICs0NSw3IEBACiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBtZW51ICJVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycyIKLQlkZXBlbmRzIG9uIFVTQiE9biAmJiBVU0JfSElEIT15ICYmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0IhPW4gJiYgVVNCX0hJRCE9eSAmJiBFWFBFUlQKIAogY29uZmlnIFVTQl9LQkQKIAl0cmlzdGF0ZSAiVVNCIEhJREJQIEtleWJvYXJkIChzaW1wbGUgQm9vdCkgc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwppbmRleCA3NzNlNDg0Li4yOTdiYzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9od21vbi9LY29uZmlnCkBAIC0yMzgsMTMgKzIzOCwxMyBAQAogCSAgd2lsbCBiZSBjYWxsZWQgazh0ZW1wLgogCiBjb25maWcgU0VOU09SU19LMTBURU1QCi0JdHJpc3RhdGUgIkFNRCBQaGVub20vU2VtcHJvbi9UdXJpb24vT3B0ZXJvbiB0ZW1wZXJhdHVyZSBzZW5zb3IiCisJdHJpc3RhdGUgIkFNRCBGYW1pbHkgMTBoLzExaC8xMmgvMTRoIHRlbXBlcmF0dXJlIHNlbnNvciIKIAlkZXBlbmRzIG9uIFg4NiAmJiBQQ0kKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIHRlbXBlcmF0dXJlCiAJICBzZW5zb3IocykgaW5zaWRlIHlvdXIgQ1BVLiBTdXBwb3J0ZWQgYXJlIGxhdGVyIHJldmlzaW9ucyBvZgotCSAgdGhlIEFNRCBGYW1pbHkgMTBoIGFuZCBhbGwgcmV2aXNpb25zIG9mIHRoZSBBTUQgRmFtaWx5IDExaAotCSAgbWljcm9hcmNoaXRlY3R1cmVzLgorCSAgdGhlIEFNRCBGYW1pbHkgMTBoIGFuZCBhbGwgcmV2aXNpb25zIG9mIHRoZSBBTUQgRmFtaWx5IDExaCwKKwkgIDEyaCAoTGxhbm8pLCBhbmQgMTRoIChCcmF6b3MpIG1pY3JvYXJjaGl0ZWN0dXJlcy4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgazEwdGVtcC4KQEAgLTQ1NSwxMyArNDU1LDE0IEBACiAJICBjYWxsZWQgano0NzQwLWh3bW9uLgogCiBjb25maWcgU0VOU09SU19KQzQyCi0JdHJpc3RhdGUgIkpFREVDIEpDNDIuNCBjb21wbGlhbnQgdGVtcGVyYXR1cmUgc2Vuc29ycyIKKwl0cmlzdGF0ZSAiSkVERUMgSkM0Mi40IGNvbXBsaWFudCBtZW1vcnkgbW9kdWxlIHRlbXBlcmF0dXJlIHNlbnNvcnMiCiAJZGVwZW5kcyBvbiBJMkMKIAloZWxwCi0JICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgSmVkZWMgSkM0Mi40IGNvbXBsaWFudAotCSAgdGVtcGVyYXR1cmUgc2Vuc29ycy4gU3VwcG9ydCB3aWxsIGluY2x1ZGUsIGJ1dCBub3QgYmUgbGltaXRlZCB0bywKLQkgIEFEVDc0MDgsIENBVDM0VFMwMiwsIENBVDYwOTUsIE1BWDY2MDQsIE1DUDk4MDUsIE1DUDk4MjQyLCBNQ1A5ODI0MywKLQkgIE1DUDk4NDMsIFNFOTcsIFNFOTgsIFNUVFM0MjQsIFRTRTIwMDJCMywgYW5kIFRTMzAwMEIzLgorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSwgeW91IGdldCBzdXBwb3J0IGZvciBKRURFQyBKQzQyLjQgY29tcGxpYW50CisJICB0ZW1wZXJhdHVyZSBzZW5zb3JzLCB3aGljaCBhcmUgdXNlZCBvbiBtYW55IEREUjMgbWVtb3J5IG1vZHVsZXMgZm9yCisJICBtb2JpbGUgZGV2aWNlcyBhbmQgc2VydmVycy4gIFN1cHBvcnQgd2lsbCBpbmNsdWRlLCBidXQgbm90IGJlIGxpbWl0ZWQKKwkgIHRvLCBBRFQ3NDA4LCBDQVQzNFRTMDIsIENBVDYwOTUsIE1BWDY2MDQsIE1DUDk4MDUsIE1DUDk4MjQyLCBNQ1A5ODI0MywKKwkgIE1DUDk4NDMsIFNFOTcsIFNFOTgsIFNUVFM0MjQoRSksIFRTRTIwMDJCMywgYW5kIFRTMzAwMEIzLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBqYzQyLgpAQCAtNTc0LDcgKzU3NSw3IEBACiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE04NQogCSAgc2Vuc29yIGNoaXBzIGFuZCBjbG9uZXM6IEFETTEwMjcsIEFEVDc0NjMsIEFEVDc0NjgsIEVNQzZEMTAwLAotCSAgRU1DNkQxMDEgYW5kIEVNQzZEMTAyLgorCSAgRU1DNkQxMDEsIEVNQzZEMTAyLCBhbmQgRU1DNkQxMDMuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGxtODUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMgYi9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKaW5kZXggY2UwMzcyZi4uNGMwNzQzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jCisrKyBiL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYwpAQCAtMTA3Miw2ICsxMDcyLDcgQEAKIAkJCW5vZGUtPnNkYS5kZXZfYXR0ci5zaG93ID0gZ3JwLT5zaG93OwogCQkJbm9kZS0+c2RhLmRldl9hdHRyLnN0b3JlID0gZ3JwLT5zdG9yZTsKIAkJCWF0dHIgPSAmbm9kZS0+c2RhLmRldl9hdHRyLmF0dHI7CisJCQlzeXNmc19hdHRyX2luaXQoYXR0cik7CiAJCQlhdHRyLT5uYW1lID0gbm9kZS0+bmFtZTsKIAkJCWF0dHItPm1vZGUgPSBTX0lSVUdPIHwgKGdycC0+c3RvcmUgPyBTX0lXVVNSIDogMCk7CiAJCQlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LmtvYmosIGF0dHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYyBiL2RyaXZlcnMvaHdtb24vYXN1c19hdGswMTEwLmMKaW5kZXggMmQ2OGNmMy4uYjVlODkyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYworKysgYi9kcml2ZXJzL2h3bW9uL2FzdXNfYXRrMDExMC5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaXhmLmg+CkBAIC0yMiw2ICsyMywyMSBAQAogCiAjZGVmaW5lIEFUS19ISUQgIkFUSzAxMTAiCiAKK3N0YXRpYyBib29sIG5ld19pZjsKK21vZHVsZV9wYXJhbShuZXdfaWYsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyhuZXdfaWYsICJPdmVycmlkZSBkZXRlY3Rpb24gaGV1cmlzdGljIGFuZCBmb3JjZSB0aGUgdXNlIG9mIHRoZSBuZXcgQVRLMDExMCBpbnRlcmZhY2UiKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGNvbnN0IGF0a19mb3JjZV9uZXdfaWZbXSA9IHsKKwl7CisJCS8qIE9sZCBpbnRlcmZhY2UgaGFzIGJyb2tlbiBNQ0ggdGVtcCBtb25pdG9yaW5nICovCisJCS5pZGVudCA9ICJBc3VzIFNhYmVydG9vdGggWDU4IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJTQUJFUlRPT1RIIFg1OCIpCisJCX0KKwl9LAorCXsgfQorfTsKKwogLyogTWluaW11bSB0aW1lIGJldHdlZW4gcmVhZGluZ3MsIGVuZm9yY2VkIGluIG9yZGVyIHRvIGF2b2lkCiAgKiBob2dnaW5nIHRoZSBDUFUuCiAgKi8KQEAgLTEzMDIsNyArMTMxOCw5IEBACiAJICogYW5hbHlzaXMgb2YgbXVsdGlwbGUgRFNEVHMgaW5kaWNhdGVzIHRoYXQgd2hlbiBib3RoIGludGVyZmFjZXMKIAkgKiBhcmUgcHJlc2VudCB0aGUgbmV3IG9uZSAoR0dSUC9HSVRNKSBpcyBub3QgZnVuY3Rpb25hbC4KIAkgKi8KLQlpZiAoZGF0YS0+cnRtcF9oYW5kbGUgJiYgZGF0YS0+cnZsdF9oYW5kbGUgJiYgZGF0YS0+cmZhbl9oYW5kbGUpCisJaWYgKG5ld19pZikKKwkJZGV2X2luZm8oZGV2LCAiT3ZlcnJpZGluZyBpbnRlcmZhY2UgZGV0ZWN0aW9uXG4iKTsKKwlpZiAoZGF0YS0+cnRtcF9oYW5kbGUgJiYgZGF0YS0+cnZsdF9oYW5kbGUgJiYgZGF0YS0+cmZhbl9oYW5kbGUgJiYgIW5ld19pZikKIAkJZGF0YS0+b2xkX2ludGVyZmFjZSA9IHRydWU7CiAJZWxzZSBpZiAoZGF0YS0+ZW51bWVyYXRlX2hhbmRsZSAmJiBkYXRhLT5yZWFkX2hhbmRsZSAmJgogCQkJZGF0YS0+d3JpdGVfaGFuZGxlKQpAQCAtMTQyMCw2ICsxNDM4LDkgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKKwlpZiAoZG1pX2NoZWNrX3N5c3RlbShhdGtfZm9yY2VfbmV3X2lmKSkKKwkJbmV3X2lmID0gdHJ1ZTsKKwogCXJldCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYXRrX2RyaXZlcik7CiAJaWYgKHJldCkKIAkJcHJfaW5mbygiYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyIGZhaWxlZDogJWRcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2VtYzE0MDMuYyBiL2RyaXZlcnMvaHdtb24vZW1jMTQwMy5jCmluZGV4IDVkZWE5ZmEuLmNkMmE2ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZW1jMTQwMy5jCisrKyBiL2RyaXZlcnMvaHdtb24vZW1jMTQwMy5jCkBAIC0zNDQsNyArMzQ0LDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGVtYzE0MDNfYWRkcmVzc19saXN0W10gPSB7Ci0JMHgxOCwgMHgyYSwgMHg0YywgMHg0ZCwgSTJDX0NMSUVOVF9FTkQKKwkweDE4LCAweDI5LCAweDRjLCAweDRkLCBJMkNfQ0xJRU5UX0VORAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGVtYzE0MDNfaWR0YWJsZVtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9qYzQyLmMgYi9kcml2ZXJzL2h3bW9uL2pjNDIuYwppbmRleCAzNDBmYzc4Li45MzQ5OTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2pjNDIuYworKysgYi9kcml2ZXJzL2h3bW9uL2pjNDIuYwpAQCAtNTMsNiArNTMsOCBAQAogCiAvKiBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIGRlZmluZXMgKi8KICNkZWZpbmUgSkM0Ml9DRkdfQ1JJVF9PTkxZCSgxIDw8IDIpCisjZGVmaW5lIEpDNDJfQ0ZHX1RDUklUX0xPQ0sJKDEgPDwgNikKKyNkZWZpbmUgSkM0Ml9DRkdfRVZFTlRfTE9DSwkoMSA8PCA3KQogI2RlZmluZSBKQzQyX0NGR19TSFVURE9XTgkoMSA8PCA4KQogI2RlZmluZSBKQzQyX0NGR19IWVNUX1NISUZUCTkKICNkZWZpbmUgSkM0Ml9DRkdfSFlTVF9NQVNLCTB4MDMKQEAgLTMzMiw3ICszMzQsNyBAQAogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IGpjNDJfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWxvbmcgdmFsOworCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCBkaWZmLCBoeXN0OwogCWludCBlcnI7CiAJaW50IHJldCA9IGNvdW50OwpAQCAtMzgwLDE0ICszODIsMTQgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLAogCQkgICBzaG93X3RlbXBfaW5wdXQsIE5VTEwpOwotc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2NyaXQsIFNfSVdVU1IgfCBTX0lSVUdPLAorc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2NyaXQsIFNfSVJVR08sCiAJCSAgIHNob3dfdGVtcF9jcml0LCBzZXRfdGVtcF9jcml0KTsKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX21pbiwgU19JUlVHTywKIAkJICAgc2hvd190ZW1wX21pbiwgc2V0X3RlbXBfbWluKTsKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLAorc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX21heCwgU19JUlVHTywKIAkJICAgc2hvd190ZW1wX21heCwgc2V0X3RlbXBfbWF4KTsKIAotc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2NyaXRfaHlzdCwgU19JV1VTUiB8IFNfSVJVR08sCitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfY3JpdF9oeXN0LCBTX0lSVUdPLAogCQkgICBzaG93X3RlbXBfY3JpdF9oeXN0LCBzZXRfdGVtcF9jcml0X2h5c3QpOwogc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX21heF9oeXN0LCBTX0lSVUdPLAogCQkgICBzaG93X3RlbXBfbWF4X2h5c3QsIE5VTEwpOwpAQCAtNDEyLDggKzQxNCwzMSBAQAogCU5VTEwKIH07CiAKK3N0YXRpYyBtb2RlX3QgamM0Ml9hdHRyaWJ1dGVfbW9kZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgamM0Ml9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdW5zaWduZWQgaW50IGNvbmZpZyA9IGRhdGEtPmNvbmZpZzsKKwlib29sIHJlYWRvbmx5OworCisJaWYgKGF0dHIgPT0gJmRldl9hdHRyX3RlbXAxX2NyaXQuYXR0cikKKwkJcmVhZG9ubHkgPSBjb25maWcgJiBKQzQyX0NGR19UQ1JJVF9MT0NLOworCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX3RlbXAxX21pbi5hdHRyIHx8CisJCSBhdHRyID09ICZkZXZfYXR0cl90ZW1wMV9tYXguYXR0cikKKwkJcmVhZG9ubHkgPSBjb25maWcgJiBKQzQyX0NGR19FVkVOVF9MT0NLOworCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX3RlbXAxX2NyaXRfaHlzdC5hdHRyKQorCQlyZWFkb25seSA9IGNvbmZpZyAmIChKQzQyX0NGR19FVkVOVF9MT0NLIHwgSkM0Ml9DRkdfVENSSVRfTE9DSyk7CisJZWxzZQorCQlyZWFkb25seSA9IHRydWU7CisKKwlyZXR1cm4gU19JUlVHTyB8IChyZWFkb25seSA/IDAgOiBTX0lXVVNSKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgamM0Ml9ncm91cCA9IHsKIAkuYXR0cnMgPSBqYzQyX2F0dHJpYnV0ZXMsCisJLmlzX3Zpc2libGUgPSBqYzQyX2F0dHJpYnV0ZV9tb2RlLAogfTsKIAogLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2sxMHRlbXAuYyBiL2RyaXZlcnMvaHdtb24vazEwdGVtcC5jCmluZGV4IGRhNWEyNDAuLjgyYmY2NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vazEwdGVtcC5jCisrKyBiL2RyaXZlcnMvaHdtb24vazEwdGVtcC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGsxMHRlbXAuYyAtIEFNRCBGYW1pbHkgMTBoLzExaCBwcm9jZXNzb3IgaGFyZHdhcmUgbW9uaXRvcmluZworICogazEwdGVtcC5jIC0gQU1EIEZhbWlseSAxMGgvMTFoLzEyaC8xNGggcHJvY2Vzc29yIGhhcmR3YXJlIG1vbml0b3JpbmcKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+CiAgKgpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJBTUQgRmFtaWx5IDEwaC8xMWggQ1BVIGNvcmUgdGVtcGVyYXR1cmUgbW9uaXRvciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTUQgRmFtaWx5IDEwaC8xMWgvMTJoLzE0aCBDUFUgY29yZSB0ZW1wZXJhdHVyZSBtb25pdG9yIik7CiBNT0RVTEVfQVVUSE9SKCJDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApAQCAtMjA4LDYgKzIwOCw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgazEwdGVtcF9pZF90YWJsZVtdID0gewogCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xMEhfTkJfTUlTQykgfSwKIAl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfMTFIX05CX01JU0MpIH0sCisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0NOQjE3SF9GMykgfSwKIAl7fQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBrMTB0ZW1wX2lkX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmMgYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5jCmluZGV4IDFiNjc0YjcuLmQ4MDVlOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmMKKysrIGIvZHJpdmVycy9od21vbi9saXMzbHYwMmQuYwpAQCAtOTU3LDcgKzk1Nyw3IEBACiAKIAkvKiBiYWlsIGlmIHdlIGRpZCBub3QgZ2V0IGFuIElSUSBmcm9tIHRoZSBidXMgbGF5ZXIgKi8KIAlpZiAoIWRldi0+aXJxKSB7Ci0JCXByX2VycigiTm8gSVJRLiBEaXNhYmxpbmcgL2Rldi9mcmVlZmFsbFxuIik7CisJCXByX2RlYnVnKCJObyBJUlEuIERpc2FibGluZyAvZGV2L2ZyZWVmYWxsXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtNjMuYyBiL2RyaXZlcnMvaHdtb24vbG02My5jCmluZGV4IDc3NmFlYjMuLjUwOGNiMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG02My5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG02My5jCkBAIC05OCw2ICs5OCw5IEBACiAgKiB2YWx1ZSwgaXQgdXNlcyBzaWduZWQgOC1iaXQgdmFsdWVzIHdpdGggTFNCID0gMSBkZWdyZWUgQ2Vsc2l1cy4KICAqIEZvciByZW1vdGUgdGVtcGVyYXR1cmUsIGxvdyBhbmQgaGlnaCBsaW1pdHMsIGl0IHVzZXMgc2lnbmVkIDExLWJpdCB2YWx1ZXMKICAqIHdpdGggTFNCID0gMC4xMjUgZGVncmVlIENlbHNpdXMsIGxlZnQtanVzdGlmaWVkIGluIDE2LWJpdCByZWdpc3RlcnMuCisgKiBGb3IgTE02NCB0aGUgYWN0dWFsIHJlbW90ZSBkaW9kZSB0ZW1wZXJhdHVyZSBpcyAxNiBkZWdyZWUgQ2Vsc2l1cyBoaWdoZXIKKyAqIHRoYW4gdGhlIHJlZ2lzdGVyIHJlYWRpbmcuIFJlbW90ZSB0ZW1wZXJhdHVyZSBzZXRwb2ludHMgaGF2ZSB0byBiZQorICogYWRhcHRlZCBhY2NvcmRpbmdseS4KICAqLwogCiAjZGVmaW5lIEZBTl9GUk9NX1JFRyhyZWcpCSgocmVnKSA9PSAweEZGRkMgfHwgKHJlZykgPT0gMCA/IDAgOiBcCkBAIC0xNjUsNiArMTY4LDggQEAKIAlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CiAJY2hhciB2YWxpZDsgLyogemVybyB1bnRpbCBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOyAvKiBpbiBqaWZmaWVzICovCisJaW50IGtpbmQ7CisJaW50IHRlbXAyX29mZnNldDsKIAogCS8qIHJlZ2lzdGVycyB2YWx1ZXMgKi8KIAl1OCBjb25maWcsIGNvbmZpZ19mYW47CkBAIC0yNDcsMTYgKzI1MiwzNCBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT5jb25maWdfZmFuICYgMHgyMCA/IDEgOiAyKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wOChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJICBjaGFyICpidWYpCisvKgorICogVGhlcmUgYXJlIDhiaXQgcmVnaXN0ZXJzIGZvciBib3RoIGxvY2FsKHRlbXAxKSBhbmQgcmVtb3RlKHRlbXAyKSBzZW5zb3IuCisgKiBGb3IgcmVtb3RlIHNlbnNvciByZWdpc3RlcnMgdGVtcDJfb2Zmc2V0IGhhcyB0byBiZSBjb25zaWRlcmVkLAorICogZm9yIGxvY2FsIHNlbnNvciBpdCBtdXN0IG5vdC4KKyAqIFNvIHdlIG5lZWQgc2VwYXJhdGUgOGJpdCBhY2Nlc3NvcnMgZm9yIGxvY2FsIGFuZCByZW1vdGUgc2Vuc29yLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X2xvY2FsX3RlbXA4KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCQljaGFyICpidWYpCiB7CiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwogCXN0cnVjdCBsbTYzX2RhdGEgKmRhdGEgPSBsbTYzX3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUDhfRlJPTV9SRUcoZGF0YS0+dGVtcDhbYXR0ci0+aW5kZXhdKSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNldF90ZW1wOChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkdW1teSwKLQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IHNob3dfcmVtb3RlX3RlbXA4KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGxtNjNfZGF0YSAqZGF0YSA9IGxtNjNfdXBkYXRlX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QOF9GUk9NX1JFRyhkYXRhLT50ZW1wOFthdHRyLT5pbmRleF0pCisJCSAgICAgICArIGRhdGEtPnRlbXAyX29mZnNldCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9sb2NhbF90ZW1wOChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmR1bW15LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IGxtNjNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwpAQCAtMjc0LDcgKzI5Nyw4IEBACiB7CiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwogCXN0cnVjdCBsbTYzX2RhdGEgKmRhdGEgPSBsbTYzX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUDExX0ZST01fUkVHKGRhdGEtPnRlbXAxMVthdHRyLT5pbmRleF0pKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUDExX0ZST01fUkVHKGRhdGEtPnRlbXAxMVthdHRyLT5pbmRleF0pCisJCSAgICAgICArIGRhdGEtPnRlbXAyX29mZnNldCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNldF90ZW1wMTEoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKQEAgLTI5NCw3ICszMTgsNyBAQAogCWludCBuciA9IGF0dHItPmluZGV4OwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCWRhdGEtPnRlbXAxMVtucl0gPSBURU1QMTFfVE9fUkVHKHZhbCk7CisJZGF0YS0+dGVtcDExW25yXSA9IFRFTVAxMV9UT19SRUcodmFsIC0gZGF0YS0+dGVtcDJfb2Zmc2V0KTsKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnWyhuciAtIDEpICogMl0sCiAJCQkJICBkYXRhLT50ZW1wMTFbbnJdID4+IDgpOwogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWdbKG5yIC0gMSkgKiAyICsgMV0sCkBAIC0zMTAsNiArMzM0LDcgQEAKIHsKIAlzdHJ1Y3QgbG02M19kYXRhICpkYXRhID0gbG02M191cGRhdGVfZGV2aWNlKGRldik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVA4X0ZST01fUkVHKGRhdGEtPnRlbXA4WzJdKQorCQkgICAgICAgKyBkYXRhLT50ZW1wMl9vZmZzZXQKIAkJICAgICAgIC0gVEVNUDhfRlJPTV9SRUcoZGF0YS0+dGVtcDJfY3JpdF9oeXN0KSk7CiB9CiAKQEAgLTMyNCw3ICszNDksNyBAQAogCWxvbmcgaHlzdDsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQloeXN0ID0gVEVNUDhfRlJPTV9SRUcoZGF0YS0+dGVtcDhbMl0pIC0gdmFsOworCWh5c3QgPSBURU1QOF9GUk9NX1JFRyhkYXRhLT50ZW1wOFsyXSkgKyBkYXRhLT50ZW1wMl9vZmZzZXQgLSB2YWw7CiAJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIExNNjNfUkVHX1JFTU9URV9UQ1JJVF9IWVNULAogCQkJCSAgSFlTVF9UT19SRUcoaHlzdCkpOwogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwpAQCAtMzU1LDE2ICszODAsMjEgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihwd20xLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd20xLCBzZXRfcHdtMSk7CiBzdGF0aWMgREVWSUNFX0FUVFIocHdtMV9lbmFibGUsIFNfSVJVR08sIHNob3dfcHdtMV9lbmFibGUsIE5VTEwpOwogCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXA4LCBOVUxMLCAwKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wOCwKLQlzZXRfdGVtcDgsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd19sb2NhbF90ZW1wOCwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfbG9jYWxfdGVtcDgsCisJc2V0X2xvY2FsX3RlbXA4LCAxKTsKIAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wMTEsIE5VTEwsIDApOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXAxMSwKIAlzZXRfdGVtcDExLCAxKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wMTEsCiAJc2V0X3RlbXAxMSwgMik7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2NyaXQsIFNfSVJVR08sIHNob3dfdGVtcDgsIE5VTEwsIDIpOworLyoKKyAqIE9uIExNNjMsIHRlbXAyX2NyaXQgY2FuIGJlIHNldCBvbmx5IG9uY2UsIHdoaWNoIHNob3VsZCBiZSBqb2IKKyAqIG9mIHRoZSBib290bG9hZGVyLgorICovCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2NyaXQsIFNfSVJVR08sIHNob3dfcmVtb3RlX3RlbXA4LAorCU5VTEwsIDIpOwogc3RhdGljIERFVklDRV9BVFRSKHRlbXAyX2NyaXRfaHlzdCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcDJfY3JpdF9oeXN0LAogCXNldF90ZW1wMl9jcml0X2h5c3QpOwogCkBAIC00NzksNyArNTA5LDEyIEBACiAJZGF0YS0+dmFsaWQgPSAwOwogCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAotCS8qIEluaXRpYWxpemUgdGhlIExNNjMgY2hpcCAqLworCS8qIFNldCB0aGUgZGV2aWNlIHR5cGUgKi8KKwlkYXRhLT5raW5kID0gaWQtPmRyaXZlcl9kYXRhOworCWlmIChkYXRhLT5raW5kID09IGxtNjQpCisJCWRhdGEtPnRlbXAyX29mZnNldCA9IDE2MDAwOworCisJLyogSW5pdGlhbGl6ZSBjaGlwICovCiAJbG02M19pbml0X2NsaWVudChuZXdfY2xpZW50KTsKIAogCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtODUuYyBiL2RyaXZlcnMvaHdtb24vbG04NS5jCmluZGV4IDFlMjI5ODQuLmQyY2MyODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG04NS5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG04NS5jCkBAIC00MSw3ICs0MSw3IEBACiBlbnVtIGNoaXBzIHsKIAlhbnlfY2hpcCwgbG04NWIsIGxtODVjLAogCWFkbTEwMjcsIGFkdDc0NjMsIGFkdDc0NjgsCi0JZW1jNmQxMDAsIGVtYzZkMTAyCisJZW1jNmQxMDAsIGVtYzZkMTAyLCBlbWM2ZDEwMwogfTsKIAogLyogVGhlIExNODUgcmVnaXN0ZXJzICovCkBAIC05MCw2ICs5MCw5IEBACiAjZGVmaW5lCUxNODVfVkVSU1RFUF9FTUM2RDEwMF9BMCAgICAgICAgMHg2MAogI2RlZmluZQlMTTg1X1ZFUlNURVBfRU1DNkQxMDBfQTEgICAgICAgIDB4NjEKICNkZWZpbmUJTE04NV9WRVJTVEVQX0VNQzZEMTAyCQkweDY1CisjZGVmaW5lCUxNODVfVkVSU1RFUF9FTUM2RDEwM19BMAkweDY4CisjZGVmaW5lCUxNODVfVkVSU1RFUF9FTUM2RDEwM19BMQkweDY5CisjZGVmaW5lCUxNODVfVkVSU1RFUF9FTUM2RDEwM1MJCTB4NkEJLyogQWxzbyBrbm93biBhcyBFTUM2RDEwMzpBMiAqLwogCiAjZGVmaW5lCUxNODVfUkVHX0NPTkZJRwkJCTB4NDAKIApAQCAtMzQ4LDYgKzM1MSw3IEBACiAJeyAiZW1jNmQxMDAiLCBlbWM2ZDEwMCB9LAogCXsgImVtYzZkMTAxIiwgZW1jNmQxMDAgfSwKIAl7ICJlbWM2ZDEwMiIsIGVtYzZkMTAyIH0sCisJeyAiZW1jNmQxMDMiLCBlbWM2ZDEwMyB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBsbTg1X2lkKTsKQEAgLTEyNTAsNiArMTI1NCwyMCBAQAogCQljYXNlIExNODVfVkVSU1RFUF9FTUM2RDEwMjoKIAkJCXR5cGVfbmFtZSA9ICJlbWM2ZDEwMiI7CiAJCQlicmVhazsKKwkJY2FzZSBMTTg1X1ZFUlNURVBfRU1DNkQxMDNfQTA6CisJCWNhc2UgTE04NV9WRVJTVEVQX0VNQzZEMTAzX0ExOgorCQkJdHlwZV9uYW1lID0gImVtYzZkMTAzIjsKKwkJCWJyZWFrOworCQkvKgorCQkgKiBSZWdpc3RlcnMgYXBwYXJlbnRseSBtaXNzaW5nIGluIEVNQzZEMTAzUy9FTUM2RDEwMzpBMgorCQkgKiBjb21wYXJlZCB0byBFTUM2RDEwMzpBMCwgRU1DNkQxMDM6QTEsIGFuZCBFTUM2RDEwMgorCQkgKiAoYWNjb3JkaW5nIHRvIHRoZSBkYXRhIHNoZWV0cyksIGJ1dCB1c2VkIHVuY29uZGl0aW9uYWxseQorCQkgKiBpbiB0aGUgZHJpdmVyOiA2Mls1OjddLCA2RFswOjddLCBhbmQgNkVbMDo3XS4KKwkJICogU28gc2tpcCBFTUM2RDEwM1MgZm9yIG5vdy4KKwkJY2FzZSBMTTg1X1ZFUlNURVBfRU1DNkQxMDNTOgorCQkJdHlwZV9uYW1lID0gImVtYzZkMTAzcyI7CisJCQlicmVhazsKKwkJICovCiAJCX0KIAl9IGVsc2UgewogCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsCkBAIC0xMjgzLDYgKzEzMDEsNyBAQAogCWNhc2UgYWR0NzQ2ODoKIAljYXNlIGVtYzZkMTAwOgogCWNhc2UgZW1jNmQxMDI6CisJY2FzZSBlbWM2ZDEwMzoKIAkJZGF0YS0+ZnJlcV9tYXAgPSBhZG0xMDI3X2ZyZXFfbWFwOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTQ2OCw3ICsxNDg3LDcgQEAKIAkJCS8qIE1vcmUgYWxhcm0gYml0cyAqLwogCQkJZGF0YS0+YWxhcm1zIHw9IGxtODVfcmVhZF92YWx1ZShjbGllbnQsCiAJCQkJCQlFTUM2RDEwMF9SRUdfQUxBUk0zKSA8PCAxNjsKLQkJfSBlbHNlIGlmIChkYXRhLT50eXBlID09IGVtYzZkMTAyKSB7CisJCX0gZWxzZSBpZiAoZGF0YS0+dHlwZSA9PSBlbWM2ZDEwMiB8fCBkYXRhLT50eXBlID09IGVtYzZkMTAzKSB7CiAJCQkvKiBIYXZlIHRvIHJlYWQgTFNCIGJpdHMgYWZ0ZXIgdGhlIE1TQiBvbmVzIGJlY2F1c2UKIAkJCSAgIHRoZSByZWFkaW5nIG9mIHRoZSBNU0IgYml0cyBoYXMgZnJvemVuIHRoZQogCQkJICAgTFNCcyAoYmFja3dhcmQgZnJvbSB0aGUgQURNMTAyNykuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCmluZGV4IGI2MDVmZjMuLjgyOWEyYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCkBAIC04NDcsMTEgKzg0NywxNSBAQAogCQkJZGV2X2VycihkZXYtPmRldiwgIkFyYml0cmF0aW9uIGxvc3RcbiIpOwogCQkJZXJyIHw9IE9NQVBfSTJDX1NUQVRfQUw7CiAJCX0KKwkJLyoKKwkJICogUHJvREIwMDE3MDUyOiBDbGVhciBBUkRZIGJpdCB0d2ljZQorCQkgKi8KIAkJaWYgKHN0YXQgJiAoT01BUF9JMkNfU1RBVF9BUkRZIHwgT01BUF9JMkNfU1RBVF9OQUNLIHwKIAkJCQkJT01BUF9JMkNfU1RBVF9BTCkpIHsKIAkJCW9tYXBfaTJjX2Fja19zdGF0KGRldiwgc3RhdCAmCiAJCQkJKE9NQVBfSTJDX1NUQVRfUlJEWSB8IE9NQVBfSTJDX1NUQVRfUkRSIHwKLQkJCQlPTUFQX0kyQ19TVEFUX1hSRFkgfCBPTUFQX0kyQ19TVEFUX1hEUikpOworCQkJCU9NQVBfSTJDX1NUQVRfWFJEWSB8IE9NQVBfSTJDX1NUQVRfWERSIHwKKwkJCQlPTUFQX0kyQ19TVEFUX0FSRFkpKTsKIAkJCW9tYXBfaTJjX2NvbXBsZXRlX2NtZChkZXYsIGVycik7CiAJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJCX0KQEAgLTExMzcsMTIgKzExNDEsNDEgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19TVVNQRU5ECitzdGF0aWMgaW50IG9tYXBfaTJjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWlmICghcG1fcnVudGltZV9zdXNwZW5kZWQoZGV2KSkKKwkJaWYgKGRldi0+YnVzICYmIGRldi0+YnVzLT5wbSAmJiBkZXYtPmJ1cy0+cG0tPnJ1bnRpbWVfc3VzcGVuZCkKKwkJCWRldi0+YnVzLT5wbS0+cnVudGltZV9zdXNwZW5kKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwX2kyY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWlmICghcG1fcnVudGltZV9zdXNwZW5kZWQoZGV2KSkKKwkJaWYgKGRldi0+YnVzICYmIGRldi0+YnVzLT5wbSAmJiBkZXYtPmJ1cy0+cG0tPnJ1bnRpbWVfcmVzdW1lKQorCQkJZGV2LT5idXMtPnBtLT5ydW50aW1lX3Jlc3VtZShkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBvbWFwX2kyY19wbV9vcHMgPSB7CisJLnN1c3BlbmQgPSBvbWFwX2kyY19zdXNwZW5kLAorCS5yZXN1bWUgPSBvbWFwX2kyY19yZXN1bWUsCit9OworI2RlZmluZSBPTUFQX0kyQ19QTV9PUFMgKCZvbWFwX2kyY19wbV9vcHMpCisjZWxzZQorI2RlZmluZSBPTUFQX0kyQ19QTV9PUFMgTlVMTAorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBfaTJjX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb21hcF9pMmNfcHJvYmUsCiAJLnJlbW92ZQkJPSBvbWFwX2kyY19yZW1vdmUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIm9tYXBfaTJjIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9IE9NQVBfSTJDX1BNX09QUywKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zdHUzMDAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc3R1MzAwLmMKaW5kZXggNDk1YmU0NS4uMjY2MTM1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zdHUzMDAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXN0dTMwMC5jCkBAIC05NDIsNyArOTQyLDcgQEAKIAlhZGFwLT5vd25lciA9IFRISVNfTU9EVUxFOwogCS8qIEREQyBjbGFzcyBidXQgYWN0dWFsbHkgb2Z0ZW4gdXNlZCBmb3IgbW9yZSBnZW5lcmljIEkyQyAqLwogCWFkYXAtPmNsYXNzID0gSTJDX0NMQVNTX0REQzsKLQlzdHJuY3B5KGFkYXAtPm5hbWUsICJTVCBNaWNyb2VsZWN0cm9uaWNzIEREQyBJMkMgYWRhcHRlciIsCisJc3RybGNweShhZGFwLT5uYW1lLCAiU1QgTWljcm9lbGVjdHJvbmljcyBEREMgSTJDIGFkYXB0ZXIiLAogCQlzaXplb2YoYWRhcC0+bmFtZSkpOwogCWFkYXAtPm5yID0gYnVzX25yOwogCWFkYXAtPmFsZ28gPSAmc3R1MzAwX2FsZ287CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9LY29uZmlnIGIvZHJpdmVycy9pZGUvS2NvbmZpZwppbmRleCA5OGNjZmViLi45ODI3YzVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvaWRlL0tjb25maWcKQEAgLTEzNCw3ICsxMzQsNyBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlkZS1jZC4KIAogY29uZmlnIEJMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlMKLQlib29sICJWZXJib3NlIGVycm9yIGxvZ2dpbmcgZm9yIElERS9BVEFQSSBDRFJPTSBkcml2ZXIiIGlmIEVNQkVEREVECisJYm9vbCAiVmVyYm9zZSBlcnJvciBsb2dnaW5nIGZvciBJREUvQVRBUEkgQ0RST00gZHJpdmVyIiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIEJMS19ERVZfSURFQ0QKIAlkZWZhdWx0IHkKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkbGUvaW50ZWxfaWRsZS5jIGIvZHJpdmVycy9pZGxlL2ludGVsX2lkbGUuYwppbmRleCA3YWNiMzJlLi4xZmEwOTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkbGUvaW50ZWxfaWRsZS5jCisrKyBiL2RyaXZlcnMvaWRsZS9pbnRlbF9pZGxlLmMKQEAgLTI2Myw3ICsyNjMsNyBAQAogCWNsb2NrZXZlbnRzX25vdGlmeShyZWFzb24sICZjcHUpOwogfQogCi1zdGF0aWMgaW50IF9fY3B1aW5pdCBzZXR1cF9icm9hZGNhc3RfY3B1aHBfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbiwKK3N0YXRpYyBpbnQgc2V0dXBfYnJvYWRjYXN0X2NwdWhwX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4sCiAJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCWludCBob3RjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OwpAQCAtMjczLDE1ICsyNzMsMTEgQEAKIAkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGhvdGNwdSwgX19zZXR1cF9icm9hZGNhc3RfdGltZXIsCiAJCQkodm9pZCAqKXRydWUsIDEpOwogCQlicmVhazsKLQljYXNlIENQVV9ET1dOX1BSRVBBUkU6Ci0JCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShob3RjcHUsIF9fc2V0dXBfYnJvYWRjYXN0X3RpbWVyLAotCQkJKHZvaWQgKilmYWxzZSwgMSk7Ci0JCWJyZWFrOwogCX0KIAlyZXR1cm4gTk9USUZZX09LOwogfQogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgc2V0dXBfYnJvYWRjYXN0X25vdGlmaWVyID0geworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBzZXR1cF9icm9hZGNhc3Rfbm90aWZpZXIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBzZXR1cF9icm9hZGNhc3RfY3B1aHBfbm90aWZ5LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKaW5kZXggZTM4YmUxYmMuLmZiYmZhMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKIAogCWliX3VucmVnaXN0ZXJfZXZlbnRfaGFuZGxlcigmc2FfZGV2LT5ldmVudF9oYW5kbGVyKTsKIAotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJZmx1c2hfd29ya3F1ZXVlKGliX3dxKTsKIAogCWZvciAoaSA9IDA7IGkgPD0gc2FfZGV2LT5lbmRfcG9ydCAtIHNhX2Rldi0+c3RhcnRfcG9ydDsgKytpKSB7CiAJCWlmIChyZG1hX3BvcnRfZ2V0X2xpbmtfbGF5ZXIoZGV2aWNlLCBpICsgMSkgPT0gSUJfTElOS19MQVlFUl9JTkZJTklCQU5EKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMKaW5kZXggY2ExMmFjZi4uZWMxZTlkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYwpAQCAtNjM2LDYgKzYzNiwxNiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgdWNtYV9jb3B5X2l3X3JvdXRlKHN0cnVjdCByZG1hX3VjbV9xdWVyeV9yb3V0ZV9yZXNwICpyZXNwLAorCQkJICAgICAgIHN0cnVjdCByZG1hX3JvdXRlICpyb3V0ZSkKK3sKKwlzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHI7CisKKwlkZXZfYWRkciA9ICZyb3V0ZS0+YWRkci5kZXZfYWRkcjsKKwlyZG1hX2FkZHJfZ2V0X2RnaWQoZGV2X2FkZHIsICh1bmlvbiBpYl9naWQgKikgJnJlc3AtPmliX3JvdXRlWzBdLmRnaWQpOworCXJkbWFfYWRkcl9nZXRfc2dpZChkZXZfYWRkciwgKHVuaW9uIGliX2dpZCAqKSAmcmVzcC0+aWJfcm91dGVbMF0uc2dpZCk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHVjbWFfcXVlcnlfcm91dGUoc3RydWN0IHVjbWFfZmlsZSAqZmlsZSwKIAkJCQljb25zdCBjaGFyIF9fdXNlciAqaW5idWYsCiAJCQkJaW50IGluX2xlbiwgaW50IG91dF9sZW4pCkBAIC02NzAsOCArNjgwLDEwIEBACiAKIAlyZXNwLm5vZGVfZ3VpZCA9IChfX2ZvcmNlIF9fdTY0KSBjdHgtPmNtX2lkLT5kZXZpY2UtPm5vZGVfZ3VpZDsKIAlyZXNwLnBvcnRfbnVtID0gY3R4LT5jbV9pZC0+cG9ydF9udW07Ci0JaWYgKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGN0eC0+Y21faWQtPmRldmljZS0+bm9kZV90eXBlKSA9PSBSRE1BX1RSQU5TUE9SVF9JQikgewotCQlzd2l0Y2ggKHJkbWFfcG9ydF9nZXRfbGlua19sYXllcihjdHgtPmNtX2lkLT5kZXZpY2UsIGN0eC0+Y21faWQtPnBvcnRfbnVtKSkgeworCXN3aXRjaCAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoY3R4LT5jbV9pZC0+ZGV2aWNlLT5ub2RlX3R5cGUpKSB7CisJY2FzZSBSRE1BX1RSQU5TUE9SVF9JQjoKKwkJc3dpdGNoIChyZG1hX3BvcnRfZ2V0X2xpbmtfbGF5ZXIoY3R4LT5jbV9pZC0+ZGV2aWNlLAorCQkJY3R4LT5jbV9pZC0+cG9ydF9udW0pKSB7CiAJCWNhc2UgSUJfTElOS19MQVlFUl9JTkZJTklCQU5EOgogCQkJdWNtYV9jb3B5X2liX3JvdXRlKCZyZXNwLCAmY3R4LT5jbV9pZC0+cm91dGUpOwogCQkJYnJlYWs7CkBAIC02ODEsNiArNjkzLDEyIEBACiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQorCQlicmVhazsKKwljYXNlIFJETUFfVFJBTlNQT1JUX0lXQVJQOgorCQl1Y21hX2NvcHlfaXdfcm91dGUoJnJlc3AsICZjdHgtPmNtX2lkLT5yb3V0ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3ZxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfdnEuYwppbmRleCA5Y2U3ODE5Yi4uMmVjNzE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3ZxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3ZxLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYzJfdnFfcmVxKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHIpIHsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmci0+d2FpdF9vYmplY3QpOwotCQlyLT5yZXBseV9tc2cgPSAodTY0KSBOVUxMOworCQlyLT5yZXBseV9tc2cgPSAwOwogCQlyLT5ldmVudCA9IDA7CiAJCXItPmNtX2lkID0gTlVMTDsKIAkJci0+cXAgPSBOVUxMOwpAQCAtMTIzLDcgKzEyMyw3IEBACiAgKi8KIHZvaWQgdnFfcmVxX2ZyZWUoc3RydWN0IGMyX2RldiAqYzJkZXYsIHN0cnVjdCBjMl92cV9yZXEgKnIpCiB7Ci0Jci0+cmVwbHlfbXNnID0gKHU2NCkgTlVMTDsKKwlyLT5yZXBseV9tc2cgPSAwOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyLT5yZWZjbnQpKSB7CiAJCWtmcmVlKHIpOwogCX0KQEAgLTE1MSw3ICsxNTEsNyBAQAogdm9pZCB2cV9yZXFfcHV0KHN0cnVjdCBjMl9kZXYgKmMyZGV2LCBzdHJ1Y3QgYzJfdnFfcmVxICpyKQogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyLT5yZWZjbnQpKSB7Ci0JCWlmIChyLT5yZXBseV9tc2cgIT0gKHU2NCkgTlVMTCkKKwkJaWYgKHItPnJlcGx5X21zZyAhPSAwKQogCQkJdnFfcmVwYnVmX2ZyZWUoYzJkZXYsCiAJCQkJICAgICAgICh2b2lkICopICh1bnNpZ25lZCBsb25nKSByLT5yZXBseV9tc2cpOwogCQlrZnJlZShyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMKaW5kZXggMGRjNjJiMS4uOGIwMGU2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMKQEAgLTM4MCw3ICszODAsNyBAQAogCQkJCQkgIDE2KSkgfCBGV19XUl9GTE9XSUQoZXAtPmh3dGlkKSk7CiAKIAlmbG93Yy0+bW5lbXZhbFswXS5tbmVtb25pYyA9IEZXX0ZMT1dDX01ORU1fUEZOVkZOOwotCWZsb3djLT5tbmVtdmFsWzBdLnZhbCA9IGNwdV90b19iZTMyKDApOworCWZsb3djLT5tbmVtdmFsWzBdLnZhbCA9IGNwdV90b19iZTMyKFBDSV9GVU5DKGVwLT5jb20uZGV2LT5yZGV2LmxsZGkucGRldi0+ZGV2Zm4pIDw8IDgpOwogCWZsb3djLT5tbmVtdmFsWzFdLm1uZW1vbmljID0gRldfRkxPV0NfTU5FTV9DSDsKIAlmbG93Yy0+bW5lbXZhbFsxXS52YWwgPSBjcHVfdG9fYmUzMihlcC0+dHhfY2hhbik7CiAJZmxvd2MtPm1uZW12YWxbMl0ubW5lbW9uaWMgPSBGV19GTE9XQ19NTkVNX1BPUlQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jCmluZGV4IDIwODAwOTAuLjRmMGJlMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jCkBAIC0yMjAsNyArMjIwLDcgQEAKIAkJVl9GV19SSV9SRVNfV1JfRENBRU4oMCkgfAogCQlWX0ZXX1JJX1JFU19XUl9EQ0FDUFUoMCkgfAogCQlWX0ZXX1JJX1JFU19XUl9GQk1JTigyKSB8Ci0JCVZfRldfUklfUkVTX1dSX0ZCTUFYKDMpIHwKKwkJVl9GV19SSV9SRVNfV1JfRkJNQVgoMikgfAogCQlWX0ZXX1JJX1JFU19XUl9DSURYRlRIUkVTSE8oMCkgfAogCQlWX0ZXX1JJX1JFU19XUl9DSURYRlRIUkVTSCgwKSB8CiAJCVZfRldfUklfUkVTX1dSX0VRU0laRShlcXNpemUpKTsKQEAgLTI0Myw3ICsyNDMsNyBAQAogCQlWX0ZXX1JJX1JFU19XUl9EQ0FFTigwKSB8CiAJCVZfRldfUklfUkVTX1dSX0RDQUNQVSgwKSB8CiAJCVZfRldfUklfUkVTX1dSX0ZCTUlOKDIpIHwKLQkJVl9GV19SSV9SRVNfV1JfRkJNQVgoMykgfAorCQlWX0ZXX1JJX1JFU19XUl9GQk1BWCgyKSB8CiAJCVZfRldfUklfUkVTX1dSX0NJRFhGVEhSRVNITygwKSB8CiAJCVZfRldfUklfUkVTX1dSX0NJRFhGVEhSRVNIKDApIHwKIAkJVl9GV19SSV9SRVNfV1JfRVFTSVpFKGVxc2l6ZSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWcgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZwppbmRleCAwM2VmYzA3Li5kYTMxNGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZwpAQCAtNyw3ICs3LDcgQEAKIAkgICgiVGF2b3IiKSBhbmQgdGhlIE1UMjUyMDggUENJIEV4cHJlc3MgSENBICgiQXJiZWwiKS4KIAogY29uZmlnIElORklOSUJBTkRfTVRIQ0FfREVCVUcKLQlib29sICJWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQiIGlmIEVNQkVEREVECisJYm9vbCAiVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0IiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIElORklOSUJBTkRfTVRIQ0EKIAlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYwppbmRleCA4YjYwNmZkLi4wOGMxOTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKQEAgLTI2MTAsOSArMjYxMCwxMSBAQAogCQkJCQluZXRpZl9jYXJyaWVyX29uKG5lc3ZuaWMtPm5ldGRldik7CiAKIAkJCQkJc3Bpbl9sb2NrKCZuZXN2bmljLT5wb3J0X2liZXZlbnRfbG9jayk7Ci0JCQkJCWlmIChuZXNkZXYtPml3X3N0YXR1cyA9PSAwKSB7Ci0JCQkJCQluZXNkZXYtPml3X3N0YXR1cyA9IDE7Ci0JCQkJCQluZXNfcG9ydF9pYmV2ZW50KG5lc3ZuaWMpOworCQkJCQlpZiAobmVzdm5pYy0+b2ZfZGV2aWNlX3JlZ2lzdGVyZWQpIHsKKwkJCQkJCWlmIChuZXNkZXYtPml3X3N0YXR1cyA9PSAwKSB7CisJCQkJCQkJbmVzZGV2LT5pd19zdGF0dXMgPSAxOworCQkJCQkJCW5lc19wb3J0X2liZXZlbnQobmVzdm5pYyk7CisJCQkJCQl9CiAJCQkJCX0KIAkJCQkJc3Bpbl91bmxvY2soJm5lc3ZuaWMtPnBvcnRfaWJldmVudF9sb2NrKTsKIAkJCQl9CkBAIC0yNjQyLDkgKzI2NDQsMTEgQEAKIAkJCQkJbmV0aWZfY2Fycmllcl9vZmYobmVzdm5pYy0+bmV0ZGV2KTsKIAogCQkJCQlzcGluX2xvY2soJm5lc3ZuaWMtPnBvcnRfaWJldmVudF9sb2NrKTsKLQkJCQkJaWYgKG5lc2Rldi0+aXdfc3RhdHVzID09IDEpIHsKLQkJCQkJCW5lc2Rldi0+aXdfc3RhdHVzID0gMDsKLQkJCQkJCW5lc19wb3J0X2liZXZlbnQobmVzdm5pYyk7CisJCQkJCWlmIChuZXN2bmljLT5vZl9kZXZpY2VfcmVnaXN0ZXJlZCkgeworCQkJCQkJaWYgKG5lc2Rldi0+aXdfc3RhdHVzID09IDEpIHsKKwkJCQkJCQluZXNkZXYtPml3X3N0YXR1cyA9IDA7CisJCQkJCQkJbmVzX3BvcnRfaWJldmVudChuZXN2bmljKTsKKwkJCQkJCX0KIAkJCQkJfQogCQkJCQlzcGluX3VubG9jaygmbmVzdm5pYy0+cG9ydF9pYmV2ZW50X2xvY2spOwogCQkJCX0KQEAgLTI3MDMsOSArMjcwNywxMSBAQAogCQkJCW5ldGlmX2NhcnJpZXJfb24obmVzdm5pYy0+bmV0ZGV2KTsKIAogCQkJCXNwaW5fbG9jaygmbmVzdm5pYy0+cG9ydF9pYmV2ZW50X2xvY2spOwotCQkJCWlmIChuZXNkZXYtPml3X3N0YXR1cyA9PSAwKSB7Ci0JCQkJCW5lc2Rldi0+aXdfc3RhdHVzID0gMTsKLQkJCQkJbmVzX3BvcnRfaWJldmVudChuZXN2bmljKTsKKwkJCQlpZiAobmVzdm5pYy0+b2ZfZGV2aWNlX3JlZ2lzdGVyZWQpIHsKKwkJCQkJaWYgKG5lc2Rldi0+aXdfc3RhdHVzID09IDApIHsKKwkJCQkJCW5lc2Rldi0+aXdfc3RhdHVzID0gMTsKKwkJCQkJCW5lc19wb3J0X2liZXZlbnQobmVzdm5pYyk7CisJCQkJCX0KIAkJCQl9CiAJCQkJc3Bpbl91bmxvY2soJm5lc3ZuaWMtPnBvcnRfaWJldmVudF9sb2NrKTsKIAkJCX0KQEAgLTI3MjMsOSArMjcyOSwxMSBAQAogCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5lc3ZuaWMtPm5ldGRldik7CiAKIAkJCQlzcGluX2xvY2soJm5lc3ZuaWMtPnBvcnRfaWJldmVudF9sb2NrKTsKLQkJCQlpZiAobmVzZGV2LT5pd19zdGF0dXMgPT0gMSkgewotCQkJCQluZXNkZXYtPml3X3N0YXR1cyA9IDA7Ci0JCQkJCW5lc19wb3J0X2liZXZlbnQobmVzdm5pYyk7CisJCQkJaWYgKG5lc3ZuaWMtPm9mX2RldmljZV9yZWdpc3RlcmVkKSB7CisJCQkJCWlmIChuZXNkZXYtPml3X3N0YXR1cyA9PSAxKSB7CisJCQkJCQluZXNkZXYtPml3X3N0YXR1cyA9IDA7CisJCQkJCQluZXNfcG9ydF9pYmV2ZW50KG5lc3ZuaWMpOworCQkJCQl9CiAJCQkJfQogCQkJCXNwaW5fdW5sb2NrKCZuZXN2bmljLT5wb3J0X2liZXZlbnRfbG9jayk7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMKaW5kZXggNTBjY2ViMy4uYjAxODA5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzMyMi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTczMjIuYwpAQCAtNjIzLDcgKzYyMyw2IEBACiAJdTggaWJtYWxmdXNlc25hcDsKIAlzdHJ1Y3QgcWliX3FzZnBfZGF0YSBxc2ZwX2RhdGE7CiAJY2hhciBlcG1zZ2J1ZlsxOTJdOyAvKiBmb3IgcG9ydCBlcnJvciBpbnRlcnJ1cHQgbXNnIGJ1ZmZlciAqLwotCXU4IGJvdW5jZWQ7CiB9OwogCiBzdGF0aWMgc3RydWN0IHsKQEAgLTE4ODEsMjMgKzE4ODAsNyBAQAogCQkgICAgSUJfUEhZU1BPUlRTVEFURV9ESVNBQkxFRCkKIAkJCXFpYl9zZXRfaWJfNzMyMl9sc3RhdGUocHBkLCAwLAogCQkJICAgICAgIFFMT0dJQ19JQl9JQkNDX0xJTktJTklUQ01EX0RJU0FCTEUpOwotCQllbHNlIHsKLQkJCXUzMiBsc3RhdGU7Ci0JCQkvKgotCQkJICogV2UgbmVlZCB0aGUgY3VycmVudCBsb2dpY2FsIGxpbmsgc3RhdGUgYmVmb3JlCi0JCQkgKiBsZmxhZ3MgYXJlIHNldCBpbiBoYW5kbGVfZV9pYnN0YXR1c2NoYW5nZWQuCi0JCQkgKi8KLQkJCWxzdGF0ZSA9IHFpYl83MzIyX2libGlua19zdGF0ZShpYmNzKTsKLQotCQkJaWYgKElTX1FNSChkZCkgJiYgIXBwZC0+Y3BzcGVjLT5ib3VuY2VkICYmCi0JCQkgICAgbHRzdGF0ZSA9PSBJQl9QSFlTUE9SVFNUQVRFX0xJTktVUCAmJgotCQkJICAgIChsc3RhdGUgPj0gSUJfUE9SVF9JTklUICYmCi0JCQkJbHN0YXRlIDw9IElCX1BPUlRfQUNUSVZFKSkgewotCQkJCXBwZC0+Y3BzcGVjLT5ib3VuY2VkID0gMTsKLQkJCQlxaWJfNzMyMl9zZXRfaWJfY2ZnKHBwZCwgUUlCX0lCX0NGR19MU1RBVEUsCi0JCQkJCUlCX0xJTktDTURfRE9XTiB8IElCX0xJTktJTklUQ01EX1BPTEwpOwotCQkJfQotCisJCWVsc2UKIAkJCS8qCiAJCQkgKiBTaW5jZSBnb2luZyBpbnRvIGEgcmVjb3Zlcnkgc3RhdGUgY2F1c2VzIHRoZSBsaW5rCiAJCQkgKiBzdGF0ZSB0byBnbyBkb3duIGFuZCBzaW5jZSByZWNvdmVyeSBpcyB0cmFuc2l0b3J5LApAQCAtMTkxMSw3ICsxODk0LDYgQEAKIAkJCSAgICBsdHN0YXRlICE9IElCX1BIWVNQT1JUU1RBVEVfUkVDT1ZFUllfV0FJVFJNVCAmJgogCQkJICAgIGx0c3RhdGUgIT0gSUJfUEhZU1BPUlRTVEFURV9SRUNPVkVSWV9JRExFKQogCQkJCXFpYl9oYW5kbGVfZV9pYnN0YXR1c2NoYW5nZWQocHBkLCBpYmNzKTsKLQkJfQogCX0KIAlpZiAoKm1zZyAmJiBpc2VycikKIAkJcWliX2Rldl9wb3J0ZXJyKGRkLCBwcGQtPnBvcnQsICIlcyBlcnJvclxuIiwgbXNnKTsKQEAgLTIzODEsNiArMjM2MywxMSBAQAogCXFpYl93cml0ZV9rcmVnX3BvcnQocHBkLCBrcnBfcmN2Y3RybCwgcHBkLT5wX3JjdmN0cmwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5jc3BlYy0+cmN2bW9kX2xvY2ssIGZsYWdzKTsKIAorCS8qIEhvbGQgdGhlIGxpbmsgc3RhdGUgbWFjaGluZSBmb3IgbWV6eiBib2FyZHMgKi8KKwlpZiAoSVNfUU1IKGRkKSB8fCBJU19RTUUoZGQpKQorCQlxaWJfc2V0X2liXzczMjJfbHN0YXRlKHBwZCwgMCwKKwkJCQkgICAgICAgUUxPR0lDX0lCX0lCQ0NfTElOS0lOSVRDTURfRElTQUJMRSk7CisKIAkvKiBBbHNvIGVuYWJsZSBJQlNUQVRVU0NIRyBpbnRlcnJ1cHQuICAqLwogCXZhbCA9IHFpYl9yZWFkX2tyZWdfcG9ydChwcGQsIGtycF9lcnJtYXNrKTsKIAlxaWJfd3JpdGVfa3JlZ19wb3J0KHBwZCwga3JwX2Vycm1hc2ssCkBAIC01NzAyLDYgKzU2ODksMTEgQEAKIAkJCQlwcGQtPmNwc3BlYy0+aDFfdmFsID0gaDE7CiAJCQkvKiBub3cgY2hhbmdlIHRoZSBJQkMgYW5kIHNlcmRlcywgb3ZlcnJpZGluZyBnZW5lcmljICovCiAJCQlpbml0X3R4ZGRzX3RhYmxlKHBwZCwgMSk7CisJCQkvKiBSZS1lbmFibGUgdGhlIHBoeXNpY2FsIHN0YXRlIG1hY2hpbmUgb24gbWV6eiBib2FyZHMKKwkJCSAqIG5vdyB0aGF0IHRoZSBjb3JyZWN0IHNldHRpbmdzIGhhdmUgYmVlbiBzZXQuICovCisJCQlpZiAoSVNfUU1IKGRkKSB8fCBJU19RTUUoZGQpKQorCQkJCXFpYl9zZXRfaWJfNzMyMl9sc3RhdGUocHBkLCAwLAorCQkJCQkgICAgUUxPR0lDX0lCX0lCQ0NfTElOS0lOSVRDTURfU0xFRVApOwogCQkJYW55Kys7CiAJCX0KIAkJaWYgKCpueHQgPT0gJ1xuJykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3JjLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9yYy5jCmluZGV4IDgyNDUyMzcuLmVjYTBjNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3JjLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfcmMuYwpAQCAtMTAwNSw3ICsxMDA1LDggQEAKIAkgKiB0aGVyZSBhcmUgc3RpbGwgcmVxdWVzdHMgdGhhdCBoYXZlbid0IGJlZW4gYWNrZWQuCiAJICovCiAJaWYgKChwc24gJiBJQl9CVEhfUkVRX0FDSykgJiYgcXAtPnNfYWNrZWQgIT0gcXAtPnNfdGFpbCAmJgotCSAgICAhKHFwLT5zX2ZsYWdzICYgKFFJQl9TX1RJTUVSIHwgUUlCX1NfV0FJVF9STlIgfCBRSUJfU19XQUlUX1BTTikpKQorCSAgICAhKHFwLT5zX2ZsYWdzICYgKFFJQl9TX1RJTUVSIHwgUUlCX1NfV0FJVF9STlIgfCBRSUJfU19XQUlUX1BTTikpICYmCisJICAgIChpYl9xaWJfc3RhdGVfb3BzW3FwLT5zdGF0ZV0gJiBRSUJfUFJPQ0VTU19SRUNWX09LKSkKIAkJc3RhcnRfdGltZXIocXApOwogCiAJd2hpbGUgKHFwLT5zX2xhc3QgIT0gcXAtPnNfYWNrZWQpIHsKQEAgLTE0MzksNiArMTQ0MCw4IEBACiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKKwlpZiAoIShpYl9xaWJfc3RhdGVfb3BzW3FwLT5zdGF0ZV0gJiBRSUJfUFJPQ0VTU19SRUNWX09LKSkKKwkJZ290byBhY2tfZG9uZTsKIAogCS8qIElnbm9yZSBpbnZhbGlkIHJlc3BvbnNlcy4gKi8KIAlpZiAocWliX2NtcDI0KHBzbiwgcXAtPnNfbmV4dF9wc24pID49IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWcgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWcKaW5kZXggNTU4NTVlZS4uY2RhOGVhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZwpAQCAtMjQsNyArMjQsNyBAQAogCSAgdW5sZXNzIHlvdSBsaW1pdCBtdHUgZm9yIHRoZXNlIGRlc3RpbmF0aW9ucyB0byAyMDQ0LgogCiBjb25maWcgSU5GSU5JQkFORF9JUE9JQl9ERUJVRwotCWJvb2wgIklQLW92ZXItSW5maW5pQmFuZCBkZWJ1Z2dpbmciIGlmIEVNQkVEREVECisJYm9vbCAiSVAtb3Zlci1JbmZpbmlCYW5kIGRlYnVnZ2luZyIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBJTkZJTklCQU5EX0lQT0lCCiAJZGVmYXVsdCB5CiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9LY29uZmlnCmluZGV4IDA3YzJjZDQuLjE5MDNjMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L0tjb25maWcKQEAgLTYsNyArNiw3IEBACiAJZGVwZW5kcyBvbiAhUzM5MAogCiBjb25maWcgSU5QVVQKLQl0cmlzdGF0ZSAiR2VuZXJpYyBpbnB1dCBsYXllciAobmVlZGVkIGZvciBrZXlib2FyZCwgbW91c2UsIC4uLikiIGlmIEVNQkVEREVECisJdHJpc3RhdGUgIkdlbmVyaWMgaW5wdXQgbGF5ZXIgKG5lZWRlZCBmb3Iga2V5Ym9hcmQsIG1vdXNlLCAuLi4pIiBpZiBFWFBFUlQKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFueSBpbnB1dCBkZXZpY2UgKG1vdXNlLCBrZXlib2FyZCwgdGFibGV0LApAQCAtNjcsNyArNjcsNyBAQAogY29tbWVudCAiVXNlcmxhbmQgaW50ZXJmYWNlcyIKIAogY29uZmlnIElOUFVUX01PVVNFREVWCi0JdHJpc3RhdGUgIk1vdXNlIGludGVyZmFjZSIgaWYgRU1CRURERUQKKwl0cmlzdGF0ZSAiTW91c2UgaW50ZXJmYWNlIiBpZiBFWFBFUlQKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHlvdXIgbW91c2UgdG8gYmUgYWNjZXNzaWJsZSBhcyBjaGFyIGRldmljZXMKQEAgLTE1MCw3ICsxNTAsNyBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV2YnVnLgogCiBjb25maWcgSU5QVVRfQVBNUE9XRVIKLQl0cmlzdGF0ZSAiSW5wdXQgUG93ZXIgRXZlbnQgLT4gQVBNIEJyaWRnZSIgaWYgRU1CRURERUQKKwl0cmlzdGF0ZSAiSW5wdXQgUG93ZXIgRXZlbnQgLT4gQVBNIEJyaWRnZSIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBJTlBVVCAmJiBBUE1fRU1VTEFUSU9OCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXNwZW5kIGtleSBldmVudHMgdG8gdHJpZ2dlciBhIHVzZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYwppbmRleCAyM2NmOGZjLi41YjhmNTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jCkBAIC0zNjAsNyArMzYwLDcgQEAKIAlldmVudC0+b3duZXIgPSBvd25lcjsKIAogCWxpc3RfYWRkX3RhaWwoJmV2ZW50LT5ub2RlLCAmZ2FtZXBvcnRfZXZlbnRfbGlzdCk7Ci0Jc2NoZWR1bGVfd29yaygmZ2FtZXBvcnRfZXZlbnRfd29yayk7CisJcXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgJmdhbWVwb3J0X2V2ZW50X3dvcmspOwogCiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FtZXBvcnRfZXZlbnRfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCmluZGV4IDc5ODUxMTQuLjExOTA1YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKQEAgLTc1LDcgKzc1LDYgQEAKICAqIGRldi0+ZXZlbnRfbG9jayBoZWxkIGFuZCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogICovCiBzdGF0aWMgdm9pZCBpbnB1dF9wYXNzX2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKLQkJCSAgICAgc3RydWN0IGlucHV0X2hhbmRsZXIgKnNyY19oYW5kbGVyLAogCQkJICAgICB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqaGFuZGxlcjsKQEAgLTk0LDE1ICs5Myw2IEBACiAJCQkJY29udGludWU7CiAKIAkJCWhhbmRsZXIgPSBoYW5kbGUtPmhhbmRsZXI7Ci0KLQkJCS8qCi0JCQkgKiBJZiB0aGlzIGlzIHRoZSBoYW5kbGVyIHRoYXQgaW5qZWN0ZWQgdGhpcwotCQkJICogcGFydGljdWxhciBldmVudCB3ZSB3YW50IHRvIHNraXAgaXQgdG8gYXZvaWQKLQkJCSAqIGZpbHRlcnMgZmlyaW5nIGFnYWluIGFuZCBhZ2Fpbi4KLQkJCSAqLwotCQkJaWYgKGhhbmRsZXIgPT0gc3JjX2hhbmRsZXIpCi0JCQkJY29udGludWU7Ci0KIAkJCWlmICghaGFuZGxlci0+ZmlsdGVyKSB7CiAJCQkJaWYgKGZpbHRlcmVkKQogCQkJCQlicmVhazsKQEAgLTEzMiw3ICsxMjIsNyBAQAogCWlmICh0ZXN0X2JpdChkZXYtPnJlcGVhdF9rZXksIGRldi0+a2V5KSAmJgogCSAgICBpc19ldmVudF9zdXBwb3J0ZWQoZGV2LT5yZXBlYXRfa2V5LCBkZXYtPmtleWJpdCwgS0VZX01BWCkpIHsKIAotCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgTlVMTCwgRVZfS0VZLCBkZXYtPnJlcGVhdF9rZXksIDIpOworCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgRVZfS0VZLCBkZXYtPnJlcGVhdF9rZXksIDIpOwogCiAJCWlmIChkZXYtPnN5bmMpIHsKIAkJCS8qCkBAIC0xNDEsNyArMTMxLDcgQEAKIAkJCSAqIE90aGVyd2lzZSBhc3N1bWUgdGhhdCB0aGUgZHJpdmVyIHdpbGwgc2VuZAogCQkJICogU1lOX1JFUE9SVCBvbmNlIGl0J3MgZG9uZS4KIAkJCSAqLwotCQkJaW5wdXRfcGFzc19ldmVudChkZXYsIE5VTEwsIEVWX1NZTiwgU1lOX1JFUE9SVCwgMSk7CisJCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgRVZfU1lOLCBTWU5fUkVQT1JULCAxKTsKIAkJfQogCiAJCWlmIChkZXYtPnJlcFtSRVBfUEVSSU9EXSkKQEAgLTE3NCw3ICsxNjQsNiBAQAogI2RlZmluZSBJTlBVVF9QQVNTX1RPX0FMTAkoSU5QVVRfUEFTU19UT19IQU5ETEVSUyB8IElOUFVUX1BBU1NfVE9fREVWSUNFKQogCiBzdGF0aWMgaW50IGlucHV0X2hhbmRsZV9hYnNfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LAotCQkJCSAgc3RydWN0IGlucHV0X2hhbmRsZXIgKnNyY19oYW5kbGVyLAogCQkJCSAgdW5zaWduZWQgaW50IGNvZGUsIGludCAqcHZhbCkKIHsKIAlib29sIGlzX210X2V2ZW50OwpAQCAtMjE4LDE1ICsyMDcsMTMgQEAKIAkvKiBGbHVzaCBwZW5kaW5nICJzbG90IiBldmVudCAqLwogCWlmIChpc19tdF9ldmVudCAmJiBkZXYtPnNsb3QgIT0gaW5wdXRfYWJzX2dldF92YWwoZGV2LCBBQlNfTVRfU0xPVCkpIHsKIAkJaW5wdXRfYWJzX3NldF92YWwoZGV2LCBBQlNfTVRfU0xPVCwgZGV2LT5zbG90KTsKLQkJaW5wdXRfcGFzc19ldmVudChkZXYsIHNyY19oYW5kbGVyLAotCQkJCSBFVl9BQlMsIEFCU19NVF9TTE9ULCBkZXYtPnNsb3QpOworCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgRVZfQUJTLCBBQlNfTVRfU0xPVCwgZGV2LT5zbG90KTsKIAl9CiAKIAlyZXR1cm4gSU5QVVRfUEFTU19UT19IQU5ETEVSUzsKIH0KIAogc3RhdGljIHZvaWQgaW5wdXRfaGFuZGxlX2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqc3JjX2hhbmRsZXIsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCiB7CiAJaW50IGRpc3Bvc2l0aW9uID0gSU5QVVRfSUdOT1JFX0VWRU5UOwpAQCAtMjc5LDggKzI2Niw3IEBACiAKIAljYXNlIEVWX0FCUzoKIAkJaWYgKGlzX2V2ZW50X3N1cHBvcnRlZChjb2RlLCBkZXYtPmFic2JpdCwgQUJTX01BWCkpCi0JCQlkaXNwb3NpdGlvbiA9IGlucHV0X2hhbmRsZV9hYnNfZXZlbnQoZGV2LCBzcmNfaGFuZGxlciwKLQkJCQkJCQkgICAgIGNvZGUsICZ2YWx1ZSk7CisJCQlkaXNwb3NpdGlvbiA9IGlucHV0X2hhbmRsZV9hYnNfZXZlbnQoZGV2LCBjb2RlLCAmdmFsdWUpOwogCiAJCWJyZWFrOwogCkBAIC0zMzgsNyArMzI0LDcgQEAKIAkJZGV2LT5ldmVudChkZXYsIHR5cGUsIGNvZGUsIHZhbHVlKTsKIAogCWlmIChkaXNwb3NpdGlvbiAmIElOUFVUX1BBU1NfVE9fSEFORExFUlMpCi0JCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCBzcmNfaGFuZGxlciwgdHlwZSwgY29kZSwgdmFsdWUpOworCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgdHlwZSwgY29kZSwgdmFsdWUpOwogfQogCiAvKioKQEAgLTM2Nyw3ICszNTMsNyBAQAogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAkJYWRkX2lucHV0X3JhbmRvbW5lc3ModHlwZSwgY29kZSwgdmFsdWUpOwotCQlpbnB1dF9oYW5kbGVfZXZlbnQoZGV2LCBOVUxMLCB0eXBlLCBjb2RlLCB2YWx1ZSk7CisJCWlucHV0X2hhbmRsZV9ldmVudChkZXYsIHR5cGUsIGNvZGUsIHZhbHVlKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CiAJfQogfQpAQCAtMzk3LDggKzM4Myw3IEBACiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJZ3JhYiA9IHJjdV9kZXJlZmVyZW5jZShkZXYtPmdyYWIpOwogCQlpZiAoIWdyYWIgfHwgZ3JhYiA9PSBoYW5kbGUpCi0JCQlpbnB1dF9oYW5kbGVfZXZlbnQoZGV2LCBoYW5kbGUtPmhhbmRsZXIsCi0JCQkJCSAgIHR5cGUsIGNvZGUsIHZhbHVlKTsKKwkJCWlucHV0X2hhbmRsZV9ldmVudChkZXYsIHR5cGUsIGNvZGUsIHZhbHVlKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CkBAIC02MTEsMTAgKzU5NiwxMCBAQAogCQlmb3IgKGNvZGUgPSAwOyBjb2RlIDw9IEtFWV9NQVg7IGNvZGUrKykgewogCQkJaWYgKGlzX2V2ZW50X3N1cHBvcnRlZChjb2RlLCBkZXYtPmtleWJpdCwgS0VZX01BWCkgJiYKIAkJCSAgICBfX3Rlc3RfYW5kX2NsZWFyX2JpdChjb2RlLCBkZXYtPmtleSkpIHsKLQkJCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgTlVMTCwgRVZfS0VZLCBjb2RlLCAwKTsKKwkJCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgRVZfS0VZLCBjb2RlLCAwKTsKIAkJCX0KIAkJfQotCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgTlVMTCwgRVZfU1lOLCBTWU5fUkVQT1JULCAxKTsKKwkJaW5wdXRfcGFzc19ldmVudChkZXYsIEVWX1NZTiwgU1lOX1JFUE9SVCwgMSk7CiAJfQogfQogCkBAIC04ODksOSArODc0LDkgQEAKIAkgICAgIWlzX2V2ZW50X3N1cHBvcnRlZChvbGRfa2V5Y29kZSwgZGV2LT5rZXliaXQsIEtFWV9NQVgpICYmCiAJICAgIF9fdGVzdF9hbmRfY2xlYXJfYml0KG9sZF9rZXljb2RlLCBkZXYtPmtleSkpIHsKIAotCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgTlVMTCwgRVZfS0VZLCBvbGRfa2V5Y29kZSwgMCk7CisJCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCBFVl9LRVksIG9sZF9rZXljb2RlLCAwKTsKIAkJaWYgKGRldi0+c3luYykKLQkJCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCBOVUxMLCBFVl9TWU4sIFNZTl9SRVBPUlQsIDEpOworCQkJaW5wdXRfcGFzc19ldmVudChkZXYsIEVWX1NZTiwgU1lOX1JFUE9SVCwgMSk7CiAJfQogCiAgb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCmluZGV4IDdiM2MwYjguLmM3YTkyMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKQEAgLTIsNyArMiw3IEBACiAjIElucHV0IGNvcmUgY29uZmlndXJhdGlvbgogIwogbWVudWNvbmZpZyBJTlBVVF9LRVlCT0FSRAotCWJvb2wgIktleWJvYXJkcyIgaWYgRU1CRURERUQgfHwgIVg4NgorCWJvb2wgIktleWJvYXJkcyIgaWYgRVhQRVJUIHx8ICFYODYKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTYXkgWSBoZXJlLCBhbmQgYSBsaXN0IG9mIHN1cHBvcnRlZCBrZXlib2FyZHMgd2lsbCBiZSBkaXNwbGF5ZWQuCkBAIC01Nyw3ICs1Nyw3IEBACiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYXRha2JkLgogCiBjb25maWcgS0VZQk9BUkRfQVRLQkQKLQl0cmlzdGF0ZSAiQVQga2V5Ym9hcmQiIGlmIEVNQkVEREVEIHx8ICFYODYKKwl0cmlzdGF0ZSAiQVQga2V5Ym9hcmQiIGlmIEVYUEVSVCB8fCAhWDg2CiAJZGVmYXVsdCB5CiAJc2VsZWN0IFNFUklPCiAJc2VsZWN0IFNFUklPX0xJQlBTMgpAQCAtMzQzLDYgKzM0MywxNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbm1rLXNrZS1rZXlwYWQuCiAKK2NvbmZpZyBLRVlCT0FSRF9URUdSQQorCXRyaXN0YXRlICJOVklESUEgVGVncmEgaW50ZXJuYWwgbWF0cml4IGtleWJvYXJkIGNvbnRyb2xsZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfVEVHUkEKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIG1hdHJpeCBrZXlib2FyZCBjb25uZWN0ZWQgZGlyZWN0bHkKKwkgIHRvIHRoZSBpbnRlcm5hbCBrZXlib2FyZCBjb250cm9sbGVyIG9uIFRlZ3JhIFNvQ3MuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRlZ3JhLWtiYy4KKwogY29uZmlnIEtFWUJPQVJEX09QRU5DT1JFUwogCXRyaXN0YXRlICJPcGVuQ29yZXMgS2V5Ym9hcmQgQ29udHJvbGxlciIKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQppbmRleCA0ZTU1NzFiLi40NjhjNjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKQEAgLTQyLDYgKzQyLDcgQEAKIG9iai0kKENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSkJCSs9IHN0b3dhd2F5Lm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9TVU5LQkQpCQkrPSBzdW5rYmQubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1RDMzU4OVgpCQkrPSB0YzM1ODl4LWtleXBhZC5vCitvYmotJChDT05GSUdfS0VZQk9BUkRfVEVHUkEpCQkrPSB0ZWdyYS1rYmMubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1RORVRWMTA3WCkJKz0gdG5ldHYxMDd4LWtleXBhZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfVFdMNDAzMCkJCSs9IHR3bDQwMzBfa2V5cGFkLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9YVEtCRCkJCSs9IHh0a2JkLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCmluZGV4IDYwNjlhYmUuLmViMzAwNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbiA9IGJkYXRhLT5idXR0b247CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBiZGF0YS0+aW5wdXQ7CiAJdW5zaWduZWQgaW50IHR5cGUgPSBidXR0b24tPnR5cGUgPzogRVZfS0VZOwotCWludCBzdGF0ZSA9IChncGlvX2dldF92YWx1ZShidXR0b24tPmdwaW8pID8gMSA6IDApIF4gYnV0dG9uLT5hY3RpdmVfbG93OworCWludCBzdGF0ZSA9IChncGlvX2dldF92YWx1ZV9jYW5zbGVlcChidXR0b24tPmdwaW8pID8gMSA6IDApIF4gYnV0dG9uLT5hY3RpdmVfbG93OwogCiAJaW5wdXRfZXZlbnQoaW5wdXQsIHR5cGUsIGJ1dHRvbi0+Y29kZSwgISFzdGF0ZSk7CiAJaW5wdXRfc3luYyhpbnB1dCk7CkBAIC00MTAsOCArNDEwLDggQEAKIAlpZiAoIWJ1dHRvbi0+Y2FuX2Rpc2FibGUpCiAJCWlycWZsYWdzIHw9IElSUUZfU0hBUkVEOwogCi0JZXJyb3IgPSByZXF1ZXN0X2lycShpcnEsIGdwaW9fa2V5c19pc3IsIGlycWZsYWdzLCBkZXNjLCBiZGF0YSk7Ci0JaWYgKGVycm9yKSB7CisJZXJyb3IgPSByZXF1ZXN0X2FueV9jb250ZXh0X2lycShpcnEsIGdwaW9fa2V5c19pc3IsIGlycWZsYWdzLCBkZXNjLCBiZGF0YSk7CisJaWYgKGVycm9yIDwgMCkgewogCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBjbGFpbSBpcnEgJWQ7IGVycm9yICVkXG4iLAogCQkJaXJxLCBlcnJvcik7CiAJCWdvdG8gZmFpbDM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3RlZ3JhLWtiYy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90ZWdyYS1rYmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWNlOTAzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90ZWdyYS1rYmMuYwpAQCAtMCwwICsxLDc4MyBAQAorLyoKKyAqIEtleWJvYXJkIGNsYXNzIGlucHV0IGRyaXZlciBmb3IgdGhlIE5WSURJQSBUZWdyYSBTb0MgaW50ZXJuYWwgbWF0cml4CisgKiBrZXlib2FyZCBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTEsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxtYWNoL2Nsay5oPgorI2luY2x1ZGUgPG1hY2gva2JjLmg+CisKKyNkZWZpbmUgS0JDX01BWF9ERUJPVU5DRV9DTlQJMHgzZmZ1CisKKy8qIEtCQyByb3cgc2NhbiB0aW1lIGFuZCBkZWxheSBmb3IgYmVnaW5uaW5nIHRoZSByb3cgc2Nhbi4gKi8KKyNkZWZpbmUgS0JDX1JPV19TQ0FOX1RJTUUJMTYKKyNkZWZpbmUgS0JDX1JPV19TQ0FOX0RMWQk1CisKKy8qIEtCQyB1c2VzIGEgMzJLSHogY2xvY2sgc28gYSBjeWNsZSA9IDEvMzJLaHogKi8KKyNkZWZpbmUgS0JDX0NZQ0xFX1VTRUMJMzIKKworLyogS0JDIFJlZ2lzdGVycyAqLworCisvKiBLQkMgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBLQkNfQ09OVFJPTF8wCTB4MAorI2RlZmluZSBLQkNfRklGT19USF9DTlRfU0hJRlQoY250KQkoY250IDw8IDE0KQorI2RlZmluZSBLQkNfREVCT1VOQ0VfQ05UX1NISUZUKGNudCkJKGNudCA8PCA0KQorI2RlZmluZSBLQkNfQ09OVFJPTF9GSUZPX0NOVF9JTlRfRU4JKDEgPDwgMykKKyNkZWZpbmUgS0JDX0NPTlRST0xfS0JDX0VOCQkoMSA8PCAwKQorCisvKiBLQkMgSW50ZXJydXB0IFJlZ2lzdGVyICovCisjZGVmaW5lIEtCQ19JTlRfMAkweDQKKyNkZWZpbmUgS0JDX0lOVF9GSUZPX0NOVF9JTlRfU1RBVFVTCSgxIDw8IDIpCisKKyNkZWZpbmUgS0JDX1JPV19DRkcwXzAJMHg4CisjZGVmaW5lIEtCQ19DT0xfQ0ZHMF8wCTB4MTgKKyNkZWZpbmUgS0JDX0lOSVRfRExZXzAJMHgyOAorI2RlZmluZSBLQkNfUlBUX0RMWV8wCTB4MmMKKyNkZWZpbmUgS0JDX0tQX0VOVDBfMAkweDMwCisjZGVmaW5lIEtCQ19LUF9FTlQxXzAJMHgzNAorI2RlZmluZSBLQkNfUk9XMF9NQVNLXzAJMHgzOAorCisjZGVmaW5lIEtCQ19ST1dfU0hJRlQJMworCitzdHJ1Y3QgdGVncmFfa2JjIHsKKwl2b2lkIF9faW9tZW0gKm1taW87CisJc3RydWN0IGlucHV0X2RldiAqaWRldjsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXVuc2lnbmVkIGludCB3YWtlX2VuYWJsZV9yb3dzOworCXVuc2lnbmVkIGludCB3YWtlX2VuYWJsZV9jb2xzOworCXNwaW5sb2NrX3QgbG9jazsKKwl1bnNpZ25lZCBpbnQgcmVwb2xsX2RseTsKKwl1bnNpZ25lZCBsb25nIGNwX2RseV9qaWZmaWVzOworCWJvb2wgdXNlX2ZuX21hcDsKKwljb25zdCBzdHJ1Y3QgdGVncmFfa2JjX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXVuc2lnbmVkIHNob3J0IGtleWNvZGVbS0JDX01BWF9LRVkgKiAyXTsKKwl1bnNpZ25lZCBzaG9ydCBjdXJyZW50X2tleXNbS0JDX01BWF9LUEVOVF07CisJdW5zaWduZWQgaW50IG51bV9wcmVzc2VkX2tleXM7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IGNsayAqY2xrOworfTsKKworc3RhdGljIGNvbnN0IHUzMiB0ZWdyYV9rYmNfZGVmYXVsdF9rZXltYXBbXSA9IHsKKwlLRVkoMCwgMiwgS0VZX1cpLAorCUtFWSgwLCAzLCBLRVlfUyksCisJS0VZKDAsIDQsIEtFWV9BKSwKKwlLRVkoMCwgNSwgS0VZX1opLAorCUtFWSgwLCA3LCBLRVlfRk4pLAorCisJS0VZKDEsIDcsIEtFWV9MRUZUTUVUQSksCisKKwlLRVkoMiwgNiwgS0VZX1JJR0hUQUxUKSwKKwlLRVkoMiwgNywgS0VZX0xFRlRBTFQpLAorCisJS0VZKDMsIDAsIEtFWV81KSwKKwlLRVkoMywgMSwgS0VZXzQpLAorCUtFWSgzLCAyLCBLRVlfUiksCisJS0VZKDMsIDMsIEtFWV9FKSwKKwlLRVkoMywgNCwgS0VZX0YpLAorCUtFWSgzLCA1LCBLRVlfRCksCisJS0VZKDMsIDYsIEtFWV9YKSwKKworCUtFWSg0LCAwLCBLRVlfNyksCisJS0VZKDQsIDEsIEtFWV82KSwKKwlLRVkoNCwgMiwgS0VZX1QpLAorCUtFWSg0LCAzLCBLRVlfSCksCisJS0VZKDQsIDQsIEtFWV9HKSwKKwlLRVkoNCwgNSwgS0VZX1YpLAorCUtFWSg0LCA2LCBLRVlfQyksCisJS0VZKDQsIDcsIEtFWV9TUEFDRSksCisKKwlLRVkoNSwgMCwgS0VZXzkpLAorCUtFWSg1LCAxLCBLRVlfOCksCisJS0VZKDUsIDIsIEtFWV9VKSwKKwlLRVkoNSwgMywgS0VZX1kpLAorCUtFWSg1LCA0LCBLRVlfSiksCisJS0VZKDUsIDUsIEtFWV9OKSwKKwlLRVkoNSwgNiwgS0VZX0IpLAorCUtFWSg1LCA3LCBLRVlfQkFDS1NMQVNIKSwKKworCUtFWSg2LCAwLCBLRVlfTUlOVVMpLAorCUtFWSg2LCAxLCBLRVlfMCksCisJS0VZKDYsIDIsIEtFWV9PKSwKKwlLRVkoNiwgMywgS0VZX0kpLAorCUtFWSg2LCA0LCBLRVlfTCksCisJS0VZKDYsIDUsIEtFWV9LKSwKKwlLRVkoNiwgNiwgS0VZX0NPTU1BKSwKKwlLRVkoNiwgNywgS0VZX00pLAorCisJS0VZKDcsIDEsIEtFWV9FUVVBTCksCisJS0VZKDcsIDIsIEtFWV9SSUdIVEJSQUNFKSwKKwlLRVkoNywgMywgS0VZX0VOVEVSKSwKKwlLRVkoNywgNywgS0VZX01FTlUpLAorCisJS0VZKDgsIDQsIEtFWV9SSUdIVFNISUZUKSwKKwlLRVkoOCwgNSwgS0VZX0xFRlRTSElGVCksCisKKwlLRVkoOSwgNSwgS0VZX1JJR0hUQ1RSTCksCisJS0VZKDksIDcsIEtFWV9MRUZUQ1RSTCksCisKKwlLRVkoMTEsIDAsIEtFWV9MRUZUQlJBQ0UpLAorCUtFWSgxMSwgMSwgS0VZX1ApLAorCUtFWSgxMSwgMiwgS0VZX0FQT1NUUk9QSEUpLAorCUtFWSgxMSwgMywgS0VZX1NFTUlDT0xPTiksCisJS0VZKDExLCA0LCBLRVlfU0xBU0gpLAorCUtFWSgxMSwgNSwgS0VZX0RPVCksCisKKwlLRVkoMTIsIDAsIEtFWV9GMTApLAorCUtFWSgxMiwgMSwgS0VZX0Y5KSwKKwlLRVkoMTIsIDIsIEtFWV9CQUNLU1BBQ0UpLAorCUtFWSgxMiwgMywgS0VZXzMpLAorCUtFWSgxMiwgNCwgS0VZXzIpLAorCUtFWSgxMiwgNSwgS0VZX1VQKSwKKwlLRVkoMTIsIDYsIEtFWV9QUklOVCksCisJS0VZKDEyLCA3LCBLRVlfUEFVU0UpLAorCisJS0VZKDEzLCAwLCBLRVlfSU5TRVJUKSwKKwlLRVkoMTMsIDEsIEtFWV9ERUxFVEUpLAorCUtFWSgxMywgMywgS0VZX1BBR0VVUCksCisJS0VZKDEzLCA0LCBLRVlfUEFHRURPV04pLAorCUtFWSgxMywgNSwgS0VZX1JJR0hUKSwKKwlLRVkoMTMsIDYsIEtFWV9ET1dOKSwKKwlLRVkoMTMsIDcsIEtFWV9MRUZUKSwKKworCUtFWSgxNCwgMCwgS0VZX0YxMSksCisJS0VZKDE0LCAxLCBLRVlfRjEyKSwKKwlLRVkoMTQsIDIsIEtFWV9GOCksCisJS0VZKDE0LCAzLCBLRVlfUSksCisJS0VZKDE0LCA0LCBLRVlfRjQpLAorCUtFWSgxNCwgNSwgS0VZX0YzKSwKKwlLRVkoMTQsIDYsIEtFWV8xKSwKKwlLRVkoMTQsIDcsIEtFWV9GNyksCisKKwlLRVkoMTUsIDAsIEtFWV9FU0MpLAorCUtFWSgxNSwgMSwgS0VZX0dSQVZFKSwKKwlLRVkoMTUsIDIsIEtFWV9GNSksCisJS0VZKDE1LCAzLCBLRVlfVEFCKSwKKwlLRVkoMTUsIDQsIEtFWV9GMSksCisJS0VZKDE1LCA1LCBLRVlfRjIpLAorCUtFWSgxNSwgNiwgS0VZX0NBUFNMT0NLKSwKKwlLRVkoMTUsIDcsIEtFWV9GNiksCisKKwkvKiBTb2Z0d2FyZSBIYW5kbGVkIEZ1bmN0aW9uIEtleXMgKi8KKwlLRVkoMjAsIDAsIEtFWV9LUDcpLAorCisJS0VZKDIxLCAwLCBLRVlfS1A5KSwKKwlLRVkoMjEsIDEsIEtFWV9LUDgpLAorCUtFWSgyMSwgMiwgS0VZX0tQNCksCisJS0VZKDIxLCA0LCBLRVlfS1AxKSwKKworCUtFWSgyMiwgMSwgS0VZX0tQU0xBU0gpLAorCUtFWSgyMiwgMiwgS0VZX0tQNiksCisJS0VZKDIyLCAzLCBLRVlfS1A1KSwKKwlLRVkoMjIsIDQsIEtFWV9LUDMpLAorCUtFWSgyMiwgNSwgS0VZX0tQMiksCisJS0VZKDIyLCA3LCBLRVlfS1AwKSwKKworCUtFWSgyNywgMSwgS0VZX0tQQVNURVJJU0spLAorCUtFWSgyNywgMywgS0VZX0tQTUlOVVMpLAorCUtFWSgyNywgNCwgS0VZX0tQUExVUyksCisJS0VZKDI3LCA1LCBLRVlfS1BET1QpLAorCisJS0VZKDI4LCA1LCBLRVlfVk9MVU1FVVApLAorCisJS0VZKDI5LCAzLCBLRVlfSE9NRSksCisJS0VZKDI5LCA0LCBLRVlfRU5EKSwKKwlLRVkoMjksIDUsIEtFWV9CUklHSFRORVNTRE9XTiksCisJS0VZKDI5LCA2LCBLRVlfVk9MVU1FRE9XTiksCisJS0VZKDI5LCA3LCBLRVlfQlJJR0hUTkVTU1VQKSwKKworCUtFWSgzMCwgMCwgS0VZX05VTUxPQ0spLAorCUtFWSgzMCwgMSwgS0VZX1NDUk9MTExPQ0spLAorCUtFWSgzMCwgMiwgS0VZX01VVEUpLAorCisJS0VZKDMxLCA0LCBLRVlfSEVMUCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSB0ZWdyYV9rYmNfZGVmYXVsdF9rZXltYXBfZGF0YSA9IHsKKwkua2V5bWFwCQk9IHRlZ3JhX2tiY19kZWZhdWx0X2tleW1hcCwKKwkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKHRlZ3JhX2tiY19kZWZhdWx0X2tleW1hcCksCit9OworCitzdGF0aWMgdm9pZCB0ZWdyYV9rYmNfcmVwb3J0X3JlbGVhc2VkX2tleXMoc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCisJCQkJCSAgIHVuc2lnbmVkIHNob3J0IG9sZF9rZXljb2Rlc1tdLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgb2xkX251bV9rZXlzLAorCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBuZXdfa2V5Y29kZXNbXSwKKwkJCQkJICAgdW5zaWduZWQgaW50IG5ld19udW1fa2V5cykKK3sKKwl1bnNpZ25lZCBpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBvbGRfbnVtX2tleXM7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgbmV3X251bV9rZXlzOyBqKyspCisJCQlpZiAob2xkX2tleWNvZGVzW2ldID09IG5ld19rZXljb2Rlc1tqXSkKKwkJCQlicmVhazsKKworCQlpZiAoaiA9PSBuZXdfbnVtX2tleXMpCisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBvbGRfa2V5Y29kZXNbaV0sIDApOworCX0KK30KKworc3RhdGljIHZvaWQgdGVncmFfa2JjX3JlcG9ydF9wcmVzc2VkX2tleXMoc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCisJCQkJCSAgdW5zaWduZWQgY2hhciBzY2FuY29kZXNbXSwKKwkJCQkJICB1bnNpZ25lZCBzaG9ydCBrZXljb2Rlc1tdLAorCQkJCQkgIHVuc2lnbmVkIGludCBudW1fcHJlc3NlZF9rZXlzKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wcmVzc2VkX2tleXM7IGkrKykgeworCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfTVNDLCBNU0NfU0NBTiwgc2NhbmNvZGVzW2ldKTsKKwkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwga2V5Y29kZXNbaV0sIDEpOworCX0KK30KKworc3RhdGljIHZvaWQgdGVncmFfa2JjX3JlcG9ydF9rZXlzKHN0cnVjdCB0ZWdyYV9rYmMgKmtiYykKK3sKKwl1bnNpZ25lZCBjaGFyIHNjYW5jb2Rlc1tLQkNfTUFYX0tQRU5UXTsKKwl1bnNpZ25lZCBzaG9ydCBrZXljb2Rlc1tLQkNfTUFYX0tQRU5UXTsKKwl1MzIgdmFsID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgbnVtX2Rvd24gPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCBmbl9rZXlwcmVzcyA9IGZhbHNlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmtiYy0+bG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBLQkNfTUFYX0tQRU5UOyBpKyspIHsKKwkJaWYgKChpICUgNCkgPT0gMCkKKwkJCXZhbCA9IHJlYWRsKGtiYy0+bW1pbyArIEtCQ19LUF9FTlQwXzAgKyBpKTsKKworCQlpZiAodmFsICYgMHg4MCkgeworCQkJdW5zaWduZWQgaW50IGNvbCA9IHZhbCAmIDB4MDc7CisJCQl1bnNpZ25lZCBpbnQgcm93ID0gKHZhbCA+PiAzKSAmIDB4MGY7CisJCQl1bnNpZ25lZCBjaGFyIHNjYW5jb2RlID0KKwkJCQlNQVRSSVhfU0NBTl9DT0RFKHJvdywgY29sLCBLQkNfUk9XX1NISUZUKTsKKworCQkJc2NhbmNvZGVzW251bV9kb3duXSA9IHNjYW5jb2RlOworCQkJa2V5Y29kZXNbbnVtX2Rvd25dID0ga2JjLT5rZXljb2RlW3NjYW5jb2RlXTsKKwkJCS8qIElmIGRyaXZlciB1c2VzIEZuIG1hcCwgZG8gbm90IHJlcG9ydCB0aGUgRm4ga2V5LiAqLworCQkJaWYgKChrZXljb2Rlc1tudW1fZG93bl0gPT0gS0VZX0ZOKSAmJiBrYmMtPnVzZV9mbl9tYXApCisJCQkJZm5fa2V5cHJlc3MgPSB0cnVlOworCQkJZWxzZQorCQkJCW51bV9kb3duKys7CisJCX0KKworCQl2YWwgPj49IDg7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgcGxhdGZvcm0gdXNlcyBGbiBrZXltYXBzLCB0cmFuc2xhdGUga2V5cyBvbiBhIEZuIGtleXByZXNzLgorCSAqIEZ1bmN0aW9uIGtleWNvZGVzIGFyZSBLQkNfTUFYX0tFWSBhcGFydCBmcm9tIHRoZSBwbGFpbiBrZXljb2Rlcy4KKwkgKi8KKwlpZiAoZm5fa2V5cHJlc3MpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9kb3duOyBpKyspIHsKKwkJCXNjYW5jb2Rlc1tpXSArPSBLQkNfTUFYX0tFWTsKKwkJCWtleWNvZGVzW2ldID0ga2JjLT5rZXljb2RlW3NjYW5jb2Rlc1tpXV07CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrYmMtPmxvY2ssIGZsYWdzKTsKKworCXRlZ3JhX2tiY19yZXBvcnRfcmVsZWFzZWRfa2V5cyhrYmMtPmlkZXYsCisJCQkJICAgICAgIGtiYy0+Y3VycmVudF9rZXlzLCBrYmMtPm51bV9wcmVzc2VkX2tleXMsCisJCQkJICAgICAgIGtleWNvZGVzLCBudW1fZG93bik7CisJdGVncmFfa2JjX3JlcG9ydF9wcmVzc2VkX2tleXMoa2JjLT5pZGV2LCBzY2FuY29kZXMsIGtleWNvZGVzLCBudW1fZG93bik7CisJaW5wdXRfc3luYyhrYmMtPmlkZXYpOworCisJbWVtY3B5KGtiYy0+Y3VycmVudF9rZXlzLCBrZXljb2Rlcywgc2l6ZW9mKGtiYy0+Y3VycmVudF9rZXlzKSk7CisJa2JjLT5udW1fcHJlc3NlZF9rZXlzID0gbnVtX2Rvd247Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhX2tiY19rZXlwcmVzc190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHRlZ3JhX2tiYyAqa2JjID0gKHN0cnVjdCB0ZWdyYV9rYmMgKilkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHZhbDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXZhbCA9IChyZWFkbChrYmMtPm1taW8gKyBLQkNfSU5UXzApID4+IDQpICYgMHhmOworCWlmICh2YWwpIHsKKwkJdW5zaWduZWQgbG9uZyBkbHk7CisKKwkJdGVncmFfa2JjX3JlcG9ydF9rZXlzKGtiYyk7CisKKwkJLyoKKwkJICogSWYgbW9yZSB0aGFuIG9uZSBrZXlzIGFyZSBwcmVzc2VkIHdlIG5lZWQgbm90IHdhaXQKKwkJICogZm9yIHRoZSByZXBvbGwgZGVsYXkuCisJCSAqLworCQlkbHkgPSAodmFsID09IDEpID8ga2JjLT5yZXBvbGxfZGx5IDogMTsKKwkJbW9kX3RpbWVyKCZrYmMtPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhkbHkpKTsKKwl9IGVsc2UgeworCQkvKiBSZWxlYXNlIGFueSBwcmVzc2VkIGtleXMgYW5kIGV4aXQgdGhlIHBvbGxpbmcgbG9vcCAqLworCQlmb3IgKGkgPSAwOyBpIDwga2JjLT5udW1fcHJlc3NlZF9rZXlzOyBpKyspCisJCQlpbnB1dF9yZXBvcnRfa2V5KGtiYy0+aWRldiwga2JjLT5jdXJyZW50X2tleXNbaV0sIDApOworCQlpbnB1dF9zeW5jKGtiYy0+aWRldik7CisKKwkJa2JjLT5udW1fcHJlc3NlZF9rZXlzID0gMDsKKworCQkvKiBBbGwga2V5cyBhcmUgcmVsZWFzZWQgc28gZW5hYmxlIHRoZSBrZXlwcmVzcyBpbnRlcnJ1cHQgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmtiYy0+bG9jaywgZmxhZ3MpOworCQl2YWwgPSByZWFkbChrYmMtPm1taW8gKyBLQkNfQ09OVFJPTF8wKTsKKwkJdmFsIHw9IEtCQ19DT05UUk9MX0ZJRk9fQ05UX0lOVF9FTjsKKwkJd3JpdGVsKHZhbCwga2JjLT5tbWlvICsgS0JDX0NPTlRST0xfMCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtiYy0+bG9jaywgZmxhZ3MpOworCX0KK30KKworc3RhdGljIGlycXJldHVybl90IHRlZ3JhX2tiY19pc3IoaW50IGlycSwgdm9pZCAqYXJncykKK3sKKwlzdHJ1Y3QgdGVncmFfa2JjICprYmMgPSBhcmdzOworCXUzMiB2YWwsIGN0bDsKKworCS8qCisJICogVW50aWwgYWxsIGtleXMgYXJlIHJlbGVhc2VkLCBkZWZlciBmdXJ0aGVyIHByb2Nlc3NpbmcgdG8KKwkgKiB0aGUgcG9sbGluZyBsb29wIGluIHRlZ3JhX2tiY19rZXlwcmVzc190aW1lcgorCSAqLworCWN0bCA9IHJlYWRsKGtiYy0+bW1pbyArIEtCQ19DT05UUk9MXzApOworCWN0bCAmPSB+S0JDX0NPTlRST0xfRklGT19DTlRfSU5UX0VOOworCXdyaXRlbChjdGwsIGtiYy0+bW1pbyArIEtCQ19DT05UUk9MXzApOworCisJLyoKKwkgKiBRdWlja2x5IGJhaWwgb3V0ICYgcmVlbmFibGUgaW50ZXJydXB0cyBpZiB0aGUgZmlmbyB0aHJlc2hvbGQKKwkgKiBjb3VudCBpbnRlcnJ1cHQgd2Fzbid0IHRoZSBpbnRlcnJ1cHQgc291cmNlCisJICovCisJdmFsID0gcmVhZGwoa2JjLT5tbWlvICsgS0JDX0lOVF8wKTsKKwl3cml0ZWwodmFsLCBrYmMtPm1taW8gKyBLQkNfSU5UXzApOworCisJaWYgKHZhbCAmIEtCQ19JTlRfRklGT19DTlRfSU5UX1NUQVRVUykgeworCQkvKgorCQkgKiBTY2hlZHVsZSB0aW1lciB0byBydW4gd2hlbiBoYXJkd2FyZSBpcyBpbiBjb250aW51b3VzCisJCSAqIHBvbGxpbmcgbW9kZS4KKwkJICovCisJCW1vZF90aW1lcigma2JjLT50aW1lciwgamlmZmllcyArIGtiYy0+Y3BfZGx5X2ppZmZpZXMpOworCX0gZWxzZSB7CisJCWN0bCB8PSBLQkNfQ09OVFJPTF9GSUZPX0NOVF9JTlRfRU47CisJCXdyaXRlbChjdGwsIGtiYy0+bW1pbyArIEtCQ19DT05UUk9MXzApOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgdGVncmFfa2JjX3NldHVwX3dha2VrZXlzKHN0cnVjdCB0ZWdyYV9rYmMgKmtiYywgYm9vbCBmaWx0ZXIpCit7CisJY29uc3Qgc3RydWN0IHRlZ3JhX2tiY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGtiYy0+cGRhdGE7CisJaW50IGk7CisJdW5zaWduZWQgaW50IHJzdF92YWw7CisKKwlCVUdfT04ocGRhdGEtPndha2VfY250ID4gS0JDX01BWF9LRVkpOworCXJzdF92YWwgPSAoZmlsdGVyICYmIHBkYXRhLT53YWtlX2NudCkgPyB+MCA6IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgS0JDX01BWF9ST1c7IGkrKykKKwkJd3JpdGVsKHJzdF92YWwsIGtiYy0+bW1pbyArIEtCQ19ST1cwX01BU0tfMCArIGkgKiA0KTsKKworCWlmIChmaWx0ZXIpIHsKKwkJZm9yIChpID0gMDsgaSA8IHBkYXRhLT53YWtlX2NudDsgaSsrKSB7CisJCQl1MzIgdmFsLCBhZGRyOworCQkJYWRkciA9IHBkYXRhLT53YWtlX2NmZ1tpXS5yb3cgKiA0ICsgS0JDX1JPVzBfTUFTS18wOworCQkJdmFsID0gcmVhZGwoa2JjLT5tbWlvICsgYWRkcik7CisJCQl2YWwgJj0gfigxIDw8IHBkYXRhLT53YWtlX2NmZ1tpXS5jb2wpOworCQkJd3JpdGVsKHZhbCwga2JjLT5tbWlvICsgYWRkcik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhX2tiY19jb25maWdfcGlucyhzdHJ1Y3QgdGVncmFfa2JjICprYmMpCit7CisJY29uc3Qgc3RydWN0IHRlZ3JhX2tiY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGtiYy0+cGRhdGE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgS0JDX01BWF9HUElPOyBpKyspIHsKKwkJdTMyIHJfc2hmdCA9IDUgKiAoaSAlIDYpOworCQl1MzIgY19zaGZ0ID0gNCAqIChpICUgOCk7CisJCXUzMiByX21hc2sgPSAweDFmIDw8IHJfc2hmdDsKKwkJdTMyIGNfbWFzayA9IDB4MGYgPDwgY19zaGZ0OworCQl1MzIgcl9vZmZzID0gKGkgLyA2KSAqIDQgKyBLQkNfUk9XX0NGRzBfMDsKKwkJdTMyIGNfb2ZmcyA9IChpIC8gOCkgKiA0ICsgS0JDX0NPTF9DRkcwXzA7CisJCXUzMiByb3dfY2ZnID0gcmVhZGwoa2JjLT5tbWlvICsgcl9vZmZzKTsKKwkJdTMyIGNvbF9jZmcgPSByZWFkbChrYmMtPm1taW8gKyBjX29mZnMpOworCisJCXJvd19jZmcgJj0gfnJfbWFzazsKKwkJY29sX2NmZyAmPSB+Y19tYXNrOworCisJCWlmIChwZGF0YS0+cGluX2NmZ1tpXS5pc19yb3cpCisJCQlyb3dfY2ZnIHw9ICgocGRhdGEtPnBpbl9jZmdbaV0ubnVtIDw8IDEpIHwgMSkgPDwgcl9zaGZ0OworCQllbHNlCisJCQljb2xfY2ZnIHw9ICgocGRhdGEtPnBpbl9jZmdbaV0ubnVtIDw8IDEpIHwgMSkgPDwgY19zaGZ0OworCisJCXdyaXRlbChyb3dfY2ZnLCBrYmMtPm1taW8gKyByX29mZnMpOworCQl3cml0ZWwoY29sX2NmZywga2JjLT5tbWlvICsgY19vZmZzKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfa2JjX3N0YXJ0KHN0cnVjdCB0ZWdyYV9rYmMgKmtiYykKK3sKKwljb25zdCBzdHJ1Y3QgdGVncmFfa2JjX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0ga2JjLT5wZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBkZWJvdW5jZV9jbnQ7CisJdTMyIHZhbCA9IDA7CisKKwljbGtfZW5hYmxlKGtiYy0+Y2xrKTsKKworCS8qIFJlc2V0IHRoZSBLQkMgY29udHJvbGxlciB0byBjbGVhciBhbGwgcHJldmlvdXMgc3RhdHVzLiovCisJdGVncmFfcGVyaXBoX3Jlc2V0X2Fzc2VydChrYmMtPmNsayk7CisJdWRlbGF5KDEwMCk7CisJdGVncmFfcGVyaXBoX3Jlc2V0X2RlYXNzZXJ0KGtiYy0+Y2xrKTsKKwl1ZGVsYXkoMTAwKTsKKworCXRlZ3JhX2tiY19jb25maWdfcGlucyhrYmMpOworCXRlZ3JhX2tiY19zZXR1cF93YWtla2V5cyhrYmMsIGZhbHNlKTsKKworCXdyaXRlbChwZGF0YS0+cmVwZWF0X2NudCwga2JjLT5tbWlvICsgS0JDX1JQVF9ETFlfMCk7CisKKwkvKiBLZXlib2FyZCBkZWJvdW5jZSBjb3VudCBpcyBtYXhpbXVtIG9mIDEyIGJpdHMuICovCisJZGVib3VuY2VfY250ID0gbWluKHBkYXRhLT5kZWJvdW5jZV9jbnQsIEtCQ19NQVhfREVCT1VOQ0VfQ05UKTsKKwl2YWwgPSBLQkNfREVCT1VOQ0VfQ05UX1NISUZUKGRlYm91bmNlX2NudCk7CisJdmFsIHw9IEtCQ19GSUZPX1RIX0NOVF9TSElGVCgxKTsgLyogc2V0IGZpZm8gaW50ZXJydXB0IHRocmVzaG9sZCB0byAxICovCisJdmFsIHw9IEtCQ19DT05UUk9MX0ZJRk9fQ05UX0lOVF9FTjsgIC8qIGludGVycnVwdCBvbiBGSUZPIHRocmVzaG9sZCAqLworCXZhbCB8PSBLQkNfQ09OVFJPTF9LQkNfRU47ICAgICAvKiBlbmFibGUgKi8KKwl3cml0ZWwodmFsLCBrYmMtPm1taW8gKyBLQkNfQ09OVFJPTF8wKTsKKworCS8qCisJICogQ29tcHV0ZSB0aGUgZGVsYXkobnMpIGZyb20gaW50ZXJydXB0IG1vZGUgdG8gY29udGludW91cyBwb2xsaW5nCisJICogbW9kZSBzbyB0aGUgdGltZXIgcm91dGluZSBpcyBzY2hlZHVsZWQgYXBwcm9wcmlhdGVseS4KKwkgKi8KKwl2YWwgPSByZWFkbChrYmMtPm1taW8gKyBLQkNfSU5JVF9ETFlfMCk7CisJa2JjLT5jcF9kbHlfamlmZmllcyA9IHVzZWNzX3RvX2ppZmZpZXMoKHZhbCAmIDB4ZmZmZmYpICogMzIpOworCisJa2JjLT5udW1fcHJlc3NlZF9rZXlzID0gMDsKKworCS8qCisJICogQXRvbWljYWxseSBjbGVhciBvdXQgYW55IHJlbWFpbmluZyBlbnRyaWVzIGluIHRoZSBrZXkgRklGTworCSAqIGFuZCBlbmFibGUga2V5Ym9hcmQgaW50ZXJydXB0cy4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgma2JjLT5sb2NrLCBmbGFncyk7CisJd2hpbGUgKDEpIHsKKwkJdmFsID0gcmVhZGwoa2JjLT5tbWlvICsgS0JDX0lOVF8wKTsKKwkJdmFsID4+PSA0OworCQlpZiAoIXZhbCkKKwkJCWJyZWFrOworCisJCXZhbCA9IHJlYWRsKGtiYy0+bW1pbyArIEtCQ19LUF9FTlQwXzApOworCQl2YWwgPSByZWFkbChrYmMtPm1taW8gKyBLQkNfS1BfRU5UMV8wKTsKKwl9CisJd3JpdGVsKDB4Nywga2JjLT5tbWlvICsgS0JDX0lOVF8wKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrYmMtPmxvY2ssIGZsYWdzKTsKKworCWVuYWJsZV9pcnEoa2JjLT5pcnEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhX2tiY19zdG9wKHN0cnVjdCB0ZWdyYV9rYmMgKmtiYykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgma2JjLT5sb2NrLCBmbGFncyk7CisJdmFsID0gcmVhZGwoa2JjLT5tbWlvICsgS0JDX0NPTlRST0xfMCk7CisJdmFsICY9IH4xOworCXdyaXRlbCh2YWwsIGtiYy0+bW1pbyArIEtCQ19DT05UUk9MXzApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtiYy0+bG9jaywgZmxhZ3MpOworCisJZGlzYWJsZV9pcnEoa2JjLT5pcnEpOworCWRlbF90aW1lcl9zeW5jKCZrYmMtPnRpbWVyKTsKKworCWNsa19kaXNhYmxlKGtiYy0+Y2xrKTsKK30KKworc3RhdGljIGludCB0ZWdyYV9rYmNfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IHRlZ3JhX2tiYyAqa2JjID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiB0ZWdyYV9rYmNfc3RhcnQoa2JjKTsKK30KKworc3RhdGljIHZvaWQgdGVncmFfa2JjX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdGVncmFfa2JjICprYmMgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHRlZ3JhX2tiY19zdG9wKGtiYyk7Cit9CisKK3N0YXRpYyBib29sIF9fZGV2aW5pdAordGVncmFfa2JjX2NoZWNrX3Bpbl9jZmcoY29uc3Qgc3RydWN0IHRlZ3JhX2tiY19wbGF0Zm9ybV9kYXRhICpwZGF0YSwKKwkJCXN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpudW1fcm93cykKK3sKKwlpbnQgaTsKKworCSpudW1fcm93cyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgS0JDX01BWF9HUElPOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHRlZ3JhX2tiY19waW5fY2ZnICpwaW5fY2ZnID0gJnBkYXRhLT5waW5fY2ZnW2ldOworCisJCWlmIChwaW5fY2ZnLT5pc19yb3cpIHsKKwkJCWlmIChwaW5fY2ZnLT5udW0gPj0gS0JDX01BWF9ST1cpIHsKKwkJCQlkZXZfZXJyKGRldiwKKwkJCQkJInBpbl9jZmdbJWRdOiBpbnZhbGlkIHJvdyBudW1iZXIgJWRcbiIsCisJCQkJCWksIHBpbl9jZmctPm51bSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQkJKCpudW1fcm93cykrKzsKKwkJfSBlbHNlIHsKKwkJCWlmIChwaW5fY2ZnLT5udW0gPj0gS0JDX01BWF9DT0wpIHsKKwkJCQlkZXZfZXJyKGRldiwKKwkJCQkJInBpbl9jZmdbJWRdOiBpbnZhbGlkIGNvbHVtbiBudW1iZXIgJWRcbiIsCisJCQkJCWksIHBpbl9jZmctPm51bSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRlZ3JhX2tiY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbnN0IHN0cnVjdCB0ZWdyYV9rYmNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwljb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhICprZXltYXBfZGF0YTsKKwlzdHJ1Y3QgdGVncmFfa2JjICprYmM7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpcnE7CisJaW50IGVycjsKKwlpbnQgaTsKKwlpbnQgbnVtX3Jvd3MgPSAwOworCXVuc2lnbmVkIGludCBkZWJvdW5jZV9jbnQ7CisJdW5zaWduZWQgaW50IHNjYW5fdGltZV9yb3dzOworCisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXRlZ3JhX2tiY19jaGVja19waW5fY2ZnKHBkYXRhLCAmcGRldi0+ZGV2LCAmbnVtX3Jvd3MpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBJL08gbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQga2V5Ym9hcmQgSVJRXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlrYmMgPSBremFsbG9jKHNpemVvZigqa2JjKSwgR0ZQX0tFUk5FTCk7CisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFrYmMgfHwgIWlucHV0X2RldikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwlrYmMtPnBkYXRhID0gcGRhdGE7CisJa2JjLT5pZGV2ID0gaW5wdXRfZGV2OworCWtiYy0+aXJxID0gaXJxOworCXNwaW5fbG9ja19pbml0KCZrYmMtPmxvY2spOworCXNldHVwX3RpbWVyKCZrYmMtPnRpbWVyLCB0ZWdyYV9rYmNfa2V5cHJlc3NfdGltZXIsICh1bnNpZ25lZCBsb25nKWtiYyk7CisKKwlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBJL08gbWVtb3J5XG4iKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwlrYmMtPm1taW8gPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFrYmMtPm1taW8pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlbWFwIEkvTyBtZW1vcnlcbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyX2ZyZWVfbWVtX3JlZ2lvbjsKKwl9CisKKwlrYmMtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihrYmMtPmNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBrZXlib2FyZCBjbG9ja1xuIik7CisJCWVyciA9IFBUUl9FUlIoa2JjLT5jbGspOworCQlnb3RvIGVycl9pb3VubWFwOworCX0KKworCWtiYy0+d2FrZV9lbmFibGVfcm93cyA9IDA7CisJa2JjLT53YWtlX2VuYWJsZV9jb2xzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPndha2VfY250OyBpKyspIHsKKwkJa2JjLT53YWtlX2VuYWJsZV9yb3dzIHw9ICgxIDw8IHBkYXRhLT53YWtlX2NmZ1tpXS5yb3cpOworCQlrYmMtPndha2VfZW5hYmxlX2NvbHMgfD0gKDEgPDwgcGRhdGEtPndha2VfY2ZnW2ldLmNvbCk7CisJfQorCisJLyoKKwkgKiBUaGUgdGltZSBkZWxheSBiZXR3ZWVuIHR3byBjb25zZWN1dGl2ZSByZWFkcyBvZiB0aGUgRklGTyBpcworCSAqIHRoZSBzdW0gb2YgdGhlIHJlcGVhdCB0aW1lIGFuZCB0aGUgdGltZSB0YWtlbiBmb3Igc2Nhbm5pbmcKKwkgKiB0aGUgcm93cy4gVGhlcmUgaXMgYW4gYWRkaXRpb25hbCBkZWxheSBiZWZvcmUgdGhlIHJvdyBzY2FubmluZworCSAqIHN0YXJ0cy4gVGhlIHJlcG9sbCBkZWxheSBpcyBjb21wdXRlZCBpbiBtaWxsaXNlY29uZHMuCisJICovCisJZGVib3VuY2VfY250ID0gbWluKHBkYXRhLT5kZWJvdW5jZV9jbnQsIEtCQ19NQVhfREVCT1VOQ0VfQ05UKTsKKwlzY2FuX3RpbWVfcm93cyA9IChLQkNfUk9XX1NDQU5fVElNRSArIGRlYm91bmNlX2NudCkgKiBudW1fcm93czsKKwlrYmMtPnJlcG9sbF9kbHkgPSBLQkNfUk9XX1NDQU5fRExZICsgc2Nhbl90aW1lX3Jvd3MgKyBwZGF0YS0+cmVwZWF0X2NudDsKKwlrYmMtPnJlcG9sbF9kbHkgPSAoKGtiYy0+cmVwb2xsX2RseSAqIEtCQ19DWUNMRV9VU0VDKSArIDk5OSkgLyAxMDAwOworCisJaW5wdXRfZGV2LT5uYW1lID0gcGRldi0+bmFtZTsKKwlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKwlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWlucHV0X2Rldi0+b3BlbiA9IHRlZ3JhX2tiY19vcGVuOworCWlucHV0X2Rldi0+Y2xvc2UgPSB0ZWdyYV9rYmNfY2xvc2U7CisKKwlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIGtiYyk7CisKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKTsKKwlpbnB1dF9zZXRfY2FwYWJpbGl0eShpbnB1dF9kZXYsIEVWX01TQywgTVNDX1NDQU4pOworCisJaW5wdXRfZGV2LT5rZXljb2RlID0ga2JjLT5rZXljb2RlOworCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2Yoa2JjLT5rZXljb2RlWzBdKTsKKwlpbnB1dF9kZXYtPmtleWNvZGVtYXggPSBLQkNfTUFYX0tFWTsKKwlpZiAocGRhdGEtPnVzZV9mbl9tYXApCisJCWlucHV0X2Rldi0+a2V5Y29kZW1heCAqPSAyOworCisJa2JjLT51c2VfZm5fbWFwID0gcGRhdGEtPnVzZV9mbl9tYXA7CisJa2V5bWFwX2RhdGEgPSBwZGF0YS0+a2V5bWFwX2RhdGEgPzogJnRlZ3JhX2tiY19kZWZhdWx0X2tleW1hcF9kYXRhOworCW1hdHJpeF9rZXlwYWRfYnVpbGRfa2V5bWFwKGtleW1hcF9kYXRhLCBLQkNfUk9XX1NISUZULAorCQkJCSAgIGlucHV0X2Rldi0+a2V5Y29kZSwgaW5wdXRfZGV2LT5rZXliaXQpOworCisJZXJyID0gcmVxdWVzdF9pcnEoa2JjLT5pcnEsIHRlZ3JhX2tiY19pc3IsIElSUUZfVFJJR0dFUl9ISUdILAorCQkJICBwZGV2LT5uYW1lLCBrYmMpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3Qga2V5Ym9hcmQgSVJRXG4iKTsKKwkJZ290byBlcnJfcHV0X2NsazsKKwl9CisKKwlkaXNhYmxlX2lycShrYmMtPmlycSk7CisKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uoa2JjLT5pZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9mcmVlX2lycTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBrYmMpOworCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCBwZGF0YS0+d2FrZXVwKTsKKworCXJldHVybiAwOworCitlcnJfZnJlZV9pcnE6CisJZnJlZV9pcnEoa2JjLT5pcnEsIHBkZXYpOworZXJyX3B1dF9jbGs6CisJY2xrX3B1dChrYmMtPmNsayk7CitlcnJfaW91bm1hcDoKKwlpb3VubWFwKGtiYy0+bW1pbyk7CitlcnJfZnJlZV9tZW1fcmVnaW9uOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZXJyX2ZyZWVfbWVtOgorCWlucHV0X2ZyZWVfZGV2aWNlKGtiYy0+aWRldik7CisJa2ZyZWUoa2JjKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHRlZ3JhX2tiY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdGVncmFfa2JjICprYmMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCWZyZWVfaXJxKGtiYy0+aXJxLCBwZGV2KTsKKwljbGtfcHV0KGtiYy0+Y2xrKTsKKworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGtiYy0+aWRldik7CisJaW91bm1hcChrYmMtPm1taW8pOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisKKwlrZnJlZShrYmMpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGludCB0ZWdyYV9rYmNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCB0ZWdyYV9rYmMgKmtiYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKSB7CisJCXRlZ3JhX2tiY19zZXR1cF93YWtla2V5cyhrYmMsIHRydWUpOworCQllbmFibGVfaXJxX3dha2Uoa2JjLT5pcnEpOworCQkvKiBGb3JjZWZ1bGx5IGNsZWFyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzICovCisJCXdyaXRlbCgweDcsIGtiYy0+bW1pbyArIEtCQ19JTlRfMCk7CisJCW1zbGVlcCgzMCk7CisJfSBlbHNlIHsKKwkJbXV0ZXhfbG9jaygma2JjLT5pZGV2LT5tdXRleCk7CisJCWlmIChrYmMtPmlkZXYtPnVzZXJzKQorCQkJdGVncmFfa2JjX3N0b3Aoa2JjKTsKKwkJbXV0ZXhfdW5sb2NrKCZrYmMtPmlkZXYtPm11dGV4KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWdyYV9rYmNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHRlZ3JhX2tiYyAqa2JjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGVyciA9IDA7CisKKwlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpIHsKKwkJZGlzYWJsZV9pcnFfd2FrZShrYmMtPmlycSk7CisJCXRlZ3JhX2tiY19zZXR1cF93YWtla2V5cyhrYmMsIGZhbHNlKTsKKwl9IGVsc2UgeworCQltdXRleF9sb2NrKCZrYmMtPmlkZXYtPm11dGV4KTsKKwkJaWYgKGtiYy0+aWRldi0+dXNlcnMpCisJCQllcnIgPSB0ZWdyYV9rYmNfc3RhcnQoa2JjKTsKKwkJbXV0ZXhfdW5sb2NrKCZrYmMtPmlkZXYtPm11dGV4KTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorI2VuZGlmCisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyh0ZWdyYV9rYmNfcG1fb3BzLCB0ZWdyYV9rYmNfc3VzcGVuZCwgdGVncmFfa2JjX3Jlc3VtZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRlZ3JhX2tiY19kcml2ZXIgPSB7CisJLnByb2JlCQk9IHRlZ3JhX2tiY19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHRlZ3JhX2tiY19yZW1vdmUpLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gInRlZ3JhLWtiYyIsCisJCS5vd25lciAgPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gJnRlZ3JhX2tiY19wbV9vcHMsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0ZWdyYV9rYmNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0ZWdyYV9rYmNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHRlZ3JhX2tiY19leGl0KTsKKworc3RhdGljIGludCBfX2luaXQgdGVncmFfa2JjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0ZWdyYV9rYmNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHRlZ3JhX2tiY19pbml0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiUmFrZXNoIEl5ZXIgPHJpeWVyQG52aWRpYS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRlZ3JhIG1hdHJpeCBrZXlib2FyZCBjb250cm9sbGVyIGRyaXZlciIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp0ZWdyYS1rYmMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdG5ldHYxMDd4LWtleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90bmV0djEwN3gta2V5cGFkLmMKaW5kZXggYjRhODFlYi4uYzhmMDk3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90bmV0djEwN3gta2V5cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90bmV0djEwN3gta2V5cGFkLmMKQEAgLTE0LDYgKzE0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtMjE5LDkgKzIyMCw5IEBACiAJfQogCiAJa3AtPmNsayA9IGNsa19nZXQoZGV2LCBOVUxMKTsKLQlpZiAoIWtwLT5jbGspIHsKKwlpZiAoSVNfRVJSKGtwLT5jbGspKSB7CiAJCWRldl9lcnIoZGV2LCAiY2Fubm90IGNsYWltIGRldmljZSBjbG9ja1xuIik7Ci0JCWVycm9yID0gLUVJTlZBTDsKKwkJZXJyb3IgPSBQVFJfRVJSKGtwLT5jbGspOwogCQlnb3RvIGVycm9yX2NsazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9peHA0eHgtYmVlcGVyLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvaXhwNHh4LWJlZXBlci5jCmluZGV4IDlkZmQ2ZTUuLjFmMzgzMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9peHA0eHgtYmVlcGVyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2l4cDR4eC1iZWVwZXIuYwpAQCAtNjksMTEgKzY5LDcgQEAKIAl9CiAKIAlpZiAodmFsdWUgPiAyMCAmJiB2YWx1ZSA8IDMyNzY3KQotI2lmbmRlZiBGUkVRCi0JCWNvdW50ID0gKGl4cDR4eF9nZXRfYm9hcmRfdGlja19yYXRlKCkgLyAodmFsdWUgKiA0KSkgLSAxOwotI2Vsc2UKLQkJY291bnQgPSAoRlJFUSAvICh2YWx1ZSAqIDQpKSAtIDE7Ci0jZW5kaWYKKwkJY291bnQgPSAoSVhQNFhYX1RJTUVSX0ZSRVEgLyAodmFsdWUgKiA0KSkgLSAxOwogCiAJaXhwNHh4X3Nwa3JfY29udHJvbChwaW4sIGNvdW50KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3JvdGFyeV9lbmNvZGVyLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYwppbmRleCAxZjhlMDEwLi43ZTY0ZDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAKIAkvKiByZXF1ZXN0IHRoZSBJUlFzICovCiAJZXJyID0gcmVxdWVzdF9pcnEoZW5jb2Rlci0+aXJxX2EsICZyb3RhcnlfZW5jb2Rlcl9pcnEsCi0JCQkgIElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFIHwgSU9SRVNPVVJDRV9JUlFfTE9XRURHRSwKKwkJCSAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAogCQkJICBEUlZfTkFNRSwgZW5jb2Rlcik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBJUlEgJWRcbiIsCkBAIC0xODUsNyArMTg1LDcgQEAKIAl9CiAKIAllcnIgPSByZXF1ZXN0X2lycShlbmNvZGVyLT5pcnFfYiwgJnJvdGFyeV9lbmNvZGVyX2lycSwKLQkJCSAgSU9SRVNPVVJDRV9JUlFfSElHSEVER0UgfCBJT1JFU09VUkNFX0lSUV9MT1dFREdFLAorCQkJICBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCQkgIERSVl9OQU1FLCBlbmNvZGVyKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byByZXF1ZXN0IElSUSAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZwppbmRleCBiZjVmZDdmLi45YzFlNmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9LY29uZmlnCkBAIC0zOSw3ICszOSw3IEBACiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHNtb3VzZS4KIAogY29uZmlnIE1PVVNFX1BTMl9BTFBTCi0JYm9vbCAiQUxQUyBQUy8yIG1vdXNlIHByb3RvY29sIGV4dGVuc2lvbiIgaWYgRU1CRURERUQKKwlib29sICJBTFBTIFBTLzIgbW91c2UgcHJvdG9jb2wgZXh0ZW5zaW9uIiBpZiBFWFBFUlQKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uIE1PVVNFX1BTMgogCWhlbHAKQEAgLTQ5LDcgKzQ5LDcgQEAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBNT1VTRV9QUzJfTE9HSVBTMlBQCi0JYm9vbCAiTG9naXRlY2ggUFMvMisrIG1vdXNlIHByb3RvY29sIGV4dGVuc2lvbiIgaWYgRU1CRURERUQKKwlib29sICJMb2dpdGVjaCBQUy8yKysgbW91c2UgcHJvdG9jb2wgZXh0ZW5zaW9uIiBpZiBFWFBFUlQKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uIE1PVVNFX1BTMgogCWhlbHAKQEAgLTU5LDcgKzU5LDcgQEAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBNT1VTRV9QUzJfU1lOQVBUSUNTCi0JYm9vbCAiU3luYXB0aWNzIFBTLzIgbW91c2UgcHJvdG9jb2wgZXh0ZW5zaW9uIiBpZiBFTUJFRERFRAorCWJvb2wgIlN5bmFwdGljcyBQUy8yIG1vdXNlIHByb3RvY29sIGV4dGVuc2lvbiIgaWYgRVhQRVJUCiAJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiBNT1VTRV9QUzIKIAloZWxwCkBAIC02OSw3ICs2OSw3IEBACiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgTU9VU0VfUFMyX0xJRkVCT09LCi0JYm9vbCAiRnVqaXRzdSBMaWZlYm9vayBQUy8yIG1vdXNlIHByb3RvY29sIGV4dGVuc2lvbiIgaWYgRU1CRURERUQKKwlib29sICJGdWppdHN1IExpZmVib29rIFBTLzIgbW91c2UgcHJvdG9jb2wgZXh0ZW5zaW9uIiBpZiBFWFBFUlQKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uIE1PVVNFX1BTMiAmJiBYODYgJiYgRE1JCiAJaGVscApAQCAtNzksNyArNzksNyBAQAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIE1PVVNFX1BTMl9UUkFDS1BPSU5UCi0JYm9vbCAiSUJNIFRyYWNrcG9pbnQgUFMvMiBtb3VzZSBwcm90b2NvbCBleHRlbnNpb24iIGlmIEVNQkVEREVECisJYm9vbCAiSUJNIFRyYWNrcG9pbnQgUFMvMiBtb3VzZSBwcm90b2NvbCBleHRlbnNpb24iIGlmIEVYUEVSVAogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gTU9VU0VfUFMyCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKaW5kZXggZGEzOTJjMi4uYWExODZjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCkBAIC03NTUsMjMgKzc1NSwyNiBAQAogewogCXN0cnVjdCBzeW5hcHRpY3NfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CiAJc3RydWN0IHN5bmFwdGljc19kYXRhIG9sZF9wcml2ID0gKnByaXY7CisJaW50IHJldHJ5ID0gMDsKKwlpbnQgZXJyb3I7CiAKLQlwc21vdXNlX3Jlc2V0KHBzbW91c2UpOworCWRvIHsKKwkJcHNtb3VzZV9yZXNldChwc21vdXNlKTsKKwkJZXJyb3IgPSBzeW5hcHRpY3NfZGV0ZWN0KHBzbW91c2UsIDApOworCX0gd2hpbGUgKGVycm9yICYmICsrcmV0cnkgPCAzKTsKIAotCWlmIChzeW5hcHRpY3NfZGV0ZWN0KHBzbW91c2UsIDApKQorCWlmIChlcnJvcikKIAkJcmV0dXJuIC0xOwogCisJaWYgKHJldHJ5ID4gMSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlN5bmFwdGljcyByZWNvbm5lY3RlZCBhZnRlciAlZCB0cmllc1xuIiwKKwkJCXJldHJ5KTsKKwogCWlmIChzeW5hcHRpY3NfcXVlcnlfaGFyZHdhcmUocHNtb3VzZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcXVlcnkgU3luYXB0aWNzIGhhcmR3YXJlLlxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAob2xkX3ByaXYuaWRlbnRpdHkgIT0gcHJpdi0+aWRlbnRpdHkgfHwKLQkgICAgb2xkX3ByaXYubW9kZWxfaWQgIT0gcHJpdi0+bW9kZWxfaWQgfHwKLQkgICAgb2xkX3ByaXYuY2FwYWJpbGl0aWVzICE9IHByaXYtPmNhcGFiaWxpdGllcyB8fAotCSAgICBvbGRfcHJpdi5leHRfY2FwICE9IHByaXYtPmV4dF9jYXApCi0JCXJldHVybiAtMTsKLQogCWlmIChzeW5hcHRpY3Nfc2V0X2Fic29sdXRlX21vZGUocHNtb3VzZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTeW5hcHRpY3MgaGFyZHdhcmUuXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtNzgyLDYgKzc4NSwxOSBAQAogCQlyZXR1cm4gLTE7CiAJfQogCisJaWYgKG9sZF9wcml2LmlkZW50aXR5ICE9IHByaXYtPmlkZW50aXR5IHx8CisJICAgIG9sZF9wcml2Lm1vZGVsX2lkICE9IHByaXYtPm1vZGVsX2lkIHx8CisJICAgIG9sZF9wcml2LmNhcGFiaWxpdGllcyAhPSBwcml2LT5jYXBhYmlsaXRpZXMgfHwKKwkgICAgb2xkX3ByaXYuZXh0X2NhcCAhPSBwcml2LT5leHRfY2FwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3luYXB0aWNzIGhhcmR3YXJlIGFwcGVhcnMgdG8gYmUgZGlmZmVyZW50OiAiCisJCQkiaWQoJWxkLSVsZCksIG1vZGVsKCVsZC0lbGQpLCBjYXBzKCVseC0lbHgpLCBleHQoJWx4LSVseCkuXG4iLAorCQkJb2xkX3ByaXYuaWRlbnRpdHksIHByaXYtPmlkZW50aXR5LAorCQkJb2xkX3ByaXYubW9kZWxfaWQsIHByaXYtPm1vZGVsX2lkLAorCQkJb2xkX3ByaXYuY2FwYWJpbGl0aWVzLCBwcml2LT5jYXBhYmlsaXRpZXMsCisJCQlvbGRfcHJpdi5leHRfY2FwLCBwcml2LT5leHRfY2FwKTsKKwkJcmV0dXJuIC0xOworCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5oIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuaAppbmRleCAyNWU1ZDA0Li43NDUzOTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5oCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmgKQEAgLTUxLDYgKzUxLDI5IEBACiAjZGVmaW5lIFNZTl9FWFRfQ0FQX1JFUVVFU1RTKGMpCQkoKChjKSAmIDB4NzAwMDAwKSA+PiAyMCkKICNkZWZpbmUgU1lOX0NBUF9NVUxUSV9CVVRUT05fTk8oZWMpCSgoKGVjKSAmIDB4MDBmMDAwKSA+PiAxMikKICNkZWZpbmUgU1lOX0NBUF9QUk9EVUNUX0lEKGVjKQkJKCgoZWMpICYgMHhmZjAwMDApID4+IDE2KQorCisvKgorICogVGhlIGZvbGxvd2luZyBkZXNjcmliZXMgcmVzcG9uc2UgZm9yIHRoZSAweDBjIHF1ZXJ5LgorICoKKyAqIGJ5dGUJbWFzawluYW1lCQkJbWVhbmluZworICogLS0tLQktLS0tCS0tLS0tLS0JCQktLS0tLS0tLS0tLS0KKyAqIDEJMHgwMQlhZGp1c3RhYmxlIHRocmVzaG9sZAljYXBhY2l0aXZlIGJ1dHRvbiBzZW5zaXRpdml0eQorICoJCQkJCWNhbiBiZSBhZGp1c3RlZAorICogMQkweDAyCXJlcG9ydCBtYXgJCXF1ZXJ5IDB4MGQgZ2l2ZXMgbWF4IGNvb3JkIHJlcG9ydGVkCisgKiAxCTB4MDQJY2xlYXJwYWQJCXNlbnNvciBpcyBDbGVhclBhZCBwcm9kdWN0CisgKiAxCTB4MDgJYWR2YW5jZWQgZ2VzdHVyZQlub3QgcGFydGljdWxhcmx5IG1lYW5pbmdmdWwKKyAqIDEJMHgxMAljbGlja3BhZCBiaXQgMAkJMS1idXR0b24gQ2xpY2tQYWQKKyAqIDEJMHg2MAltdWx0aWZpbmdlciBtb2RlCWlkZW50aWZpZXMgZmlybXdhcmUgZmluZ2VyIGNvdW50aW5nCisgKgkJCQkJKG5vdCByZXBvcnRpbmchKSBhbGdvcml0aG0uCisgKgkJCQkJTm90IHBhcnRpY3VsYXJseSBtZWFuaW5nZnVsCisgKiAxCTB4ODAgICAgY292ZXJlZCBwYWQJCVcgY2xpcHBlZCB0byAxNCwgMTUgPT0gcGFkIG1vc3RseSBjb3ZlcmVkCisgKiAyCTB4MDEgICAgY2xpY2twYWQgYml0IDEJCTItYnV0dG9uIENsaWNrUGFkCisgKiAyCTB4MDIgICAgZGVsdXhlIExFRCBjb250cm9scwl0b3VjaHBhZCBzdXBwb3J0IExFRCBjb21tYW5kcworICoJCQkJCWFsYSBtdWx0aW1lZGlhIGNvbnRyb2wgYmFyCisgKiAyCTB4MDQJcmVkdWNlZCBmaWx0ZXJpbmcJZmlybXdhcmUgZG9lcyBsZXNzIGZpbHRlcmluZyBvbgorICoJCQkJCXBvc2l0aW9uIGRhdGEsIGRyaXZlciBzaG91bGQgd2F0Y2gKKyAqCQkJCQlmb3Igbm9pc2UuCisgKi8KICNkZWZpbmUgU1lOX0NBUF9DTElDS1BBRChleDBjKQkJKChleDBjKSAmIDB4MTAwMDAwKSAvKiAxLWJ1dHRvbiBDbGlja1BhZCAqLwogI2RlZmluZSBTWU5fQ0FQX0NMSUNLUEFEMkJUTihleDBjKQkoKGV4MGMpICYgMHgwMDAxMDApIC8qIDItYnV0dG9uIENsaWNrUGFkICovCiAjZGVmaW5lIFNZTl9DQVBfTUFYX0RJTUVOU0lPTlMoZXgwYykJKChleDBjKSAmIDB4MDIwMDAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnCmluZGV4IDMwN2VlZjcuLjU1ZjJjMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcKQEAgLTIsNyArMiw3IEBACiAjIElucHV0IGNvcmUgY29uZmlndXJhdGlvbgogIwogY29uZmlnIFNFUklPCi0JdHJpc3RhdGUgIlNlcmlhbCBJL08gc3VwcG9ydCIgaWYgRU1CRURERUQgfHwgIVg4NgorCXRyaXN0YXRlICJTZXJpYWwgSS9PIHN1cHBvcnQiIGlmIEVYUEVSVCB8fCAhWDg2CiAJZGVmYXVsdCB5CiAJaGVscAogCSAgU2F5IFllcyBoZXJlIGlmIHlvdSBoYXZlIGFueSBpbnB1dCBkZXZpY2UgdGhhdCB1c2VzIHNlcmlhbCBJL08gdG8KQEAgLTE5LDcgKzE5LDcgQEAKIGlmIFNFUklPCiAKIGNvbmZpZyBTRVJJT19JODA0MgotCXRyaXN0YXRlICJpODA0MiBQQyBLZXlib2FyZCBjb250cm9sbGVyIiBpZiBFTUJFRERFRCB8fCAhWDg2CisJdHJpc3RhdGUgImk4MDQyIFBDIEtleWJvYXJkIGNvbnRyb2xsZXIiIGlmIEVYUEVSVCB8fCAhWDg2CiAJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiAhUEFSSVNDICYmICghQVJNIHx8IEFSQ0hfU0hBUksgfHwgRk9PVEJSSURHRV9IT1NUKSAmJiBcCiAJCSAgICghU1VQRVJIIHx8IFNIX0NBWU1BTikgJiYgIU02OEsgJiYgIUJMQUNLRklOCkBAIC0xNjgsNyArMTY4LDcgQEAKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtYWNlcHMyLgogCiBjb25maWcgU0VSSU9fTElCUFMyCi0JdHJpc3RhdGUgIlBTLzIgZHJpdmVyIGxpYnJhcnkiIGlmIEVNQkVEREVECisJdHJpc3RhdGUgIlBTLzIgZHJpdmVyIGxpYnJhcnkiIGlmIEVYUEVSVAogCWRlcGVuZHMgb24gU0VSSU9fSTgwNDIgfHwgU0VSSU9fSTgwNDI9bgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBhIGRyaXZlciBmb3IgZGV2aWNlIGNvbm5lY3RlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9jdDgyYzcxMC5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9jdDgyYzcxMC5jCmluZGV4IDQ0OGM3NzIuLjg1MjgxNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vY3Q4MmM3MTAuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2N0ODJjNzEwLmMKQEAgLTExMSw5ICsxMTEsMTEgQEAKIHN0YXRpYyBpbnQgY3Q4MmM3MTBfb3BlbihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQogewogCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCWludCBlcnI7CiAKLQlpZiAocmVxdWVzdF9pcnEoQ1Q4MkM3MTBfSVJRLCBjdDgyYzcxMF9pbnRlcnJ1cHQsIDAsICJjdDgyYzcxMCIsIE5VTEwpKQotCQlyZXR1cm4gLTE7CisJZXJyID0gcmVxdWVzdF9pcnEoQ1Q4MkM3MTBfSVJRLCBjdDgyYzcxMF9pbnRlcnJ1cHQsIDAsICJjdDgyYzcxMCIsIE5VTEwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAlzdGF0dXMgPSBpbmJfcChDVDgyQzcxMF9TVEFUVVMpOwogCkBAIC0xMzEsNyArMTMzLDcgQEAKIAkJc3RhdHVzICY9IH4oQ1Q4MkM3MTBfRU5BQkxFIHwgQ1Q4MkM3MTBfSU5UU19PTik7CiAJCW91dGJfcChzdGF0dXMsIENUODJDNzEwX1NUQVRVUyk7CiAJCWZyZWVfaXJxKENUODJDNzEwX0lSUSwgTlVMTCk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwppbmRleCBkYjViMGJjLi5iYTcwMDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCkBAIC0xODgsNyArMTg4LDggQEAKIAlrZnJlZShldmVudCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNlcmlvX3JlbW92ZV9kdXBsaWNhdGVfZXZlbnRzKHN0cnVjdCBzZXJpb19ldmVudCAqZXZlbnQpCitzdGF0aWMgdm9pZCBzZXJpb19yZW1vdmVfZHVwbGljYXRlX2V2ZW50cyh2b2lkICpvYmplY3QsCisJCQkJCSAgZW51bSBzZXJpb19ldmVudF90eXBlIHR5cGUpCiB7CiAJc3RydWN0IHNlcmlvX2V2ZW50ICplLCAqbmV4dDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTk2LDEzICsxOTcsMTMgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2VyaW9fZXZlbnRfbG9jaywgZmxhZ3MpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG5leHQsICZzZXJpb19ldmVudF9saXN0LCBub2RlKSB7Ci0JCWlmIChldmVudC0+b2JqZWN0ID09IGUtPm9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IGUtPm9iamVjdCkgewogCQkJLyoKIAkJCSAqIElmIHRoaXMgZXZlbnQgaXMgb2YgZGlmZmVyZW50IHR5cGUgd2Ugc2hvdWxkIG5vdAogCQkJICogbG9vayBmdXJ0aGVyIC0gd2Ugb25seSBzdXBwcmVzcyBkdXBsaWNhdGUgZXZlbnRzCiAJCQkgKiB0aGF0IHdlcmUgc2VudCBiYWNrLXRvLWJhY2suCiAJCQkgKi8KLQkJCWlmIChldmVudC0+dHlwZSAhPSBlLT50eXBlKQorCQkJaWYgKHR5cGUgIT0gZS0+dHlwZSkKIAkJCQlicmVhazsKIAogCQkJbGlzdF9kZWxfaW5pdCgmZS0+bm9kZSk7CkBAIC0yNDUsNyArMjQ2LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJc2VyaW9fcmVtb3ZlX2R1cGxpY2F0ZV9ldmVudHMoZXZlbnQpOworCQlzZXJpb19yZW1vdmVfZHVwbGljYXRlX2V2ZW50cyhldmVudC0+b2JqZWN0LCBldmVudC0+dHlwZSk7CiAJCXNlcmlvX2ZyZWVfZXZlbnQoZXZlbnQpOwogCX0KIApAQCAtMjk4LDcgKzI5OSw3IEBACiAJZXZlbnQtPm93bmVyID0gb3duZXI7CiAKIAlsaXN0X2FkZF90YWlsKCZldmVudC0+bm9kZSwgJnNlcmlvX2V2ZW50X2xpc3QpOwotCXNjaGVkdWxlX3dvcmsoJnNlcmlvX2V2ZW50X3dvcmspOworCXF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsICZzZXJpb19ldmVudF93b3JrKTsKIAogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlcmlvX2V2ZW50X2xvY2ssIGZsYWdzKTsKQEAgLTQzNiwxMCArNDM3LDEyIEBACiAJfSBlbHNlIGlmICghc3RybmNtcChidWYsICJyZXNjYW4iLCBjb3VudCkpIHsKIAkJc2VyaW9fZGlzY29ubmVjdF9wb3J0KHNlcmlvKTsKIAkJc2VyaW9fZmluZF9kcml2ZXIoc2VyaW8pOworCQlzZXJpb19yZW1vdmVfZHVwbGljYXRlX2V2ZW50cyhzZXJpbywgU0VSSU9fUkVTQ0FOX1BPUlQpOwogCX0gZWxzZSBpZiAoKGRydiA9IGRyaXZlcl9maW5kKGJ1ZiwgJnNlcmlvX2J1cykpICE9IE5VTEwpIHsKIAkJc2VyaW9fZGlzY29ubmVjdF9wb3J0KHNlcmlvKTsKIAkJZXJyb3IgPSBzZXJpb19iaW5kX2RyaXZlcihzZXJpbywgdG9fc2VyaW9fZHJpdmVyKGRydikpOwogCQlwdXRfZHJpdmVyKGRydik7CisJCXNlcmlvX3JlbW92ZV9kdXBsaWNhdGVfZXZlbnRzKHNlcmlvLCBTRVJJT19SRVNDQU5fUE9SVCk7CiAJfSBlbHNlIHsKIAkJZXJyb3IgPSAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMKaW5kZXggNmUzNjJkZS4uODc1NWY1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMKQEAgLTExNiwxNCArMTE2LDE1IEBACiAKIC8qCiAgKiBzZXJwb3J0X2xkaXNjX3JlY2VpdmUoKSBpcyBjYWxsZWQgYnkgdGhlIGxvdyBsZXZlbCB0dHkgZHJpdmVyIHdoZW4gY2hhcmFjdGVycwotICogYXJlIHJlYWR5IGZvciB1cy4gV2UgZm9yd2FyZCB0aGUgY2hhcmFjdGVycywgb25lIGJ5IG9uZSB0byB0aGUgJ2ludGVycnVwdCcKLSAqIHJvdXRpbmUuCisgKiBhcmUgcmVhZHkgZm9yIHVzLiBXZSBmb3J3YXJkIHRoZSBjaGFyYWN0ZXJzIGFuZCBmbGFncywgb25lIGJ5IG9uZSB0byB0aGUKKyAqICdpbnRlcnJ1cHQnIHJvdXRpbmUuCiAgKi8KIAogc3RhdGljIHZvaWQgc2VycG9ydF9sZGlzY19yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLCBjaGFyICpmcCwgaW50IGNvdW50KQogewogCXN0cnVjdCBzZXJwb3J0ICpzZXJwb3J0ID0gKHN0cnVjdCBzZXJwb3J0KikgdHR5LT5kaXNjX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgY2hfZmxhZ3M7CiAJaW50IGk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2VycG9ydC0+bG9jaywgZmxhZ3MpOwpAQCAtMTMxLDggKzEzMiwyMyBAQAogCWlmICghdGVzdF9iaXQoU0VSUE9SVF9BQ1RJVkUsICZzZXJwb3J0LT5mbGFncykpCiAJCWdvdG8gb3V0OwogCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0JCXNlcmlvX2ludGVycnVwdChzZXJwb3J0LT5zZXJpbywgY3BbaV0sIDApOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXN3aXRjaCAoZnBbaV0pIHsKKwkJY2FzZSBUVFlfRlJBTUU6CisJCQljaF9mbGFncyA9IFNFUklPX0ZSQU1FOworCQkJYnJlYWs7CisKKwkJY2FzZSBUVFlfUEFSSVRZOgorCQkJY2hfZmxhZ3MgPSBTRVJJT19QQVJJVFk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJY2hfZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlzZXJpb19pbnRlcnJ1cHQoc2VycG9ydC0+c2VyaW8sIGNwW2ldLCBjaF9mbGFncyk7CisJfQogCiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VycG9ydC0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zcGFyc2Uta2V5bWFwLmMgYi9kcml2ZXJzL2lucHV0L3NwYXJzZS1rZXltYXAuYwppbmRleCBhMjlhNzgxMi4uNzcyOWU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zcGFyc2Uta2V5bWFwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zcGFyc2Uta2V5bWFwLmMKQEAgLTIwMSw2ICsyMDEsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBLRV9TVzoKKwkJY2FzZSBLRV9WU1c6CiAJCQlfX3NldF9iaXQoRVZfU1csIGRldi0+ZXZiaXQpOwogCQkJX19zZXRfYml0KGVudHJ5LT5zdy5jb2RlLCBkZXYtPnN3Yml0KTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYwppbmRleCBmYzM4MTQ5Li5jZjhmYjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYwpAQCAtNTE5LDcgKzUxOSw3IEBACiAJLyogUmV0cmlldmUgdGhlIHBoeXNpY2FsIGFuZCBsb2dpY2FsIHNpemUgZm9yIE9FTSBkZXZpY2VzICovCiAJZXJyb3IgPSB3YWNvbV9yZXRyaWV2ZV9oaWRfZGVzY3JpcHRvcihpbnRmLCBmZWF0dXJlcyk7CiAJaWYgKGVycm9yKQotCQlnb3RvIGZhaWwyOworCQlnb3RvIGZhaWwzOwogCiAJd2Fjb21fc2V0dXBfZGV2aWNlX3F1aXJrcyhmZWF0dXJlcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmMKaW5kZXggNTE4NzgyOS4uMzY3ZmE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmMKQEAgLTExMDEsNiArMTEwMSwxMyBAQAogCX0KIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCB3YWNvbV9jYWxjdWxhdGVfdG91Y2hfcmVzKHVuc2lnbmVkIGludCBsb2dpY2FsX21heCwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IHBoeXNpY2FsX21heCkKK3sKKyAgICAgICAvKiBUb3VjaCBwaHlzaWNhbCBkaW1lbnNpb25zIGFyZSBpbiAxMDB0aCBvZiBtbSAqLworICAgICAgIHJldHVybiAobG9naWNhbF9tYXggKiAxMDApIC8gcGh5c2ljYWxfbWF4OworfQorCiB2b2lkIHdhY29tX3NldHVwX2lucHV0X2NhcGFiaWxpdGllcyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsCiAJCQkJICAgIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYykKIHsKQEAgLTEyMjgsOCArMTIzNSwxMiBAQAogCWNhc2UgVEFCTEVUUEM6CiAJCWlmIChmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfRE9VQkxFVEFQIHx8CiAJCSAgICBmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfVFJJUExFVEFQKSB7Ci0JCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19SWCwgMCwgZmVhdHVyZXMtPnhfcGh5LCAwLCAwKTsKLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1JZLCAwLCBmZWF0dXJlcy0+eV9waHksIDAsIDApOworCQkJaW5wdXRfYWJzX3NldF9yZXMoaW5wdXRfZGV2LCBBQlNfWCwKKwkJCQl3YWNvbV9jYWxjdWxhdGVfdG91Y2hfcmVzKGZlYXR1cmVzLT54X21heCwKKwkJCQkJCQlmZWF0dXJlcy0+eF9waHkpKTsKKwkJCWlucHV0X2Fic19zZXRfcmVzKGlucHV0X2RldiwgQUJTX1ksCisJCQkJd2Fjb21fY2FsY3VsYXRlX3RvdWNoX3JlcyhmZWF0dXJlcy0+eV9tYXgsCisJCQkJCQkJZmVhdHVyZXMtPnlfcGh5KSk7CiAJCQlfX3NldF9iaXQoQlROX1RPT0xfRE9VQkxFVEFQLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAJCX0KIApAQCAtMTI3Miw2ICsxMjgzLDEyIEBACiAJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19NVF9QUkVTU1VSRSwKIAkJCQkJICAgICAwLCBmZWF0dXJlcy0+cHJlc3N1cmVfbWF4LAogCQkJCQkgICAgIGZlYXR1cmVzLT5wcmVzc3VyZV9mdXp6LCAwKTsKKwkJCWlucHV0X2Fic19zZXRfcmVzKGlucHV0X2RldiwgQUJTX1gsCisJCQkJd2Fjb21fY2FsY3VsYXRlX3RvdWNoX3JlcyhmZWF0dXJlcy0+eF9tYXgsCisJCQkJCQkJZmVhdHVyZXMtPnhfcGh5KSk7CisJCQlpbnB1dF9hYnNfc2V0X3JlcyhpbnB1dF9kZXYsIEFCU19ZLAorCQkJCXdhY29tX2NhbGN1bGF0ZV90b3VjaF9yZXMoZmVhdHVyZXMtPnlfbWF4LAorCQkJCQkJCWZlYXR1cmVzLT55X3BoeSkpOwogCQl9IGVsc2UgaWYgKGZlYXR1cmVzLT5kZXZpY2VfdHlwZSA9PSBCVE5fVE9PTF9QRU4pIHsKIAkJCV9fc2V0X2JpdChCVE5fVE9PTF9SVUJCRVIsIGlucHV0X2Rldi0+a2V5Yml0KTsKIAkJCV9fc2V0X2JpdChCVE5fVE9PTF9QRU4sIGlucHV0X2Rldi0+a2V5Yml0KTsKQEAgLTE0MjYsNiArMTQ0MywxMCBAQAogCXsgIldhY29tIEJhbWJvbyAyRkcgNng4IiwgV0FDT01fUEtHTEVOX0JCRlVOLCAgICAgMjE2NDgsIDEzNTMwLCAxMDIzLCA2MywgQkFNQk9PX1BUIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4RDQgPQogCXsgIldhY29tIEJhbWJvbyBQZW4iLCAgICAgV0FDT01fUEtHTEVOX0JCRlVOLCAgICAgMTQ3MjAsICA5MjAwLCAgMjU1LCA2MywgQkFNQk9PX1BUIH07CitzdGF0aWMgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4RDYgPQorCXsgIldhY29tIEJhbWJvb1BUIDJGRyA0eDUiLCBXQUNPTV9QS0dMRU5fQkJGVU4sICAgMTQ3MjAsICA5MjAwLCAxMDIzLCA2MywgQkFNQk9PX1BUIH07CitzdGF0aWMgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4RDcgPQorCXsgIldhY29tIEJhbWJvb1BUIDJGRyBTbWFsbCIsIFdBQ09NX1BLR0xFTl9CQkZVTiwgMTQ3MjAsICA5MjAwLCAxMDIzLCA2MywgQkFNQk9PX1BUIH07CiBzdGF0aWMgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4RDggPQogCXsgIldhY29tIEJhbWJvbyBDb21pYyAyRkciLCBXQUNPTV9QS0dMRU5fQkJGVU4sICAgMjE2NDgsIDEzNTMwLCAxMDIzLCA2MywgQkFNQk9PX1BUIH07CiBzdGF0aWMgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4REEgPQpAQCAtMTUwNyw2ICsxNTI4LDggQEAKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHhEMikgfSwKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHhEMykgfSwKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHhENCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhENikgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhENykgfSwKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHhEOCkgfSwKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHhEQSkgfSwKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHhEQikgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZwppbmRleCAwYzlmNGIxLi42MTgzNGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCkBAIC01NDAsNjIgKzU0MCw2MiBAQAogCiBjb25maWcgVE9VQ0hTQ1JFRU5fVVNCX0VHQUxBWAogCWRlZmF1bHQgeQotCWJvb2wgImVHYWxheCwgZVR1cmJvVG91Y2ggQ1QtNDEwLzUxMC83MDAgZGV2aWNlIHN1cHBvcnQiIGlmIEVNQkVEREVECisJYm9vbCAiZUdhbGF4LCBlVHVyYm9Ub3VjaCBDVC00MTAvNTEwLzcwMCBkZXZpY2Ugc3VwcG9ydCIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBUT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFCiAKIGNvbmZpZyBUT1VDSFNDUkVFTl9VU0JfUEFOSklUCiAJZGVmYXVsdCB5Ci0JYm9vbCAiUGFuSml0IGRldmljZSBzdXBwb3J0IiBpZiBFTUJFRERFRAorCWJvb2wgIlBhbkppdCBkZXZpY2Ugc3VwcG9ydCIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBUT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFCiAKIGNvbmZpZyBUT1VDSFNDUkVFTl9VU0JfM00KIAlkZWZhdWx0IHkKLQlib29sICIzTS9NaWNyb3RvdWNoIEVYIElJIHNlcmllcyBkZXZpY2Ugc3VwcG9ydCIgaWYgRU1CRURERUQKKwlib29sICIzTS9NaWNyb3RvdWNoIEVYIElJIHNlcmllcyBkZXZpY2Ugc3VwcG9ydCIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBUT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFCiAKIGNvbmZpZyBUT1VDSFNDUkVFTl9VU0JfSVRNCiAJZGVmYXVsdCB5Ci0JYm9vbCAiSVRNIGRldmljZSBzdXBwb3J0IiBpZiBFTUJFRERFRAorCWJvb2wgIklUTSBkZXZpY2Ugc3VwcG9ydCIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBUT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFCiAKIGNvbmZpZyBUT1VDSFNDUkVFTl9VU0JfRVRVUkJPCiAJZGVmYXVsdCB5Ci0JYm9vbCAiZVR1cmJvVG91Y2ggKG5vbi1lR2FsYXggY29tcGF0aWJsZSkgZGV2aWNlIHN1cHBvcnQiIGlmIEVNQkVEREVECisJYm9vbCAiZVR1cmJvVG91Y2ggKG5vbi1lR2FsYXggY29tcGF0aWJsZSkgZGV2aWNlIHN1cHBvcnQiIGlmIEVYUEVSVAogCWRlcGVuZHMgb24gVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURQogCiBjb25maWcgVE9VQ0hTQ1JFRU5fVVNCX0dVTlpFCiAJZGVmYXVsdCB5Ci0JYm9vbCAiR3VuemUgQUhMNjEgZGV2aWNlIHN1cHBvcnQiIGlmIEVNQkVEREVECisJYm9vbCAiR3VuemUgQUhMNjEgZGV2aWNlIHN1cHBvcnQiIGlmIEVYUEVSVAogCWRlcGVuZHMgb24gVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURQogCiBjb25maWcgVE9VQ0hTQ1JFRU5fVVNCX0RNQ19UU0MxMAogCWRlZmF1bHQgeQotCWJvb2wgIkRNQyBUU0MtMTAvMjUgZGV2aWNlIHN1cHBvcnQiIGlmIEVNQkVEREVECisJYm9vbCAiRE1DIFRTQy0xMC8yNSBkZXZpY2Ugc3VwcG9ydCIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBUT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFCiAKIGNvbmZpZyBUT1VDSFNDUkVFTl9VU0JfSVJUT1VDSAogCWRlZmF1bHQgeQotCWJvb2wgIklSVE9VQ0hTWVNURU1TL1VOSVRPUCBkZXZpY2Ugc3VwcG9ydCIgaWYgRU1CRURERUQKKwlib29sICJJUlRPVUNIU1lTVEVNUy9VTklUT1AgZGV2aWNlIHN1cHBvcnQiIGlmIEVYUEVSVAogCWRlcGVuZHMgb24gVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURQogCiBjb25maWcgVE9VQ0hTQ1JFRU5fVVNCX0lERUFMVEVLCiAJZGVmYXVsdCB5Ci0JYm9vbCAiSWRlYWxURUsgVVJUQzEwMDAgZGV2aWNlIHN1cHBvcnQiIGlmIEVNQkVEREVECisJYm9vbCAiSWRlYWxURUsgVVJUQzEwMDAgZGV2aWNlIHN1cHBvcnQiIGlmIEVYUEVSVAogCWRlcGVuZHMgb24gVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURQogCiBjb25maWcgVE9VQ0hTQ1JFRU5fVVNCX0dFTkVSQUxfVE9VQ0gKIAlkZWZhdWx0IHkKLQlib29sICJHZW5lcmFsVG91Y2ggVG91Y2hzY3JlZW4gZGV2aWNlIHN1cHBvcnQiIGlmIEVNQkVEREVECisJYm9vbCAiR2VuZXJhbFRvdWNoIFRvdWNoc2NyZWVuIGRldmljZSBzdXBwb3J0IiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIFRPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUKIAogY29uZmlnIFRPVUNIU0NSRUVOX1VTQl9HT1RPUAogCWRlZmF1bHQgeQotCWJvb2wgIkdvVG9wIFN1cGVyX1EyL0dvZ29QZW4vUGVuUG93ZXIgdGFibGV0IGRldmljZSBzdXBwb3J0IiBpZiBFTUJFRERFRAorCWJvb2wgIkdvVG9wIFN1cGVyX1EyL0dvZ29QZW4vUGVuUG93ZXIgdGFibGV0IGRldmljZSBzdXBwb3J0IiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIFRPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUKIAogY29uZmlnIFRPVUNIU0NSRUVOX1VTQl9KQVNURUMKIAlkZWZhdWx0IHkKLQlib29sICJKQVNURUMvRGlnaVRlY2ggRFRSLTAyVSBVU0IgdG91Y2ggY29udHJvbGxlciBkZXZpY2Ugc3VwcG9ydCIgaWYgRU1CRURERUQKKwlib29sICJKQVNURUMvRGlnaVRlY2ggRFRSLTAyVSBVU0IgdG91Y2ggY29udHJvbGxlciBkZXZpY2Ugc3VwcG9ydCIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBUT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFCiAKIGNvbmZpZyBUT1VDSFNDUkVFTl9VU0JfRTJJCkBAIC02MDUsMTcgKzYwNSwxNyBAQAogCiBjb25maWcgVE9VQ0hTQ1JFRU5fVVNCX1pZVFJPTklDCiAJZGVmYXVsdCB5Ci0JYm9vbCAiWnl0cm9uaWMgY29udHJvbGxlciIgaWYgRU1CRURERUQKKwlib29sICJaeXRyb25pYyBjb250cm9sbGVyIiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIFRPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUKIAogY29uZmlnIFRPVUNIU0NSRUVOX1VTQl9FVFRfVEM0NVVTQgogCWRlZmF1bHQgeQotCWJvb2wgIkVUJlQgVVNCIHNlcmllcyBUQzRVTS9UQzVVSCB0b3VjaHNjcmVlbiBjb250cm9sbGVyIHN1cHBvcnQiIGlmIEVNQkVEREVECisJYm9vbCAiRVQmVCBVU0Igc2VyaWVzIFRDNFVNL1RDNVVIIHRvdWNoc2NyZWVuIGNvbnRyb2xsZXIgc3VwcG9ydCIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBUT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFCiAKIGNvbmZpZyBUT1VDSFNDUkVFTl9VU0JfTkVYSU8KIAlkZWZhdWx0IHkKLQlib29sICJORVhJTy9pTmV4aW8gZGV2aWNlIHN1cHBvcnQiIGlmIEVNQkVEREVECisJYm9vbCAiTkVYSU8vaU5leGlvIGRldmljZSBzdXBwb3J0IiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIFRPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUKIAogY29uZmlnIFRPVUNIU0NSRUVOX1RPVUNISVQyMTMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKaW5kZXggMTRlYTU0Yi4uNGJmMjMxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKQEAgLTk0MSwyOCArOTQxLDI5IEBACiAJc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCBlcnI7CiAKLQkvKiBSRVZJU0lUIHdoZW4gdGhlIGlycSBjYW4gYmUgdHJpZ2dlcmVkIGFjdGl2ZS1sb3csIG9yIGlmIGZvciBzb21lCisJLyoKKwkgKiBSRVZJU0lUIHdoZW4gdGhlIGlycSBjYW4gYmUgdHJpZ2dlcmVkIGFjdGl2ZS1sb3csIG9yIGlmIGZvciBzb21lCiAJICogcmVhc29uIHRoZSB0b3VjaHNjcmVlbiBpc24ndCBob29rZWQgdXAsIHdlIGRvbid0IG5lZWQgdG8gYWNjZXNzCiAJICogdGhlIHBlbmRvd24gc3RhdGUuCiAJICovCi0JaWYgKCFwZGF0YS0+Z2V0X3BlbmRvd25fc3RhdGUgJiYgIWdwaW9faXNfdmFsaWQocGRhdGEtPmdwaW9fcGVuZG93bikpIHsKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJubyBnZXRfcGVuZG93bl9zdGF0ZSBub3IgZ3Bpb19wZW5kb3duP1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAogCWlmIChwZGF0YS0+Z2V0X3BlbmRvd25fc3RhdGUpIHsKIAkJdHMtPmdldF9wZW5kb3duX3N0YXRlID0gcGRhdGEtPmdldF9wZW5kb3duX3N0YXRlOwotCQlyZXR1cm4gMDsKLQl9CisJfSBlbHNlIGlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvX3BlbmRvd24pKSB7CiAKLQllcnIgPSBncGlvX3JlcXVlc3QocGRhdGEtPmdwaW9fcGVuZG93biwgImFkczc4NDZfcGVuZG93biIpOwotCWlmIChlcnIpIHsKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBwZW5kb3duIEdQSU8lZFxuIiwKLQkJCXBkYXRhLT5ncGlvX3BlbmRvd24pOwotCQlyZXR1cm4gZXJyOwotCX0KKwkJZXJyID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5ncGlvX3BlbmRvd24sICJhZHM3ODQ2X3BlbmRvd24iKTsKKwkJaWYgKGVycikgeworCQkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBwZW5kb3duIEdQSU8lZFxuIiwKKwkJCQlwZGF0YS0+Z3Bpb19wZW5kb3duKTsKKwkJCXJldHVybiBlcnI7CisJCX0KIAotCXRzLT5ncGlvX3BlbmRvd24gPSBwZGF0YS0+Z3Bpb19wZW5kb3duOworCQl0cy0+Z3Bpb19wZW5kb3duID0gcGRhdGEtPmdwaW9fcGVuZG93bjsKKworCX0gZWxzZSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAibm8gZ2V0X3BlbmRvd25fc3RhdGUgbm9yIGdwaW9fcGVuZG93bj9cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNTMsNyArMTM1NCw3IEBACiAgZXJyX3B1dF9yZWd1bGF0b3I6CiAJcmVndWxhdG9yX3B1dCh0cy0+cmVnKTsKICBlcnJfZnJlZV9ncGlvOgotCWlmICh0cy0+Z3Bpb19wZW5kb3duICE9IC0xKQorCWlmICghdHMtPmdldF9wZW5kb3duX3N0YXRlKQogCQlncGlvX2ZyZWUodHMtPmdwaW9fcGVuZG93bik7CiAgZXJyX2NsZWFudXBfZmlsdGVyOgogCWlmICh0cy0+ZmlsdGVyX2NsZWFudXApCkBAIC0xMzgzLDggKzEzODQsMTMgQEAKIAlyZWd1bGF0b3JfZGlzYWJsZSh0cy0+cmVnKTsKIAlyZWd1bGF0b3JfcHV0KHRzLT5yZWcpOwogCi0JaWYgKHRzLT5ncGlvX3BlbmRvd24gIT0gLTEpCisJaWYgKCF0cy0+Z2V0X3BlbmRvd25fc3RhdGUpIHsKKwkJLyoKKwkJICogSWYgd2UgYXJlIG5vdCB1c2luZyBzcGVjaWFsaXplZCBwZW5kb3duIG1ldGhvZCB3ZSBtdXN0CisJCSAqIGhhdmUgYmVlbiByZWx5aW5nIG9uIGdwaW8gd2Ugc2V0IHVwIG91cnNlbHZlcy4KKwkJICovCiAJCWdwaW9fZnJlZSh0cy0+Z3Bpb19wZW5kb3duKTsKKwl9CiAKIAlpZiAodHMtPmZpbHRlcl9jbGVhbnVwKQogCQl0cy0+ZmlsdGVyX2NsZWFudXAodHMtPmZpbHRlcl9kYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYnUyMTAxM190cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9idTIxMDEzX3RzLmMKaW5kZXggZjdmYTllZi4uMTUwN2NlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9idTIxMDEzX3RzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9idTIxMDEzX3RzLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L2J1MjEwMTMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAKICNkZWZpbmUgUEVOX0RPV05fSU5UUgkwCiAjZGVmaW5lIE1BWF9GSU5HRVJTCTIKQEAgLTEzOSw2ICsxNDAsNyBAQAogICogQGNoaXA6IHBvaW50ZXIgdG8gdGhlIHRvdWNoIHBhbmVsIGNvbnRyb2xsZXIKICAqIEBpbl9kZXY6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGRldmljZSBzdHJ1Y3R1cmUKICAqIEBpbnRyX3BpbjogaW50ZXJydXB0IHBpbiB2YWx1ZQorICogQHJlZ3VsYXRvcjogcG9pbnRlciB0byB0aGUgUmVndWxhdG9yIHVzZWQgZm9yIHRvdWNoIHNjcmVlbgogICoKICAqIFRvdWNoIHBhbmVsIGRldmljZSBkYXRhIHN0cnVjdHVyZQogICovCkBAIC0xNDksNiArMTUxLDcgQEAKIAljb25zdCBzdHJ1Y3QgYnUyMTAxM19wbGF0Zm9ybV9kZXZpY2UgKmNoaXA7CiAJc3RydWN0IGlucHV0X2RldiAqaW5fZGV2OwogCXVuc2lnbmVkIGludCBpbnRyX3BpbjsKKwlzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3I7CiB9OwogCiAvKioKQEAgLTQ1Niw2ICs0NTksMjAgQEAKIAlidTIxMDEzX2RhdGEtPmluX2RldiA9IGluX2RldjsKIAlidTIxMDEzX2RhdGEtPmNoaXAgPSBwZGF0YTsKIAlidTIxMDEzX2RhdGEtPmNsaWVudCA9IGNsaWVudDsKKworCWJ1MjEwMTNfZGF0YS0+cmVndWxhdG9yID0gcmVndWxhdG9yX2dldCgmY2xpZW50LT5kZXYsICJWLVRPVUNIIik7CisJaWYgKElTX0VSUihidTIxMDEzX2RhdGEtPnJlZ3VsYXRvcikpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJyZWd1bGF0b3JfZ2V0IGZhaWxlZFxuIik7CisJCWVycm9yID0gUFRSX0VSUihidTIxMDEzX2RhdGEtPnJlZ3VsYXRvcik7CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KKworCWVycm9yID0gcmVndWxhdG9yX2VuYWJsZShidTIxMDEzX2RhdGEtPnJlZ3VsYXRvcik7CisJaWYgKGVycm9yIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgInJlZ3VsYXRvciBlbmFibGUgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfcHV0X3JlZ3VsYXRvcjsKKwl9CisKIAlidTIxMDEzX2RhdGEtPnRvdWNoX3N0b3BwZWQgPSBmYWxzZTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZidTIxMDEzX2RhdGEtPndhaXQpOwogCkBAIC00NjQsNyArNDgxLDcgQEAKIAkJZXJyb3IgPSBwZGF0YS0+Y3NfZW4ocGRhdGEtPmNzX3Bpbik7CiAJCWlmIChlcnJvciA8IDApIHsKIAkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiY2hpcCBpbml0IGZhaWxlZFxuIik7Ci0JCQlnb3RvIGVycl9mcmVlX21lbTsKKwkJCWdvdG8gZXJyX2Rpc2FibGVfcmVndWxhdG9yOwogCQl9CiAJfQogCkBAIC00ODUsOSArNTAyLDkgQEAKIAlfX3NldF9iaXQoRVZfQUJTLCBpbl9kZXYtPmV2Yml0KTsKIAogCWlucHV0X3NldF9hYnNfcGFyYW1zKGluX2RldiwgQUJTX01UX1BPU0lUSU9OX1gsIDAsCi0JCQkJCQlwZGF0YS0+eF9tYXhfcmVzLCAwLCAwKTsKKwkJCQkJCXBkYXRhLT50b3VjaF94X21heCwgMCwgMCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5fZGV2LCBBQlNfTVRfUE9TSVRJT05fWSwgMCwKLQkJCQkJCXBkYXRhLT55X21heF9yZXMsIDAsIDApOworCQkJCQkJcGRhdGEtPnRvdWNoX3lfbWF4LCAwLCAwKTsKIAlpbnB1dF9zZXRfZHJ2ZGF0YShpbl9kZXYsIGJ1MjEwMTNfZGF0YSk7CiAKIAllcnJvciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHBkYXRhLT5pcnEsIE5VTEwsIGJ1MjEwMTNfZ3Bpb19pcnEsCkBAIC01MTMsNiArNTMwLDEwIEBACiAJYnUyMTAxM19mcmVlX2lycShidTIxMDEzX2RhdGEpOwogZXJyX2NzX2Rpc2FibGU6CiAJcGRhdGEtPmNzX2RpcyhwZGF0YS0+Y3NfcGluKTsKK2Vycl9kaXNhYmxlX3JlZ3VsYXRvcjoKKwlyZWd1bGF0b3JfZGlzYWJsZShidTIxMDEzX2RhdGEtPnJlZ3VsYXRvcik7CitlcnJfcHV0X3JlZ3VsYXRvcjoKKwlyZWd1bGF0b3JfcHV0KGJ1MjEwMTNfZGF0YS0+cmVndWxhdG9yKTsKIGVycl9mcmVlX21lbToKIAlpbnB1dF9mcmVlX2RldmljZShpbl9kZXYpOwogCWtmcmVlKGJ1MjEwMTNfZGF0YSk7CkBAIC01MzUsNiArNTU2LDEwIEBACiAJYnUyMTAxM19kYXRhLT5jaGlwLT5jc19kaXMoYnUyMTAxM19kYXRhLT5jaGlwLT5jc19waW4pOwogCiAJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoYnUyMTAxM19kYXRhLT5pbl9kZXYpOworCisJcmVndWxhdG9yX2Rpc2FibGUoYnUyMTAxM19kYXRhLT5yZWd1bGF0b3IpOworCXJlZ3VsYXRvcl9wdXQoYnUyMTAxM19kYXRhLT5yZWd1bGF0b3IpOworCiAJa2ZyZWUoYnUyMTAxM19kYXRhKTsKIAogCWRldmljZV9pbml0X3dha2V1cCgmY2xpZW50LT5kZXYsIGZhbHNlKTsKQEAgLTU2MSw2ICs1ODYsOCBAQAogCWVsc2UKIAkJZGlzYWJsZV9pcnEoYnUyMTAxM19kYXRhLT5jaGlwLT5pcnEpOwogCisJcmVndWxhdG9yX2Rpc2FibGUoYnUyMTAxM19kYXRhLT5yZWd1bGF0b3IpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU3Nyw2ICs2MDQsMTIgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gYnUyMTAxM19kYXRhLT5jbGllbnQ7CiAJaW50IHJldHZhbDsKIAorCXJldHZhbCA9IHJlZ3VsYXRvcl9lbmFibGUoYnUyMTAxM19kYXRhLT5yZWd1bGF0b3IpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiYnUyMTAxMyByZWd1bGF0b3IgZW5hYmxlIGZhaWxlZFxuIik7CisJCXJldHVybiByZXR2YWw7CisJfQorCiAJcmV0dmFsID0gYnUyMTAxM19pbml0X2NoaXAoYnUyMTAxM19kYXRhKTsKIAlpZiAocmV0dmFsIDwgMCkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImJ1MjEwMTMgY29udHJvbGxlciBjb25maWcgZmFpbGVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdG5ldHYxMDd4LXRzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RuZXR2MTA3eC10cy5jCmluZGV4IGNmMWRiYTIuLjIyYTM0MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdG5ldHYxMDd4LXRzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi90bmV0djEwN3gtdHMuYwpAQCAtMTQsNiArMTQsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC0yODksOSArMjkwLDkgQEAKIAl9CiAKIAl0cy0+Y2xrID0gY2xrX2dldChkZXYsIE5VTEwpOwotCWlmICghdHMtPmNsaykgeworCWlmIChJU19FUlIodHMtPmNsaykpIHsKIAkJZGV2X2VycihkZXYsICJjYW5ub3QgY2xhaW0gZGV2aWNlIGNsb2NrXG4iKTsKLQkJZXJyb3IgPSAtRUlOVkFMOworCQllcnJvciA9IFBUUl9FUlIodHMtPmNsayk7CiAJCWdvdG8gZXJyb3JfY2xrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93YWNvbV93ODAwMS5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93YWNvbV93ODAwMS5jCmluZGV4IDVjYjg0NDkuLmMxNDQxMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd2Fjb21fdzgwMDEuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dhY29tX3c4MDAxLmMKQEAgLTUxLDYgKzUxLDEwIEBACiAjZGVmaW5lIFc4MDAxX1BLVExFTl9UUENDVEwJMTEJLyogY29udHJvbCBwYWNrZXQgKi8KICNkZWZpbmUgVzgwMDFfUEtUTEVOX1RPVUNIMkZHCTEzCiAKKy8qIHJlc29sdXRpb24gaW4gcG9pbnRzL21tICovCisjZGVmaW5lIFc4MDAxX1BFTl9SRVNPTFVUSU9OICAgIDEwMAorI2RlZmluZSBXODAwMV9UT1VDSF9SRVNPTFVUSU9OICAxMAorCiBzdHJ1Y3QgdzgwMDFfY29vcmQgewogCXU4IHJkeTsKIAl1OCB0c3c7CkBAIC0xOTgsNyArMjAyLDcgQEAKIAkJcXVlcnktPnkgPSAxMDI0OwogCQlpZiAocXVlcnktPnBhbmVsX3JlcykKIAkJCXF1ZXJ5LT54ID0gcXVlcnktPnkgPSAoMSA8PCBxdWVyeS0+cGFuZWxfcmVzKTsKLQkJcXVlcnktPnBhbmVsX3JlcyA9IDEwOworCQlxdWVyeS0+cGFuZWxfcmVzID0gVzgwMDFfVE9VQ0hfUkVTT0xVVElPTjsKIAl9CiB9CiAKQEAgLTM5NCw2ICszOTgsOCBAQAogCiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1gsIDAsIGNvb3JkLngsIDAsIDApOwogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19ZLCAwLCBjb29yZC55LCAwLCAwKTsKKwkJaW5wdXRfYWJzX3NldF9yZXMoZGV2LCBBQlNfWCwgVzgwMDFfUEVOX1JFU09MVVRJT04pOworCQlpbnB1dF9hYnNfc2V0X3JlcyhkZXYsIEFCU19ZLCBXODAwMV9QRU5fUkVTT0xVVElPTik7CiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1BSRVNTVVJFLCAwLCBjb29yZC5wZW5fcHJlc3N1cmUsIDAsIDApOwogCQlpZiAoY29vcmQudGlsdF94ICYmIGNvb3JkLnRpbHRfeSkgewogCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfVElMVF9YLCAwLCBjb29yZC50aWx0X3gsIDAsIDApOwpAQCAtNDE4LDE0ICs0MjQsMTcgQEAKIAkJdzgwMDEtPm1heF90b3VjaF94ID0gdG91Y2gueDsKIAkJdzgwMDEtPm1heF90b3VjaF95ID0gdG91Y2gueTsKIAotCQkvKiBzY2FsZSB0byBwZW4gbWF4aW11bSAqLwogCQlpZiAodzgwMDEtPm1heF9wZW5feCAmJiB3ODAwMS0+bWF4X3Blbl95KSB7CisJCQkvKiBpZiBwZW4gaXMgc3VwcG9ydGVkIHNjYWxlIHRvIHBlbiBtYXhpbXVtICovCiAJCQl0b3VjaC54ID0gdzgwMDEtPm1heF9wZW5feDsKIAkJCXRvdWNoLnkgPSB3ODAwMS0+bWF4X3Blbl95OworCQkJdG91Y2gucGFuZWxfcmVzID0gVzgwMDFfUEVOX1JFU09MVVRJT047CiAJCX0KIAogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19YLCAwLCB0b3VjaC54LCAwLCAwKTsKIAkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfWSwgMCwgdG91Y2gueSwgMCwgMCk7CisJCWlucHV0X2Fic19zZXRfcmVzKGRldiwgQUJTX1gsIHRvdWNoLnBhbmVsX3Jlcyk7CisJCWlucHV0X2Fic19zZXRfcmVzKGRldiwgQUJTX1ksIHRvdWNoLnBhbmVsX3Jlcyk7CiAKIAkJc3dpdGNoICh0b3VjaC5zZW5zb3JfaWQpIHsKIAkJY2FzZSAwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMi5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMi5jCmluZGV4IDA4NTg3OTEuLmNmZmYwYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDIuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwyLmMKQEAgLTEyNDcsMTAgKzEyNDcsMTAgQEAKIGwyX3B1bGxfaXF1ZXVlKHN0cnVjdCBGc21JbnN0ICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCiB7CiAJc3RydWN0IFBTdGFjayAqc3QgPSBmaS0+dXNlcmRhdGE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm9za2I7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgTGF5ZXIyICpsMiA9ICZzdC0+bDI7CiAJdV9jaGFyIGhlYWRlcltNQVhfSEVBREVSX0xFTl07Ci0JaW50IGk7CisJaW50IGksIGhkcl9zcGFjZV9uZWVkZWQ7CiAJaW50IHVuc2lnbmVkIHAxOwogCXVfbG9uZyBmbGFnczsKIApAQCAtMTI2MSw2ICsxMjYxLDE2IEBACiAJaWYgKCFza2IpCiAJCXJldHVybjsKIAorCWhkcl9zcGFjZV9uZWVkZWQgPSBsMmhlYWRlcnNpemUobDIsIDApOworCWlmIChoZHJfc3BhY2VfbmVlZGVkID4gc2tiX2hlYWRyb29tKHNrYikpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiID0gc2tiOworCisJCXNrYiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgaGRyX3NwYWNlX25lZWRlZCk7CisJCWlmICghc2tiKSB7CisJCQlkZXZfa2ZyZWVfc2tiKG9yaWdfc2tiKTsKKwkJCXJldHVybjsKKwkJfQorCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbDItPmxvY2ssIGZsYWdzKTsKIAlpZih0ZXN0X2JpdChGTEdfTU9EMTI4LCAmbDItPmZsYWcpKQogCQlwMSA9IChsMi0+dnMgLSBsMi0+dmEpICUgMTI4OwpAQCAtMTI4NSwxOSArMTI5NSw3IEBACiAJCWwyLT52cyA9IChsMi0+dnMgKyAxKSAlIDg7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwyLT5sb2NrLCBmbGFncyk7Ci0JcDEgPSBza2ItPmRhdGEgLSBza2ItPmhlYWQ7Ci0JaWYgKHAxID49IGkpCi0JCW1lbWNweShza2JfcHVzaChza2IsIGkpLCBoZWFkZXIsIGkpOwotCWVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSJpc2RsMiBwdWxsX2lxdWV1ZSBza2IgaGVhZGVyKCVkLyVkKSB0b28gc2hvcnRcbiIsIGksIHAxKTsKLQkJb3NrYiA9IHNrYjsKLQkJc2tiID0gYWxsb2Nfc2tiKG9za2ItPmxlbiArIGksIEdGUF9BVE9NSUMpOwotCQltZW1jcHkoc2tiX3B1dChza2IsIGkpLCBoZWFkZXIsIGkpOwotCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKG9za2IsCi0JCQkJCSAgc2tiX3B1dChza2IsIG9za2ItPmxlbiksIG9za2ItPmxlbik7Ci0JCWRldl9rZnJlZV9za2Iob3NrYik7Ci0JfQorCW1lbWNweShza2JfcHVzaChza2IsIGkpLCBoZWFkZXIsIGkpOwogCXN0LT5sMi5sMmwxKHN0LCBQSF9QVUxMIHwgSU5ESUNBVElPTiwgc2tiKTsKIAl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0FDS19QRU5ELCAmc3QtPmwyLmZsYWcpOwogCWlmICghdGVzdF9hbmRfc2V0X2JpdChGTEdfVDIwMF9SVU4sICZzdC0+bDIuZmxhZykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9kZWZzLmggYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fZGVmcy5oCmluZGV4IDcyOWRmNDAuLjE4YjgwMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9kZWZzLmgKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2RlZnMuaApAQCAtMjI3LDcgKzIyNyw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGltL2V4cG9ydGVkIGZ1bmN0aW9ucyAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKiovCi1leHRlcm4gY2hhciAqaHlzZG5fZ2V0cmV2KGNvbnN0IGNoYXIgKik7CiAKIC8qIGh5c2RuX3Byb2Njb25mLmMgKi8KIGV4dGVybiBpbnQgaHlzZG5fcHJvY2NvbmZfaW5pdCh2b2lkKTsJLyogaW5pdCBwcm9jIGNvbmZpZyBmaWxlc3lzICovCkBAIC0yNTksNyArMjU4LDYgQEAKIAogLyogaHlzZG5fbmV0LmMgKi8KIGV4dGVybiB1bnNpZ25lZCBpbnQgaHluZXRfZW5hYmxlOyAKLWV4dGVybiBjaGFyICpoeXNkbl9uZXRfcmV2aXNpb247CiBleHRlcm4gaW50IGh5c2RuX25ldF9jcmVhdGUoaHlzZG5fY2FyZCAqKTsJLyogY3JlYXRlIGEgbmV3IG5ldCBkZXZpY2UgKi8KIGV4dGVybiBpbnQgaHlzZG5fbmV0X3JlbGVhc2UoaHlzZG5fY2FyZCAqKTsJLyogZGVsZXRlIHRoZSBkZXZpY2UgKi8KIGV4dGVybiBjaGFyICpoeXNkbl9uZXRfZ2V0bmFtZShoeXNkbl9jYXJkICopOwkvKiBnZXQgbmFtZSBvZiBuZXQgaW50ZXJmYWNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5faW5pdC5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2luaXQuYwppbmRleCBiN2NjNWMyLi4wYWI0MmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5faW5pdC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9pbml0LmMKQEAgLTM2LDcgKzM2LDYgQEAKIE1PRFVMRV9BVVRIT1IoIldlcm5lciBDb3JuZWxpdXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIGNoYXIgKmh5c2RuX2luaXRfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjYuNi42ICQiOwogc3RhdGljIGludCBjYXJkbWF4OwkJLyogbnVtYmVyIG9mIGZvdW5kIGNhcmRzICovCiBoeXNkbl9jYXJkICpjYXJkX3Jvb3QgPSBOVUxMOwkvKiBwb2ludGVyIHRvIGZpcnN0IGNhcmQgKi8KIHN0YXRpYyBoeXNkbl9jYXJkICpjYXJkX2xhc3QgPSBOVUxMOwkvKiBwb2ludGVyIHRvIGZpcnN0IGNhcmQgKi8KQEAgLTQ5LDI1ICs0OCw2IEBACiAvKiBBZGRpdGlvbmFsbHkgbmV3ZXIgdmVyc2lvbnMgbWF5IGJlIGFjdGl2YXRlZCB3aXRob3V0IHJlYm9vdGluZy4gICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogZXh0cmFjdCByZXZpc2lvbiBudW1iZXIgZnJvbSBzdHJpbmcgZm9yIGxvZyBvdXRwdXQgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1jaGFyICoKLWh5c2RuX2dldHJldihjb25zdCBjaGFyICpyZXZpc2lvbikKLXsKLQljaGFyICpyZXY7Ci0JY2hhciAqcDsKLQotCWlmICgocCA9IHN0cmNocihyZXZpc2lvbiwgJzonKSkpIHsKLQkJcmV2ID0gcCArIDI7Ci0JCXAgPSBzdHJjaHIocmV2LCAnJCcpOwotCQkqLS1wID0gMDsKLQl9IGVsc2UKLQkJcmV2ID0gIj8/PyI7Ci0JcmV0dXJuIHJldjsKLX0KLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGluaXRfbW9kdWxlIGlzIGNhbGxlZCBvbmNlIHdoZW4gdGhlIG1vZHVsZSBpcyBsb2FkZWQgdG8gZG8gYWxsIG5lY2Vzc2FyeSAqLwogLyogdGhpbmdzIGxpa2UgYXV0b2RldGVjdC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNzUsMTMgKzE1NSw5IEBACiBzdGF0aWMgaW50IF9faW5pdAogaHlzZG5faW5pdCh2b2lkKQogewotCWNoYXIgdG1wWzUwXTsKIAlpbnQgcmM7CiAKLQlzdHJjcHkodG1wLCBoeXNkbl9pbml0X3JldmlzaW9uKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIkhZU0ROOiBtb2R1bGUgUmV2OiAlcyBsb2FkZWRcbiIsIGh5c2RuX2dldHJldih0bXApKTsKLQlzdHJjcHkodG1wLCBoeXNkbl9uZXRfcmV2aXNpb24pOwotCXByaW50ayhLRVJOX05PVElDRSAiSFlTRE46IG5ldHdvcmsgaW50ZXJmYWNlIFJldjogJXMgXG4iLCBoeXNkbl9nZXRyZXYodG1wKSk7CisJcHJpbnRrKEtFUk5fTk9USUNFICJIWVNETjogbW9kdWxlIGxvYWRlZFxuIik7CiAKIAlyYyA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmh5c2RuX3BjaV9kcml2ZXIpOwogCWlmIChyYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9uZXQuYyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9uZXQuYwppbmRleCBmZWVjOGQ4Li4xMWYyY2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fbmV0LmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX25ldC5jCkBAIC0yNiw5ICsyNiw2IEBACiB1bnNpZ25lZCBpbnQgaHluZXRfZW5hYmxlID0gMHhmZmZmZmZmZjsgCiBtb2R1bGVfcGFyYW0oaHluZXRfZW5hYmxlLCB1aW50LCAwKTsKIAotLyogc3RvcmUgdGhlIGFjdHVhbCB2ZXJzaW9uIGZvciBsb2cgcmVwb3J0aW5nICovCi1jaGFyICpoeXNkbl9uZXRfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjguNi40ICQiOwotCiAjZGVmaW5lIE1BWF9TS0JfQlVGRkVSUyAyMAkvKiBudW1iZXIgb2YgYnVmZmVycyBmb3Iga2VlcGluZyBUWC1kYXRhICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYwppbmRleCA5NmIzZTM5Li41ZmU4M2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgImh5c2RuX2RlZnMuaCIKIAogc3RhdGljIERFRklORV9NVVRFWChoeXNkbl9jb25mX211dGV4KTsKLXN0YXRpYyBjaGFyICpoeXNkbl9wcm9jY29uZl9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuOC42LjQgJCI7CiAKICNkZWZpbmUgSU5GT19PVVRfTEVOIDgwCQkvKiBsZW5ndGggb2YgaW5mbyBsaW5lIGluY2x1ZGluZyBsZiAqLwogCkBAIC00MDQsNyArNDAzLDcgQEAKIAkJY2FyZCA9IGNhcmQtPm5leHQ7CS8qIG5leHQgZW50cnkgKi8KIAl9CiAKLQlwcmludGsoS0VSTl9OT1RJQ0UgIkhZU0ROOiBwcm9jZnMgUmV2LiAlcyBpbml0aWFsaXNlZFxuIiwgaHlzZG5fZ2V0cmV2KGh5c2RuX3Byb2Njb25mX3JldmlzaW9uKSk7CisJcHJpbnRrKEtFUk5fTk9USUNFICJIWVNETjogcHJvY2ZzIGluaXRpYWxpc2VkXG4iKTsKIAlyZXR1cm4gKDApOwogfQkJCQkvKiBoeXNkbl9wcm9jY29uZl9pbml0ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pY24vaWNuLmMgYi9kcml2ZXJzL2lzZG4vaWNuL2ljbi5jCmluZGV4IGYyYjViYWIuLjFmMzU1YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pY24vaWNuLmMKKysrIGIvZHJpdmVycy9pc2RuL2ljbi9pY24uYwpAQCAtMTYyNyw3ICsxNjI3LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGljbl9pbml0KHZvaWQpCiB7CiAJY2hhciAqcDsKLQljaGFyIHJldlsyMF07CisJY2hhciByZXZbMjFdOwogCiAJbWVtc2V0KCZkZXYsIDAsIHNpemVvZihpY25fZGV2KSk7CiAJZGV2Lm1lbWFkZHIgPSAobWVtYmFzZSAmIDB4MGZmYzAwMCk7CkBAIC0xNjM4LDYgKzE2MzgsNyBAQAogCiAJaWYgKChwID0gc3RyY2hyKHJldmlzaW9uLCAnOicpKSkgewogCQlzdHJuY3B5KHJldiwgcCArIDEsIDIwKTsKKwkJcmV2WzIwXSA9ICdcMCc7CiAJCXAgPSBzdHJjaHIocmV2LCAnJCcpOwogCQlpZiAocCkKIAkJCSpwID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXB3bS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtcHdtLmMKaW5kZXggZGEzZmE4ZC4uNjY2ZGFmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtcHdtLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtcHdtLmMKQEAgLTY5LDYgKzY5LDcgQEAKIAkJbGVkX2RhdC0+cHdtID0gcHdtX3JlcXVlc3QoY3VyX2xlZC0+cHdtX2lkLAogCQkJCWN1cl9sZWQtPm5hbWUpOwogCQlpZiAoSVNfRVJSKGxlZF9kYXQtPnB3bSkpIHsKKwkJCXJldCA9IFBUUl9FUlIobGVkX2RhdC0+cHdtKTsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byByZXF1ZXN0IFBXTSAlZFxuIiwKIAkJCQkJY3VyX2xlZC0+cHdtX2lkKTsKIAkJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHRyaWctZ3Bpby5jIGIvZHJpdmVycy9sZWRzL2xlZHRyaWctZ3Bpby5jCmluZGV4IDk5MWQ5M2IuLmVjYzRiZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWR0cmlnLWdwaW8uYworKysgYi9kcml2ZXJzL2xlZHMvbGVkdHJpZy1ncGlvLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgZ3Bpb190cmlnX2RhdGEgKmdwaW9fZGF0YSA9IGxlZC0+dHJpZ2dlcl9kYXRhOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGdwaW9fZGF0YS0+aW52ZXJ0ZWQgPyAieWVzIiA6ICJubyIpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBncGlvX2RhdGEtPmludmVydGVkKTsKIH0KIAogc3RhdGljIHNzaXplX3QgZ3Bpb190cmlnX2ludmVydGVkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTEwNywxNiArMTA3LDE3IEBACiB7CiAJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGdwaW9fdHJpZ19kYXRhICpncGlvX2RhdGEgPSBsZWQtPnRyaWdnZXJfZGF0YTsKLQl1bnNpZ25lZCBpbnZlcnRlZDsKKwl1bnNpZ25lZCBsb25nIGludmVydGVkOwogCWludCByZXQ7CiAKLQlyZXQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmaW52ZXJ0ZWQpOwotCWlmIChyZXQgPCAxKSB7Ci0JCWRldl9lcnIoZGV2LCAiaW52YWxpZCB2YWx1ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmaW52ZXJ0ZWQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCi0JZ3Bpb19kYXRhLT5pbnZlcnRlZCA9ICEhaW52ZXJ0ZWQ7CisJaWYgKGludmVydGVkID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlncGlvX2RhdGEtPmludmVydGVkID0gaW52ZXJ0ZWQ7CiAKIAkvKiBBZnRlciBpbnZlcnRpbmcsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBMRUQuICovCiAJc2NoZWR1bGVfd29yaygmZ3Bpb19kYXRhLT53b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L3BhZ2VfdGFibGVzLmMgYi9kcml2ZXJzL2xndWVzdC9wYWdlX3RhYmxlcy5jCmluZGV4IDA0YjIyMTIuLmQyMTU3OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L3BhZ2VfdGFibGVzLmMKKysrIGIvZHJpdmVycy9sZ3Vlc3QvcGFnZV90YWJsZXMuYwpAQCAtMTEzNyw3ICsxMTM3LDcgQEAKICAqLwogdm9pZCBtYXBfc3dpdGNoZXJfaW5fZ3Vlc3Qoc3RydWN0IGxnX2NwdSAqY3B1LCBzdHJ1Y3QgbGd1ZXN0X3BhZ2VzICpwYWdlcykKIHsKLQlwdGVfdCAqc3dpdGNoZXJfcHRlX3BhZ2UgPSBfX2dldF9jcHVfdmFyKHN3aXRjaGVyX3B0ZV9wYWdlcyk7CisJcHRlX3QgKnN3aXRjaGVyX3B0ZV9wYWdlID0gX190aGlzX2NwdV9yZWFkKHN3aXRjaGVyX3B0ZV9wYWdlcyk7CiAJcHRlX3QgcmVnc19wdGU7CiAKICNpZmRlZiBDT05GSUdfWDg2X1BBRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QveDg2L2NvcmUuYyBiL2RyaXZlcnMvbGd1ZXN0L3g4Ni9jb3JlLmMKaW5kZXggYjRlYjY3NS4uOWYxNjU5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QveDg2L2NvcmUuYworKysgYi9kcml2ZXJzL2xndWVzdC94ODYvY29yZS5jCkBAIC05MCw4ICs5MCw4IEBACiAJICogbWVhbndoaWxlKS4gIElmIHRoYXQncyBub3QgdGhlIGNhc2UsIHdlIHByZXRlbmQgZXZlcnl0aGluZyBpbiB0aGUKIAkgKiBHdWVzdCBoYXMgY2hhbmdlZC4KIAkgKi8KLQlpZiAoX19nZXRfY3B1X3ZhcihsZ19sYXN0X2NwdSkgIT0gY3B1IHx8IGNwdS0+bGFzdF9wYWdlcyAhPSBwYWdlcykgewotCQlfX2dldF9jcHVfdmFyKGxnX2xhc3RfY3B1KSA9IGNwdTsKKwlpZiAoX190aGlzX2NwdV9yZWFkKGxnX2xhc3RfY3B1KSAhPSBjcHUgfHwgY3B1LT5sYXN0X3BhZ2VzICE9IHBhZ2VzKSB7CisJCV9fdGhpc19jcHVfd3JpdGUobGdfbGFzdF9jcHUsIGNwdSk7CiAJCWNwdS0+bGFzdF9wYWdlcyA9IHBhZ2VzOwogCQljcHUtPmNoYW5nZWQgPSBDSEFOR0VEX0FMTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKaW5kZXggMmUwNDFmZC4uZjNhMjlmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAJdHJpZXMgPSAwOwogCWZvciAoOzspIHsKIAkJbnIgPSBpMmNfbWFzdGVyX3JlY3YoZmN1LCBidWYsIG5iKTsKLQkJaWYgKG5yID4gMCB8fCAobnIgPCAwICYmIG5yICE9IEVOT0RFVikgfHwgdHJpZXMgPj0gMTAwKQorCQlpZiAobnIgPiAwIHx8IChuciA8IDAgJiYgbnIgIT0gLUVOT0RFVikgfHwgdHJpZXMgPj0gMTAwKQogCQkJYnJlYWs7CiAJCW1zbGVlcCgxMCk7CiAJCSsrdHJpZXM7CkBAIC00NjQsNyArNDY0LDcgQEAKIAl0cmllcyA9IDA7CiAJZm9yICg7OykgewogCQludyA9IGkyY19tYXN0ZXJfc2VuZChmY3UsIGJ1ZiwgbmIpOwotCQlpZiAobncgPiAwIHx8IChudyA8IDAgJiYgbncgIT0gRUlPKSB8fCB0cmllcyA+PSAxMDApCisJCWlmIChudyA+IDAgfHwgKG53IDwgMCAmJiBudyAhPSAtRUlPKSB8fCB0cmllcyA+PSAxMDApCiAJCQlicmVhazsKIAkJbXNsZWVwKDEwKTsKIAkJKyt0cmllczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbGluZWFyLmMgYi9kcml2ZXJzL21kL2xpbmVhci5jCmluZGV4IDhhMmY3NjcuLjBlZDdmNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbGluZWFyLmMKKysrIGIvZHJpdmVycy9tZC9saW5lYXIuYwpAQCAtMjE2LDcgKzIxNiw2IEBACiAKIAlpZiAobWRfY2hlY2tfbm9fYml0bWFwKG1kZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JbWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrID0gJm1kZGV2LT5xdWV1ZS0+X19xdWV1ZV9sb2NrOwogCWNvbmYgPSBsaW5lYXJfY29uZihtZGRldiwgbWRkZXYtPnJhaWRfZGlza3MpOwogCiAJaWYgKCFjb25mKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IGI3NmNmYzguLjgxODMxM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTI4Nyw2ICsyODcsNyBAQAogCW1kZGV2X3QgKm1kZGV2ID0gcS0+cXVldWVkYXRhOwogCWludCBydjsKIAlpbnQgY3B1OworCXVuc2lnbmVkIGludCBzZWN0b3JzOwogCiAJaWYgKG1kZGV2ID09IE5VTEwgfHwgbWRkZXYtPnBlcnMgPT0gTlVMTAogCSAgICB8fCAhbWRkZXYtPnJlYWR5KSB7CkBAIC0zMTEsMTIgKzMxMiwxNiBAQAogCWF0b21pY19pbmMoJm1kZGV2LT5hY3RpdmVfaW8pOwogCXJjdV9yZWFkX3VubG9jaygpOwogCisJLyoKKwkgKiBzYXZlIHRoZSBzZWN0b3JzIG5vdyBzaW5jZSBvdXIgYmlvIGNhbgorCSAqIGdvIGF3YXkgaW5zaWRlIG1ha2VfcmVxdWVzdAorCSAqLworCXNlY3RvcnMgPSBiaW9fc2VjdG9ycyhiaW8pOwogCXJ2ID0gbWRkZXYtPnBlcnMtPm1ha2VfcmVxdWVzdChtZGRldiwgYmlvKTsKIAogCWNwdSA9IHBhcnRfc3RhdF9sb2NrKCk7CiAJcGFydF9zdGF0X2luYyhjcHUsICZtZGRldi0+Z2VuZGlzay0+cGFydDAsIGlvc1tyd10pOwotCXBhcnRfc3RhdF9hZGQoY3B1LCAmbWRkZXYtPmdlbmRpc2stPnBhcnQwLCBzZWN0b3JzW3J3XSwKLQkJICAgICAgYmlvX3NlY3RvcnMoYmlvKSk7CisJcGFydF9zdGF0X2FkZChjcHUsICZtZGRldi0+Z2VuZGlzay0+cGFydDAsIHNlY3RvcnNbcnddLCBzZWN0b3JzKTsKIAlwYXJ0X3N0YXRfdW5sb2NrKCk7CiAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbWRkZXYtPmFjdGl2ZV9pbykgJiYgbWRkZXYtPnN1c3BlbmRlZCkKQEAgLTU0OCw2ICs1NTMsOSBAQAogewogCW1kZGV2X3QgKm1kZGV2LCAqbmV3ID0gTlVMTDsKIAorCWlmICh1bml0ICYmIE1BSk9SKHVuaXQpICE9IE1EX01BSk9SKQorCQl1bml0ICY9IH4oKDE8PE1kcE1pbm9yU2hpZnQpLTEpOworCiAgcmV0cnk6CiAJc3Bpbl9sb2NrKCZhbGxfbWRkZXZzX2xvY2spOwogCkBAIC0xOTQ3LDggKzE5NTUsNiBAQAogCQkJX19iZGV2bmFtZShkZXYsIGIpKTsKIAkJcmV0dXJuIFBUUl9FUlIoYmRldik7CiAJfQotCWlmICghc2hhcmVkKQotCQlzZXRfYml0KEFsbFJlc2VydmVkLCAmcmRldi0+ZmxhZ3MpOwogCXJkZXYtPmJkZXYgPSBiZGV2OwogCXJldHVybiBlcnI7CiB9CkBAIC0yNDY1LDYgKzI0NzEsOSBAQAogCQlpZiAocmRldi0+cmFpZF9kaXNrICE9IC0xKQogCQkJcmV0dXJuIC1FQlVTWTsKIAorCQlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfUlVOTklORywgJnJkZXYtPm1kZGV2LT5yZWNvdmVyeSkpCisJCQlyZXR1cm4gLUVCVVNZOworCiAJCWlmIChyZGV2LT5tZGRldi0+cGVycy0+aG90X2FkZF9kaXNrID09IE5VTEwpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMjYxMCwxMiArMjYxOSwxMSBAQAogCiAJCQltZGRldl9sb2NrKG1kZGV2KTsKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldjIsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQotCQkJCWlmICh0ZXN0X2JpdChBbGxSZXNlcnZlZCwgJnJkZXYyLT5mbGFncykgfHwKLQkJCQkgICAgKHJkZXYtPmJkZXYgPT0gcmRldjItPmJkZXYgJiYKLQkJCQkgICAgIHJkZXYgIT0gcmRldjIgJiYKLQkJCQkgICAgIG92ZXJsYXBzKHJkZXYtPmRhdGFfb2Zmc2V0LCByZGV2LT5zZWN0b3JzLAotCQkJCQkgICAgICByZGV2Mi0+ZGF0YV9vZmZzZXQsCi0JCQkJCSAgICAgIHJkZXYyLT5zZWN0b3JzKSkpIHsKKwkJCQlpZiAocmRldi0+YmRldiA9PSByZGV2Mi0+YmRldiAmJgorCQkJCSAgICByZGV2ICE9IHJkZXYyICYmCisJCQkJICAgIG92ZXJsYXBzKHJkZXYtPmRhdGFfb2Zmc2V0LCByZGV2LT5zZWN0b3JzLAorCQkJCQkgICAgIHJkZXYyLT5kYXRhX29mZnNldCwKKwkJCQkJICAgICByZGV2Mi0+c2VjdG9ycykpIHsKIAkJCQkJb3ZlcmxhcCA9IDE7CiAJCQkJCWJyZWFrOwogCQkJCX0KQEAgLTQxMzMsMTAgKzQxNDEsMTAgQEAKIAl9CiAKIAltZGRldi0+YXJyYXlfc2VjdG9ycyA9IHNlY3RvcnM7Ci0Jc2V0X2NhcGFjaXR5KG1kZGV2LT5nZW5kaXNrLCBtZGRldi0+YXJyYXlfc2VjdG9ycyk7Ci0JaWYgKG1kZGV2LT5wZXJzKQorCWlmIChtZGRldi0+cGVycykgeworCQlzZXRfY2FwYWNpdHkobWRkZXYtPmdlbmRpc2ssIG1kZGV2LT5hcnJheV9zZWN0b3JzKTsKIAkJcmV2YWxpZGF0ZV9kaXNrKG1kZGV2LT5nZW5kaXNrKTsKLQorCX0KIAlyZXR1cm4gbGVuOwogfQogCkBAIC00NjE5LDYgKzQ2MjcsNyBAQAogCX0KIAlzZXRfY2FwYWNpdHkobWRkZXYtPmdlbmRpc2ssIG1kZGV2LT5hcnJheV9zZWN0b3JzKTsKIAlyZXZhbGlkYXRlX2Rpc2sobWRkZXYtPmdlbmRpc2spOworCW1kZGV2LT5jaGFuZ2VkID0gMTsKIAlrb2JqZWN0X3VldmVudCgmZGlza190b19kZXYobWRkZXYtPmdlbmRpc2spLT5rb2JqLCBLT0JKX0NIQU5HRSk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKQEAgLTQ3MDcsNiArNDcxNiw3IEBACiAJbWRkZXYtPnN5bmNfc3BlZWRfbWluID0gbWRkZXYtPnN5bmNfc3BlZWRfbWF4ID0gMDsKIAltZGRldi0+cmVjb3ZlcnkgPSAwOwogCW1kZGV2LT5pbl9zeW5jID0gMDsKKwltZGRldi0+Y2hhbmdlZCA9IDA7CiAJbWRkZXYtPmRlZ3JhZGVkID0gMDsKIAltZGRldi0+c2FmZW1vZGUgPSAwOwogCW1kZGV2LT5iaXRtYXBfaW5mby5vZmZzZXQgPSAwOwpAQCAtNDgyMiw2ICs0ODMyLDcgQEAKIAogCQlzZXRfY2FwYWNpdHkoZGlzaywgMCk7CiAJCW11dGV4X3VubG9jaygmbWRkZXYtPm9wZW5fbXV0ZXgpOworCQltZGRldi0+Y2hhbmdlZCA9IDE7CiAJCXJldmFsaWRhdGVfZGlzayhkaXNrKTsKIAogCQlpZiAobWRkZXYtPnJvKQpAQCAtNTU3OCw2ICs1NTg5LDggQEAKIAltZGRldi0+ZGVsdGFfZGlza3MgPSByYWlkX2Rpc2tzIC0gbWRkZXYtPnJhaWRfZGlza3M7CiAKIAlydiA9IG1kZGV2LT5wZXJzLT5jaGVja19yZXNoYXBlKG1kZGV2KTsKKwlpZiAocnYgPCAwKQorCQltZGRldi0+ZGVsdGFfZGlza3MgPSAwOwogCXJldHVybiBydjsKIH0KIApAQCAtNjAwNCw3ICs2MDE3LDcgQEAKIAlhdG9taWNfaW5jKCZtZGRldi0+b3BlbmVycyk7CiAJbXV0ZXhfdW5sb2NrKCZtZGRldi0+b3Blbl9tdXRleCk7CiAKLQljaGVja19kaXNrX3NpemVfY2hhbmdlKG1kZGV2LT5nZW5kaXNrLCBiZGV2KTsKKwljaGVja19kaXNrX2NoYW5nZShiZGV2KTsKICBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTYwMTksNiArNjAzMiwyMSBAQAogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbnQgbWRfbWVkaWFfY2hhbmdlZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwltZGRldl90ICptZGRldiA9IGRpc2stPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBtZGRldi0+Y2hhbmdlZDsKK30KKworc3RhdGljIGludCBtZF9yZXZhbGlkYXRlKHN0cnVjdCBnZW5kaXNrICpkaXNrKQoreworCW1kZGV2X3QgKm1kZGV2ID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCisJbWRkZXYtPmNoYW5nZWQgPSAwOworCXJldHVybiAwOworfQogc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBtZF9mb3BzID0KIHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCkBAIC02MDI5LDYgKzYwNTcsOCBAQAogCS5jb21wYXRfaW9jdGwJPSBtZF9jb21wYXRfaW9jdGwsCiAjZW5kaWYKIAkuZ2V0Z2VvCQk9IG1kX2dldGdlbywKKwkubWVkaWFfY2hhbmdlZCAgPSBtZF9tZWRpYV9jaGFuZ2VkLAorCS5yZXZhbGlkYXRlX2Rpc2s9IG1kX3JldmFsaWRhdGUsCiB9OwogCiBzdGF0aWMgaW50IG1kX3RocmVhZCh2b2lkICogYXJnKQpAQCAtNjk4NSw5ICs3MDE1LDYgQEAKIAl9IGVsc2UgaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX1JFUVVFU1RFRCwgJm1kZGV2LT5yZWNvdmVyeSkpCiAJCW1kZGV2LT5yZXN5bmNfbWluID0gbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZDsKIAltZGRldi0+Y3Vycl9yZXN5bmMgPSAwOwotCWlmICghdGVzdF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSkpCi0JCW1kZGV2LT5jdXJyX3Jlc3luY19jb21wbGV0ZWQgPSAwOwotCXN5c2ZzX25vdGlmeSgmbWRkZXYtPmtvYmosIE5VTEwsICJzeW5jX2NvbXBsZXRlZCIpOwogCXdha2VfdXAoJnJlc3luY193YWl0KTsKIAlzZXRfYml0KE1EX1JFQ09WRVJZX0RPTkUsICZtZGRldi0+cmVjb3ZlcnkpOwogCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CkBAIC03MDI4LDcgKzcwNTUsNyBAQAogCQkJfQogCQl9CiAKLQlpZiAobWRkZXYtPmRlZ3JhZGVkICYmICEgbWRkZXYtPnJvICYmICFtZGRldi0+cmVjb3ZlcnlfZGlzYWJsZWQpIHsKKwlpZiAobWRkZXYtPmRlZ3JhZGVkICYmICFtZGRldi0+cmVjb3ZlcnlfZGlzYWJsZWQpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkgewogCQkJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwICYmCiAJCQkgICAgIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykgJiYKQEAgLTcxNTEsNyArNzE3OCwyMCBAQAogCQkJLyogT25seSB0aGluZyB3ZSBkbyBvbiBhIHJvIGFycmF5IGlzIHJlbW92ZQogCQkJICogZmFpbGVkIGRldmljZXMuCiAJCQkgKi8KLQkJCXJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldik7CisJCQltZGtfcmRldl90ICpyZGV2OworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKKwkJCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDAgJiYKKwkJCQkgICAgIXRlc3RfYml0KEJsb2NrZWQsICZyZGV2LT5mbGFncykgJiYKKwkJCQkgICAgdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpICYmCisJCQkJICAgIGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKT09MCkgeworCQkJCQlpZiAobWRkZXYtPnBlcnMtPmhvdF9yZW1vdmVfZGlzaygKKwkJCQkJCSAgICBtZGRldiwgcmRldi0+cmFpZF9kaXNrKT09MCkgeworCQkJCQkJY2hhciBubVsyMF07CisJCQkJCQlzcHJpbnRmKG5tLCJyZCVkIiwgcmRldi0+cmFpZF9kaXNrKTsKKwkJCQkJCXN5c2ZzX3JlbW92ZV9saW5rKCZtZGRldi0+a29iaiwgbm0pOworCQkJCQkJcmRldi0+cmFpZF9kaXNrID0gLTE7CisJCQkJCX0KKwkJCQl9CiAJCQljbGVhcl9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKIAkJCWdvdG8gdW5sb2NrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmggYi9kcml2ZXJzL21kL21kLmgKaW5kZXggZWVjNTE3Yy4uMTIyMTVkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5oCisrKyBiL2RyaXZlcnMvbWQvbWQuaApAQCAtOTMsOCArOTMsNiBAQAogI2RlZmluZQlGYXVsdHkJCTEJCS8qIGRldmljZSBpcyBrbm93biB0byBoYXZlIGEgZmF1bHQgKi8KICNkZWZpbmUJSW5fc3luYwkJMgkJLyogZGV2aWNlIGlzIGluX3N5bmMgd2l0aCByZXN0IG9mIGFycmF5ICovCiAjZGVmaW5lCVdyaXRlTW9zdGx5CTQJCS8qIEF2b2lkIHJlYWRpbmcgaWYgYXQgYWxsIHBvc3NpYmxlICovCi0jZGVmaW5lCUFsbFJlc2VydmVkCTYJCS8qIElmIHdob2xlIGRldmljZSBpcyByZXNlcnZlZCBmb3IKLQkJCQkJICogb25lIGFycmF5ICovCiAjZGVmaW5lCUF1dG9EZXRlY3RlZAk3CQkvKiBhZGRlZCBieSBhdXRvLWRldGVjdCAqLwogI2RlZmluZSBCbG9ja2VkCQk4CQkvKiBBbiBlcnJvciBvY2N1cmVkIG9uIGFuIGV4dGVybmFsbHkKIAkJCQkJICogbWFuYWdlZCBhcnJheSwgZG9uJ3QgYWxsb3cgd3JpdGVzCkBAIC0yNzYsNiArMjc0LDggQEAKIAlhdG9taWNfdAkJCWFjdGl2ZTsJCS8qIGdlbmVyYWwgcmVmY291bnQgKi8KIAlhdG9taWNfdAkJCW9wZW5lcnM7CS8qIG51bWJlciBvZiBhY3RpdmUgb3BlbnMgKi8KIAorCWludAkJCQljaGFuZ2VkOwkvKiBUcnVlIGlmIHdlIG1pZ2h0IG5lZWQgdG8KKwkJCQkJCQkgKiByZXJlYWQgcGFydGl0aW9uIGluZm8gKi8KIAlpbnQJCQkJZGVncmFkZWQ7CS8qIHdoZXRoZXIgbWQgc2hvdWxkIGNvbnNpZGVyCiAJCQkJCQkJICogYWRkaW5nIGEgc3BhcmUKIAkJCQkJCQkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCmluZGV4IDZkN2RkZjMuLjNhNjJkNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKKysrIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwpAQCAtNDM1LDcgKzQzNSw2IEBACiAJICogYm9va2tlZXBpbmcgYXJlYS4gW3doYXRldmVyIHdlIGFsbG9jYXRlIGluIG11bHRpcGF0aF9ydW4oKSwKIAkgKiBzaG91bGQgYmUgZnJlZWQgaW4gbXVsdGlwYXRoX3N0b3AoKV0KIAkgKi8KLQltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmbWRkZXYtPnF1ZXVlLT5fX3F1ZXVlX2xvY2s7CiAKIAljb25mID0ga3phbGxvYyhzaXplb2YobXVsdGlwYXRoX2NvbmZfdCksIEdGUF9LRVJORUwpOwogCW1kZGV2LT5wcml2YXRlID0gY29uZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDAuYyBiL2RyaXZlcnMvbWQvcmFpZDAuYwppbmRleCBhMzlmNGMzLi5jMGFjNDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMC5jCkBAIC0xNzksNiArMTc5LDE0IEBACiAJCQlyZGV2MS0+bmV3X3JhaWRfZGlzayA9IGo7CiAJCX0KIAorCQlpZiAobWRkZXYtPmxldmVsID09IDEpIHsKKwkJCS8qIHRhaWtpbmcgb3ZlciBhIHJhaWQxIGFycmF5LQorCQkJICogd2UgaGF2ZSBvbmx5IG9uZSBhY3RpdmUgZGlzaworCQkJICovCisJCQlqID0gMDsKKwkJCXJkZXYxLT5uZXdfcmFpZF9kaXNrID0gajsKKwkJfQorCiAJCWlmIChqIDwgMCB8fCBqID49IG1kZGV2LT5yYWlkX2Rpc2tzKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIm1kL3JhaWQwOiVzOiBiYWQgZGlzayBudW1iZXIgJWQgLSAiCiAJCQkgICAgICAgImFib3J0aW5nIVxuIiwgbWRuYW1lKG1kZGV2KSwgaik7CkBAIC0zNTMsNyArMzYxLDYgQEAKIAlpZiAobWRfY2hlY2tfbm9fYml0bWFwKG1kZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgbWRkZXYtPmNodW5rX3NlY3RvcnMpOwotCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZtZGRldi0+cXVldWUtPl9fcXVldWVfbG9jazsKIAogCS8qIGlmIHByaXZhdGUgaXMgbm90IG51bGwsIHdlIGFyZSBoZXJlIGFmdGVyIHRha2VvdmVyICovCiAJaWYgKG1kZGV2LT5wcml2YXRlID09IE5VTEwpIHsKQEAgLTY0NCwxMiArNjUxLDM5IEBACiAJcmV0dXJuIHByaXZfY29uZjsKIH0KIAorc3RhdGljIHZvaWQgKnJhaWQwX3Rha2VvdmVyX3JhaWQxKG1kZGV2X3QgKm1kZGV2KQoreworCXJhaWQwX2NvbmZfdCAqcHJpdl9jb25mOworCisJLyogQ2hlY2sgbGF5b3V0OgorCSAqICAtIChOIC0gMSkgbWlycm9yIGRyaXZlcyBtdXN0IGJlIGFscmVhZHkgZmF1bHR5CisJICovCisJaWYgKChtZGRldi0+cmFpZF9kaXNrcyAtIDEpICE9IG1kZGV2LT5kZWdyYWRlZCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1kL3JhaWQwOiVzOiAoTiAtIDEpIG1pcnJvcnMgZHJpdmVzIG11c3QgYmUgYWxyZWFkeSBmYXVsdHkhXG4iLAorCQkgICAgICAgbWRuYW1lKG1kZGV2KSk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCS8qIFNldCBuZXcgcGFyYW1ldGVycyAqLworCW1kZGV2LT5uZXdfbGV2ZWwgPSAwOworCW1kZGV2LT5uZXdfbGF5b3V0ID0gMDsKKwltZGRldi0+bmV3X2NodW5rX3NlY3RvcnMgPSAxMjg7IC8qIGJ5IGRlZmF1bHQgc2V0IGNodW5rIHNpemUgdG8gNjRrICovCisJbWRkZXYtPmRlbHRhX2Rpc2tzID0gMSAtIG1kZGV2LT5yYWlkX2Rpc2tzOworCW1kZGV2LT5yYWlkX2Rpc2tzID0gMTsKKwkvKiBtYWtlIHN1cmUgaXQgd2lsbCBiZSBub3QgbWFya2VkIGFzIGRpcnR5ICovCisJbWRkZXYtPnJlY292ZXJ5X2NwID0gTWF4U2VjdG9yOworCisJY3JlYXRlX3N0cmlwX3pvbmVzKG1kZGV2LCAmcHJpdl9jb25mKTsKKwlyZXR1cm4gcHJpdl9jb25mOworfQorCiBzdGF0aWMgdm9pZCAqcmFpZDBfdGFrZW92ZXIobWRkZXZfdCAqbWRkZXYpCiB7CiAJLyogcmFpZDAgY2FuIHRha2Ugb3ZlcjoKIAkgKiAgcmFpZDQgLSBpZiBhbGwgZGF0YSBkaXNrcyBhcmUgYWN0aXZlLgogCSAqICByYWlkNSAtIHByb3ZpZGluZyBpdCBpcyBSYWlkNCBsYXlvdXQgYW5kIG9uZSBkaXNrIGlzIGZhdWx0eQogCSAqICByYWlkMTAgLSBhc3N1bWluZyB3ZSBoYXZlIGFsbCBuZWNlc3NhcnkgYWN0aXZlIGRpc2tzCisJICogIHJhaWQxIC0gd2l0aCAoTiAtMSkgbWlycm9yIGRyaXZlcyBmYXVsdHkKIAkgKi8KIAlpZiAobWRkZXYtPmxldmVsID09IDQpCiAJCXJldHVybiByYWlkMF90YWtlb3Zlcl9yYWlkNDUobWRkZXYpOwpAQCAtNjY1LDYgKzY5OSwxMiBAQAogCWlmIChtZGRldi0+bGV2ZWwgPT0gMTApCiAJCXJldHVybiByYWlkMF90YWtlb3Zlcl9yYWlkMTAobWRkZXYpOwogCisJaWYgKG1kZGV2LT5sZXZlbCA9PSAxKQorCQlyZXR1cm4gcmFpZDBfdGFrZW92ZXJfcmFpZDEobWRkZXYpOworCisJcHJpbnRrKEtFUk5fRVJSICJUYWtlb3ZlciBmcm9tIHJhaWQlaSB0byByYWlkMCBub3Qgc3VwcG9ydGVkXG4iLAorCQltZGRldi0+bGV2ZWwpOworCiAJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBhMjNmZmEzLi4wNmNkNzEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC01OTMsNyArNTkzLDEwIEBACiAJaWYgKGNvbmYtPnBlbmRpbmdfYmlvX2xpc3QuaGVhZCkgewogCQlzdHJ1Y3QgYmlvICpiaW87CiAJCWJpbyA9IGJpb19saXN0X2dldCgmY29uZi0+cGVuZGluZ19iaW9fbGlzdCk7CisJCS8qIE9ubHkgdGFrZSB0aGUgc3BpbmxvY2sgdG8gcXVpZXQgYSB3YXJuaW5nICovCisJCXNwaW5fbG9jayhjb25mLT5tZGRldi0+cXVldWUtPnF1ZXVlX2xvY2spOwogCQlibGtfcmVtb3ZlX3BsdWcoY29uZi0+bWRkZXYtPnF1ZXVlKTsKKwkJc3Bpbl91bmxvY2soY29uZi0+bWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJCS8qIGZsdXNoIGFueSBwZW5kaW5nIGJpdG1hcCB3cml0ZXMgdG8KIAkJICogZGlzayBiZWZvcmUgcHJvY2VlZGluZyB3LyBJL08gKi8KQEAgLTk1OSw3ICs5NjIsNyBAQAogCQlhdG9taWNfaW5jKCZyMV9iaW8tPnJlbWFpbmluZyk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOwogCQliaW9fbGlzdF9hZGQoJmNvbmYtPnBlbmRpbmdfYmlvX2xpc3QsIG1iaW8pOwotCQlibGtfcGx1Z19kZXZpY2UobWRkZXYtPnF1ZXVlKTsKKwkJYmxrX3BsdWdfZGV2aWNlX3VubG9ja2VkKG1kZGV2LT5xdWV1ZSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CiAJfQogCXIxX2Jpb193cml0ZV9kb25lKHIxX2JpbywgYmlvLT5iaV92Y250LCBiZWhpbmRfcGFnZXMsIGJlaGluZF9wYWdlcyAhPSBOVUxMKTsKQEAgLTIwMjEsNyArMjAyNCw2IEBACiAJaWYgKElTX0VSUihjb25mKSkKIAkJcmV0dXJuIFBUUl9FUlIoY29uZik7CiAKLQltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmY29uZi0+ZGV2aWNlX2xvY2s7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkgewogCQlkaXNrX3N0YWNrX2xpbWl0cyhtZGRldi0+Z2VuZGlzaywgcmRldi0+YmRldiwKIAkJCQkgIHJkZXYtPmRhdGFfb2Zmc2V0IDw8IDkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKaW5kZXggNjliNjU5NS4uNzQ3ZDA2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMTAuYworKysgYi9kcml2ZXJzL21kL3JhaWQxMC5jCkBAIC02NjIsNyArNjYyLDEwIEBACiAJaWYgKGNvbmYtPnBlbmRpbmdfYmlvX2xpc3QuaGVhZCkgewogCQlzdHJ1Y3QgYmlvICpiaW87CiAJCWJpbyA9IGJpb19saXN0X2dldCgmY29uZi0+cGVuZGluZ19iaW9fbGlzdCk7CisJCS8qIFNwaW5sb2NrIG9ubHkgdGFrZW4gdG8gcXVpZXQgYSB3YXJuaW5nICovCisJCXNwaW5fbG9jayhjb25mLT5tZGRldi0+cXVldWUtPnF1ZXVlX2xvY2spOwogCQlibGtfcmVtb3ZlX3BsdWcoY29uZi0+bWRkZXYtPnF1ZXVlKTsKKwkJc3Bpbl91bmxvY2soY29uZi0+bWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJCS8qIGZsdXNoIGFueSBwZW5kaW5nIGJpdG1hcCB3cml0ZXMgdG8gZGlzawogCQkgKiBiZWZvcmUgcHJvY2VlZGluZyB3LyBJL08gKi8KQEAgLTk3MSw3ICs5NzQsNyBAQAogCQlhdG9taWNfaW5jKCZyMTBfYmlvLT5yZW1haW5pbmcpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAkJYmlvX2xpc3RfYWRkKCZjb25mLT5wZW5kaW5nX2Jpb19saXN0LCBtYmlvKTsKLQkJYmxrX3BsdWdfZGV2aWNlKG1kZGV2LT5xdWV1ZSk7CisJCWJsa19wbHVnX2RldmljZV91bmxvY2tlZChtZGRldi0+cXVldWUpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOwogCX0KIApAQCAtMjMwNCw4ICsyMzA3LDYgQEAKIAlpZiAoIWNvbmYpCiAJCWdvdG8gb3V0OwogCi0JbWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrID0gJmNvbmYtPmRldmljZV9sb2NrOwotCiAJbWRkZXYtPnRocmVhZCA9IGNvbmYtPnRocmVhZDsKIAljb25mLT50aHJlYWQgPSBOVUxMOwogCkBAIC0yNDYzLDExICsyNDY0LDEzIEBACiAJbWRkZXYtPnJlY292ZXJ5X2NwID0gTWF4U2VjdG9yOwogCiAJY29uZiA9IHNldHVwX2NvbmYobWRkZXYpOwotCWlmICghSVNfRVJSKGNvbmYpKQorCWlmICghSVNfRVJSKGNvbmYpKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCiAJCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDApCiAJCQkJcmRldi0+bmV3X3JhaWRfZGlzayA9IHJkZXYtPnJhaWRfZGlzayAqIDI7Ci0JCQorCQljb25mLT5iYXJyaWVyID0gMTsKKwl9CisKIAlyZXR1cm4gY29uZjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jCmluZGV4IDUwNDRiYWIuLjc4NTM2ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuYworKysgYi9kcml2ZXJzL21kL3JhaWQ1LmMKQEAgLTUyMDQsNyArNTIwNCw2IEBACiAKIAkJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9kYXRhID0gbWRkZXY7CiAJCW1kZGV2LT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZm4gPSByYWlkNV9jb25nZXN0ZWQ7Ci0JCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZjb25mLT5kZXZpY2VfbG9jazsKIAkJbWRkZXYtPnF1ZXVlLT51bnBsdWdfZm4gPSByYWlkNV91bnBsdWdfcXVldWU7CiAKIAkJY2h1bmtfc2l6ZSA9IG1kZGV2LT5jaHVua19zZWN0b3JzIDw8IDk7CkBAIC01NTE3LDcgKzU1MTYsNiBAQAogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IG1kZGV2LT5wcml2YXRlOwogCW1ka19yZGV2X3QgKnJkZXY7CiAJaW50IHNwYXJlcyA9IDA7Ci0JaW50IGFkZGVkX2RldmljZXMgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfUlVOTklORywgJm1kZGV2LT5yZWNvdmVyeSkpCkBAIC01NTI3LDggKzU1MjUsOCBAQAogCQlyZXR1cm4gLUVOT1NQQzsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCi0JCWlmICgocmRldi0+cmFpZF9kaXNrIDwgMCB8fCByZGV2LT5yYWlkX2Rpc2sgPj0gY29uZi0+cmFpZF9kaXNrcykKLQkJICAgICAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKQorCQlpZiAoIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykKKwkJICAgICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpCiAJCQlzcGFyZXMrKzsKIAogCWlmIChzcGFyZXMgLSBtZGRldi0+ZGVncmFkZWQgPCBtZGRldi0+ZGVsdGFfZGlza3MgLSBjb25mLT5tYXhfZGVncmFkZWQpCkBAIC01NTcxLDM0ICs1NTY5LDM1IEBACiAJICogdG8gY29ycmVjdGx5IHJlY29yZCB0aGUgInBhcnRpYWxseSByZWNvbnN0cnVjdGVkIiBzdGF0ZSBvZgogCSAqIHN1Y2ggZGV2aWNlcyBkdXJpbmcgdGhlIHJlc2hhcGUgYW5kIGNvbmZ1c2lvbiBjb3VsZCByZXN1bHQuCiAJICovCi0JaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA+PSAwKQotCSAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQotCQlpZiAocmRldi0+cmFpZF9kaXNrIDwgMCAmJgotCQkgICAgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewotCQkJaWYgKHJhaWQ1X2FkZF9kaXNrKG1kZGV2LCByZGV2KSA9PSAwKSB7Ci0JCQkJY2hhciBubVsyMF07Ci0JCQkJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKSB7Ci0JCQkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKLQkJCQkJYWRkZWRfZGV2aWNlcysrOwotCQkJCX0gZWxzZQotCQkJCQlyZGV2LT5yZWNvdmVyeV9vZmZzZXQgPSAwOwotCQkJCXNwcmludGYobm0sICJyZCVkIiwgcmRldi0+cmFpZF9kaXNrKTsKLQkJCQlpZiAoc3lzZnNfY3JlYXRlX2xpbmsoJm1kZGV2LT5rb2JqLAotCQkJCQkJICAgICAgJnJkZXYtPmtvYmosIG5tKSkKLQkJCQkJLyogRmFpbHVyZSBoZXJlIGlzIE9LICovOwotCQkJfSBlbHNlCi0JCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAocmRldi0+cmFpZF9kaXNrID49IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MKLQkJCSAgICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKLQkJCS8qIFRoaXMgaXMgYSBzcGFyZSB0aGF0IHdhcyBtYW51YWxseSBhZGRlZCAqLwotCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwotCQkJYWRkZWRfZGV2aWNlcysrOwotCQl9CisJaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA+PSAwKSB7CisJCWludCBhZGRlZF9kZXZpY2VzID0gMDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKKwkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPCAwICYmCisJCQkgICAgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgeworCQkJCWlmIChyYWlkNV9hZGRfZGlzayhtZGRldiwgcmRldikgPT0gMCkgeworCQkJCQljaGFyIG5tWzIwXTsKKwkJCQkJaWYgKHJkZXYtPnJhaWRfZGlzaworCQkJCQkgICAgPj0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcykgeworCQkJCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOworCQkJCQkJYWRkZWRfZGV2aWNlcysrOworCQkJCQl9IGVsc2UKKwkJCQkJCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IDA7CisJCQkJCXNwcmludGYobm0sICJyZCVkIiwgcmRldi0+cmFpZF9kaXNrKTsKKwkJCQkJaWYgKHN5c2ZzX2NyZWF0ZV9saW5rKCZtZGRldi0+a29iaiwKKwkJCQkJCQkgICAgICAmcmRldi0+a29iaiwgbm0pKQorCQkJCQkJLyogRmFpbHVyZSBoZXJlIGlzIE9LICovOworCQkJCX0KKwkJCX0gZWxzZSBpZiAocmRldi0+cmFpZF9kaXNrID49IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MKKwkJCQkgICAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CisJCQkJLyogVGhpcyBpcyBhIHNwYXJlIHRoYXQgd2FzIG1hbnVhbGx5IGFkZGVkICovCisJCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOworCQkJCWFkZGVkX2RldmljZXMrKzsKKwkJCX0KIAotCS8qIFdoZW4gYSByZXNoYXBlIGNoYW5nZXMgdGhlIG51bWJlciBvZiBkZXZpY2VzLCAtPmRlZ3JhZGVkCi0JICogaXMgbWVhc3VyZWQgYWdhaW5zdCB0aGUgbGFyZ2VyIG9mIHRoZSBwcmUgYW5kIHBvc3QgbnVtYmVyIG9mCi0JICogZGV2aWNlcy4qLwotCWlmIChtZGRldi0+ZGVsdGFfZGlza3MgPiAwKSB7CisJCS8qIFdoZW4gYSByZXNoYXBlIGNoYW5nZXMgdGhlIG51bWJlciBvZiBkZXZpY2VzLAorCQkgKiAtPmRlZ3JhZGVkIGlzIG1lYXN1cmVkIGFnYWluc3QgdGhlIGxhcmdlciBvZiB0aGUKKwkJICogcHJlIGFuZCBwb3N0IG51bWJlciBvZiBkZXZpY2VzLgorCQkgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CiAJCW1kZGV2LT5kZWdyYWRlZCArPSAoY29uZi0+cmFpZF9kaXNrcyAtIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpCiAJCQktIGFkZGVkX2RldmljZXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfY29yZS5jCmluZGV4IDk4MmYwMDAuLjlmNDdlMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfY29yZS5jCkBAIC00NTIsNyArNDUyLDcgQEAKIAlJTkZPKCgiZm91bmQgc2FhNzE0NiBAIG1lbSAlcCAocmV2aXNpb24gJWQsIGlycSAlZCkgKDB4JTA0eCwweCUwNHgpLlxuIiwgZGV2LT5tZW0sIGRldi0+cmV2aXNpb24sIHBjaS0+aXJxLCBwY2ktPnN1YnN5c3RlbV92ZW5kb3IsIHBjaS0+c3Vic3lzdGVtX2RldmljZSkpOwogCWRldi0+ZXh0ID0gZXh0OwogCi0JbXV0ZXhfaW5pdCgmZGV2LT5sb2NrKTsKKwltdXRleF9pbml0KCZkZXYtPnY0bDJfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+aW50X3Nsb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5zbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKaW5kZXggZTNmZWRjNi4uMWJkM2RkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKQEAgLTE1LDE4ICsxNSwxNSBAQAogCX0KIAogCS8qIGlzIGl0IGZyZWU/ICovCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAlpZiAodnYtPnJlc291cmNlcyAmIGJpdCkgewogCQlERUJfRCgoImxvY2tlZCEgdnYtPnJlc291cmNlczoweCUwMngsIHdlIHdhbnQ6MHglMDJ4XG4iLHZ2LT5yZXNvdXJjZXMsYml0KSk7CiAJCS8qIG5vLCBzb21lb25lIGVsc2UgdXNlcyBpdCAqLwotCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIAkvKiBpdCdzIGZyZWUsIGdyYWIgaXQgKi8KIAlmaC0+cmVzb3VyY2VzICB8PSBiaXQ7CiAJdnYtPnJlc291cmNlcyB8PSBiaXQ7CiAJREVCX0QoKCJyZXM6IGdldCAweCUwMngsIGN1cjoweCUwMnhcbiIsYml0LHZ2LT5yZXNvdXJjZXMpKTsKLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTM3LDExICszNCw5IEBACiAKIAlCVUdfT04oKGZoLT5yZXNvdXJjZXMgJiBiaXRzKSAhPSBiaXRzKTsKIAotCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJZmgtPnJlc291cmNlcyAgJj0gfmJpdHM7CiAJdnYtPnJlc291cmNlcyAmPSB+Yml0czsKIAlERUJfRCgoInJlczogcHV0IDB4JTAyeCwgY3VyOjB4JTAyeFxuIixiaXRzLHZ2LT5yZXNvdXJjZXMpKTsKLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiB9CiAKIApAQCAtMzk2LDcgKzM5MSw3IEBACiAJLndyaXRlCQk9IGZvcHNfd3JpdGUsCiAJLnBvbGwJCT0gZm9wc19wb2xsLAogCS5tbWFwCQk9IGZvcHNfbW1hcCwKLQkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAorCS51bmxvY2tlZF9pb2N0bAk9IHZpZGVvX2lvY3RsMiwKIH07CiAKIHN0YXRpYyB2b2lkIHZ2X2NhbGxiYWNrKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHN0YXR1cykKQEAgLTUwNSw2ICs1MDAsNyBAQAogCXZmZC0+Zm9wcyA9ICZ2aWRlb19mb3BzOwogCXZmZC0+aW9jdGxfb3BzID0gJmRldi0+ZXh0X3Z2X2RhdGEtPm9wczsKIAl2ZmQtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKKwl2ZmQtPmxvY2sgPSAmZGV2LT52NGwyX2xvY2s7CiAJdmZkLT50dm5vcm1zID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5leHRfdnZfZGF0YS0+bnVtX3N0ZHM7IGkrKykKIAkJdmZkLT50dm5vcm1zIHw9IGRldi0+ZXh0X3Z2X2RhdGEtPnN0ZHNbaV0uaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZiaS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92YmkuYwppbmRleCAyZDQ1MzNhLi5hZmU4NTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmJpLmMKQEAgLTQxMiw3ICs0MTIsNyBAQAogCQkJICAgIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUsCiAJCQkgICAgVjRMMl9GSUVMRF9TRVFfVEIsIC8vIEZJWE1FOiBkb2VzIHRoaXMgcmVhbGx5IHdvcms/CiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBzYWE3MTQ2X2J1ZiksCi0JCQkgICAgZmlsZSwgTlVMTCk7CisJCQkgICAgZmlsZSwgJmRldi0+djRsMl9sb2NrKTsKIAogCWluaXRfdGltZXIoJmZoLT52YmlfcmVhZF90aW1lb3V0KTsKIAlmaC0+dmJpX3JlYWRfdGltZW91dC5mdW5jdGlvbiA9IHZiaV9yZWFkX3RpbWVvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMKaW5kZXggMGFjNWM2MS4uOWFhZmE0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYwpAQCAtNTUzLDggKzU1Myw2IEBACiAJCX0KIAl9CiAKLQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCiAJLyogb2ssIGFjY2VwdCBpdCAqLwogCXZ2LT5vdl9mYiA9ICpmYjsKIAl2di0+b3ZfZm10ID0gZm10OwpAQCAtNTYzLDggKzU2MSw2IEBACiAJCXZ2LT5vdl9mYi5mbXQuYnl0ZXNwZXJsaW5lID0gdnYtPm92X2ZiLmZtdC53aWR0aCAqIGZtdC0+ZGVwdGggLyA4OwogCQlERUJfRCgoInNldHRpbmcgYnl0ZXNwZXJsaW5lIHRvICVkXG4iLCB2di0+b3ZfZmIuZm10LmJ5dGVzcGVybGluZSkpOwogCX0KLQotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjQ5LDggKzY0NSw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0KIAlzd2l0Y2ggKGN0cmwtPnR5cGUpIHsKIAljYXNlIFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU46CiAJY2FzZSBWNEwyX0NUUkxfVFlQRV9NRU5VOgpAQCAtNjkzLDcgKzY4Nyw2IEBACiAJCS8qIGZpeG1lOiB3ZSBjYW4gc3VwcG9ydCBjaGFuZ2luZyBWRkxJUCBhbmQgSEZMSVAgaGVyZS4uLiAqLwogCQlpZiAoSVNfQ0FQVFVSRV9BQ1RJVkUoZmgpICE9IDApIHsKIAkJCURFQl9EKCgiVjRMMl9DSURfSEZMSVAgd2hpbGUgYWN0aXZlIGNhcHR1cmUuXG4iKSk7Ci0JCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJCXZ2LT5oZmxpcCA9IGMtPnZhbHVlOwpAQCAtNzAxLDE2ICs2OTQsMTMgQEAKIAljYXNlIFY0TDJfQ0lEX1ZGTElQOgogCQlpZiAoSVNfQ0FQVFVSRV9BQ1RJVkUoZmgpICE9IDApIHsKIAkJCURFQl9EKCgiVjRMMl9DSURfVkZMSVAgd2hpbGUgYWN0aXZlIGNhcHR1cmUuXG4iKSk7Ci0JCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJCXZ2LT52ZmxpcCA9IGMtPnZhbHVlOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKIAlpZiAoSVNfT1ZFUkxBWV9BQ1RJVkUoZmgpICE9IDApIHsKIAkJc2FhNzE0Nl9zdG9wX3ByZXZpZXcoZmgpOwpAQCAtOTAyLDIyICs4OTIsMTggQEAKIAllcnIgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfb3ZlcmxheShmaWxlLCBmaCwgZik7CiAJaWYgKDAgIT0gZXJyKQogCQlyZXR1cm4gZXJyOwotCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJZmgtPm92LndpbiAgICA9IGYtPmZtdC53aW47CiAJZmgtPm92Lm5jbGlwcyA9IGYtPmZtdC53aW4uY2xpcGNvdW50OwogCWlmIChmaC0+b3YubmNsaXBzID4gMTYpCiAJCWZoLT5vdi5uY2xpcHMgPSAxNjsKIAlpZiAoY29weV9mcm9tX3VzZXIoZmgtPm92LmNsaXBzLCBmLT5mbXQud2luLmNsaXBzLAogCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9jbGlwKSAqIGZoLT5vdi5uY2xpcHMpKSB7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCiAJLyogZmgtPm92LmZoIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB3ZSBoYXZlIHZhbGlkIG92ZXJsYXkgaW5mb3JtYXRpb25zLCB0b28gKi8KIAlmaC0+b3YuZmggPSBmaDsKIAotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQogCS8qIGNoZWNrIGlmIG91ciBjdXJyZW50IG92ZXJsYXkgaXMgYWN0aXZlICovCiAJaWYgKElTX09WRVJMQVlfQUNUSVZFKGZoKSAhPSAwKSB7CiAJCXNhYTcxNDZfc3RvcF9wcmV2aWV3KGZoKTsKQEAgLTk3Niw4ICs5NjIsNiBAQAogCQl9CiAJfQogCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQogCWZvciAoaSA9IDA7IGkgPCBkZXYtPmV4dF92dl9kYXRhLT5udW1fc3RkczsgaSsrKQogCQlpZiAoKmlkICYgZGV2LT5leHRfdnZfZGF0YS0+c3Rkc1tpXS5pZCkKIAkJCWJyZWFrOwpAQCAtOTg4LDggKzk3Miw2IEBACiAJCWZvdW5kID0gMTsKIAl9CiAKLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0KIAlpZiAodnYtPm92X3N1c3BlbmQgIT0gTlVMTCkgewogCQlzYWE3MTQ2X3N0YXJ0X3ByZXZpZXcodnYtPm92X3N1c3BlbmQpOwogCQl2di0+b3Zfc3VzcGVuZCA9IE5VTEw7CkBAIC0xMzU0LDcgKzEzMzYsNyBAQAogCQkJICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKIAkJCSAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBzYWE3MTQ2X2J1ZiksCi0JCQkgICAgZmlsZSwgTlVMTCk7CisJCQkgICAgZmlsZSwgJmRldi0+djRsMl9sb2NrKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvS2NvbmZpZwppbmRleCA3OGIwODk1Li42ZmM3OWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvS2NvbmZpZwpAQCAtMzQsNyArMzQsNyBAQAogY29uZmlnIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWJvb2wgIkN1c3RvbWl6ZSBhbmFsb2cgYW5kIGh5YnJpZCB0dW5lciBtb2R1bGVzIHRvIGJ1aWxkIgogCWRlcGVuZHMgb24gTUVESUFfVFVORVIKLQlkZWZhdWx0IHkgaWYgRU1CRURERUQKKwlkZWZhdWx0IHkgaWYgRVhQRVJUCiAJaGVscAogCSAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gZGVzZWxlY3QgdHVuZXIgZHJpdmVycyB1bm5lY2Vzc2FyeQogCSAgZm9yIHRoZWlyIGhhcmR3YXJlIGZyb20gdGhlIGJ1aWxkLiBVc2UgdGhpcyBvcHRpb24gd2l0aCBjYXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI5MC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyOTAuYwppbmRleCBjOTA2MmNlLi5iYzZhNjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI5MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4MjkwLmMKQEAgLTk1LDggKzk1LDcgQEAKIAkJbXNsZWVwKDIwKTsKIAl9IGVsc2UgewogCQltc2cgPSBkaXNhYmxlOwotCQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsIG1zZywgMSk7Ci0JCXR1bmVyX2kyY194ZmVyX3JlY3YoJnByaXYtPmkyY19wcm9wcywgJm1zZ1sxXSwgMSk7CisJCXR1bmVyX2kyY194ZmVyX3NlbmRfcmVjdigmcHJpdi0+aTJjX3Byb3BzLCBtc2csIDEsICZtc2dbMV0sIDEpOwogCiAJCWJ1ZlsyXSA9IG1zZ1sxXTsKIAkJYnVmWzJdICY9IH4weDA0OwpAQCAtMjMzLDE5ICsyMzIsMjIgQEAKIAkJdHVuZXJfaTJjX3hmZXJfc2VuZCgmcHJpdi0+aTJjX3Byb3BzLCBwbGxfYndfbm9tLCAyKTsKIAl9CiAKKwogCXRkYTgyOTBfaTJjX2JyaWRnZShmZSwgMSk7CiAKIAlpZiAoZmUtPm9wcy50dW5lcl9vcHMuc2V0X2FuYWxvZ19wYXJhbXMpCiAJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9hbmFsb2dfcGFyYW1zKGZlLCBwYXJhbXMpOwogCiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsICZhZGRyX3BsbF9zdGF0LCAxKTsKLQkJdHVuZXJfaTJjX3hmZXJfcmVjdigmcHJpdi0+aTJjX3Byb3BzLCAmcGxsX3N0YXQsIDEpOworCQl0dW5lcl9pMmNfeGZlcl9zZW5kX3JlY3YoJnByaXYtPmkyY19wcm9wcywKKwkJCQkJICZhZGRyX3BsbF9zdGF0LCAxLCAmcGxsX3N0YXQsIDEpOwogCQlpZiAocGxsX3N0YXQgJiAweDgwKSB7Ci0JCQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsICZhZGRyX2FkY19zYXQsIDEpOwotCQkJdHVuZXJfaTJjX3hmZXJfcmVjdigmcHJpdi0+aTJjX3Byb3BzLCAmYWRjX3NhdCwgMSk7Ci0JCQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsICZhZGRyX2FnY19zdGF0LCAxKTsKLQkJCXR1bmVyX2kyY194ZmVyX3JlY3YoJnByaXYtPmkyY19wcm9wcywgJmFnY19zdGF0LCAxKTsKKwkJCXR1bmVyX2kyY194ZmVyX3NlbmRfcmVjdigmcHJpdi0+aTJjX3Byb3BzLAorCQkJCQkJICZhZGRyX2FkY19zYXQsIDEsCisJCQkJCQkgJmFkY19zYXQsIDEpOworCQkJdHVuZXJfaTJjX3hmZXJfc2VuZF9yZWN2KCZwcml2LT5pMmNfcHJvcHMsCisJCQkJCQkgJmFkZHJfYWdjX3N0YXQsIDEsCisJCQkJCQkgJmFnY19zdGF0LCAxKTsKIAkJCXR1bmVyX2RiZygidGRhODI5MCBpcyBsb2NrZWQsIEFHQzogJWRcbiIsIGFnY19zdGF0KTsKIAkJCWJyZWFrOwogCQl9IGVsc2UgewpAQCAtMjU5LDIwICsyNjEsMjIgQEAKIAkJCSAgIGFnY19zdGF0LCBhZGNfc2F0LCBwbGxfc3RhdCAmIDB4ODApOwogCQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsIGdhaW5zZXRfMiwgMik7CiAJCW1zbGVlcCgxMDApOwotCQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsICZhZGRyX2FnY19zdGF0LCAxKTsKLQkJdHVuZXJfaTJjX3hmZXJfcmVjdigmcHJpdi0+aTJjX3Byb3BzLCAmYWdjX3N0YXQsIDEpOwotCQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsICZhZGRyX3BsbF9zdGF0LCAxKTsKLQkJdHVuZXJfaTJjX3hmZXJfcmVjdigmcHJpdi0+aTJjX3Byb3BzLCAmcGxsX3N0YXQsIDEpOworCQl0dW5lcl9pMmNfeGZlcl9zZW5kX3JlY3YoJnByaXYtPmkyY19wcm9wcywKKwkJCQkJICZhZGRyX2FnY19zdGF0LCAxLCAmYWdjX3N0YXQsIDEpOworCQl0dW5lcl9pMmNfeGZlcl9zZW5kX3JlY3YoJnByaXYtPmkyY19wcm9wcywKKwkJCQkJICZhZGRyX3BsbF9zdGF0LCAxLCAmcGxsX3N0YXQsIDEpOwogCQlpZiAoKGFnY19zdGF0ID4gMTE1KSB8fCAhKHBsbF9zdGF0ICYgMHg4MCkpIHsKIAkJCXR1bmVyX2RiZygiYWRqdXN0IGdhaW4sIHN0ZXAgMi4gQWdjOiAlZCwgbG9jazogJWRcbiIsCiAJCQkJICAgYWdjX3N0YXQsIHBsbF9zdGF0ICYgMHg4MCk7CiAJCQlpZiAocHJpdi0+Y2ZnLmFnY2YpCiAJCQkJcHJpdi0+Y2ZnLmFnY2YoZmUpOwogCQkJbXNsZWVwKDEwMCk7Ci0JCQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsICZhZGRyX2FnY19zdGF0LCAxKTsKLQkJCXR1bmVyX2kyY194ZmVyX3JlY3YoJnByaXYtPmkyY19wcm9wcywgJmFnY19zdGF0LCAxKTsKLQkJCXR1bmVyX2kyY194ZmVyX3NlbmQoJnByaXYtPmkyY19wcm9wcywgJmFkZHJfcGxsX3N0YXQsIDEpOwotCQkJdHVuZXJfaTJjX3hmZXJfcmVjdigmcHJpdi0+aTJjX3Byb3BzLCAmcGxsX3N0YXQsIDEpOworCQkJdHVuZXJfaTJjX3hmZXJfc2VuZF9yZWN2KCZwcml2LT5pMmNfcHJvcHMsCisJCQkJCQkgJmFkZHJfYWdjX3N0YXQsIDEsCisJCQkJCQkgJmFnY19zdGF0LCAxKTsKKwkJCXR1bmVyX2kyY194ZmVyX3NlbmRfcmVjdigmcHJpdi0+aTJjX3Byb3BzLAorCQkJCQkJICZhZGRyX3BsbF9zdGF0LCAxLAorCQkJCQkJICZwbGxfc3RhdCwgMSk7CiAJCQlpZigoYWdjX3N0YXQgPiAxMTUpIHx8ICEocGxsX3N0YXQgJiAweDgwKSkgewogCQkJCXR1bmVyX2RiZygiYWRqdXN0IGdhaW4sIHN0ZXAgMy4gQWdjOiAlZFxuIiwgYWdjX3N0YXQpOwogCQkJCXR1bmVyX2kyY194ZmVyX3NlbmQoJnByaXYtPmkyY19wcm9wcywgYWRjX2hlYWRfMTIsIDIpOwpAQCAtMjg0LDEwICsyODgsMTIgQEAKIAogCS8qIGwvIGwnIGRlYWRsb2NrPyAqLwogCWlmKHByaXYtPnRkYTgyOTBfZWFzeV9tb2RlICYgMHg2MCkgewotCQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsICZhZGRyX2FkY19zYXQsIDEpOwotCQl0dW5lcl9pMmNfeGZlcl9yZWN2KCZwcml2LT5pMmNfcHJvcHMsICZhZGNfc2F0LCAxKTsKLQkJdHVuZXJfaTJjX3hmZXJfc2VuZCgmcHJpdi0+aTJjX3Byb3BzLCAmYWRkcl9wbGxfc3RhdCwgMSk7Ci0JCXR1bmVyX2kyY194ZmVyX3JlY3YoJnByaXYtPmkyY19wcm9wcywgJnBsbF9zdGF0LCAxKTsKKwkJdHVuZXJfaTJjX3hmZXJfc2VuZF9yZWN2KCZwcml2LT5pMmNfcHJvcHMsCisJCQkJCSAmYWRkcl9hZGNfc2F0LCAxLAorCQkJCQkgJmFkY19zYXQsIDEpOworCQl0dW5lcl9pMmNfeGZlcl9zZW5kX3JlY3YoJnByaXYtPmkyY19wcm9wcywKKwkJCQkJICZhZGRyX3BsbF9zdGF0LCAxLAorCQkJCQkgJnBsbF9zdGF0LCAxKTsKIAkJaWYgKChhZGNfc2F0ID4gMjApIHx8ICEocGxsX3N0YXQgJiAweDgwKSkgewogCQkJdHVuZXJfZGJnKCJ0cnlpbmcgdG8gcmVzb2x2ZSBTRUNBTSBMIGRlYWRsb2NrXG4iKTsKIAkJCXR1bmVyX2kyY194ZmVyX3NlbmQoJnByaXYtPmkyY19wcm9wcywgYWdjX3JzdF9vbiwgMik7CkBAIC0zMDcsOCArMzEzLDcgQEAKIAlzdHJ1Y3QgdGRhODI5MF9wcml2ICpwcml2ID0gZmUtPmFuYWxvZ19kZW1vZF9wcml2OwogCXVuc2lnbmVkIGNoYXIgYnVmW10gPSB7IDB4MzAsIDB4MDAgfTsgLyogY2xiX3N0ZGJ0ICovCiAKLQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsICZidWZbMF0sIDEpOwotCXR1bmVyX2kyY194ZmVyX3JlY3YoJnByaXYtPmkyY19wcm9wcywgJmJ1ZlsxXSwgMSk7CisJdHVuZXJfaTJjX3hmZXJfc2VuZF9yZWN2KCZwcml2LT5pMmNfcHJvcHMsICZidWZbMF0sIDEsICZidWZbMV0sIDEpOwogCiAJaWYgKGVuYWJsZSkKIAkJYnVmWzFdID0gMHgwMTsKQEAgLTMyMyw4ICszMjgsNyBAQAogCXN0cnVjdCB0ZGE4MjkwX3ByaXYgKnByaXYgPSBmZS0+YW5hbG9nX2RlbW9kX3ByaXY7CiAJdW5zaWduZWQgY2hhciBidWZbXSA9IHsgMHgwMSwgMHgwMCB9OwogCi0JdHVuZXJfaTJjX3hmZXJfc2VuZCgmcHJpdi0+aTJjX3Byb3BzLCAmYnVmWzBdLCAxKTsKLQl0dW5lcl9pMmNfeGZlcl9yZWN2KCZwcml2LT5pMmNfcHJvcHMsICZidWZbMV0sIDEpOworCXR1bmVyX2kyY194ZmVyX3NlbmRfcmVjdigmcHJpdi0+aTJjX3Byb3BzLCAmYnVmWzBdLCAxLCAmYnVmWzFdLCAxKTsKIAogCWlmIChlbmFibGUpCiAJCWJ1ZlsxXSA9IDB4MDE7IC8qIHJpc2luZyBlZGdlIHNldHMgcmVncyAweDAyIC0gMHgyMyAqLwpAQCAtMzUzLDggKzM1Nyw3IEBACiAJc3RydWN0IHRkYTgyOTBfcHJpdiAqcHJpdiA9IGZlLT5hbmFsb2dfZGVtb2RfcHJpdjsKIAl1bnNpZ25lZCBjaGFyIGJ1ZltdID0geyAweDAyLCAweDAwIH07IC8qIERJVl9GVU5DICovCiAKLQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsICZidWZbMF0sIDEpOwotCXR1bmVyX2kyY194ZmVyX3JlY3YoJnByaXYtPmkyY19wcm9wcywgJmJ1ZlsxXSwgMSk7CisJdHVuZXJfaTJjX3hmZXJfc2VuZF9yZWN2KCZwcml2LT5pMmNfcHJvcHMsICZidWZbMF0sIDEsICZidWZbMV0sIDEpOwogCiAJaWYgKGVuYWJsZSkKIAkJYnVmWzFdICY9IH4weDQwOwpAQCAtMzcwLDEwICszNzMsMTAgQEAKIAl1bnNpZ25lZCBjaGFyIHNldF9ncGlvX2NmW10gICAgPSB7IDB4NDQsIDB4MDAgfTsKIAl1bnNpZ25lZCBjaGFyIHNldF9ncGlvX3ZhbFtdICAgPSB7IDB4NDYsIDB4MDAgfTsKIAotCXR1bmVyX2kyY194ZmVyX3NlbmQoJnByaXYtPmkyY19wcm9wcywgJnNldF9ncGlvX2NmWzBdLCAxKTsKLQl0dW5lcl9pMmNfeGZlcl9yZWN2KCZwcml2LT5pMmNfcHJvcHMsICZzZXRfZ3Bpb19jZlsxXSwgMSk7Ci0JdHVuZXJfaTJjX3hmZXJfc2VuZCgmcHJpdi0+aTJjX3Byb3BzLCAmc2V0X2dwaW9fdmFsWzBdLCAxKTsKLQl0dW5lcl9pMmNfeGZlcl9yZWN2KCZwcml2LT5pMmNfcHJvcHMsICZzZXRfZ3Bpb192YWxbMV0sIDEpOworCXR1bmVyX2kyY194ZmVyX3NlbmRfcmVjdigmcHJpdi0+aTJjX3Byb3BzLAorCQkJCSAmc2V0X2dwaW9fY2ZbMF0sIDEsICZzZXRfZ3Bpb19jZlsxXSwgMSk7CisJdHVuZXJfaTJjX3hmZXJfc2VuZF9yZWN2KCZwcml2LT5pMmNfcHJvcHMsCisJCQkJICZzZXRfZ3Bpb192YWxbMF0sIDEsICZzZXRfZ3Bpb192YWxbMV0sIDEpOwogCiAJc2V0X2dwaW9fY2ZbMV0gJj0gMHhmMDsgLyogY2xlYXIgR1BJT18wIGJpdHMgMy0wICovCiAKQEAgLTM5Miw4ICszOTUsNyBAQAogCXVuc2lnbmVkIGNoYXIgaHZwbGxfc3RhdCA9IDB4MjY7CiAJdW5zaWduZWQgY2hhciByZXQ7CiAKLQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsICZodnBsbF9zdGF0LCAxKTsKLQl0dW5lcl9pMmNfeGZlcl9yZWN2KCZwcml2LT5pMmNfcHJvcHMsICZyZXQsIDEpOworCXR1bmVyX2kyY194ZmVyX3NlbmRfcmVjdigmcHJpdi0+aTJjX3Byb3BzLCAmaHZwbGxfc3RhdCwgMSwgJnJldCwgMSk7CiAJcmV0dXJuIChyZXQgJiAweDAxKSA/IDY1NTM1IDogMDsKIH0KIApAQCAtNDEzLDggKzQxNSw4IEBACiAJdGRhODI5NV9wb3dlcihmZSwgMSk7CiAJdGRhODI5NV9hZ2MxX291dChmZSwgMSk7CiAKLQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsICZibGFua2luZ19tb2RlWzBdLCAxKTsKLQl0dW5lcl9pMmNfeGZlcl9yZWN2KCZwcml2LT5pMmNfcHJvcHMsICZibGFua2luZ19tb2RlWzFdLCAxKTsKKwl0dW5lcl9pMmNfeGZlcl9zZW5kX3JlY3YoJnByaXYtPmkyY19wcm9wcywKKwkJCQkgJmJsYW5raW5nX21vZGVbMF0sIDEsICZibGFua2luZ19tb2RlWzFdLCAxKTsKIAogCXRkYTgyOTVfc2V0X3ZpZGVvX3N0ZChmZSk7CiAKQEAgLTQ0Nyw4ICs0NDksOCBAQAogCXVuc2lnbmVkIGNoYXIgaTJjX2dldF9hZmNbMV0gPSB7IDB4MUIgfTsKIAl1bnNpZ25lZCBjaGFyIGFmYyA9IDA7CiAKLQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsIGkyY19nZXRfYWZjLCBBUlJBWV9TSVpFKGkyY19nZXRfYWZjKSk7Ci0JdHVuZXJfaTJjX3hmZXJfcmVjdigmcHJpdi0+aTJjX3Byb3BzLCAmYWZjLCAxKTsKKwl0dW5lcl9pMmNfeGZlcl9zZW5kX3JlY3YoJnByaXYtPmkyY19wcm9wcywKKwkJCQkgaTJjX2dldF9hZmMsIEFSUkFZX1NJWkUoaTJjX2dldF9hZmMpLCAmYWZjLCAxKTsKIAlyZXR1cm4gKGFmYyAmIDB4ODApPyA2NTUzNTowOwogfQogCkBAIC02NTQsMjAgKzY1NiwyNiBAQAogc3RhdGljIGludCB0ZGE4MjkwX3Byb2JlKHN0cnVjdCB0dW5lcl9pMmNfcHJvcHMgKmkyY19wcm9wcykKIHsKICNkZWZpbmUgVERBODI5MF9JRCAweDg5Ci0JdW5zaWduZWQgY2hhciB0ZGE4MjkwX2lkW10gPSB7IDB4MWYsIDB4MDAgfTsKKwl1OCByZWcgPSAweDFmLCBpZDsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dfcmVhZFtdID0geworCQl7IC5hZGRyID0gMHg0YiwgLmZsYWdzID0gMCwgLmxlbiA9IDEsIC5idWYgPSAmcmVnIH0sCisJCXsgLmFkZHIgPSAweDRiLCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmxlbiA9IDEsIC5idWYgPSAmaWQgfSwKKwl9OwogCiAJLyogZGV0ZWN0IHRkYTgyOTAgKi8KLQl0dW5lcl9pMmNfeGZlcl9zZW5kKGkyY19wcm9wcywgJnRkYTgyOTBfaWRbMF0sIDEpOwotCXR1bmVyX2kyY194ZmVyX3JlY3YoaTJjX3Byb3BzLCAmdGRhODI5MF9pZFsxXSwgMSk7CisJaWYgKGkyY190cmFuc2ZlcihpMmNfcHJvcHMtPmFkYXAsIG1zZ19yZWFkLCAyKSAhPSAyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB0ZGE4MjkwIGNvdWxkbid0IHJlYWQgcmVnaXN0ZXIgMHglMDJ4XG4iLAorCQkJICAgICAgIF9fZnVuY19fLCByZWcpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKLQlpZiAodGRhODI5MF9pZFsxXSA9PSBUREE4MjkwX0lEKSB7CisJaWYgKGlkID09IFREQTgyOTBfSUQpIHsKIAkJaWYgKGRlYnVnKQogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0ZGE4MjkwIGRldGVjdGVkIEAgJWQtJTA0eFxuIiwKIAkJCSAgICAgICBfX2Z1bmNfXywgaTJjX2FkYXB0ZXJfaWQoaTJjX3Byb3BzLT5hZGFwKSwKIAkJCSAgICAgICBpMmNfcHJvcHMtPmFkZHIpOwogCQlyZXR1cm4gMDsKIAl9Ci0KIAlyZXR1cm4gLUVOT0RFVjsKIH0KIApAQCAtNjc1LDE2ICs2ODMsMjMgQEAKIHsKICNkZWZpbmUgVERBODI5NV9JRCAweDhhCiAjZGVmaW5lIFREQTgyOTVDMl9JRCAweDhiCi0JdW5zaWduZWQgY2hhciB0ZGE4Mjk1X2lkW10gPSB7IDB4MmYsIDB4MDAgfTsKKwl1OCByZWcgPSAweDJmLCBpZDsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dfcmVhZFtdID0geworCQl7IC5hZGRyID0gMHg0YiwgLmZsYWdzID0gMCwgLmxlbiA9IDEsIC5idWYgPSAmcmVnIH0sCisJCXsgLmFkZHIgPSAweDRiLCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmxlbiA9IDEsIC5idWYgPSAmaWQgfSwKKwl9OwogCi0JLyogZGV0ZWN0IHRkYTgyOTUgKi8KLQl0dW5lcl9pMmNfeGZlcl9zZW5kKGkyY19wcm9wcywgJnRkYTgyOTVfaWRbMF0sIDEpOwotCXR1bmVyX2kyY194ZmVyX3JlY3YoaTJjX3Byb3BzLCAmdGRhODI5NV9pZFsxXSwgMSk7CisJLyogZGV0ZWN0IHRkYTgyOTAgKi8KKwlpZiAoaTJjX3RyYW5zZmVyKGkyY19wcm9wcy0+YWRhcCwgbXNnX3JlYWQsIDIpICE9IDIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHRkYTgyOTAgY291bGRuJ3QgcmVhZCByZWdpc3RlciAweCUwMnhcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHJlZyk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAotCWlmICgodGRhODI5NV9pZFsxXSAmIDB4ZmUpID09IFREQTgyOTVfSUQpIHsKKwlpZiAoKGlkICYgMHhmZSkgPT0gVERBODI5NV9JRCkgewogCQlpZiAoZGVidWcpCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICVzIGRldGVjdGVkIEAgJWQtJTA0eFxuIiwKLQkJCSAgICAgICBfX2Z1bmNfXywgKHRkYTgyOTVfaWRbMV0gPT0gVERBODI5NV9JRCkgPworCQkJICAgICAgIF9fZnVuY19fLCAoaWQgPT0gVERBODI5NV9JRCkgPwogCQkJICAgICAgICJ0ZGE4Mjk1YzEiIDogInRkYTgyOTVjMiIsCiAJCQkgICAgICAgaTJjX2FkYXB0ZXJfaWQoaTJjX3Byb3BzLT5hZGFwKSwKIAkJCSAgICAgICBpMmNfcHJvcHMtPmFkZHIpOwpAQCAtNzQwLDkgKzc1NSwxMSBAQAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBhbmFsb2dfZGVtb2Rfb3BzKSk7CiAJfQogCi0JaWYgKCghKGNmZykgfHwgKFREQTgyOVhfUFJPQkVfVFVORVIgPT0gY2ZnLT5wcm9iZV90dW5lcikpICYmCi0JICAgICh0ZGE4Mjl4X2ZpbmRfdHVuZXIoZmUpIDwgMCkpCi0JCWdvdG8gZmFpbDsKKwlpZiAoIShjZmcpIHx8IChUREE4MjlYX1BST0JFX1RVTkVSID09IGNmZy0+cHJvYmVfdHVuZXIpKSB7CisJCXRkYTgyOTVfcG93ZXIoZmUsIDEpOworCQlpZiAodGRhODI5eF9maW5kX3R1bmVyKGZlKSA8IDApCisJCQlnb3RvIGZhaWw7CisJfQogCiAJc3dpdGNoIChwcml2LT52ZXIpIHsKIAljYXNlIFREQTgyOTA6CkBAIC03ODYsNiArODAzLDggQEAKIAlyZXR1cm4gZmU7CiAKIGZhaWw6CisJbWVtc2V0KCZmZS0+b3BzLmFuYWxvZ19vcHMsIDAsIHNpemVvZihzdHJ1Y3QgYW5hbG9nX2RlbW9kX29wcykpOworCiAJdGRhODI5eF9yZWxlYXNlKGZlKTsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTgwOSw4ICs4MjgsOCBAQAogCWludCBpOwogCiAJLyogcnVsZSBvdXQgdGRhOTg4Nywgd2hpY2ggd291bGQgcmV0dXJuIHRoZSBzYW1lIGJ5dGUgcmVwZWF0ZWRseSAqLwotCXR1bmVyX2kyY194ZmVyX3NlbmQoJmkyY19wcm9wcywgc29mdF9yZXNldCwgMSk7Ci0JdHVuZXJfaTJjX3hmZXJfcmVjdigmaTJjX3Byb3BzLCBidWYsIFBST0JFX0JVRkZFUl9TSVpFKTsKKwl0dW5lcl9pMmNfeGZlcl9zZW5kX3JlY3YoJmkyY19wcm9wcywKKwkJCQkgc29mdF9yZXNldCwgMSwgYnVmLCBQUk9CRV9CVUZGRVJfU0laRSk7CiAJZm9yIChpID0gMTsgaSA8IFBST0JFX0JVRkZFUl9TSVpFOyBpKyspIHsKIAkJaWYgKGJ1ZltpXSAhPSBidWZbMF0pCiAJCQlicmVhazsKQEAgLTgyNywxMyArODQ2LDEyIEBACiAJLyogZmFsbCBiYWNrIHRvIG9sZCBwcm9iaW5nIG1ldGhvZCAqLwogCXR1bmVyX2kyY194ZmVyX3NlbmQoJmkyY19wcm9wcywgZWFzeV9tb2RlX2IsIDIpOwogCXR1bmVyX2kyY194ZmVyX3NlbmQoJmkyY19wcm9wcywgc29mdF9yZXNldCwgMik7Ci0JdHVuZXJfaTJjX3hmZXJfc2VuZCgmaTJjX3Byb3BzLCAmYWRkcl9kdG9fbHNiLCAxKTsKLQl0dW5lcl9pMmNfeGZlcl9yZWN2KCZpMmNfcHJvcHMsICZkYXRhLCAxKTsKKwl0dW5lcl9pMmNfeGZlcl9zZW5kX3JlY3YoJmkyY19wcm9wcywgJmFkZHJfZHRvX2xzYiwgMSwgJmRhdGEsIDEpOwogCWlmIChkYXRhID09IDApIHsKIAkJdHVuZXJfaTJjX3hmZXJfc2VuZCgmaTJjX3Byb3BzLCBlYXN5X21vZGVfZywgMik7CiAJCXR1bmVyX2kyY194ZmVyX3NlbmQoJmkyY19wcm9wcywgc29mdF9yZXNldCwgMik7Ci0JCXR1bmVyX2kyY194ZmVyX3NlbmQoJmkyY19wcm9wcywgJmFkZHJfZHRvX2xzYiwgMSk7Ci0JCXR1bmVyX2kyY194ZmVyX3JlY3YoJmkyY19wcm9wcywgJmRhdGEsIDEpOworCQl0dW5lcl9pMmNfeGZlcl9zZW5kX3JlY3YoJmkyY19wcm9wcywKKwkJCQkJICZhZGRyX2R0b19sc2IsIDEsICZkYXRhLCAxKTsKIAkJaWYgKGRhdGEgPT0gMHg3YikgewogCQkJcmV0dXJuIDA7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jCmluZGV4IDhjYTQ4ZjcuLjk4ZmZiNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYwpAQCAtNTE0LDggKzUxNCw4IEBACiAJdW5pb24gewogCQl1MTYgc3lzdGVtMTY7CiAJCXN0cnVjdCB7Ci0JCQl1OCBzeXN0ZW07CiAJCQl1OCBub3Rfc3lzdGVtOworCQkJdTggc3lzdGVtOwogCQl9OwogCX07CiAJdTggZGF0YTsKQEAgLTU3NSw3ICs1NzUsNyBAQAogCQlpZiAoKHBvbGxfcmVwbHktPnN5c3RlbSBeIHBvbGxfcmVwbHktPm5vdF9zeXN0ZW0pICE9IDB4ZmYpIHsKIAkJCWRlYl9kYXRhKCJORUMgZXh0ZW5kZWQgcHJvdG9jb2xcbiIpOwogCQkJLyogTkVDIGV4dGVuZGVkIGNvZGUgLSAyNCBiaXRzICovCi0JCQlrZXljb2RlID0gcG9sbF9yZXBseS0+c3lzdGVtMTYgPDwgOCB8IHBvbGxfcmVwbHktPmRhdGE7CisJCQlrZXljb2RlID0gYmUxNl90b19jcHUocG9sbF9yZXBseS0+c3lzdGVtMTYpIDw8IDggfCBwb2xsX3JlcGx5LT5kYXRhOwogCQl9IGVsc2UgewogCQkJZGViX2RhdGEoIk5FQyBub3JtYWwgcHJvdG9jb2xcbiIpOwogCQkJLyogbm9ybWFsIE5FQyBjb2RlIC0gMTYgYml0cyAqLwpAQCAtNTg3LDcgKzU4Nyw3IEBACiAJCWRlYl9kYXRhKCJSQzUgcHJvdG9jb2xcbiIpOwogCQkvKiBSQzUgUHJvdG9jb2wgKi8KIAkJdG9nZ2xlID0gcG9sbF9yZXBseS0+cmVwb3J0X2lkOwotCQlrZXljb2RlID0gcG9sbF9yZXBseS0+c3lzdGVtMTYgPDwgOCB8IHBvbGxfcmVwbHktPmRhdGE7CisJCWtleWNvZGUgPSBwb2xsX3JlcGx5LT5zeXN0ZW0gPDwgOCB8IHBvbGxfcmVwbHktPmRhdGE7CiAKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1yYy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1yYy5jCmluZGV4IGZjZjM4MjguLmY4MmQ0YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtcmMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LXJjLmMKQEAgLTE3Miw3ICsxNzIsOCBAQAogCiB2b2lkIGZkdHZfaGFuZGxlX3JjKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1bnNpZ25lZCBpbnQgY29kZSkKIHsKLQl1MTYgKmtleWNvZGUgPSBmZHR2LT5yZW1vdGVfY3RybF9kZXYtPmtleWNvZGU7CisJc3RydWN0IGlucHV0X2RldiAqaWRldiA9IGZkdHYtPnJlbW90ZV9jdHJsX2RldjsKKwl1MTYgKmtleWNvZGUgPSBpZGV2LT5rZXljb2RlOwogCiAJaWYgKGNvZGUgPj0gMHgwMzAwICYmIGNvZGUgPD0gMHgwMzFmKQogCQljb2RlID0ga2V5Y29kZVtjb2RlIC0gMHgwMzAwXTsKQEAgLTE4OCw2ICsxODksOCBAQAogCQlyZXR1cm47CiAJfQogCi0JaW5wdXRfcmVwb3J0X2tleShmZHR2LT5yZW1vdGVfY3RybF9kZXYsIGNvZGUsIDEpOwotCWlucHV0X3JlcG9ydF9rZXkoZmR0di0+cmVtb3RlX2N0cmxfZGV2LCBjb2RlLCAwKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGlkZXYsIGNvZGUsIDEpOworCWlucHV0X3N5bmMoaWRldik7CisJaW5wdXRfcmVwb3J0X2tleShpZGV2LCBjb2RlLCAwKTsKKwlpbnB1dF9zeW5jKGlkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZwppbmRleCBlZjNlNDNhLi5iODUxOWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZwpAQCAtMSw3ICsxLDcgQEAKIGNvbmZpZyBEVkJfRkVfQ1VTVE9NSVNFCiAJYm9vbCAiQ3VzdG9taXNlIHRoZSBmcm9udGVuZCBtb2R1bGVzIHRvIGJ1aWxkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKLQlkZWZhdWx0IHkgaWYgRU1CRURERUQKKwlkZWZhdWx0IHkgaWYgRVhQRVJUCiAJaGVscAogCSAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0L2Rlc2VsZWN0IGZyb250ZW5kIGRyaXZlcnMgZm9yIHRoZWlyCiAJICBoYXJkd2FyZSBmcm9tIHRoZSBidWlsZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuYwppbmRleCBjZTIyMjA1Li5iYTI1ZmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYWY5MDEzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5jCkBAIC0zMzQsMTEgKzMzNCwxMSBAQAogCQkJCWlmX3NhbXBsZV9mcmVxID0gMzMwMDAwMDsgLyogMy4zIE1IeiAqLwogCQkJCWJyZWFrOwogCQkJY2FzZSBCQU5EV0lEVEhfN19NSFo6Ci0JCQkJaWZfc2FtcGxlX2ZyZXEgPSAzODAwMDAwOyAvKiAzLjggTUh6ICovCisJCQkJaWZfc2FtcGxlX2ZyZXEgPSAzNTAwMDAwOyAvKiAzLjUgTUh6ICovCiAJCQkJYnJlYWs7CiAJCQljYXNlIEJBTkRXSURUSF84X01IWjoKIAkJCWRlZmF1bHQ6Ci0JCQkJaWZfc2FtcGxlX2ZyZXEgPSA0MzAwMDAwOyAvKiA0LjMgTUh6ICovCisJCQkJaWZfc2FtcGxlX2ZyZXEgPSA0MDAwMDAwOyAvKiA0LjAgTUh6ICovCiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0gZWxzZSBpZiAoc3RhdGUtPmNvbmZpZy50dW5lciA9PSBBRjkwMTNfVFVORVJfVERBMTgyMTgpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9peDI1MDV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvaXgyNTA1di5jCmluZGV4IDYzNjBjNjguLjZjMmU5MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9peDI1MDV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2l4MjUwNXYuYwpAQCAtMzExLDcgKzMxMSw3IEBACiAJcmV0dXJuIGZlOwogCiBlcnJvcjoKLQlpeDI1MDV2X3JlbGVhc2UoZmUpOworCWtmcmVlKHN0YXRlKTsKIAlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0woaXgyNTA1dl9hdHRhY2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL21iODZhMjBzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbWI4NmEyMHMuYwppbmRleCBkM2FkM2U3Li5jYzRhY2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbWI4NmEyMHMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbWI4NmEyMHMuYwpAQCAtNDMsNiArNDMsOCBAQAogCWNvbnN0IHN0cnVjdCBtYjg2YTIwc19jb25maWcgKmNvbmZpZzsKIAogCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7CisKKwlib29sIG5lZWRfaW5pdDsKIH07CiAKIHN0cnVjdCByZWdkYXRhIHsKQEAgLTMxOCw3ICszMjAsNyBAQAogCiAJcmMgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSk7CiAJaWYgKHJjICE9IDEpIHsKLQkJcHJpbnRrKCIlczogd3JpdGVyZWcgcmNvcihyYyA9PSAlaSwgcmVnID09IDB4JTAyeCwiCisJCXByaW50aygiJXM6IHdyaXRlcmVnIGVycm9yIChyYyA9PSAlaSwgcmVnID09IDB4JTAyeCwiCiAJCQkgIiBkYXRhID09IDB4JTAyeClcbiIsIF9fZnVuY19fLCByYywgcmVnLCBkYXRhKTsKIAkJcmV0dXJuIHJjOwogCX0KQEAgLTM1Myw3ICszNTUsNyBAQAogCXJjID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMik7CiAKIAlpZiAocmMgIT0gMikgewotCQlyYygiJXM6IHJlZz0weCV4IChyY29yPSVkKVxuIiwgX19mdW5jX18sIHJlZywgcmMpOworCQlyYygiJXM6IHJlZz0weCV4IChlcnJvcj0lZClcbiIsIF9fZnVuY19fLCByZWcsIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtMzgyLDIzICszODQsMzEgQEAKIAkvKiBJbml0aWFsaXplIHRoZSBmcm9udGVuZCAqLwogCXJjID0gbWI4NmEyMHNfd3JpdGVyZWdkYXRhKHN0YXRlLCBtYjg2YTIwc19pbml0KTsKIAlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7CisJCWdvdG8gZXJyOwogCiAJaWYgKCFzdGF0ZS0+Y29uZmlnLT5pc19zZXJpYWwpIHsKIAkJcmVnRDUgJj0gfjE7CiAKIAkJcmMgPSBtYjg2YTIwc193cml0ZXJlZyhzdGF0ZSwgMHg1MCwgMHhkNSk7CiAJCWlmIChyYyA8IDApCi0JCQlyZXR1cm4gcmM7CisJCQlnb3RvIGVycjsKIAkJcmMgPSBtYjg2YTIwc193cml0ZXJlZyhzdGF0ZSwgMHg1MSwgcmVnRDUpOwogCQlpZiAocmMgPCAwKQotCQkJcmV0dXJuIHJjOworCQkJZ290byBlcnI7CiAJfQogCiAJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKIAkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKIAotCXJldHVybiAwOworZXJyOgorCWlmIChyYyA8IDApIHsKKwkJc3RhdGUtPm5lZWRfaW5pdCA9IHRydWU7CisJCXByaW50ayhLRVJOX0lORk8gIm1iODZhMjBzOiBJbml0IGZhaWxlZC4gV2lsbCB0cnkgYWdhaW4gbGF0ZXJcbiIpOworCX0gZWxzZSB7CisJCXN0YXRlLT5uZWVkX2luaXQgPSBmYWxzZTsKKwkJZHByaW50aygiSW5pdGlhbGl6YXRpb24gc3VjY2VkZWQuXG4iKTsKKwl9CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IG1iODZhMjBzX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnN0cmVuZ3RoKQpAQCAtNDg1LDggKzQ5NSwyMiBAQAogCiAJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKIAkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKwlkcHJpbnRrKCJDYWxsaW5nIHR1bmVyIHNldCBwYXJhbWV0ZXJzXG4iKTsKIAlmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKGZlLCBwKTsKIAorCS8qCisJICogTWFrZSBpdCBtb3JlIHJlbGlhYmxlOiBpZiwgZm9yIHNvbWUgcmVhc29uLCB0aGUgaW5pdGlhbAorCSAqIGRldmljZSBpbml0aWFsaXphdGlvbiBkb2Vzbid0IGhhcHBlbiwgaW5pdGlhbGl6ZSBpdCB3aGVuCisJICogYSBTQlRWRCBwYXJhbWV0ZXJzIGFyZSBhZGp1c3RlZC4KKwkgKgorCSAqIFVuZm9ydHVuYXRlbHksIGR1ZSB0byBhIGhhcmQgdG8gdHJhY2sgYnVnIGF0IHRkYTgyOXgvdGRhMTgyNzEsCisJICogdGhlIGFnYyBjYWxsYmFjayBsb2dpYyBpcyBub3QgY2FsbGVkIGR1cmluZyBEVkIgYXR0YWNoIHRpbWUsCisJICogY2F1c2luZyBtYjg2YTIwcyB0byBub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBLd29ybGQgU0JUVkQuCisJICogU28sIHRoaXMgaGFjayBpcyBuZWVkZWQsIGluIG9yZGVyIHRvIG1ha2UgS3dvcmxkIFNCVFZEIHRvIHdvcmsuCisJICovCisJaWYgKHN0YXRlLT5uZWVkX2luaXQpCisJCW1iODZhMjBzX2luaXRmZShmZSk7CisKIAlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOwogCXJjID0gbWI4NmEyMHNfd3JpdGVyZWdkYXRhKHN0YXRlLCBtYjg2YTIwc19yZXNldF9yZWNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2NhLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfY2EuYwppbmRleCAxMjJjNzI4Li45ZmMxZGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfY2EuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfY2EuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJewogCQljYV9zbG90X2luZm9fdCAqaW5mbz0oY2Ffc2xvdF9pbmZvX3QgKilwYXJnOwogCi0JCWlmIChpbmZvLT5udW0gPiAxKQorCQlpZiAoaW5mby0+bnVtIDwgMCB8fCBpbmZvLT5udW0gPiAxKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWF2NzExMC0+Y2lfc2xvdFtpbmZvLT5udW1dLm51bSA9IGluZm8tPm51bTsKIAkJYXY3MTEwLT5jaV9zbG90W2luZm8tPm51bV0udHlwZSA9IEZXX0NJX0xMX1NVUFBPUlQoYXY3MTEwLT5hcm1fYXBwKSA/CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKaW5kZXggM2M1YTQ3My4uZWNkZmZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZwpAQCAtMTUxLDIwICsxNTEsNiBAQAogCSAgZm9sbG93aW5nIHBvcnRzIHdpbGwgYmUgcHJvYmVkOiAweDIwYywgMHgzMGMsIDB4MjRjLCAweDM0YywgMHgyNDggYW5kCiAJICAweDI4Yy4KIAotY29uZmlnIFJBRElPX0dFTVRFS19QQ0kKLQl0cmlzdGF0ZSAiR2VtVGVrIFBDSSBSYWRpbyBDYXJkIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFBDSQotCS0tLWhlbHAtLS0KLQkgIENob29zZSBZIGhlcmUgaWYgeW91IGhhdmUgdGhpcyBQQ0kgRk0gcmFkaW8gY2FyZC4KLQotCSAgSW4gb3JkZXIgdG8gY29udHJvbCB5b3VyIHJhZGlvIGNhcmQsIHlvdSB3aWxsIG5lZWQgdG8gdXNlIHByb2dyYW1zCi0JICB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIFZpZGVvIGZvciBMaW51eCBBUEkuICBJbmZvcm1hdGlvbiBvbgotCSAgdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZCBhdAotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJhZGlvLWdlbXRlay1wY2kuCi0KIGNvbmZpZyBSQURJT19NQVhJUkFESU8KIAl0cmlzdGF0ZSAiR3VpbGxlbW90IE1BWEkgUmFkaW8gRk0gMjAwMCByYWRpbyIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgUENJCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9yYWRpby9NYWtlZmlsZQppbmRleCBkMjk3MDc0Li43MTc2NTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vTWFrZWZpbGUKQEAgLTEzLDcgKzEzLDYgQEAKIG9iai0kKENPTkZJR19SQURJT19SVFJBQ0spICs9IHJhZGlvLWFpbXNsYWIubwogb2JqLSQoQ09ORklHX1JBRElPX1pPTFRSSVgpICs9IHJhZGlvLXpvbHRyaXgubwogb2JqLSQoQ09ORklHX1JBRElPX0dFTVRFSykgKz0gcmFkaW8tZ2VtdGVrLm8KLW9iai0kKENPTkZJR19SQURJT19HRU1URUtfUENJKSArPSByYWRpby1nZW10ZWstcGNpLm8KIG9iai0kKENPTkZJR19SQURJT19UUlVTVCkgKz0gcmFkaW8tdHJ1c3Qubwogb2JqLSQoQ09ORklHX0kyQ19TSTQ3MTMpICs9IHNpNDcxMy1pMmMubwogb2JqLSQoQ09ORklHX1JBRElPX1NJNDcxMykgKz0gcmFkaW8tc2k0NzEzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMKaW5kZXggNmNjNWQxMy4uNGNlMTBkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4JLyogTW9kdWxlcyAJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEluaXRkYXRhCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24JCSovCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogbXNsZWVwCQkJKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgkvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8JKi8KICNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLXBjaS5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4ZmE4NWIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NzggKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgICAgcmFkaW8tZ2VtdGVrLXBjaS5jIC0gR2VtdGVrIFBDSSBSYWRpbyBkcml2ZXIKLSAqICAgICAoQykgMjAwMSBWbGFkaW1pciBTaGVib3JkYWV2IDx2c2hlYm9yZGFldkBtYWlsLnJ1PgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwKLSAqICAgICBVU0EuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqICAgICBHZW10ZWsgQ29ycCBzdGlsbCBzaWxlbnRseSByZWZ1c2VzIHRvIHJlbGVhc2UgYW55IHNwZWNpZmljYXRpb25zCi0gKiAgICAgb2YgdGhlaXIgbXVsdGltZWRpYSBkZXZpY2VzLCBzbyB0aGUgcHJvdG9jb2wgc3RpbGwgaGFzIHRvIGJlCi0gKiAgICAgcmV2ZXJzZSBlbmdpbmVlcmVkLgotICoKLSAqICAgICBUaGUgdjRsIGNvZGUgd2FzIGluc3BpcmVkIGJ5IEpvbmFzIE11bnNpbidzICBHZW10ZWsgc2VyaWFsIGxpbmUKLSAqICAgICByYWRpbyBkZXZpY2UgZHJpdmVyLgotICoKLSAqICAgICBQbGVhc2UsIGxldCBtZSBrbm93IGlmIHRoaXMgcGllY2Ugb2YgY29kZSB3YXMgdXNlZnVsIDopCi0gKgotICogICAgIFRPRE86IG11bHRpcGxlIGRldmljZSBzdXBwb3J0IGFuZCBwb3J0YWJpbGl0eSB3ZXJlIG5vdCB0ZXN0ZWQKLSAqCi0gKiAgICAgQ29udmVydGVkIHRvIFY0TDIgQVBJIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLQotTU9EVUxFX0FVVEhPUigiVmxhZGltaXIgU2hlYm9yZGFldiA8dnNoZWJvcmRhZXZAbWFpbC5ydT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiVGhlIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgdGhlIEdlbXRlayBQQ0kgUmFkaW8gQ2FyZCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgaW50IG5yX3JhZGlvID0gLTE7Ci1zdGF0aWMgaW50IG14ID0gMTsKLQotbW9kdWxlX3BhcmFtKG14LCBib29sLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MobXgsICJzaW5nbGUgZGlnaXQ6IDEgLSB0dXJuIG9mZiB0aGUgdHVybmVyIHVwb24gbW9kdWxlIGV4aXQgKGRlZmF1bHQpLCAwIC0gZG8gbm90Iik7Ci1tb2R1bGVfcGFyYW0obnJfcmFkaW8sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5yX3JhZGlvLCAidmlkZW80bGludXggZGV2aWNlIG51bWJlciB0byB1c2UiKTsKLQotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDIpCi0KLSNpZm5kZWYgUENJX1ZFTkRPUl9JRF9HRU1URUsKLSNkZWZpbmUgUENJX1ZFTkRPUl9JRF9HRU1URUsgMHg1MDQ2Ci0jZW5kaWYKLQotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0dFTVRFS19QUjEwMwotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0dFTVRFS19QUjEwMyAweDEwMDEKLSNlbmRpZgotCi0jaWZuZGVmIEdFTVRFS19QQ0lfUkFOR0VfTE9XCi0jZGVmaW5lIEdFTVRFS19QQ0lfUkFOR0VfTE9XICg4NyoxNjAwMCkKLSNlbmRpZgotCi0jaWZuZGVmIEdFTVRFS19QQ0lfUkFOR0VfSElHSAotI2RlZmluZSBHRU1URUtfUENJX1JBTkdFX0hJR0ggKDEwOCoxNjAwMCkKLSNlbmRpZgotCi1zdHJ1Y3QgZ2VtdGVrX3BjaSB7Ci0Jc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwotCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKLQlzdHJ1Y3QgbXV0ZXggbG9jazsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLQotCXUzMiBpb2Jhc2U7Ci0JdTMyIGxlbmd0aDsKLQotCXUzMiBjdXJyZW50X2ZyZXF1ZW5jeTsKLQl1OCAgbXV0ZTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGdlbXRla19wY2kgKnRvX2dlbXRla19wY2koc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3QgZ2VtdGVrX3BjaSwgdjRsMl9kZXYpOwotfQotCi1zdGF0aWMgaW5saW5lIHU4IGdlbXRla19wY2lfb3V0KHUxNiB2YWx1ZSwgdTMyIHBvcnQpCi17Ci0Jb3V0dyh2YWx1ZSwgcG9ydCk7Ci0KLQlyZXR1cm4gKHU4KXZhbHVlOwotfQotCi0jZGVmaW5lIF9iMCh2KSAoKigodTggKikmdikpCi0KLXN0YXRpYyB2b2lkIF9fZ2VtdGVrX3BjaV9jbWQodTE2IHZhbHVlLCB1MzIgcG9ydCwgdTggKmxhc3RfYnl0ZSwgaW50IGtlZXApCi17Ci0JdTggYnl0ZSA9ICpsYXN0X2J5dGU7Ci0KLQlpZiAoIXZhbHVlKSB7Ci0JCWlmICgha2VlcCkKLQkJCXZhbHVlID0gKHUxNilwb3J0OwotCQlieXRlICY9IDB4ZmQ7Ci0JfSBlbHNlCi0JCWJ5dGUgfD0gMjsKLQotCV9iMCh2YWx1ZSkgPSBieXRlOwotCW91dHcodmFsdWUsIHBvcnQpOwotCWJ5dGUgfD0gMTsKLQlfYjAodmFsdWUpID0gYnl0ZTsKLQlvdXR3KHZhbHVlLCBwb3J0KTsKLQlieXRlICY9IDB4ZmU7Ci0JX2IwKHZhbHVlKSA9IGJ5dGU7Ci0Jb3V0dyh2YWx1ZSwgcG9ydCk7Ci0KLQkqbGFzdF9ieXRlID0gYnl0ZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdlbXRla19wY2lfbmlsKHUzMiBwb3J0LCB1OCAqbGFzdF9ieXRlKQotewotCV9fZ2VtdGVrX3BjaV9jbWQoMHgwMCwgcG9ydCwgbGFzdF9ieXRlLCBmYWxzZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBnZW10ZWtfcGNpX2NtZCh1MTYgY21kLCB1MzIgcG9ydCwgdTggKmxhc3RfYnl0ZSkKLXsKLQlfX2dlbXRla19wY2lfY21kKGNtZCwgcG9ydCwgbGFzdF9ieXRlLCB0cnVlKTsKLX0KLQotc3RhdGljIHZvaWQgZ2VtdGVrX3BjaV9zZXRmcmVxdWVuY3koc3RydWN0IGdlbXRla19wY2kgKmNhcmQsIHVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5KQotewotCWludCBpOwotCXUzMiB2YWx1ZSA9IGZyZXF1ZW5jeSAvIDIwMCArIDg1NjsKLQl1MTYgbWFzayA9IDB4ODAwMDsKLQl1OCBsYXN0X2J5dGU7Ci0JdTMyIHBvcnQgPSBjYXJkLT5pb2Jhc2U7Ci0KLQltdXRleF9sb2NrKCZjYXJkLT5sb2NrKTsKLQljYXJkLT5jdXJyZW50X2ZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTsKLQlsYXN0X2J5dGUgPSBnZW10ZWtfcGNpX291dCgweDA2LCBwb3J0KTsKLQotCWkgPSAwOwotCWRvIHsKLQkJZ2VtdGVrX3BjaV9uaWwocG9ydCwgJmxhc3RfYnl0ZSk7Ci0JCWkrKzsKLQl9IHdoaWxlIChpIDwgOSk7Ci0KLQlpID0gMDsKLQlkbyB7Ci0JCWdlbXRla19wY2lfY21kKHZhbHVlICYgbWFzaywgcG9ydCwgJmxhc3RfYnl0ZSk7Ci0JCW1hc2sgPj49IDE7Ci0JCWkrKzsKLQl9IHdoaWxlIChpIDwgMTYpOwotCi0Jb3V0dygweDEwLCBwb3J0KTsKLQltdXRleF91bmxvY2soJmNhcmQtPmxvY2spOwotfQotCi0KLXN0YXRpYyB2b2lkIGdlbXRla19wY2lfbXV0ZShzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZCkKLXsKLQltdXRleF9sb2NrKCZjYXJkLT5sb2NrKTsKLQlvdXRiKDB4MWYsIGNhcmQtPmlvYmFzZSk7Ci0JY2FyZC0+bXV0ZSA9IHRydWU7Ci0JbXV0ZXhfdW5sb2NrKCZjYXJkLT5sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgZ2VtdGVrX3BjaV91bm11dGUoc3RydWN0IGdlbXRla19wY2kgKmNhcmQpCi17Ci0JaWYgKGNhcmQtPm11dGUpIHsKLQkJZ2VtdGVrX3BjaV9zZXRmcmVxdWVuY3koY2FyZCwgY2FyZC0+Y3VycmVudF9mcmVxdWVuY3kpOwotCQljYXJkLT5tdXRlID0gZmFsc2U7Ci0JfQotfQotCi1zdGF0aWMgaW50IGdlbXRla19wY2lfZ2V0c2lnbmFsKHN0cnVjdCBnZW10ZWtfcGNpICpjYXJkKQotewotCWludCBzaWc7Ci0KLQltdXRleF9sb2NrKCZjYXJkLT5sb2NrKTsKLQlzaWcgPSAoaW5iKGNhcmQtPmlvYmFzZSkgJiAweDA4KSA/IDAgOiAxOwotCW11dGV4X3VubG9jaygmY2FyZC0+bG9jayk7Ci0JcmV0dXJuIHNpZzsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCi17Ci0Jc3RydWN0IGdlbXRla19wY2kgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCi0Jc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1nZW10ZWstcGNpIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwotCXN0cmxjcHkodi0+Y2FyZCwgIkdlbVRlayBQQ0kgUmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNucHJpbnRmKHYtPmJ1c19pbmZvLCBzaXplb2Yodi0+YnVzX2luZm8pLCAiUENJOiVzIiwgcGNpX25hbWUoY2FyZC0+cGRldikpOwotCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQotewotCXN0cnVjdCBnZW10ZWtfcGNpICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwotCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCXYtPnJhbmdlbG93ID0gR0VNVEVLX1BDSV9SQU5HRV9MT1c7Ci0Jdi0+cmFuZ2VoaWdoID0gR0VNVEVLX1BDSV9SQU5HRV9ISUdIOwotCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwotCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7Ci0Jdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCXYtPnNpZ25hbCA9IDB4ZmZmZiAqIGdlbXRla19wY2lfZ2V0c2lnbmFsKGNhcmQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKLXsKLQlyZXR1cm4gdi0+aW5kZXggPyAtRUlOVkFMIDogMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKLXsKLQlzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLQlpZiAoZi0+dHVuZXIgIT0gMCB8fCBmLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChmLT5mcmVxdWVuY3kgPCBHRU1URUtfUENJX1JBTkdFX0xPVyB8fAotCSAgICBmLT5mcmVxdWVuY3kgPiBHRU1URUtfUENJX1JBTkdFX0hJR0gpCi0JCXJldHVybiAtRUlOVkFMOwotCWdlbXRla19wY2lfc2V0ZnJlcXVlbmN5KGNhcmQsIGYtPmZyZXF1ZW5jeSk7Ci0JY2FyZC0+bXV0ZSA9IGZhbHNlOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQotewotCXN0cnVjdCBnZW10ZWtfcGNpICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCWlmIChmLT50dW5lciAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQlmLT5mcmVxdWVuY3kgPSBjYXJkLT5jdXJyZW50X2ZyZXF1ZW5jeTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQotewotCXN3aXRjaCAocWMtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOwotCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSwgNjU1MzUpOwotCX0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQotewotCXN0cnVjdCBnZW10ZWtfcGNpICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCXN3aXRjaCAoY3RybC0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCWN0cmwtPnZhbHVlID0gY2FyZC0+bXV0ZTsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCWlmIChjYXJkLT5tdXRlKQotCQkJY3RybC0+dmFsdWUgPSAwOwotCQllbHNlCi0JCQljdHJsLT52YWx1ZSA9IDY1NTM1OwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKLXsKLQlzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQlpZiAoY3RybC0+dmFsdWUpCi0JCQlnZW10ZWtfcGNpX211dGUoY2FyZCk7Ci0JCWVsc2UKLQkJCWdlbXRla19wY2lfdW5tdXRlKGNhcmQpOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJaWYgKGN0cmwtPnZhbHVlKQotCQkJZ2VtdGVrX3BjaV91bm11dGUoY2FyZCk7Ci0JCWVsc2UKLQkJCWdlbXRla19wY2lfbXV0ZShjYXJkKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCi17Ci0JKmkgPSAwOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKLXsKLQlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlhLT5pbmRleCA9IDA7Ci0Jc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCXJldHVybiBhLT5pbmRleCA/IC1FSU5WQUwgOiAwOwotfQotCi1lbnVtIHsKLQlHRU1URUtfUFIxMDMKLX07Ci0KLXN0YXRpYyBjaGFyICpjYXJkX25hbWVzW10gX19kZXZpbml0ZGF0YSA9IHsKLQkiR0VNVEVLX1BSMTAzIgotfTsKLQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGdlbXRla19wY2lfaWRbXSA9Ci17Ci0JeyBQQ0lfVkVORE9SX0lEX0dFTVRFSywgUENJX0RFVklDRV9JRF9HRU1URUtfUFIxMDMsCi0JICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBHRU1URUtfUFIxMDMgfSwKLQl7IDAgfQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGdlbXRla19wY2lfaWQpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIGdlbXRla19wY2lfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnVubG9ja2VkX2lvY3RsCT0gdmlkZW9faW9jdGwyLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBnZW10ZWtfcGNpX2lvY3RsX29wcyA9IHsKLQkudmlkaW9jX3F1ZXJ5Y2FwICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAotCS52aWRpb2NfZ190dW5lciAgICAgPSB2aWRpb2NfZ190dW5lciwKLQkudmlkaW9jX3NfdHVuZXIgICAgID0gdmlkaW9jX3NfdHVuZXIsCi0JLnZpZGlvY19nX2F1ZGlvICAgICA9IHZpZGlvY19nX2F1ZGlvLAotCS52aWRpb2Nfc19hdWRpbyAgICAgPSB2aWRpb2Nfc19hdWRpbywKLQkudmlkaW9jX2dfaW5wdXQgICAgID0gdmlkaW9jX2dfaW5wdXQsCi0JLnZpZGlvY19zX2lucHV0ICAgICA9IHZpZGlvY19zX2lucHV0LAotCS52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCi0JLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKLQkudmlkaW9jX3F1ZXJ5Y3RybCAgID0gdmlkaW9jX3F1ZXJ5Y3RybCwKLQkudmlkaW9jX2dfY3RybCAgICAgID0gdmlkaW9jX2dfY3RybCwKLQkudmlkaW9jX3NfY3RybCAgICAgID0gdmlkaW9jX3NfY3RybCwKLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGdlbXRla19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCi17Ci0Jc3RydWN0IGdlbXRla19wY2kgKmNhcmQ7Ci0Jc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldjsKLQlpbnQgcmVzOwotCi0JY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnZW10ZWtfcGNpKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JdjRsMl9kZXYgPSAmY2FyZC0+djRsMl9kZXY7Ci0JbXV0ZXhfaW5pdCgmY2FyZC0+bG9jayk7Ci0JY2FyZC0+cGRldiA9IHBkZXY7Ci0KLQlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAiZ2VtdGVrX3BjaSIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOwotCi0JcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwgdjRsMl9kZXYpOwotCWlmIChyZXMgPCAwKSB7Ci0JCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKLQkJa2ZyZWUoY2FyZCk7Ci0JCXJldHVybiByZXM7Ci0JfQotCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQotCQlnb3RvIGVycl9wY2k7Ci0KLQljYXJkLT5pb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7Ci0JY2FyZC0+bGVuZ3RoID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKLQotCWlmIChyZXF1ZXN0X3JlZ2lvbihjYXJkLT5pb2Jhc2UsIGNhcmQtPmxlbmd0aCwgY2FyZF9uYW1lc1twY2lfaWQtPmRyaXZlcl9kYXRhXSkgPT0gTlVMTCkgewotCQl2NGwyX2Vycih2NGwyX2RldiwgImkvbyBwb3J0IGFscmVhZHkgaW4gdXNlXG4iKTsKLQkJZ290byBlcnJfcGNpOwotCX0KLQotCXN0cmxjcHkoY2FyZC0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKGNhcmQtPnZkZXYubmFtZSkpOwotCWNhcmQtPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKLQljYXJkLT52ZGV2LmZvcHMgPSAmZ2VtdGVrX3BjaV9mb3BzOwotCWNhcmQtPnZkZXYuaW9jdGxfb3BzID0gJmdlbXRla19wY2lfaW9jdGxfb3BzOwotCWNhcmQtPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OwotCXZpZGVvX3NldF9kcnZkYXRhKCZjYXJkLT52ZGV2LCBjYXJkKTsKLQotCWdlbXRla19wY2lfbXV0ZShjYXJkKTsKLQotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmNhcmQtPnZkZXYsIFZGTF9UWVBFX1JBRElPLCBucl9yYWRpbykgPCAwKQotCQlnb3RvIGVycl92aWRlbzsKLQotCXY0bDJfaW5mbyh2NGwyX2RldiwgIkdlbXRlayBQQ0kgUmFkaW8gKHJldi4gJWQpIGZvdW5kIGF0IDB4JTA0eC0weCUwNHguXG4iLAotCQlwZGV2LT5yZXZpc2lvbiwgY2FyZC0+aW9iYXNlLCBjYXJkLT5pb2Jhc2UgKyBjYXJkLT5sZW5ndGggLSAxKTsKLQotCXJldHVybiAwOwotCi1lcnJfdmlkZW86Ci0JcmVsZWFzZV9yZWdpb24oY2FyZC0+aW9iYXNlLCBjYXJkLT5sZW5ndGgpOwotCi1lcnJfcGNpOgotCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOwotCWtmcmVlKGNhcmQpOwotCXJldHVybiAtRU5PREVWOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgZ2VtdGVrX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKLQlzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZCA9IHRvX2dlbXRla19wY2kodjRsMl9kZXYpOwotCi0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmNhcmQtPnZkZXYpOwotCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOwotCi0JcmVsZWFzZV9yZWdpb24oY2FyZC0+aW9iYXNlLCBjYXJkLT5sZW5ndGgpOwotCi0JaWYgKG14KQotCQlnZW10ZWtfcGNpX211dGUoY2FyZCk7Ci0KLQlrZnJlZShjYXJkKTsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGdlbXRla19wY2lfZHJpdmVyID0gewotCS5uYW1lCQk9ICJnZW10ZWtfcGNpIiwKLQkuaWRfdGFibGUJPSBnZW10ZWtfcGNpX2lkLAotCS5wcm9iZQkJPSBnZW10ZWtfcGNpX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZ2VtdGVrX3BjaV9yZW1vdmUpLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgZ2VtdGVrX3BjaV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmdlbXRla19wY2lfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGdlbXRla19wY2lfZXhpdCh2b2lkKQotewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZ2VtdGVrX3BjaV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChnZW10ZWtfcGNpX2luaXQpOwotbW9kdWxlX2V4aXQoZ2VtdGVrX3BjaV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1heGlyYWRpby5jCmluZGV4IDY0NTlhMjIuLjVjMmE5MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYXhpcmFkaW8uYwpAQCAtNzcsOCArNzcsOCBAQAogLyogVEVBNTc1NyBwaW4gbWFwcGluZ3MgKi8KIHN0YXRpYyBjb25zdCBpbnQgY2xrID0gMSwgZGF0YSA9IDIsIHdyZW4gPSA0LCBtb19zdCA9IDgsIHBvd2VyID0gMTY7CiAKLSNkZWZpbmUgRlJFUV9MTwkJKDUwICogMTYwMDApCi0jZGVmaW5lIEZSRVFfSEkJCSgxNTAgKiAxNjAwMCkKKyNkZWZpbmUgRlJFUV9MTwkJKDg3ICogMTYwMDApCisjZGVmaW5lIEZSRVFfSEkJCSgxMDggKiAxNjAwMCkKIAogI2RlZmluZSBGUkVRX0lGICAgICAgICAgMTcxMjAwIC8qIDEwLjcqMTYwMDAgICAqLwogI2RlZmluZSBGUkVRX1NURVAgICAgICAgMjAwICAgIC8qIDEyLjUqMTYgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby13bDEyNzMuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8td2wxMjczLmMKaW5kZXggZGQ2YmQzNi4uN2VjYzhlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby13bDEyNzMuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXdsMTI3My5jCkBAIC0xNDA3LDcgKzE0MDcsNyBAQAogCS5yZWFkCQk9IHdsMTI3M19mbV9mb3BzX3JlYWQsCiAJLndyaXRlCQk9IHdsMTI3M19mbV9mb3BzX3dyaXRlLAogCS5wb2xsCQk9IHdsMTI3M19mbV9mb3BzX3BvbGwsCi0JLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKKwkudW5sb2NrZWRfaW9jdGwJPSB2aWRlb19pb2N0bDIsCiAJLm9wZW4JCT0gd2wxMjczX2ZtX2ZvcHNfb3BlbiwKIAkucmVsZWFzZQk9IHdsMTI3M19mbV9mb3BzX3JlbGVhc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LWNvbW1vbi5jCmluZGV4IGFjNzZkZmUuLjYwYzE3NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtY29tbW9uLmMKQEAgLTM1Nyw3ICszNTcsOCBAQAogCQlnb3RvIGRvbmU7CiAKIAkvKiBzeXNjb25maWcgMSAqLwotCXJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMV0gPSBTWVNDT05GSUcxX0RFOworCXJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMV0gPQorCQkoZGUgPDwgMTEpICYgU1lTQ09ORklHMV9ERTsJCS8qIERFKi8KIAlyZXR2YWwgPSBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBTWVNDT05GSUcxKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBkb25lOwpAQCAtNjg3LDEyICs2ODgsOCBAQAogCS8qIGRyaXZlciBjb25zdGFudHMgKi8KIAlzdHJjcHkodHVuZXItPm5hbWUsICJGTSIpOwogCXR1bmVyLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfU0k0NzBYKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfU0k0NzBYX01PRFVMRSkKIAl0dW5lci0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVyB8IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8CiAJCQkgICAgVjRMMl9UVU5FUl9DQVBfUkRTIHwgVjRMMl9UVU5FUl9DQVBfUkRTX0JMT0NLX0lPOwotI2Vsc2UKLQl0dW5lci0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVyB8IFY0TDJfVFVORVJfQ0FQX1NURVJFTzsKLSNlbmRpZgogCiAJLyogcmFuZ2UgbGltaXRzICovCiAJc3dpdGNoICgocmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcyXSAmIFNZU0NPTkZJRzJfQkFORCkgPj4gNikgewpAQCAtNzE4LDEyICs3MTUsMTAgQEAKIAkJdHVuZXItPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwogCWVsc2UKIAkJdHVuZXItPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TSTQ3MFgpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9TSTQ3MFhfTU9EVUxFKQogCS8qIElmIHRoZXJlIGlzIGEgcmVsaWFibGUgbWV0aG9kIG9mIGRldGVjdGluZyBhbiBSRFMgY2hhbm5lbCwKIAkgICB0aGVuIHRoaXMgY29kZSBzaG91bGQgY2hlY2sgZm9yIHRoYXQgYmVmb3JlIHNldHRpbmcgdGhpcwogCSAgIFJEUyBzdWJjaGFubmVsLiAqLwogCXR1bmVyLT5yeHN1YmNoYW5zIHw9IFY0TDJfVFVORVJfU1VCX1JEUzsKLSNlbmRpZgogCiAJLyogbW9uby9zdGVyZW8gc2VsZWN0b3IgKi8KIAlpZiAoKHJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddICYgUE9XRVJDRkdfTU9OTykgPT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvZW5lX2lyLmMgYi9kcml2ZXJzL21lZGlhL3JjL2VuZV9pci5jCmluZGV4IDgwYjNjMzEuLjFhYzQ5MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvZW5lX2lyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9lbmVfaXIuYwpAQCAtNDQ2LDI3ICs0NDYsMjcgQEAKIAogc2VsZWN0X3RpbWVvdXQ6CiAJaWYgKGRldi0+cnhfZmFuX2lucHV0X2ludXNlKSB7Ci0JCWRldi0+cmRldi0+cnhfcmVzb2x1dGlvbiA9IE1TX1RPX05TKEVORV9GV19TQU1QTEVfUEVSSU9EX0ZBTik7CisJCWRldi0+cmRldi0+cnhfcmVzb2x1dGlvbiA9IFVTX1RPX05TKEVORV9GV19TQU1QTEVfUEVSSU9EX0ZBTik7CiAKIAkJLyogRmFuIGlucHV0IGRvZXNuJ3Qgc3VwcG9ydCB0aW1lb3V0cywgaXQganVzdCBlbmRzIHRoZQogCQkJaW5wdXQgd2l0aCBhIG1heGltdW0gc2FtcGxlICovCiAJCWRldi0+cmRldi0+bWluX3RpbWVvdXQgPSBkZXYtPnJkZXYtPm1heF90aW1lb3V0ID0KLQkJCU1TX1RPX05TKEVORV9GV19TTVBMX0JVRl9GQU5fTVNLICoKKwkJCVVTX1RPX05TKEVORV9GV19TTVBMX0JVRl9GQU5fTVNLICoKIAkJCQlFTkVfRldfU0FNUExFX1BFUklPRF9GQU4pOwogCX0gZWxzZSB7Ci0JCWRldi0+cmRldi0+cnhfcmVzb2x1dGlvbiA9IE1TX1RPX05TKHNhbXBsZV9wZXJpb2QpOworCQlkZXYtPnJkZXYtPnJ4X3Jlc29sdXRpb24gPSBVU19UT19OUyhzYW1wbGVfcGVyaW9kKTsKIAogCQkvKiBUaGVvcmV0aWNseSB0aW1lb3V0IGlzIHVubGltaXRlZCwgYnV0IHdlIGNhcCBpdAogCQkgKiBiZWNhdXNlIGl0IHdhcyBzZWVuIHRoYXQgb24gb25lIGRldmljZSwgaXQKIAkJICogd291bGQgc3RvcCBzZW5kaW5nIHNwYWNlcyBhZnRlciBhcm91bmQgMjUwIG1zZWMuCiAJCSAqIEJlc2lkZXMsIHRoaXMgaXMgY2xvc2UgdG8gMl4zMiBhbnl3YXkgYW5kIHRpbWVvdXQgaXMgdTMyLgogCQkgKi8KLQkJZGV2LT5yZGV2LT5taW5fdGltZW91dCA9IE1TX1RPX05TKDEyNyAqIHNhbXBsZV9wZXJpb2QpOwotCQlkZXYtPnJkZXYtPm1heF90aW1lb3V0ID0gTVNfVE9fTlMoMjAwMDAwKTsKKwkJZGV2LT5yZGV2LT5taW5fdGltZW91dCA9IFVTX1RPX05TKDEyNyAqIHNhbXBsZV9wZXJpb2QpOworCQlkZXYtPnJkZXYtPm1heF90aW1lb3V0ID0gVVNfVE9fTlMoMjAwMDAwKTsKIAl9CiAKIAlpZiAoZGV2LT5od19sZWFybmluZ19hbmRfdHhfY2FwYWJsZSkKLQkJZGV2LT5yZGV2LT50eF9yZXNvbHV0aW9uID0gTVNfVE9fTlMoc2FtcGxlX3BlcmlvZCk7CisJCWRldi0+cmRldi0+dHhfcmVzb2x1dGlvbiA9IFVTX1RPX05TKHNhbXBsZV9wZXJpb2QpOwogCiAJaWYgKGRldi0+cmRldi0+dGltZW91dCA+IGRldi0+cmRldi0+bWF4X3RpbWVvdXQpCiAJCWRldi0+cmRldi0+dGltZW91dCA9IGRldi0+cmRldi0+bWF4X3RpbWVvdXQ7CkBAIC04MDEsNyArODAxLDcgQEAKIAogCQlkYmcoIlJYOiAlZCAoJXMpIiwgaHdfc2FtcGxlLCBwdWxzZSA/ICJwdWxzZSIgOiAic3BhY2UiKTsKIAotCQlldi5kdXJhdGlvbiA9IE1TX1RPX05TKGh3X3NhbXBsZSk7CisJCWV2LmR1cmF0aW9uID0gVVNfVE9fTlMoaHdfc2FtcGxlKTsKIAkJZXYucHVsc2UgPSBwdWxzZTsKIAkJaXJfcmF3X2V2ZW50X3N0b3JlX3dpdGhfZmlsdGVyKGRldi0+cmRldiwgJmV2KTsKIAl9CkBAIC04MjEsNyArODIxLDcgQEAKIAlkZXYtPmxlYXJuaW5nX21vZGVfZW5hYmxlZCA9IGxlYXJuaW5nX21vZGVfZm9yY2U7CiAKIAkvKiBTZXQgcmVhc29uYWJsZSBkZWZhdWx0IHRpbWVvdXQgKi8KLQlkZXYtPnJkZXYtPnRpbWVvdXQgPSBNU19UT19OUygxNTAwMDApOworCWRldi0+cmRldi0+dGltZW91dCA9IFVTX1RPX05TKDE1MDAwMCk7CiB9CiAKIC8qIFVwbG9hZCBhbGwgaGFyZHdhcmUgc2V0dGluZ3MgYXQgb25jZS4gVXNlZCBhdCBsb2FkIGFuZCByZXN1bWUgdGltZSAqLwpAQCAtMTAwNCw2ICsxMDA0LDEwIEBACiAJLyogdmFsaWRhdGUgcmVzb3VyY2VzICovCiAJZXJyb3IgPSAtRU5PREVWOwogCisJLyogaW5pdCB0aGVzZSB0byAtMSwgYXMgMCBpcyB2YWxpZCBmb3IgYm90aCAqLworCWRldi0+aHdfaW8gPSAtMTsKKwlkZXYtPmlycSA9IC0xOworCiAJaWYgKCFwbnBfcG9ydF92YWxpZChwbnBfZGV2LCAwKSB8fAogCSAgICBwbnBfcG9ydF9sZW4ocG5wX2RldiwgMCkgPCBFTkVfSU9fU0laRSkKIAkJZ290byBlcnJvcjsKQEAgLTEwNzIsNiArMTA3Niw4IEBACiAJCXJkZXYtPmlucHV0X25hbWUgPSAiRU5FIGVIb21lIEluZnJhcmVkIFJlbW90ZSBUcmFuc2NlaXZlciI7CiAJfQogCisJZGV2LT5yZGV2ID0gcmRldjsKKwogCWVuZV9yeF9zZXR1cF9od19idWZmZXIoZGV2KTsKIAllbmVfc2V0dXBfZGVmYXVsdF9zZXR0aW5ncyhkZXYpOwogCWVuZV9zZXR1cF9od19zZXR0aW5ncyhkZXYpOwpAQCAtMTA4Myw3ICsxMDg5LDYgQEAKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIGVycm9yOwogCi0JZGV2LT5yZGV2ID0gcmRldjsKIAllbmVfbm90aWNlKCJkcml2ZXIgaGFzIGJlZW4gc3VjY2VzZnVsbHkgbG9hZGVkIik7CiAJcmV0dXJuIDA7CiBlcnJvcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvZW5lX2lyLmggYi9kcml2ZXJzL21lZGlhL3JjL2VuZV9pci5oCmluZGV4IGMxNzliYWYuLjMzN2E0MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvZW5lX2lyLmgKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9lbmVfaXIuaApAQCAtMjAxLDggKzIwMSw2IEBACiAjZGVmaW5lIGRiZ192ZXJib3NlKGZvcm1hdCwgLi4uKQlfX2RiZygyLCBmb3JtYXQsICMjIF9fVkFfQVJHU19fKQogI2RlZmluZSBkYmdfcmVncyhmb3JtYXQsIC4uLikJCV9fZGJnKDMsIGZvcm1hdCwgIyMgX19WQV9BUkdTX18pCiAKLSNkZWZpbmUgTVNfVE9fTlMobXNlYykgKChtc2VjKSAqIDEwMDApCi0KIHN0cnVjdCBlbmVfZGV2aWNlIHsKIAlzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldjsKIAlzdHJ1Y3QgcmNfZGV2ICpyZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pbW9uLmMgYi9kcml2ZXJzL21lZGlhL3JjL2ltb24uYwppbmRleCA2ODExNTEyLi5lN2RjNmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL2ltb24uYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2ltb24uYwpAQCAtOTg4LDcgKzk4OCw2IEBACiAJaW50IHJldHZhbDsKIAlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4ID0gcmMtPnByaXY7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gaWN0eC0+ZGV2OwotCWJvb2wgcGFkX21vdXNlOwogCXVuc2lnbmVkIGNoYXIgaXJfcHJvdG9fcGFja2V0W10gPSB7CiAJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODYgfTsKIApAQCAtMTAwMCwyOSArOTk5LDIwIEBACiAJY2FzZSBSQ19UWVBFX1JDNjoKIAkJZGV2X2RiZyhkZXYsICJDb25maWd1cmluZyBJUiByZWNlaXZlciBmb3IgTUNFIHByb3RvY29sXG4iKTsKIAkJaXJfcHJvdG9fcGFja2V0WzBdID0gMHgwMTsKLQkJcGFkX21vdXNlID0gZmFsc2U7CiAJCWJyZWFrOwogCWNhc2UgUkNfVFlQRV9VTktOT1dOOgogCWNhc2UgUkNfVFlQRV9PVEhFUjoKIAkJZGV2X2RiZyhkZXYsICJDb25maWd1cmluZyBJUiByZWNlaXZlciBmb3IgaU1PTiBwcm90b2NvbFxuIik7Ci0JCWlmIChwYWRfc3RhYmlsaXplICYmICFub21vdXNlKQotCQkJcGFkX21vdXNlID0gdHJ1ZTsKLQkJZWxzZSB7CisJCWlmICghcGFkX3N0YWJpbGl6ZSkKIAkJCWRldl9kYmcoZGV2LCAiUEFEIHN0YWJpbGl6ZSBmdW5jdGlvbmFsaXR5IGRpc2FibGVkXG4iKTsKLQkJCXBhZF9tb3VzZSA9IGZhbHNlOwotCQl9CiAJCS8qIGlyX3Byb3RvX3BhY2tldFswXSA9IDB4MDA7IC8vIGFscmVhZHkgdGhlIGRlZmF1bHQgKi8KIAkJcmNfdHlwZSA9IFJDX1RZUEVfT1RIRVI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRldl93YXJuKGRldiwgIlVuc3VwcG9ydGVkIElSIHByb3RvY29sIHNwZWNpZmllZCwgb3ZlcnJpZGluZyAiCiAJCQkgInRvIGlNT04gSVIgcHJvdG9jb2xcbiIpOwotCQlpZiAocGFkX3N0YWJpbGl6ZSAmJiAhbm9tb3VzZSkKLQkJCXBhZF9tb3VzZSA9IHRydWU7Ci0JCWVsc2UgeworCQlpZiAoIXBhZF9zdGFiaWxpemUpCiAJCQlkZXZfZGJnKGRldiwgIlBBRCBzdGFiaWxpemUgZnVuY3Rpb25hbGl0eSBkaXNhYmxlZFxuIik7Ci0JCQlwYWRfbW91c2UgPSBmYWxzZTsKLQkJfQogCQkvKiBpcl9wcm90b19wYWNrZXRbMF0gPSAweDAwOyAvLyBhbHJlYWR5IHRoZSBkZWZhdWx0ICovCiAJCXJjX3R5cGUgPSBSQ19UWVBFX09USEVSOwogCQlicmVhazsKQEAgLTEwMzUsNyArMTAyNSw3IEBACiAJCWdvdG8gb3V0OwogCiAJaWN0eC0+cmNfdHlwZSA9IHJjX3R5cGU7Ci0JaWN0eC0+cGFkX21vdXNlID0gcGFkX21vdXNlOworCWljdHgtPnBhZF9tb3VzZSA9IGZhbHNlOwogCiBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTE1MTcsNyArMTUwNyw3IEBACiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY3R4LT5rY19sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm47CiAJCX0gZWxzZSB7Ci0JCQlpY3R4LT5wYWRfbW91c2UgPSAwOworCQkJaWN0eC0+cGFkX21vdXNlID0gZmFsc2U7CiAJCQlkZXZfZGJnKGRldiwgIm1vdXNlIG1vZGUgZGlzYWJsZWQsIHBhc3Npbmcga2V5IHZhbHVlXG4iKTsKIAkJfQogCX0KQEAgLTE3NTYsNyArMTc0Niw2IEBACiAJcHJpbnRrKEtFUk5fQ09OVCAiIChpZCAweCUwMngpXG4iLCBmZmRjX2NmZ19ieXRlKTsKIAogCWljdHgtPmRpc3BsYXlfdHlwZSA9IGRldGVjdGVkX2Rpc3BsYXlfdHlwZTsKLQlpY3R4LT5yZGV2LT5hbGxvd2VkX3Byb3RvcyA9IGFsbG93ZWRfcHJvdG9zOwogCWljdHgtPnJjX3R5cGUgPSBhbGxvd2VkX3Byb3RvczsKIH0KIApAQCAtMTgzOSwxMCArMTgyOCw2IEBACiAJcmRldi0+YWxsb3dlZF9wcm90b3MgPSBSQ19UWVBFX09USEVSIHwgUkNfVFlQRV9SQzY7IC8qIGlNT04gUEFEIG9yIE1DRSAqLwogCXJkZXYtPmNoYW5nZV9wcm90b2NvbCA9IGltb25faXJfY2hhbmdlX3Byb3RvY29sOwogCXJkZXYtPmRyaXZlcl9uYW1lID0gTU9EX05BTUU7Ci0JaWYgKGljdHgtPnJjX3R5cGUgPT0gUkNfVFlQRV9SQzYpCi0JCXJkZXYtPm1hcF9uYW1lID0gUkNfTUFQX0lNT05fTUNFOwotCWVsc2UKLQkJcmRldi0+bWFwX25hbWUgPSBSQ19NQVBfSU1PTl9QQUQ7CiAKIAkvKiBFbmFibGUgZnJvbnQtcGFuZWwgYnV0dG9ucyBhbmQvb3Iga25vYnMgKi8KIAltZW1jcHkoaWN0eC0+dXNiX3R4X2J1ZiwgJmZwX3BhY2tldCwgc2l6ZW9mKGZwX3BhY2tldCkpOwpAQCAtMTg1MSwxMSArMTgzNiwxOCBAQAogCWlmIChyZXQpCiAJCWRldl9pbmZvKGljdHgtPmRldiwgInBhbmVsIGJ1dHRvbnMva25vYnMgc2V0dXAgZmFpbGVkXG4iKTsKIAotCWlmIChpY3R4LT5wcm9kdWN0ID09IDB4ZmZkYykKKwlpZiAoaWN0eC0+cHJvZHVjdCA9PSAweGZmZGMpIHsKIAkJaW1vbl9nZXRfZmZkY190eXBlKGljdHgpOworCQlyZGV2LT5hbGxvd2VkX3Byb3RvcyA9IGljdHgtPnJjX3R5cGU7CisJfQogCiAJaW1vbl9zZXRfZGlzcGxheV90eXBlKGljdHgpOwogCisJaWYgKGljdHgtPnJjX3R5cGUgPT0gUkNfVFlQRV9SQzYpCisJCXJkZXYtPm1hcF9uYW1lID0gUkNfTUFQX0lNT05fTUNFOworCWVsc2UKKwkJcmRldi0+bWFwX25hbWUgPSBSQ19NQVBfSU1PTl9QQUQ7CisKIAlyZXQgPSByY19yZWdpc3Rlcl9kZXZpY2UocmRldik7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycihpY3R4LT5kZXYsICJyZW1vdGUgaW5wdXQgZGV2IHJlZ2lzdGVyIGZhaWxlZFxuIik7CkBAIC0yMTA4LDE4ICsyMTAwLDYgQEAKIAkJZ290byBmaW5kX2VuZHBvaW50X2ZhaWxlZDsKIAl9CiAKLQlpY3R4LT5pZGV2ID0gaW1vbl9pbml0X2lkZXYoaWN0eCk7Ci0JaWYgKCFpY3R4LT5pZGV2KSB7Ci0JCWRldl9lcnIoZGV2LCAiJXM6IGlucHV0IGRldmljZSBzZXR1cCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJZ290byBpZGV2X3NldHVwX2ZhaWxlZDsKLQl9Ci0KLQlpY3R4LT5yZGV2ID0gaW1vbl9pbml0X3JkZXYoaWN0eCk7Ci0JaWYgKCFpY3R4LT5yZGV2KSB7Ci0JCWRldl9lcnIoZGV2LCAiJXM6IHJjIGRldmljZSBzZXR1cCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJZ290byByZGV2X3NldHVwX2ZhaWxlZDsKLQl9Ci0KIAl1c2JfZmlsbF9pbnRfdXJiKGljdHgtPnJ4X3VyYl9pbnRmMCwgaWN0eC0+dXNiZGV2X2ludGYwLAogCQl1c2JfcmN2aW50cGlwZShpY3R4LT51c2JkZXZfaW50ZjAsCiAJCQlpY3R4LT5yeF9lbmRwb2ludF9pbnRmMC0+YkVuZHBvaW50QWRkcmVzcyksCkBAIC0yMTMzLDEzICsyMTEzLDI1IEBACiAJCWdvdG8gdXJiX3N1Ym1pdF9mYWlsZWQ7CiAJfQogCisJaWN0eC0+aWRldiA9IGltb25faW5pdF9pZGV2KGljdHgpOworCWlmICghaWN0eC0+aWRldikgeworCQlkZXZfZXJyKGRldiwgIiVzOiBpbnB1dCBkZXZpY2Ugc2V0dXAgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gaWRldl9zZXR1cF9mYWlsZWQ7CisJfQorCisJaWN0eC0+cmRldiA9IGltb25faW5pdF9yZGV2KGljdHgpOworCWlmICghaWN0eC0+cmRldikgeworCQlkZXZfZXJyKGRldiwgIiVzOiByYyBkZXZpY2Ugc2V0dXAgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gcmRldl9zZXR1cF9mYWlsZWQ7CisJfQorCiAJcmV0dXJuIGljdHg7CiAKLXVyYl9zdWJtaXRfZmFpbGVkOgotCXJjX3VucmVnaXN0ZXJfZGV2aWNlKGljdHgtPnJkZXYpOwogcmRldl9zZXR1cF9mYWlsZWQ6CiAJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaWN0eC0+aWRldik7CiBpZGV2X3NldHVwX2ZhaWxlZDoKKwl1c2Jfa2lsbF91cmIoaWN0eC0+cnhfdXJiX2ludGYwKTsKK3VyYl9zdWJtaXRfZmFpbGVkOgogZmluZF9lbmRwb2ludF9mYWlsZWQ6CiAJbXV0ZXhfdW5sb2NrKCZpY3R4LT5sb2NrKTsKIAl1c2JfZnJlZV91cmIodHhfdXJiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvaXItbGlyYy1jb2RlYy5jIGIvZHJpdmVycy9tZWRpYS9yYy9pci1saXJjLWNvZGVjLmMKaW5kZXggZjAxMWM1ZC4uMWM1Y2M2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pci1saXJjLWNvZGVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pci1saXJjLWNvZGVjLmMKQEAgLTEsNCArMSw0IEBACi0vKiBpci1saXJjLWNvZGVjLmMgLSBpci1jb3JlIHRvIGNsYXNzaWMgbGlyYyBpbnRlcmZhY2UgYnJpZGdlCisvKiBpci1saXJjLWNvZGVjLmMgLSByYy1jb3JlIHRvIGNsYXNzaWMgbGlyYyBpbnRlcmZhY2UgYnJpZGdlCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEwIGJ5IEphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4KICAqCkBAIC00Nyw2ICs0Nyw3IEBACiAJLyogQ2FycmllciByZXBvcnRzICovCiAJaWYgKGV2LmNhcnJpZXJfcmVwb3J0KSB7CiAJCXNhbXBsZSA9IExJUkNfRlJFUVVFTkNZKGV2LmNhcnJpZXIpOworCQlJUl9kcHJpbnRrKDIsICJjYXJyaWVyIHJlcG9ydCAoZnJlcTogJWQpXG4iLCBzYW1wbGUpOwogCiAJLyogUGFja2V0IGVuZCAqLwogCX0gZWxzZSBpZiAoZXYudGltZW91dCkgewpAQCAtNjIsNiArNjMsNyBAQAogCQkJcmV0dXJuIDA7CiAKIAkJc2FtcGxlID0gTElSQ19USU1FT1VUKGV2LmR1cmF0aW9uIC8gMTAwMCk7CisJCUlSX2RwcmludGsoMiwgInRpbWVvdXQgcmVwb3J0IChkdXJhdGlvbjogJWQpXG4iLCBzYW1wbGUpOwogCiAJLyogTm9ybWFsIHNhbXBsZSAqLwogCX0gZWxzZSB7CkBAIC04NSw2ICs4Nyw4IEBACiAKIAkJc2FtcGxlID0gZXYucHVsc2UgPyBMSVJDX1BVTFNFKGV2LmR1cmF0aW9uIC8gMTAwMCkgOgogCQkJCQlMSVJDX1NQQUNFKGV2LmR1cmF0aW9uIC8gMTAwMCk7CisJCUlSX2RwcmludGsoMiwgImRlbGl2ZXJpbmcgJXV1cyAlcyB0byBsaXJjX2RldlxuIiwKKwkJCSAgIFRPX1VTKGV2LmR1cmF0aW9uKSwgVE9fU1RSKGV2LnB1bHNlKSk7CiAJfQogCiAJbGlyY19idWZmZXJfd3JpdGUoZGV2LT5yYXctPmxpcmMuZHJ2LT5yYnVmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pci1yYXcuYyBiL2RyaXZlcnMvbWVkaWEvcmMvaXItcmF3LmMKaW5kZXggMTg1YmFkZC4uNzMyMzBmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pci1yYXcuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2lyLXJhdy5jCkBAIC0yMzMsNyArMjMzLDcgQEAKIAogLyogdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBzeXNmcyBpbnRlcmZhY2UgKi8KIHU2NAotaXJfcmF3X2dldF9hbGxvd2VkX3Byb3RvY29scygpCitpcl9yYXdfZ2V0X2FsbG93ZWRfcHJvdG9jb2xzKHZvaWQpCiB7CiAJdTY0IHByb3RvY29sczsKIAltdXRleF9sb2NrKCZpcl9yYXdfaGFuZGxlcl9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1kaWIwNzAwLW5lYy5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWRpYjA3MDAtbmVjLmMKaW5kZXggYzU5ODUxYi4uN2E1ZjUzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWRpYjA3MDAtbmVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWRpYjA3MDAtbmVjLmMKQEAgLTE5LDM1ICsxOSwzNSBAQAogCiBzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBkaWIwNzAwX25lY190YWJsZVtdID0gewogCS8qIEtleSBjb2RlcyBmb3IgdGhlIFBpeGVsdmlldyBTQlRWRCByZW1vdGUgKi8KLQl7IDB4ODYxMywgS0VZX01VVEUgfSwKLQl7IDB4ODYxMiwgS0VZX1BPV0VSIH0sCi0JeyAweDg2MDEsIEtFWV8xIH0sCi0JeyAweDg2MDIsIEtFWV8yIH0sCi0JeyAweDg2MDMsIEtFWV8zIH0sCi0JeyAweDg2MDQsIEtFWV80IH0sCi0JeyAweDg2MDUsIEtFWV81IH0sCi0JeyAweDg2MDYsIEtFWV82IH0sCi0JeyAweDg2MDcsIEtFWV83IH0sCi0JeyAweDg2MDgsIEtFWV84IH0sCi0JeyAweDg2MDksIEtFWV85IH0sCi0JeyAweDg2MDAsIEtFWV8wIH0sCi0JeyAweDg2MGQsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4ODYxOSwgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDg2MTAsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHg4NjBjLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHg4NjZiMTMsIEtFWV9NVVRFIH0sCisJeyAweDg2NmIxMiwgS0VZX1BPV0VSIH0sCisJeyAweDg2NmIwMSwgS0VZXzEgfSwKKwl7IDB4ODY2YjAyLCBLRVlfMiB9LAorCXsgMHg4NjZiMDMsIEtFWV8zIH0sCisJeyAweDg2NmIwNCwgS0VZXzQgfSwKKwl7IDB4ODY2YjA1LCBLRVlfNSB9LAorCXsgMHg4NjZiMDYsIEtFWV82IH0sCisJeyAweDg2NmIwNywgS0VZXzcgfSwKKwl7IDB4ODY2YjA4LCBLRVlfOCB9LAorCXsgMHg4NjZiMDksIEtFWV85IH0sCisJeyAweDg2NmIwMCwgS0VZXzAgfSwKKwl7IDB4ODY2YjBkLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDg2NmIxOSwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDg2NmIxMCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDg2NmIwYywgS0VZX1ZPTFVNRURPV04gfSwKIAotCXsgMHg4NjBhLCBLRVlfQ0FNRVJBIH0sCi0JeyAweDg2MGIsIEtFWV9aT09NIH0sCi0JeyAweDg2MWIsIEtFWV9CQUNLU1BBQ0UgfSwKLQl7IDB4ODYxNSwgS0VZX0VOVEVSIH0sCisJeyAweDg2NmIwYSwgS0VZX0NBTUVSQSB9LAorCXsgMHg4NjZiMGIsIEtFWV9aT09NIH0sCisJeyAweDg2NmIxYiwgS0VZX0JBQ0tTUEFDRSB9LAorCXsgMHg4NjZiMTUsIEtFWV9FTlRFUiB9LAogCi0JeyAweDg2MWQsIEtFWV9VUCB9LAotCXsgMHg4NjFlLCBLRVlfRE9XTiB9LAotCXsgMHg4NjBlLCBLRVlfTEVGVCB9LAotCXsgMHg4NjBmLCBLRVlfUklHSFQgfSwKKwl7IDB4ODY2YjFkLCBLRVlfVVAgfSwKKwl7IDB4ODY2YjFlLCBLRVlfRE9XTiB9LAorCXsgMHg4NjZiMGUsIEtFWV9MRUZUIH0sCisJeyAweDg2NmIwZiwgS0VZX1JJR0hUIH0sCiAKLQl7IDB4ODYxOCwgS0VZX1JFQ09SRCB9LAotCXsgMHg4NjFhLCBLRVlfU1RPUCB9LAorCXsgMHg4NjZiMTgsIEtFWV9SRUNPUkQgfSwKKwl7IDB4ODY2YjFhLCBLRVlfU1RPUCB9LAogCiAJLyogS2V5IGNvZGVzIGZvciB0aGUgRXZvbHV0ZVBDIFRWV2F5KyByZW1vdGUgKi8KIAl7IDB4N2EwMCwgS0VZX01FTlUgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1yYzYtbWNlLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcmM2LW1jZS5jCmluZGV4IDNiZjMzMzcuLjJmNWRjMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1yYzYtbWNlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXJjNi1tY2UuYwpAQCAtMyw2ICszLDkgQEAKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPgogICoKKyAqIFNlZSBodHRwOi8vbWVkaWFjZW50ZXJndWlkZXMuY29tL2Jvb2svZXhwb3J0L2h0bWwvMzEgZm9yIGRldGFpbHMgb24KKyAqIGtleSBtYXBwaW5ncy4KKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCkBAIC02MCw2ICs2Myw5IEBACiAJeyAweDgwMGYwNDI2LCBLRVlfRVBHIH0sCQkvKiBHdWlkZSAqLwogCXsgMHg4MDBmMDQyNywgS0VZX1pPT00gfSwJCS8qIEFzcGVjdCAqLwogCisJeyAweDgwMGYwNDMyLCBLRVlfTU9ERSB9LAkJLyogVmlzdWFsaXphdGlvbiAqLworCXsgMHg4MDBmMDQzMywgS0VZX1BSRVNFTlRBVElPTiB9LAkvKiBTbGlkZSBTaG93ICovCisJeyAweDgwMGYwNDM0LCBLRVlfRUpFQ1RDRCB9LAogCXsgMHg4MDBmMDQzYSwgS0VZX0JSSUdIVE5FU1NVUCB9LAogCiAJeyAweDgwMGYwNDQ2LCBLRVlfVFYgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvbWNldXNiLmMgYi9kcml2ZXJzL21lZGlhL3JjL21jZXVzYi5jCmluZGV4IDBmZWY2ZWYuLjZkZjBhNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvbWNldXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9tY2V1c2IuYwpAQCAtNDgsNyArNDgsNiBAQAogI2RlZmluZSBVU0JfQlVGTEVOCQkzMiAvKiBVU0IgcmVjZXB0aW9uIGJ1ZmZlciBsZW5ndGggKi8KICNkZWZpbmUgVVNCX0NUUkxfTVNHX1NaCQkyICAvKiBTaXplIG9mIHVzYiBjdHJsIG1zZyBvbiBnZW4xIGh3ICovCiAjZGVmaW5lIE1DRV9HMV9JTklUX01TR1MJNDAgLyogSW5pdCBtZXNzYWdlcyBvbiBnZW4xIGh3IHRvIHRocm93IG91dCAqLwotI2RlZmluZSBNU19UT19OUyhtc2VjKQkJKChtc2VjKSAqIDEwMDApCiAKIC8qIE1DRSBjb25zdGFudHMgKi8KICNkZWZpbmUgTUNFX0NNREJVRl9TSVpFCQkzODQgIC8qIE1DRSBDb21tYW5kIGJ1ZmZlciBsZW5ndGggKi8KQEAgLTgxNyw3ICs4MTYsNyBAQAogCXN3aXRjaCAoaXItPmJ1Zl9pbltpbmRleF0pIHsKIAkvKiAyLWJ5dGUgcmV0dXJuIHZhbHVlIGNvbW1hbmRzICovCiAJY2FzZSBNQ0VfQ01EX1NfVElNRU9VVDoKLQkJaXItPnJjLT50aW1lb3V0ID0gTVNfVE9fTlMoKGhpIDw8IDggfCBsbykgLyAyKTsKKwkJaXItPnJjLT50aW1lb3V0ID0gVVNfVE9fTlMoKGhpIDw8IDggfCBsbykgLyAyKTsKIAkJYnJlYWs7CiAKIAkvKiAxLWJ5dGUgcmV0dXJuIHZhbHVlIGNvbW1hbmRzICovCkBAIC04NTYsOSArODU1LDEwIEBACiAJCQlicmVhazsKIAkJY2FzZSBQQVJTRV9JUkRBVEE6CiAJCQlpci0+cmVtLS07CisJCQlpbml0X2lyX3Jhd19ldmVudCgmcmF3aXIpOwogCQkJcmF3aXIucHVsc2UgPSAoKGlyLT5idWZfaW5baV0gJiBNQ0VfUFVMU0VfQklUKSAhPSAwKTsKIAkJCXJhd2lyLmR1cmF0aW9uID0gKGlyLT5idWZfaW5baV0gJiBNQ0VfUFVMU0VfTUFTSykKLQkJCQkJICogTVNfVE9fTlMoTUNFX1RJTUVfVU5JVCk7CisJCQkJCSAqIFVTX1RPX05TKE1DRV9USU1FX1VOSVQpOwogCiAJCQlkZXZfZGJnKGlyLT5kZXYsICJTdG9yaW5nICVzIHdpdGggZHVyYXRpb24gJWRcbiIsCiAJCQkJcmF3aXIucHVsc2UgPyAicHVsc2UiIDogInNwYWNlIiwKQEAgLTg4NCw2ICs4ODQsOCBAQAogCQkJCQkgICAgIGksIGlyLT5yZW0gKyAxLCBmYWxzZSk7CiAJCQlpZiAoaXItPnJlbSkKIAkJCQlpci0+cGFyc2VyX3N0YXRlID0gUEFSU0VfSVJEQVRBOworCQkJZWxzZQorCQkJCWlyX3Jhd19ldmVudF9yZXNldChpci0+cmMpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTA2MSw3ICsxMDYzLDcgQEAKIAlyYy0+cHJpdiA9IGlyOwogCXJjLT5kcml2ZXJfdHlwZSA9IFJDX0RSSVZFUl9JUl9SQVc7CiAJcmMtPmFsbG93ZWRfcHJvdG9zID0gUkNfVFlQRV9BTEw7Ci0JcmMtPnRpbWVvdXQgPSBNU19UT19OUygxMDAwKTsKKwlyYy0+dGltZW91dCA9IFVTX1RPX05TKDEwMDApOwogCWlmICghaXItPmZsYWdzLm5vX3R4KSB7CiAJCXJjLT5zX3R4X21hc2sgPSBtY2V1c2Jfc2V0X3R4X21hc2s7CiAJCXJjLT5zX3R4X2NhcnJpZXIgPSBtY2V1c2Jfc2V0X3R4X2NhcnJpZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL251dm90b24tY2lyLmMgYi9kcml2ZXJzL21lZGlhL3JjL251dm90b24tY2lyLmMKaW5kZXggZGQ0Y2FmOC4uMjczZDlkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9udXZvdG9uLWNpci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvbnV2b3Rvbi1jaXIuYwpAQCAtNDYwLDcgKzQ2MCw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWNhcnJpZXIgPSAoY291bnQgKiAxMDAwMDAwKSAvIGR1cmF0aW9uOworCWNhcnJpZXIgPSBNU19UT19OUyhjb3VudCkgLyBkdXJhdGlvbjsKIAogCWlmICgoY2FycmllciA+IE1BWF9DQVJSSUVSKSB8fCAoY2FycmllciA8IE1JTl9DQVJSSUVSKSkKIAkJbnZ0X2RiZygiV1RGPyBDYXJyaWVyIGZyZXF1ZW5jeSBvdXQgb2YgcmFuZ2UhIik7CkBAIC02MTIsOCArNjEyLDggQEAKIAkJc2FtcGxlID0gbnZ0LT5idWZbaV07CiAKIAkJcmF3aXIucHVsc2UgPSAoKHNhbXBsZSAmIEJVRl9QVUxTRV9CSVQpICE9IDApOwotCQlyYXdpci5kdXJhdGlvbiA9IChzYW1wbGUgJiBCVUZfTEVOX01BU0spCi0JCQkJCSogU0FNUExFX1BFUklPRCAqIDEwMDA7CisJCXJhd2lyLmR1cmF0aW9uID0gVVNfVE9fTlMoKHNhbXBsZSAmIEJVRl9MRU5fTUFTSykKKwkJCQkJICAqIFNBTVBMRV9QRVJJT0QpOwogCiAJCWlmICgoc2FtcGxlICYgQlVGX0xFTl9NQVNLKSA9PSBCVUZfTEVOX01BU0spIHsKIAkJCWlmIChudnQtPnJhd2lyLnB1bHNlID09IHJhd2lyLnB1bHNlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYwppbmRleCA3MmJlOGEwLi41MTJhMmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYworKysgYi9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYwpAQCAtNDU4LDIxICs0NTgsMjcgQEAKIAkJaW5kZXggPSBpcl9sb29rdXBfYnlfc2NhbmNvZGUocmNfbWFwLCBzY2FuY29kZSk7CiAJfQogCi0JaWYgKGluZGV4ID49IHJjX21hcC0+bGVuKSB7Ci0JCWlmICghKGtlLT5mbGFncyAmIElOUFVUX0tFWU1BUF9CWV9JTkRFWCkpCi0JCQlJUl9kcHJpbnRrKDEsICJ1bmtub3duIGtleSBmb3Igc2NhbmNvZGUgMHglMDR4XG4iLAotCQkJCSAgIHNjYW5jb2RlKTsKKwlpZiAoaW5kZXggPCByY19tYXAtPmxlbikgeworCQllbnRyeSA9ICZyY19tYXAtPnNjYW5baW5kZXhdOworCisJCWtlLT5pbmRleCA9IGluZGV4OworCQlrZS0+a2V5Y29kZSA9IGVudHJ5LT5rZXljb2RlOworCQlrZS0+bGVuID0gc2l6ZW9mKGVudHJ5LT5zY2FuY29kZSk7CisJCW1lbWNweShrZS0+c2NhbmNvZGUsICZlbnRyeS0+c2NhbmNvZGUsIHNpemVvZihlbnRyeS0+c2NhbmNvZGUpKTsKKworCX0gZWxzZSBpZiAoIShrZS0+ZmxhZ3MgJiBJTlBVVF9LRVlNQVBfQllfSU5ERVgpKSB7CisJCS8qCisJCSAqIFdlIGRvIG5vdCByZWFsbHkga25vdyB0aGUgdmFsaWQgcmFuZ2Ugb2Ygc2NhbmNvZGVzCisJCSAqIHNvIGxldCdzIHJlc3BvbmQgd2l0aCBLRVlfUkVTRVJWRUQgdG8gYW55dGhpbmcgd2UKKwkJICogZG8gbm90IGhhdmUgbWFwcGluZyBmb3IgW3lldF0uCisJCSAqLworCQlrZS0+aW5kZXggPSBpbmRleDsKKwkJa2UtPmtleWNvZGUgPSBLRVlfUkVTRVJWRUQ7CisJfSBlbHNlIHsKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCi0JZW50cnkgPSAmcmNfbWFwLT5zY2FuW2luZGV4XTsKLQotCWtlLT5pbmRleCA9IGluZGV4OwotCWtlLT5rZXljb2RlID0gZW50cnktPmtleWNvZGU7Ci0Ja2UtPmxlbiA9IHNpemVvZihlbnRyeS0+c2NhbmNvZGUpOwotCW1lbWNweShrZS0+c2NhbmNvZGUsICZlbnRyeS0+c2NhbmNvZGUsIHNpemVvZihlbnRyeS0+c2NhbmNvZGUpKTsKLQogCXJldHZhbCA9IDA7CiAKIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvc3RyZWFtemFwLmMgYi9kcml2ZXJzL21lZGlhL3JjL3N0cmVhbXphcC5jCmluZGV4IDZlMjkxMWMuLmU0MzVkOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvc3RyZWFtemFwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9zdHJlYW16YXAuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiAJCQkJc3otPnNpZ25hbF9zdGFydC50dl91c2VjIC0KIAkJCQlzei0+c2lnbmFsX2xhc3QudHZfdXNlYyk7CiAJCQlyYXdpci5kdXJhdGlvbiAtPSBzei0+c3VtOwotCQkJcmF3aXIuZHVyYXRpb24gKj0gMTAwMDsKKwkJCXJhd2lyLmR1cmF0aW9uID0gVVNfVE9fTlMocmF3aXIuZHVyYXRpb24pOwogCQkJcmF3aXIuZHVyYXRpb24gJj0gSVJfTUFYX0RVUkFUSU9OOwogCQl9CiAJCXN6X3B1c2goc3osIHJhd2lyKTsKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCXJhd2lyLmR1cmF0aW9uID0gKChpbnQpIHZhbHVlKSAqIFNaX1JFU09MVVRJT047CiAJcmF3aXIuZHVyYXRpb24gKz0gU1pfUkVTT0xVVElPTiAvIDI7CiAJc3otPnN1bSArPSByYXdpci5kdXJhdGlvbjsKLQlyYXdpci5kdXJhdGlvbiAqPSAxMDAwOworCXJhd2lyLmR1cmF0aW9uID0gVVNfVE9fTlMocmF3aXIuZHVyYXRpb24pOwogCXJhd2lyLmR1cmF0aW9uICY9IElSX01BWF9EVVJBVElPTjsKIAlzel9wdXNoKHN6LCByYXdpcik7CiB9CkBAIC0xOTcsNyArMTk3LDcgQEAKIAlyYXdpci5kdXJhdGlvbiA9ICgoaW50KSB2YWx1ZSkgKiBTWl9SRVNPTFVUSU9OOwogCXJhd2lyLmR1cmF0aW9uICs9IFNaX1JFU09MVVRJT04gLyAyOwogCXN6LT5zdW0gKz0gcmF3aXIuZHVyYXRpb247Ci0JcmF3aXIuZHVyYXRpb24gKj0gMTAwMDsKKwlyYXdpci5kdXJhdGlvbiA9IFVTX1RPX05TKHJhd2lyLmR1cmF0aW9uKTsKIAlzel9wdXNoKHN6LCByYXdpcik7CiB9CiAKQEAgLTI3Myw2ICsyNzMsNyBAQAogCQkJCWlmIChzei0+dGltZW91dF9lbmFibGVkKQogCQkJCQlzel9wdXNoKHN6LCByYXdpcik7CiAJCQkJaXJfcmF3X2V2ZW50X2hhbmRsZShzei0+cmRldik7CisJCQkJaXJfcmF3X2V2ZW50X3Jlc2V0KHN6LT5yZGV2KTsKIAkJCX0gZWxzZSB7CiAJCQkJc3pfcHVzaF9mdWxsX3NwYWNlKHN6LCBzei0+YnVmX2luW2ldKTsKIAkJCX0KQEAgLTI5MCw2ICsyOTEsNyBAQAogCQl9CiAJfQogCisJaXJfcmF3X2V2ZW50X2hhbmRsZShzei0+cmRldik7CiAJdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAogCXJldHVybjsKQEAgLTQzMCwxMyArNDMyLDEzIEBACiAJc3otPmRlY29kZXJfc3RhdGUgPSBQdWxzZVNwYWNlOwogCS8qIEZJWE1FOiBkb24ndCB5ZXQgaGF2ZSBhIHdheSB0byBzZXQgdGhpcyAqLwogCXN6LT50aW1lb3V0X2VuYWJsZWQgPSB0cnVlOwotCXN6LT5yZGV2LT50aW1lb3V0ID0gKCgoU1pfVElNRU9VVCAqIFNaX1JFU09MVVRJT04gKiAxMDAwKSAmCisJc3otPnJkZXYtPnRpbWVvdXQgPSAoKFVTX1RPX05TKFNaX1RJTUVPVVQgKiBTWl9SRVNPTFVUSU9OKSAmCiAJCQkJSVJfTUFYX0RVUkFUSU9OKSB8IDB4MDMwMDAwMDApOwogCSNpZiAwCiAJLyogbm90IHlldCBzdXBwb3J0ZWQsIGRlcGVuZHMgb24gcGF0Y2hlcyBmcm9tIG1heGltICovCiAJLyogc2VlIGFsc286IExJUkNfR0VUX1JFQ19SRVNPTFVUSU9OIGFuZCBMSVJDX1NFVF9SRUNfVElNRU9VVCAqLwotCXN6LT5taW5fdGltZW91dCA9IFNaX1RJTUVPVVQgKiBTWl9SRVNPTFVUSU9OICogMTAwMDsKLQlzei0+bWF4X3RpbWVvdXQgPSBTWl9USU1FT1VUICogU1pfUkVTT0xVVElPTiAqIDEwMDA7CisJc3otPm1pbl90aW1lb3V0ID0gVVNfVE9fTlMoU1pfVElNRU9VVCAqIFNaX1JFU09MVVRJT04pOworCXN6LT5tYXhfdGltZW91dCA9IFVTX1RPX05TKFNaX1RJTUVPVVQgKiBTWl9SRVNPTFVUSU9OKTsKIAkjZW5kaWYKIAogCWRvX2dldHRpbWVvZmRheSgmc3otPnNpZ25hbF9zdGFydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKaW5kZXggZWI4NzVhZi4uYWEwMjE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwpAQCAtNzgsNyArNzgsNyBAQAogCiBjb25maWcgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlib29sICJBdXRvc2VsZWN0IHBlcnRpbmVudCBlbmNvZGVycy9kZWNvZGVycyBhbmQgb3RoZXIgaGVscGVyIGNoaXBzIgotCWRlZmF1bHQgeSBpZiAhRU1CRURERUQKKwlkZWZhdWx0IHkgaWYgIUVYUEVSVAogCS0tLWhlbHAtLS0KIAkgIE1vc3QgdmlkZW8gY2FyZHMgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCBtb2R1bGVzIHRvIGVuY29kZSBvcgogCSAgZGVjb2RlIGF1ZGlvL3ZpZGVvIHN0YW5kYXJkcy4gVGhpcyBvcHRpb24gd2lsbCBhdXRvc2VsZWN0CkBAIC0xNDEsMTUgKzE0MSw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0ZGE5ODQwLgogCi1jb25maWcgVklERU9fVERBOTg3NQotCXRyaXN0YXRlICJQaGlsaXBzIFREQTk4NzUgYXVkaW8gcHJvY2Vzc29yIgotCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKLQktLS1oZWxwLS0tCi0JICBTdXBwb3J0IGZvciB0ZGE5ODc1IGF1ZGlvIGRlY29kZXIgY2hpcCBmb3VuZCBvbiBzb21lIGJ0OHh4IGJvYXJkcy4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGRhOTg3NS4KLQogY29uZmlnIFZJREVPX1RFQTY0MTVDCiAJdHJpc3RhdGUgIlBoaWxpcHMgVEVBNjQxNUMgYXVkaW8gcHJvY2Vzc29yIgogCWRlcGVuZHMgb24gSTJDCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQppbmRleCA4MWUzOGNiLi5hNTA5ZDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKQEAgLTI3LDcgKzI3LDYgQEAKIG9iai0kKENPTkZJR19WSURFT19UVU5FUikgKz0gdHVuZXIubwogb2JqLSQoQ09ORklHX1ZJREVPX1RWQVVESU8pICs9IHR2YXVkaW8ubwogb2JqLSQoQ09ORklHX1ZJREVPX1REQTc0MzIpICs9IHRkYTc0MzIubwotb2JqLSQoQ09ORklHX1ZJREVPX1REQTk4NzUpICs9IHRkYTk4NzUubwogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTY1ODgpICs9IHNhYTY1ODgubwogb2JqLSQoQ09ORklHX1ZJREVPX1REQTk4NDApICs9IHRkYTk4NDAubwogb2JqLSQoQ09ORklHX1ZJREVPX1RFQTY0MTVDKSArPSB0ZWE2NDE1Yy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3NS5jCmluZGV4IGYzMThiNTEuLmQyMzI3ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3NS5jCkBAIC0zMDMsMTEgKzMwMywyMiBAQAogCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfQURWNzE3NSwgMCk7CiB9CiAKK3N0YXRpYyBpbnQgYWR2NzE3NV9zX3Bvd2VyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBvbikKK3sKKwlpZiAob24pCisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDEsIDB4MDApOworCWVsc2UKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwMSwgMHg3OCk7CisKKwlyZXR1cm4gMDsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBhZHY3MTc1X2NvcmVfb3BzID0gewogCS5nX2NoaXBfaWRlbnQgPSBhZHY3MTc1X2dfY2hpcF9pZGVudCwKIAkuaW5pdCA9IGFkdjcxNzVfaW5pdCwKKwkuc19wb3dlciA9IGFkdjcxNzVfc19wb3dlciwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIGFkdjcxNzVfdmlkZW9fb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwppbmRleCA0OWVmY2Y2Li43ZjU4NzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwpAQCAtMTM3Myw3ICsxMzczLDYgQEAKIAkJLmdwaW9tdXRlIAk9IDB4MTgwMCwKIAkJLmF1ZGlvX21vZGVfZ3Bpbz0gZnYyMDAwc19hdWRpbywKIAkJLm5vX21zcDM0eHgJPSAxLAotCQkubm9fdGRhOTg3NQk9IDEsCiAJCS5uZWVkc190dmF1ZGlvICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCkBAIC0xNTExLDcgKzE1MTAsNiBAQAogCQkuZ3Bpb211dGUgCT0gMHgwOSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLm5vX21zcDM0eHgJPSAxLAotCQkubm9fdGRhOTg3NQk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCkBAIC0xNTUwLDcgKzE1NDgsNiBAQAogCQkuZ3Bpb21hc2syICAgICAgPSAweDA3ZmYsCiAJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzKSwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKLQkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5tdXhzZWxfaG9vayAgICA9IHJ2NjA1X211eHNlbCwKQEAgLTE2ODYsNyArMTY4Myw2IEBACiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAotCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfT1NQUkVZMXgwXzg0OF0gPSB7CkBAIC0xNjk5LDcgKzE2OTUsNiBAQAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKLQkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAl9LAogCkBAIC0xNzE0LDcgKzE3MDksNiBAQAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKLQkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX09TUFJFWTF4MV0gPSB7CkBAIC0xNzI3LDcgKzE3MjEsNiBAQAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKLQkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX09TUFJFWTF4MV9TVklEXSA9IHsKQEAgLTE3NDAsNyArMTczMyw2IEBACiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAotCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfT1NQUkVZMnh4XSA9IHsKQEAgLTE3NTMsNyArMTc0NSw2IEBACiAJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJfSwKIApAQCAtMTc2OCw3ICsxNzU5LDYgQEAKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKLQkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX09TUFJFWTJ4MF0gPSB7CkBAIC0xNzgxLDcgKzE3NzEsNiBAQAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAotCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfT1NQUkVZNTAwXSA9IHsKQEAgLTE3OTQsNyArMTc4Myw2IEBACiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAotCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfT1NQUkVZNTQwXSA9IHsKQEAgLTE4MDUsNyArMTc5Myw2IEBACiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAotCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCX0sCiAKQEAgLTE4MjAsNyArMTgwNyw2IEBACiAJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsICAgICAgLyogbXVzdCBhdm9pZCwgY29uZmxpY3RzIHdpdGggdGhlIGJ0ODYwICovCiAJfSwKIAlbQlRUVl9CT0FSRF9JRFNfRUFHTEVdID0gewpAQCAtMTgzNSw3ICsxODIxLDYgQEAKIAkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDIsIDIsIDIpLAogCQkubXV4c2VsX2hvb2sgICAgPSBlYWdsZV9tdXhzZWwsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAl9LAogCVtCVFRWX0JPQVJEX1BJTk5BQ0xFU0FUXSA9IHsKQEAgLTE4NDYsNyArMTgzMSw2IEBACiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAotCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMywgMSksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKQEAgLTE4OTcsNyArMTg4MSw2IEBACiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDAsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAwLCAxKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LApAQCAtMTk3MCw3ICsxOTUzLDYgQEAKIAkJLyogVHVuZXIsIENWaWQsIFNWaWQsIENWaWQgb3ZlciBTVmlkIGNvbm5lY3RvciAqLwogCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbWFzayAgICAgICA9IDAsCi0JCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMX0ksCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTIwMTcsNyArMTk5OSw2IEBACiAJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLDIsMiwyLCAzLDMsMywzLCAxLDEsMSwxLCAwLDAsMCwwKSwKIAkJLm11eHNlbF9ob29rICAgID0geGd1YXJkX211eHNlbCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKLQkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCX0sCkBAIC0yMDI5LDcgKzIwMTAsNiBAQAogCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULApAQCAtMjEzNCw3ICsyMTE0LDYgQEAKIAkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywgICAvKiBjYXJkIGhhcyBubyBzdmhzICovCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCiAJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwKQEAgLTIxNTYsNyArMjEzNSw2IEBACiAJW0JUVFZfQk9BUkRfVFdJTkhBTl9EU1RdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiVHdpbmhhbiBEU1QgKyBjbG9uZXMiLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAotCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTIxNzEsNyArMjE0OSw2IEBACiAJCS8qIFZpZCBJbiwgU1ZpZCBJbiwgVmlkIG92ZXIgU1ZpZCBpbiBjb25uZWN0b3IgKi8KIAkJLm11eHNlbAkJPSBNVVhTRUwoMywgMSwgMSwgMyksCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULApAQCAtMjIyNiw3ICsyMjAzLDYgQEAKIAkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKIAkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAotCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCkBAIC0yMjc4LDcgKzIyNTQsNiBAQAogCQkuZ3Bpb21hc2sgICAgICAgPSAwLAogCQkuZ3Bpb21hc2syICAgICAgPSAweDNDPDwxNiwvKlNldCB0aGUgR1BJT1sxOF0tPkdQSU9bMjFdIGFzIG91dHB1dCBwaW4uPT0+IGRyaXZlIHRoZSB2aWRlbyBpbnB1dHMgdGhyb3VnaCBhbmFsb2cgbXVsdGlwbGV4ZXJzKi8KIAkJLm5vX21zcDM0eHggICAgID0gMSwKLQkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAkJLyo4NzhBIGlucHV0IGlzIGFsd2F5cyBNVVgwLCBzZWUgYWJvdmUuKi8KIAkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDIsIDIsIDIpLApAQCAtMjMwMiw3ICsyMjc3LDYgQEAKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEVNSUNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9BVkRWQlRfNzcxXSA9IHsKIAkJLyogV29sZnJhbSBKb29zdCA8d29qb0Bmcm9rYXNjaHdlaS5kZT4gKi8KQEAgLTIzMTMsNyArMjI4Nyw2IEBACiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDMsIDMpLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAotCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCkBAIC0yMzI5LDcgKzIzMDIsNiBAQAogCQkuc3ZocyAgICAgICAgICAgPSAxLAogCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMywgMSwgMiwgMCksIC8qIENvbXAwLCBTLVZpZGVvLCA/LCA/ICovCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULApAQCAtMjM5Myw3ICsyMzY1LDYgQEAKIAkJLyogQ2hyaXMgUGFzY29lIDxjLnBhc2NvZUBpdGVlLnVxLmVkdS5hdT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkRWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgTGl0ZSIsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLm5vX3ZpZGVvICAgICAgID0gMSwKQEAgLTI0NDAsNyArMjQxMSw2IEBACiAJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyKSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyCT0gMSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCkBAIC0yNDc4LDcgKzI0NDgsNiBAQAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkubm9fdGRhNzQzMgk9IDEsCi0JCS5ub190ZGE5ODc1CT0gMSwKIAkJLm11eHNlbF9ob29rCT0ga29kaWNvbTQ0MDByX211eHNlbCwKIAl9LAogCVtCVFRWX0JPQVJEX0tPRElDT01fNDQwMFJfU0xdID0gewpAQCAtMjUwMCw3ICsyNDY5LDYgQEAKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLm5vX3RkYTc0MzIJPSAxLAotCQkubm9fdGRhOTg3NQk9IDEsCiAJCS5tdXhzZWxfaG9vawk9IGtvZGljb200NDAwcl9tdXhzZWwsCiAJfSwKIAkJLyogLS0tLSBjYXJkIDB4ODYtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yNTMwLDcgKzI0OTgsNiBAQAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MDA0MDAwMDUsIDAsIDB4MDAwMDAwMDEsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MDBjMDAwMDcsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCiAJfSwKQEAgLTI2MzAsNyArMjU5Nyw2IEBACiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKLQkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAl9LAogCQkvKiAtLS0tIGNhcmQgMHg4ZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yNjU4LDcgKzI2MjQsNiBAQAogCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAxMDAwMDAsIDEwMDAwMiwgMTAwMDAyLCAxMDAwMDAgfSwKIAkJLm5vX21zcDM0eHgJPSAxLAotCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9UTkZfNTMzNU1GLApAQCAtMjY3NCw3ICsyNjM5LDYgQEAKIAkJLmdwaW9tYXNrCT0gMHgwZiwgLyogb2xkOiA3ICovCiAJCS5tdXhzZWwJCT0gTVVYU0VMKDAsIDEsIDMsIDIpLCAvKiBDb21wb3NpdGUgMC0zICovCiAJCS5ub19tc3AzNHh4CT0gMSwKLQkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTI3MzIsNyArMjY5Niw2IEBACiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMHgwMDQwMDAwNSwgMCwgMHgwMDAwMDAwMSwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMHgwMGMwMDAwNywKIAkJLm5vX21zcDM0eHggICAgID0gMSwKLQkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAl9LAogCS8qIC0tLS0gY2FyZCAweDk1LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjg3NCw3ICsyODM3LDYgQEAKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLm5vX3RkYTc0MzIJPSAxLAotCQkubm9fdGRhOTg3NQk9IDEsCiAJCS5tdXhzZWxfaG9vayAgICA9IGd2ODAwc19tdXhzZWwsCiAJfSwKIAkJW0JUVFZfQk9BUkRfR0VPVklTSU9OX0dWODAwU19TTF0gPSB7CkBAIC0yODk5LDcgKzI4NjEsNiBAQAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkubm9fdGRhNzQzMgk9IDEsCi0JCS5ub190ZGE5ODc1CT0gMSwKIAkJLm11eHNlbF9ob29rICAgID0gZ3Y4MDBzX211eHNlbCwKIAl9LAogCVtCVFRWX0JPQVJEX1BWMTgzXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LmgKaW5kZXggZmQ2MmJmMS4uYzYzMzM1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LmgKQEAgLTIzNCw3ICsyMzQsNiBAQAogCiAJLyogaTJjIGF1ZGlvIGZsYWdzICovCiAJdW5zaWduZWQgaW50IG5vX21zcDM0eHg6MTsKLQl1bnNpZ25lZCBpbnQgbm9fdGRhOTg3NToxOwogCXVuc2lnbmVkIGludCBub190ZGE3NDMyOjE7CiAJdW5zaWduZWQgaW50IG5lZWRzX3R2YXVkaW86MTsKIAl1bnNpZ25lZCBpbnQgbXNwMzR4eF9hbHQ6MTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCmluZGV4IDQ5ZjFiOGYuLjU1ZmZkNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwpAQCAtMjAwMSw2ICsyMDAxLDExIEBACiAJCS5taW5fd2lkdGggPSAzMjAsCiAJCS5taW5faGVpZ2h0ID0gMjQwLAogCX07CisJc3RydWN0IGkyY19ib2FyZF9pbmZvIG92NzY3MF9pbmZvID0geworCQkudHlwZSA9ICJvdjc2NzAiLAorCQkuYWRkciA9IDB4NDIsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnNlbnNvcl9jZmcsCisJfTsKIAogCS8qCiAJICogU3RhcnQgcHV0dGluZyB0b2dldGhlciBvbmUgb2Ygb3VyIGJpZyBjYW1lcmEgc3RydWN0dXJlcy4KQEAgLTIwNjIsOSArMjA2Nyw5IEBACiAJaWYgKGRtaV9jaGVja19zeXN0ZW0ob2xwY194bzFfZG1pKSkKIAkJc2Vuc29yX2NmZy5jbG9ja19zcGVlZCA9IDQ1OwogCi0JY2FtLT5zZW5zb3JfYWRkciA9IDB4NDI7Ci0JY2FtLT5zZW5zb3IgPSB2NGwyX2kyY19uZXdfc3ViZGV2X2NmZygmY2FtLT52NGwyX2RldiwgJmNhbS0+aTJjX2FkYXB0ZXIsCi0JCQkib3Y3NjcwIiwgMCwgJnNlbnNvcl9jZmcsIGNhbS0+c2Vuc29yX2FkZHIsIE5VTEwpOworCWNhbS0+c2Vuc29yX2FkZHIgPSBvdjc2NzBfaW5mby5hZGRyOworCWNhbS0+c2Vuc29yID0gdjRsMl9pMmNfbmV3X3N1YmRldl9ib2FyZCgmY2FtLT52NGwyX2RldiwgJmNhbS0+aTJjX2FkYXB0ZXIsCisJCQkmb3Y3NjcwX2luZm8sIE5VTEwpOwogCWlmIChjYW0tPnNlbnNvciA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X3NtYnVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMi5oCmluZGV4IDkxNmMxM2QuLjZkNmQxODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyLmgKQEAgLTM3OCw3ICszNzgsNyBAQAogCiBzdHJ1Y3QgY2FtZXJhX2RhdGEgewogCS8qIGxvY2tzICovCi0Jc3RydWN0IG11dGV4IGJ1c3lfbG9jazsJLyogZ3VhcmQgYWdhaW5zdCBTTVAgbXVsdGl0aHJlYWRpbmcgKi8KKwlzdHJ1Y3QgbXV0ZXggdjRsMl9sb2NrOwkvKiBzZXJpYWxpemUgZmlsZSBvcGVyYXRpb25zICovCiAJc3RydWN0IHY0bDJfcHJpb19zdGF0ZSBwcmlvOwogCiAJLyogY2FtZXJhIHN0YXR1cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX2NvcmUuYwppbmRleCA5NjA2YmMwLi5hYWZmY2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX2NvcmUuYwpAQCAtMjI0Nyw3ICsyMjQ3LDcgQEAKIAogCiAJY2FtLT5wcmVzZW50ID0gMTsKLQltdXRleF9pbml0KCZjYW0tPmJ1c3lfbG9jayk7CisJbXV0ZXhfaW5pdCgmY2FtLT52NGwyX2xvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+d3Ffc3RyZWFtKTsKIAogCXJldHVybiBjYW07CkBAIC0yMzY1LDkgKzIzNjUsOSBAQAogCQljaGFyIF9fdXNlciAqYnVmLCB1bnNpZ25lZCBsb25nIGNvdW50LCBpbnQgbm9ibG9jaykKIHsKIAlzdHJ1Y3QgZnJhbWVidWYgKmZyYW1lOwotCWlmICghY291bnQpIHsKKworCWlmICghY291bnQpCiAJCXJldHVybiAwOwotCX0KIAogCWlmICghYnVmKSB7CiAJCUVSUigiJXM6IGJ1ZmZlciBOVUxMXG4iLF9fZnVuY19fKTsKQEAgLTIzNzksMTcgKzIzNzksMTIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogbWFrZSB0aGlzIF9yZWFsbHlfIHNtcCBhbmQgbXVsdGl0aHJlYWQtc2FmZSAqLwotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhbS0+YnVzeV9sb2NrKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQogCWlmICghY2FtLT5wcmVzZW50KSB7CiAJCUxPRygiJXM6IGNhbWVyYSByZW1vdmVkXG4iLF9fZnVuY19fKTsKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CiAJCXJldHVybiAwOwkvKiBFT0YgKi8KIAl9CiAKLQlpZighY2FtLT5zdHJlYW1pbmcpIHsKKwlpZiAoIWNhbS0+c3RyZWFtaW5nKSB7CiAJCS8qIFN0YXJ0IHN0cmVhbWluZyAqLwogCQljcGlhMl91c2Jfc3RyZWFtX3N0YXJ0KGNhbSwKIAkJCQkgICAgICAgY2FtLT5wYXJhbXMuY2FtZXJhX3N0YXRlLnN0cmVhbV9tb2RlKTsKQEAgLTIzOTgsNDIgKzIzOTMsMzEgQEAKIAkvKiBDb3B5IGNhbS0+Y3VyYnVmZiBpbiBjYXNlIGl0IGNoYW5nZXMgd2hpbGUgd2UncmUgcHJvY2Vzc2luZyAqLwogCWZyYW1lID0gY2FtLT5jdXJidWZmOwogCWlmIChub2Jsb2NrICYmIGZyYW1lLT5zdGF0dXMgIT0gRlJBTUVfUkVBRFkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWlmKGZyYW1lLT5zdGF0dXMgIT0gRlJBTUVfUkVBRFkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CisJaWYgKGZyYW1lLT5zdGF0dXMgIT0gRlJBTUVfUkVBRFkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPnY0bDJfbG9jayk7CiAJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjYW0tPndxX3N0cmVhbSwKIAkJCSAgICAgICAhY2FtLT5wcmVzZW50IHx8CiAJCQkgICAgICAgKGZyYW1lID0gY2FtLT5jdXJidWZmKS0+c3RhdHVzID09IEZSQU1FX1JFQURZKTsKKwkJbXV0ZXhfbG9jaygmY2FtLT52NGwyX2xvY2spOwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCQkvKiBtYWtlIHRoaXMgX3JlYWxseV8gc21wIGFuZCBtdWx0aXRocmVhZC1zYWZlICovCi0JCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhbS0+YnVzeV9sb2NrKSkgewotCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJfQotCQlpZighY2FtLT5wcmVzZW50KSB7Ci0JCQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKKwkJaWYgKCFjYW0tPnByZXNlbnQpCiAJCQlyZXR1cm4gMDsKLQkJfQogCX0KIAogCS8qIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlICovCi0JaWYgKGZyYW1lLT5sZW5ndGggPiBjb3VudCkgewotCQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKKwlpZiAoZnJhbWUtPmxlbmd0aCA+IGNvdW50KQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKGNvcHlfdG9fdXNlcihidWYsIGZyYW1lLT5kYXRhLCBmcmFtZS0+bGVuZ3RoKSkgewotCQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKKwlpZiAoY29weV90b191c2VyKGJ1ZiwgZnJhbWUtPmRhdGEsIGZyYW1lLT5sZW5ndGgpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9CiAKIAljb3VudCA9IGZyYW1lLT5sZW5ndGg7CiAKIAlmcmFtZS0+c3RhdHVzID0gRlJBTUVfRU1QVFk7CiAKLQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTI0NDcsMTcgKzI0MzEsMTMgQEAKIHsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzPTA7CiAKLQlpZighY2FtKSB7CisJaWYgKCFjYW0pIHsKIAkJRVJSKCIlczogSW50ZXJuYWwgZXJyb3IsIGNhbWVyYV9kYXRhIG5vdCBmb3VuZCFcbiIsX19mdW5jX18pOwogCQlyZXR1cm4gUE9MTEVSUjsKIAl9CiAKLQltdXRleF9sb2NrKCZjYW0tPmJ1c3lfbG9jayk7Ci0KLQlpZighY2FtLT5wcmVzZW50KSB7Ci0JCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOworCWlmICghY2FtLT5wcmVzZW50KQogCQlyZXR1cm4gUE9MTEhVUDsKLQl9CiAKIAlpZighY2FtLT5zdHJlYW1pbmcpIHsKIAkJLyogU3RhcnQgc3RyZWFtaW5nICovCkBAIC0yNDY1LDE2ICsyNDQ1LDEzIEBACiAJCQkJICAgICAgIGNhbS0+cGFyYW1zLmNhbWVyYV9zdGF0ZS5zdHJlYW1fbW9kZSk7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CiAJcG9sbF93YWl0KGZpbHAsICZjYW0tPndxX3N0cmVhbSwgd2FpdCk7Ci0JbXV0ZXhfbG9jaygmY2FtLT5idXN5X2xvY2spOwogCiAJaWYoIWNhbS0+cHJlc2VudCkKIAkJc3RhdHVzID0gUE9MTEhVUDsKIAllbHNlIGlmKGNhbS0+Y3VyYnVmZi0+c3RhdHVzID09IEZSQU1FX1JFQURZKQogCQlzdGF0dXMgPSBQT0xMSU4gfCBQT0xMUkROT1JNOwogCi0JbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMjQ5NiwyOSArMjQ3MywxOSBAQAogCiAJREJHKCJtbWFwIG9mZnNldDolbGQgc2l6ZTolbGRcbiIsIHN0YXJ0X29mZnNldCwgc2l6ZSk7CiAKLQkvKiBtYWtlIHRoaXMgX3JlYWxseV8gc21wLXNhZmUgKi8KLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmJ1c3lfbG9jaykpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQlpZiAoIWNhbS0+cHJlc2VudCkgewotCQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKKwlpZiAoIWNhbS0+cHJlc2VudCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCiAJaWYgKHNpemUgPiBjYW0tPmZyYW1lX3NpemUqY2FtLT5udW1fZnJhbWVzICB8fAogCSAgICAoc3RhcnRfb2Zmc2V0ICUgY2FtLT5mcmFtZV9zaXplKSAhPSAwIHx8Ci0JICAgIChzdGFydF9vZmZzZXQrc2l6ZSA+IGNhbS0+ZnJhbWVfc2l6ZSpjYW0tPm51bV9mcmFtZXMpKSB7Ci0JCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOworCSAgICAoc3RhcnRfb2Zmc2V0K3NpemUgPiBjYW0tPmZyYW1lX3NpemUqY2FtLT5udW1fZnJhbWVzKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJcG9zID0gKCh1bnNpZ25lZCBsb25nKSAoY2FtLT5mcmFtZV9idWZmZXIpKSArIHN0YXJ0X29mZnNldDsKIAl3aGlsZSAoc2l6ZSA+IDApIHsKIAkJcGFnZSA9IGt2aXJ0X3RvX3BhKHBvcyk7Ci0JCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGFnZSA+PiBQQUdFX1NISUZULCBQQUdFX1NJWkUsIFBBR0VfU0hBUkVEKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CisJCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGFnZSA+PiBQQUdFX1NISUZULCBQQUdFX1NJWkUsIFBBR0VfU0hBUkVEKSkKIAkJCXJldHVybiAtRUFHQUlOOwotCQl9CiAJCXN0YXJ0ICs9IFBBR0VfU0laRTsKIAkJcG9zICs9IFBBR0VfU0laRTsKIAkJaWYgKHNpemUgPiBQQUdFX1NJWkUpCkBAIC0yNTI4LDcgKzI0OTUsNSBAQAogCX0KIAogCWNhbS0+bW1hcHBlZCA9IHRydWU7Ci0JbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CiAJcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3Y0bC5jCmluZGV4IDdlZGY4MGIuLjliYWQzOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl92NGwuYwpAQCAtMjM4LDU5ICsyMzgsNDAgQEAKIHN0YXRpYyBpbnQgY3BpYTJfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IHJldHZhbCA9IDA7CisJc3RydWN0IGNwaWEyX2ZoICpmaDsKIAogCWlmICghY2FtKSB7CiAJCUVSUigiSW50ZXJuYWwgZXJyb3IsIGNhbWVyYV9kYXRhIG5vdCBmb3VuZCFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZihtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhbS0+YnVzeV9sb2NrKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlpZiAoIWNhbS0+cHJlc2VudCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZighY2FtLT5wcmVzZW50KSB7Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX3JldHVybjsKKwlpZiAoY2FtLT5vcGVuX2NvdW50ID09IDApIHsKKwkJaWYgKGNwaWEyX2FsbG9jYXRlX2J1ZmZlcnMoY2FtKSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCS8qIHJlc2V0IHRoZSBjYW1lcmEgKi8KKwkJaWYgKGNwaWEyX3Jlc2V0X2NhbWVyYShjYW0pIDwgMCkKKwkJCXJldHVybiAtRUlPOworCisJCWNhbS0+QVBQX2xlbiA9IDA7CisJCWNhbS0+Q09NX2xlbiA9IDA7CiAJfQogCi0JaWYgKGNhbS0+b3Blbl9jb3VudCA+IDApIHsKLQkJZ290byBza2lwX2luaXQ7Ci0JfQotCi0JaWYgKGNwaWEyX2FsbG9jYXRlX2J1ZmZlcnMoY2FtKSkgewotCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9yZXR1cm47Ci0JfQotCi0JLyogcmVzZXQgdGhlIGNhbWVyYSAqLwotCWlmIChjcGlhMl9yZXNldF9jYW1lcmEoY2FtKSA8IDApIHsKLQkJcmV0dmFsID0gLUVJTzsKLQkJZ290byBlcnJfcmV0dXJuOwotCX0KLQotCWNhbS0+QVBQX2xlbiA9IDA7Ci0JY2FtLT5DT01fbGVuID0gMDsKLQotc2tpcF9pbml0OgotCXsKLQkJc3RydWN0IGNwaWEyX2ZoICpmaCA9IGttYWxsb2Moc2l6ZW9mKCpmaCksR0ZQX0tFUk5FTCk7Ci0JCWlmKCFmaCkgewotCQkJcmV0dmFsID0gLUVOT01FTTsKLQkJCWdvdG8gZXJyX3JldHVybjsKLQkJfQotCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKLQkJZmgtPnByaW8gPSBWNEwyX1BSSU9SSVRZX1VOU0VUOwotCQl2NGwyX3ByaW9fb3BlbigmY2FtLT5wcmlvLCAmZmgtPnByaW8pOwotCQlmaC0+bW1hcHBlZCA9IDA7Ci0JfQorCWZoID0ga21hbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmaCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CisJZmgtPnByaW8gPSBWNEwyX1BSSU9SSVRZX1VOU0VUOworCXY0bDJfcHJpb19vcGVuKCZjYW0tPnByaW8sICZmaC0+cHJpbyk7CisJZmgtPm1tYXBwZWQgPSAwOwogCiAJKytjYW0tPm9wZW5fY291bnQ7CiAKIAljcGlhMl9kYmdfZHVtcF9yZWdpc3RlcnMoY2FtKTsKLQotZXJyX3JldHVybjoKLQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMDQsMTUgKzI4NSwxMSBAQAogCXN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgY3BpYTJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0JbXV0ZXhfbG9jaygmY2FtLT5idXN5X2xvY2spOwotCiAJaWYgKGNhbS0+cHJlc2VudCAmJgotCSAgICAoY2FtLT5vcGVuX2NvdW50ID09IDEKLQkgICAgIHx8IGZoLT5wcmlvID09IFY0TDJfUFJJT1JJVFlfUkVDT1JECi0JICAgICkpIHsKKwkgICAgKGNhbS0+b3Blbl9jb3VudCA9PSAxIHx8IGZoLT5wcmlvID09IFY0TDJfUFJJT1JJVFlfUkVDT1JEKSkgewogCQljcGlhMl91c2Jfc3RyZWFtX3N0b3AoY2FtKTsKIAotCQlpZihjYW0tPm9wZW5fY291bnQgPT0gMSkgeworCQlpZiAoY2FtLT5vcGVuX2NvdW50ID09IDEpIHsKIAkJCS8qIHNhdmUgY2FtZXJhIHN0YXRlIGZvciBsYXRlciBvcGVuICovCiAJCQljcGlhMl9zYXZlX2NhbWVyYV9zdGF0ZShjYW0pOwogCkBAIC0zMjEsMjYgKzI5OCwyMSBAQAogCQl9CiAJfQogCi0JewotCQlpZihmaC0+bW1hcHBlZCkKLQkJCWNhbS0+bW1hcHBlZCA9IDA7Ci0JCXY0bDJfcHJpb19jbG9zZSgmY2FtLT5wcmlvLCBmaC0+cHJpbyk7Ci0JCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0JCWtmcmVlKGZoKTsKLQl9CisJaWYgKGZoLT5tbWFwcGVkKQorCQljYW0tPm1tYXBwZWQgPSAwOworCXY0bDJfcHJpb19jbG9zZSgmY2FtLT5wcmlvLCBmaC0+cHJpbyk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlrZnJlZShmaCk7CiAKIAlpZiAoLS1jYW0tPm9wZW5fY291bnQgPT0gMCkgewogCQljcGlhMl9mcmVlX2J1ZmZlcnMoY2FtKTsKIAkJaWYgKCFjYW0tPnByZXNlbnQpIHsKIAkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldik7Ci0JCQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKIAkJCWtmcmVlKGNhbSk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAotCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQwNSwxMSArMzc3LDExIEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCi0JCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOworCQltdXRleF91bmxvY2soJmNhbS0+djRsMl9sb2NrKTsKIAkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNhbS0+d3Ffc3RyZWFtLAogCQkJCQkgIWNhbS0+c3RyZWFtaW5nIHx8CiAJCQkJCSBmcmFtZS0+c3RhdHVzID09IEZSQU1FX1JFQURZKTsKLQkJbXV0ZXhfbG9jaygmY2FtLT5idXN5X2xvY2spOworCQltdXRleF9sb2NrKCZjYW0tPnY0bDJfbG9jayk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJCWlmKCFjYW0tPnByZXNlbnQpCkBAIC0xMjkzLDExICsxMjY1LDExIEBACiAJaWYoZnJhbWUgPCAwKSB7CiAJCS8qIFdhaXQgZm9yIGEgZnJhbWUgdG8gYmVjb21lIGF2YWlsYWJsZSAqLwogCQlzdHJ1Y3QgZnJhbWVidWYgKmNiPWNhbS0+Y3VyYnVmZjsKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CisJCW11dGV4X3VubG9jaygmY2FtLT52NGwyX2xvY2spOwogCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2FtLT53cV9zdHJlYW0sCiAJCQkJCSAhY2FtLT5wcmVzZW50IHx8CiAJCQkJCSAoY2I9Y2FtLT5jdXJidWZmKS0+c3RhdHVzID09IEZSQU1FX1JFQURZKTsKLQkJbXV0ZXhfbG9jaygmY2FtLT5idXN5X2xvY2spOworCQltdXRleF9sb2NrKCZjYW0tPnY0bDJfbG9jayk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJCWlmKCFjYW0tPnByZXNlbnQpCkBAIC0xMzM3LDE0ICsxMzA5LDggQEAKIAlpZiAoIWNhbSkKIAkJcmV0dXJuIC1FTk9UVFk7CiAKLQkvKiBtYWtlIHRoaXMgX3JlYWxseV8gc21wLXNhZmUgKi8KLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmJ1c3lfbG9jaykpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQlpZiAoIWNhbS0+cHJlc2VudCkgewotCQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKKwlpZiAoIWNhbS0+cHJlc2VudCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCiAJLyogUHJpb3JpdHkgY2hlY2sgKi8KIAlzd2l0Y2ggKGNtZCkgewpAQCAtMTM1MiwxMCArMTMxOCw4IEBACiAJewogCQlzdHJ1Y3QgY3BpYTJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCQlyZXR2YWwgPSB2NGwyX3ByaW9fY2hlY2soJmNhbS0+cHJpbywgZmgtPnByaW8pOwotCQlpZihyZXR2YWwpIHsKLQkJCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOworCQlpZiAocmV0dmFsKQogCQkJcmV0dXJuIHJldHZhbDsKLQkJfQogCQlicmVhazsKIAl9CiAJZGVmYXVsdDoKQEAgLTE1MjksNyArMTQ5Myw2IEBACiAJCWJyZWFrOwogCX0KIAotCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTE1OTYsNyArMTU1OSw3IEBACiAJLnJlbGVhc2UJPSBjcGlhMl9jbG9zZSwKIAkucmVhZAkJPSBjcGlhMl92NGxfcmVhZCwKIAkucG9sbAkJPSBjcGlhMl92NGxfcG9sbCwKLQkuaW9jdGwJCT0gY3BpYTJfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsCT0gY3BpYTJfaW9jdGwsCiAJLm1tYXAJCT0gY3BpYTJfbW1hcCwKIH07CiAKQEAgLTE2MjAsNiArMTU4Myw3IEBACiAKIAltZW1jcHkoY2FtLT52ZGV2LCAmY3BpYTJfdGVtcGxhdGUsIHNpemVvZihjcGlhMl90ZW1wbGF0ZSkpOwogCXZpZGVvX3NldF9kcnZkYXRhKGNhbS0+dmRldiwgY2FtKTsKKwljYW0tPnZkZXYtPmxvY2sgPSAmY2FtLT52NGwyX2xvY2s7CiAKIAlyZXNldF9jYW1lcmFfc3RydWN0X3Y0bChjYW0pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5jCmluZGV4IDEzM2VjMmIuLjk0NGFmOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5jCkBAIC02NjQsNyArNjY0LDcgQEAKIHsKIAlzbnByaW50ZihjeC0+aW5fd29ya3FfbmFtZSwgc2l6ZW9mKGN4LT5pbl93b3JrcV9uYW1lKSwgIiVzLWluIiwKIAkJIGN4LT52NGwyX2Rldi5uYW1lKTsKLQljeC0+aW5fd29ya19xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGN4LT5pbl93b3JrcV9uYW1lKTsKKwljeC0+aW5fd29ya19xdWV1ZSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKGN4LT5pbl93b3JrcV9uYW1lLCAwKTsKIAlpZiAoY3gtPmluX3dvcmtfcXVldWUgPT0gTlVMTCkgewogCQlDWDE4X0VSUigiVW5hYmxlIHRvIGNyZWF0ZSBpbmNvbWluZyBtYWlsYm94IGhhbmRsZXIgdGhyZWFkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC02NzIsMTggKzY3Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGN4MThfY3JlYXRlX291dF93b3JrcShzdHJ1Y3QgY3gxOCAqY3gpCi17Ci0Jc25wcmludGYoY3gtPm91dF93b3JrcV9uYW1lLCBzaXplb2YoY3gtPm91dF93b3JrcV9uYW1lKSwgIiVzLW91dCIsCi0JCSBjeC0+djRsMl9kZXYubmFtZSk7Ci0JY3gtPm91dF93b3JrX3F1ZXVlID0gY3JlYXRlX3dvcmtxdWV1ZShjeC0+b3V0X3dvcmtxX25hbWUpOwotCWlmIChjeC0+b3V0X3dvcmtfcXVldWUgPT0gTlVMTCkgewotCQlDWDE4X0VSUigiVW5hYmxlIHRvIGNyZWF0ZSBvdXRnb2luZyBtYWlsYm94IGhhbmRsZXIgdGhyZWFkc1xuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgX19kZXZpbml0IGN4MThfaW5pdF9pbl93b3JrX29yZGVycyhzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJaW50IGk7CkBAIC03MTAsMTYgKzY5OCwxMCBAQAogCW11dGV4X2luaXQoJmN4LT5lcHUyYXB1X21iX2xvY2spOwogCW11dGV4X2luaXQoJmN4LT5lcHUyY3B1X21iX2xvY2spOwogCi0JcmV0ID0gY3gxOF9jcmVhdGVfb3V0X3dvcmtxKGN4KTsKKwlyZXQgPSBjeDE4X2NyZWF0ZV9pbl93b3JrcShjeCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IGN4MThfY3JlYXRlX2luX3dvcmtxKGN4KTsKLQlpZiAocmV0KSB7Ci0JCWRlc3Ryb3lfd29ya3F1ZXVlKGN4LT5vdXRfd29ya19xdWV1ZSk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCiAJY3gxOF9pbml0X2luX3dvcmtfb3JkZXJzKGN4KTsKIAogCS8qIHN0YXJ0IGNvdW50aW5nIG9wZW5faWQgYXQgMSAqLwpAQCAtMTEwNyw3ICsxMDg5LDYgQEAKIAlyZWxlYXNlX21lbV9yZWdpb24oY3gtPmJhc2VfYWRkciwgQ1gxOF9NRU1fU0laRSk7CiBmcmVlX3dvcmtxdWV1ZXM6CiAJZGVzdHJveV93b3JrcXVldWUoY3gtPmluX3dvcmtfcXVldWUpOwotCWRlc3Ryb3lfd29ya3F1ZXVlKGN4LT5vdXRfd29ya19xdWV1ZSk7CiBlcnI6CiAJaWYgKHJldHZhbCA9PSAwKQogCQlyZXR2YWwgPSAtRU5PREVWOwpAQCAtMTI1OSw3ICsxMjQwLDYgQEAKIAljeDE4X2hhbHRfZmlybXdhcmUoY3gpOwogCiAJZGVzdHJveV93b3JrcXVldWUoY3gtPmluX3dvcmtfcXVldWUpOwotCWRlc3Ryb3lfd29ya3F1ZXVlKGN4LT5vdXRfd29ya19xdWV1ZSk7CiAKIAljeDE4X3N0cmVhbXNfY2xlYW51cChjeCwgMSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKaW5kZXggZjZmM2U1MC4uMzA2Y2FhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKQEAgLTYxNyw5ICs2MTcsNiBAQAogCXN0cnVjdCBjeDE4X2luX3dvcmtfb3JkZXIgaW5fd29ya19vcmRlcltDWDE4X01BWF9JTl9XT1JLX09SREVSU107CiAJY2hhciBlcHVfZGVidWdfc3RyWzI1Nl07IC8qIENYMThfRVBVX0RFQlVHIGlzIHJhcmU6IHVzZSBzaGFyZWQgc3BhY2UgKi8KIAotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpvdXRfd29ya19xdWV1ZTsKLQljaGFyIG91dF93b3JrcV9uYW1lWzEyXTsgLyogImN4MTgtTk4tb3V0IiAqLwotCiAJLyogaTJjICovCiAJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwWzJdOwogCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBpMmNfYWxnb1syXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuaAppbmRleCA1MTc2NWViLi43MTNiMGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5oCkBAIC00Miw4ICs0Miw3IEBACiAvKiBSZWxhdGVkIHRvIHN1Ym1pc3Npb24gb2YgbWRscyB0byBmaXJtd2FyZSAqLwogc3RhdGljIGlubGluZSB2b2lkIGN4MThfc3RyZWFtX2xvYWRfZndfcXVldWUoc3RydWN0IGN4MThfc3RyZWFtICpzKQogewotCXN0cnVjdCBjeDE4ICpjeCA9IHMtPmN4OwotCXF1ZXVlX3dvcmsoY3gtPm91dF93b3JrX3F1ZXVlLCAmcy0+b3V0X3dvcmtfb3JkZXIpOworCXNjaGVkdWxlX3dvcmsoJnMtPm91dF93b3JrX29yZGVyKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGN4MThfc3RyZWFtX3B1dF9tZGxfZncoc3RydWN0IGN4MThfc3RyZWFtICpzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1kdmIuYwppbmRleCBmZTU5YTFjLi4zNjNhYTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1kdmIuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLXZtYWxsb2MuaD4KIAogI2luY2x1ZGUgInhjNTAwMC5oIgotI2luY2x1ZGUgImR2Yl9kdW1teV9mZS5oIgogI2luY2x1ZGUgInM1aDE0MzIuaCIKICNpbmNsdWRlICJ0ZGExODI3MS5oIgogI2luY2x1ZGUgInM1aDE0MTEuaCIKQEAgLTYxOSw3ICs2MTgsNyBAQAogCiAJCWlmIChkZXYtPmR2Yi0+ZnJvbnRlbmQgPT0gTlVMTCkgewogCQkJcHJpbnRrKERSSVZFUl9OQU1FCi0JCQkgICAgICAgIjogRmFpbGVkIHRvIGF0dGFjaCBkdW1teSBmcm9udCBlbmRcbiIpOworCQkJICAgICAgICI6IEZhaWxlZCB0byBhdHRhY2ggczVoMTQxMSBmcm9udCBlbmRcbiIpOwogCQkJcmVzdWx0ID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KQEAgLTY2NSw3ICs2NjQsNyBAQAogCiAJCWlmIChkZXYtPmR2Yi0+ZnJvbnRlbmQgPT0gTlVMTCkgewogCQkJcHJpbnRrKERSSVZFUl9OQU1FCi0JCQkgICAgICAgIjogRmFpbGVkIHRvIGF0dGFjaCBkdW1teSBmcm9udCBlbmRcbiIpOworCQkJICAgICAgICI6IEZhaWxlZCB0byBhdHRhY2ggczVoMTQxMSBmcm9udCBlbmRcbiIpOwogCQkJcmVzdWx0ID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYwppbmRleCBmMTY0NjE4Li42ZmMwOWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCkBAIC0xNjgyLDIwICsxNjgyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI1ODQwX3NfY29uZmlnKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBpcnEsIHZvaWQgKnBsYXRmb3JtX2RhdGEpCi17Ci0Jc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQotCWlmIChwbGF0Zm9ybV9kYXRhKSB7Ci0JCXN0cnVjdCBjeDI1ODQwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZGF0YTsKLQotCQlzdGF0ZS0+cHZyMTUwX3dvcmthcm91bmQgPSBwZGF0YS0+cHZyMTUwX3dvcmthcm91bmQ7Ci0JCXNldF9pbnB1dChjbGllbnQsIHN0YXRlLT52aWRfaW5wdXQsIHN0YXRlLT5hdWRfaW5wdXQpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBjeDIzODg1X2lycV9oYW5kbGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBzdGF0dXMsCiAJCQkgICAgICAgYm9vbCAqaGFuZGxlZCkKIHsKQEAgLTE3ODcsNyArMTc3Myw2IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgY3gyNTg0MF9jb3JlX29wcyA9IHsKIAkubG9nX3N0YXR1cyA9IGN4MjU4NDBfbG9nX3N0YXR1cywKLQkuc19jb25maWcgPSBjeDI1ODQwX3NfY29uZmlnLAogCS5nX2NoaXBfaWRlbnQgPSBjeDI1ODQwX2dfY2hpcF9pZGVudCwKIAkuZ19jdHJsID0gdjRsMl9zdWJkZXZfZ19jdHJsLAogCS5zX2N0cmwgPSB2NGwyX3N1YmRldl9zX2N0cmwsCkBAIC0xOTc0LDcgKzE5NTksNiBAQAogCXN0YXRlLT52aWRfaW5wdXQgPSBDWDI1ODQwX0NPTVBPU0lURTc7CiAJc3RhdGUtPmF1ZF9pbnB1dCA9IENYMjU4NDBfQVVESU84OwogCXN0YXRlLT5hdWRjbGtfZnJlcSA9IDQ4MDAwOwotCXN0YXRlLT5wdnIxNTBfd29ya2Fyb3VuZCA9IDA7CiAJc3RhdGUtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTEFORzE7CiAJc3RhdGUtPnZiaV9saW5lX29mZnNldCA9IDg7CiAJc3RhdGUtPmlkID0gaWQ7CkBAIC0yMDM0LDYgKzIwMTgsMTIgQEAKIAl2NGwyX2N0cmxfY2x1c3RlcigyLCAmc3RhdGUtPnZvbHVtZSk7CiAJdjRsMl9jdHJsX2hhbmRsZXJfc2V0dXAoJnN0YXRlLT5oZGwpOwogCisJaWYgKGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKKwkJc3RydWN0IGN4MjU4NDBfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJCXN0YXRlLT5wdnIxNTBfd29ya2Fyb3VuZCA9IHBkYXRhLT5wdnIxNTBfd29ya2Fyb3VuZDsKKwl9CisKIAljeDI1ODQwX2lyX3Byb2JlKHNkKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZi5jCmluZGV4IDFmNTMyZTMuLjlmM2JmYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWYuYwpAQCAtNDEsNiArNDEsMTgzIEBACiAKIHZvaWQgX19pb21lbSAqdnBpZl9iYXNlOwogCisvKioKKyAqIGNoX3BhcmFtczogdmlkZW8gc3RhbmRhcmQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciB2cGlmCisgKiBUaGUgdGFibGUgbXVzdCBpbmNsdWRlIGFsbCBwcmVzZXRzIGZyb20gc3VwcG9ydGVkIHN1YmRldmljZXMuCisgKi8KK2NvbnN0IHN0cnVjdCB2cGlmX2NoYW5uZWxfY29uZmlnX3BhcmFtcyBjaF9wYXJhbXNbXSA9IHsKKwkvKiBIRFRWIGZvcm1hdHMgKi8KKwl7CisJCS5uYW1lID0gIjQ4MHA1OV85NCIsCisJCS53aWR0aCA9IDcyMCwKKwkJLmhlaWdodCA9IDQ4MCwKKwkJLmZybV9mbXQgPSAxLAorCQkueWNtdXhfbW9kZSA9IDAsCisJCS5lYXYyc2F2ID0gMTM4LTgsCisJCS5zYXYyZWF2ID0gNzIwLAorCQkubDEgPSAxLAorCQkubDMgPSA0MywKKwkJLmw1ID0gNTIzLAorCQkudnNpemUgPSA1MjUsCisJCS5jYXB0dXJlX2Zvcm1hdCA9IDAsCisJCS52Ymlfc3VwcG9ydGVkID0gMCwKKwkJLmhkX3NkID0gMSwKKwkJLmR2X3ByZXNldCA9IFY0TDJfRFZfNDgwUDU5Xzk0LAorCX0sCisJeworCQkubmFtZSA9ICI1NzZwNTAiLAorCQkud2lkdGggPSA3MjAsCisJCS5oZWlnaHQgPSA1NzYsCisJCS5mcm1fZm10ID0gMSwKKwkJLnljbXV4X21vZGUgPSAwLAorCQkuZWF2MnNhdiA9IDE0NC04LAorCQkuc2F2MmVhdiA9IDcyMCwKKwkJLmwxID0gMSwKKwkJLmwzID0gNDUsCisJCS5sNSA9IDYyMSwKKwkJLnZzaXplID0gNjI1LAorCQkuY2FwdHVyZV9mb3JtYXQgPSAwLAorCQkudmJpX3N1cHBvcnRlZCA9IDAsCisJCS5oZF9zZCA9IDEsCisJCS5kdl9wcmVzZXQgPSBWNEwyX0RWXzU3NlA1MCwKKwl9LAorCXsKKwkJLm5hbWUgPSAiNzIwcDUwIiwKKwkJLndpZHRoID0gMTI4MCwKKwkJLmhlaWdodCA9IDcyMCwKKwkJLmZybV9mbXQgPSAxLAorCQkueWNtdXhfbW9kZSA9IDAsCisJCS5lYXYyc2F2ID0gNzAwLTgsCisJCS5zYXYyZWF2ID0gMTI4MCwKKwkJLmwxID0gMSwKKwkJLmwzID0gMjYsCisJCS5sNSA9IDc0NiwKKwkJLnZzaXplID0gNzUwLAorCQkuY2FwdHVyZV9mb3JtYXQgPSAwLAorCQkudmJpX3N1cHBvcnRlZCA9IDAsCisJCS5oZF9zZCA9IDEsCisJCS5kdl9wcmVzZXQgPSBWNEwyX0RWXzcyMFA1MCwKKwl9LAorCXsKKwkJLm5hbWUgPSAiNzIwcDYwIiwKKwkJLndpZHRoID0gMTI4MCwKKwkJLmhlaWdodCA9IDcyMCwKKwkJLmZybV9mbXQgPSAxLAorCQkueWNtdXhfbW9kZSA9IDAsCisJCS5lYXYyc2F2ID0gMzcwIC0gOCwKKwkJLnNhdjJlYXYgPSAxMjgwLAorCQkubDEgPSAxLAorCQkubDMgPSAyNiwKKwkJLmw1ID0gNzQ2LAorCQkudnNpemUgPSA3NTAsCisJCS5jYXB0dXJlX2Zvcm1hdCA9IDAsCisJCS52Ymlfc3VwcG9ydGVkID0gMCwKKwkJLmhkX3NkID0gMSwKKwkJLmR2X3ByZXNldCA9IFY0TDJfRFZfNzIwUDYwLAorCX0sCisJeworCQkubmFtZSA9ICIxMDgwSTUwIiwKKwkJLndpZHRoID0gMTkyMCwKKwkJLmhlaWdodCA9IDEwODAsCisJCS5mcm1fZm10ID0gMCwKKwkJLnljbXV4X21vZGUgPSAwLAorCQkuZWF2MnNhdiA9IDcyMCAtIDgsCisJCS5zYXYyZWF2ID0gMTkyMCwKKwkJLmwxID0gMSwKKwkJLmwzID0gMjEsCisJCS5sNSA9IDU2MSwKKwkJLmw3ID0gNTYzLAorCQkubDkgPSA1ODQsCisJCS5sMTEgPSAxMTI0LAorCQkudnNpemUgPSAxMTI1LAorCQkuY2FwdHVyZV9mb3JtYXQgPSAwLAorCQkudmJpX3N1cHBvcnRlZCA9IDAsCisJCS5oZF9zZCA9IDEsCisJCS5kdl9wcmVzZXQgPSBWNEwyX0RWXzEwODBJNTAsCisJfSwKKwl7CisJCS5uYW1lID0gIjEwODBJNjAiLAorCQkud2lkdGggPSAxOTIwLAorCQkuaGVpZ2h0ID0gMTA4MCwKKwkJLmZybV9mbXQgPSAwLAorCQkueWNtdXhfbW9kZSA9IDAsCisJCS5lYXYyc2F2ID0gMjgwIC0gOCwKKwkJLnNhdjJlYXYgPSAxOTIwLAorCQkubDEgPSAxLAorCQkubDMgPSAyMSwKKwkJLmw1ID0gNTYxLAorCQkubDcgPSA1NjMsCisJCS5sOSA9IDU4NCwKKwkJLmwxMSA9IDExMjQsCisJCS52c2l6ZSA9IDExMjUsCisJCS5jYXB0dXJlX2Zvcm1hdCA9IDAsCisJCS52Ymlfc3VwcG9ydGVkID0gMCwKKwkJLmhkX3NkID0gMSwKKwkJLmR2X3ByZXNldCA9IFY0TDJfRFZfMTA4MEk2MCwKKwl9LAorCXsKKwkJLm5hbWUgPSAiMTA4MHA2MCIsCisJCS53aWR0aCA9IDE5MjAsCisJCS5oZWlnaHQgPSAxMDgwLAorCQkuZnJtX2ZtdCA9IDEsCisJCS55Y211eF9tb2RlID0gMCwKKwkJLmVhdjJzYXYgPSAyODAgLSA4LAorCQkuc2F2MmVhdiA9IDE5MjAsCisJCS5sMSA9IDEsCisJCS5sMyA9IDQyLAorCQkubDUgPSAxMTIyLAorCQkudnNpemUgPSAxMTI1LAorCQkuY2FwdHVyZV9mb3JtYXQgPSAwLAorCQkudmJpX3N1cHBvcnRlZCA9IDAsCisJCS5oZF9zZCA9IDEsCisJCS5kdl9wcmVzZXQgPSBWNEwyX0RWXzEwODBQNjAsCisJfSwKKworCS8qIFNEVFYgZm9ybWF0cyAqLworCXsKKwkJLm5hbWUgPSAiTlRTQ19NIiwKKwkJLndpZHRoID0gNzIwLAorCQkuaGVpZ2h0ID0gNDgwLAorCQkuZnJtX2ZtdCA9IDAsCisJCS55Y211eF9tb2RlID0gMSwKKwkJLmVhdjJzYXYgPSAyNjgsCisJCS5zYXYyZWF2ID0gMTQ0MCwKKwkJLmwxID0gMSwKKwkJLmwzID0gMjMsCisJCS5sNSA9IDI2MywKKwkJLmw3ID0gMjY2LAorCQkubDkgPSAyODYsCisJCS5sMTEgPSA1MjUsCisJCS52c2l6ZSA9IDUyNSwKKwkJLmNhcHR1cmVfZm9ybWF0ID0gMCwKKwkJLnZiaV9zdXBwb3J0ZWQgPSAxLAorCQkuaGRfc2QgPSAwLAorCQkuc3RkaWQgPSBWNEwyX1NURF81MjVfNjAsCisJfSwKKwl7CisJCS5uYW1lID0gIlBBTF9CREdISUsiLAorCQkud2lkdGggPSA3MjAsCisJCS5oZWlnaHQgPSA1NzYsCisJCS5mcm1fZm10ID0gMCwKKwkJLnljbXV4X21vZGUgPSAxLAorCQkuZWF2MnNhdiA9IDI4MCwKKwkJLnNhdjJlYXYgPSAxNDQwLAorCQkubDEgPSAxLAorCQkubDMgPSAyMywKKwkJLmw1ID0gMzExLAorCQkubDcgPSAzMTMsCisJCS5sOSA9IDMzNiwKKwkJLmwxMSA9IDYyNCwKKwkJLnZzaXplID0gNjI1LAorCQkuY2FwdHVyZV9mb3JtYXQgPSAwLAorCQkudmJpX3N1cHBvcnRlZCA9IDEsCisJCS5oZF9zZCA9IDAsCisJCS5zdGRpZCA9IFY0TDJfU1REXzYyNV81MCwKKwl9LAorfTsKKworY29uc3QgdW5zaWduZWQgaW50IHZwaWZfY2hfcGFyYW1zX2NvdW50ID0gQVJSQVlfU0laRShjaF9wYXJhbXMpOworCiBzdGF0aWMgaW5saW5lIHZvaWQgdnBpZl93cl9iaXQodTMyIHJlZywgdTMyIGJpdCwgdTMyIHZhbCkKIHsKIAlpZiAodmFsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWYuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmLmgKaW5kZXggZWJkNWM0My4uMTA1NTBiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWYuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZi5oCkBAIC01NzcsMTIgKzU3NywxMCBAQAogCWNoYXIgbmFtZVtWUElGX01BWF9OQU1FXTsJLyogTmFtZSBvZiB0aGUgbW9kZSAqLwogCXUxNiB3aWR0aDsJCQkvKiBJbmRpY2F0ZXMgd2lkdGggb2YgdGhlIGltYWdlICovCiAJdTE2IGhlaWdodDsJCQkvKiBJbmRpY2F0ZXMgaGVpZ2h0IG9mIHRoZSBpbWFnZSAqLwotCXU4IGZwczsKLQl1OCBmcm1fZm10OwkJCS8qIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgaW50ZXJsYWNlZAotCQkJCQkgKiBvciBwcm9ncmVzc2l2ZSBmb3JtYXQgKi8KLQl1OCB5Y211eF9tb2RlOwkJCS8qIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgbW9kZSByZXF1aXJlcwotCQkJCQkgKiBzaW5nbGUgb3IgdHdvIGNoYW5uZWxzICovCi0JdTE2IGVhdjJzYXY7CQkJLyogbGVuZ3RoIG9mIHNhdiAyIGVhdiAqLworCXU4IGZybV9mbXQ7CQkJLyogSW50ZXJsYWNlZCAoMCkgb3IgcHJvZ3Jlc3NpdmUgKDEpICovCisJdTggeWNtdXhfbW9kZTsJCQkvKiBUaGlzIG1vZGUgcmVxdWlyZXMgb25lICgwKSBvciB0d28gKDEpCisJCQkJCSAgIGNoYW5uZWxzICovCisJdTE2IGVhdjJzYXY7CQkJLyogbGVuZ3RoIG9mIGVhdiAyIHNhdiAqLwogCXUxNiBzYXYyZWF2OwkJCS8qIGxlbmd0aCBvZiBzYXYgMiBlYXYgKi8KIAl1MTYgbDEsIGwzLCBsNSwgbDcsIGw5LCBsMTE7CS8qIE90aGVyIHBhcmFtZXRlciBjb25maWd1cmF0aW9ucyAqLwogCXUxNiB2c2l6ZTsJCQkvKiBWZXJ0aWNhbCBzaXplIG9mIHRoZSBpbWFnZSAqLwpAQCAtNTkwLDEwICs1ODgsMTQgQEAKIAkJCQkJICogaXMgaW4gQlQgb3IgaW4gQ0NEL0NNT1MgKi8KIAl1OCAgdmJpX3N1cHBvcnRlZDsJCS8qIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgbW9kZQogCQkJCQkgKiBzdXBwb3J0cyBjYXB0dXJpbmcgdmJpIG9yIG5vdCAqLwotCXU4IGhkX3NkOwotCXY0bDJfc3RkX2lkIHN0ZGlkOworCXU4IGhkX3NkOwkJCS8qIEhEVFYgKDEpIG9yIFNEVFYgKDApIGZvcm1hdCAqLworCXY0bDJfc3RkX2lkIHN0ZGlkOwkJLyogU0RUViBmb3JtYXQgKi8KKwl1MzIgZHZfcHJlc2V0OwkJCS8qIEhEVFYgZm9ybWF0ICovCiB9OwogCitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IHZwaWZfY2hfcGFyYW1zX2NvdW50OworZXh0ZXJuIGNvbnN0IHN0cnVjdCB2cGlmX2NoYW5uZWxfY29uZmlnX3BhcmFtcyBjaF9wYXJhbXNbXTsKKwogc3RydWN0IHZwaWZfdmlkZW9fcGFyYW1zOwogc3RydWN0IHZwaWZfcGFyYW1zOwogc3RydWN0IHZwaWZfdmJpX3BhcmFtczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2NhcHR1cmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2NhcHR1cmUuYwppbmRleCAxOTNhYmFiLi5kOTNhZDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9jYXB0dXJlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfY2FwdHVyZS5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogCiAjaW5jbHVkZSAidnBpZl9jYXB0dXJlLmgiCiAjaW5jbHVkZSAidnBpZi5oIgpAQCAtODEsMjAgKzgyLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlICp2cGlmX2RldjsKIAogLyoqCi0gKiBjaF9wYXJhbXM6IHZpZGVvIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgdnBpZgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHZwaWZfY2hhbm5lbF9jb25maWdfcGFyYW1zIGNoX3BhcmFtc1tdID0gewotCXsKLQkJIk5UU0NfTSIsIDcyMCwgNDgwLCAzMCwgMCwgMSwgMjY4LCAxNDQwLCAxLCAyMywgMjYzLCAyNjYsCi0JCTI4NiwgNTI1LCA1MjUsIDAsIDEsIDAsIFY0TDJfU1REXzUyNV82MCwKLQl9LAotCXsKLQkJIlBBTF9CREdISUsiLCA3MjAsIDU3NiwgMjUsIDAsIDEsIDI4MCwgMTQ0MCwgMSwgMjMsIDMxMSwgMzEzLAotCQkzMzYsIDYyNCwgNjI1LCAwLCAxLCAwLCBWNEwyX1NURF82MjVfNTAsCi0JfSwKLX07Ci0KLS8qKgogICogdnBpZl91c2VydmlydF90b19waHlzIDogdHJhbnNsYXRlIHVzZXIvdmlydHVhbCBhZGRyZXNzIHRvIHBoeSBhZGRyZXNzCiAgKiBAdmlydHA6IHVzZXIvdmlydHVhbCBhZGRyZXNzCiAgKgpAQCAtMzQyLDcgKzMyOSw3IEBACiAgKiBAZGV2X2lkOiBkZXZfaWQgcHRyCiAgKgogICogSXQgY2hhbmdlcyBzdGF0dXMgb2YgdGhlIGNhcHR1cmVkIGJ1ZmZlciwgdGFrZXMgbmV4dCBidWZmZXIgZnJvbSB0aGUgcXVldWUKLSAqIGFuZCBzZXRzIGl0cyBhZGRyZXNzIGluIFZQSUYgIHJlZ2lzdGVycworICogYW5kIHNldHMgaXRzIGFkZHJlc3MgaW4gVlBJRiByZWdpc3RlcnMKICAqLwogc3RhdGljIGlycXJldHVybl90IHZwaWZfY2hhbm5lbF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewpAQCAtNDM1LDI0ICs0MjIsMzEgQEAKIAlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CiAJc3RydWN0IHZwaWZfcGFyYW1zICp2cGlmcGFyYW1zID0gJmNoLT52cGlmcGFyYW1zOwogCWNvbnN0IHN0cnVjdCB2cGlmX2NoYW5uZWxfY29uZmlnX3BhcmFtcyAqY29uZmlnOwotCXN0cnVjdCB2cGlmX2NoYW5uZWxfY29uZmlnX3BhcmFtcyAqc3RkX2luZm87CisJc3RydWN0IHZwaWZfY2hhbm5lbF9jb25maWdfcGFyYW1zICpzdGRfaW5mbyA9ICZ2cGlmcGFyYW1zLT5zdGRfaW5mbzsKIAlzdHJ1Y3QgdmlkZW9fb2JqICp2aWRfY2ggPSAmY2gtPnZpZGVvOwogCWludCBpbmRleDsKIAogCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl91cGRhdGVfc3RkX2luZm9cbiIpOwogCi0Jc3RkX2luZm8gPSAmdnBpZnBhcmFtcy0+c3RkX2luZm87Ci0KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBBUlJBWV9TSVpFKGNoX3BhcmFtcyk7IGluZGV4KyspIHsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB2cGlmX2NoX3BhcmFtc19jb3VudDsgaW5kZXgrKykgewogCQljb25maWcgPSAmY2hfcGFyYW1zW2luZGV4XTsKLQkJaWYgKGNvbmZpZy0+c3RkaWQgJiB2aWRfY2gtPnN0ZGlkKSB7Ci0JCQltZW1jcHkoc3RkX2luZm8sIGNvbmZpZywgc2l6ZW9mKCpjb25maWcpKTsKLQkJCWJyZWFrOworCQlpZiAoY29uZmlnLT5oZF9zZCA9PSAwKSB7CisJCQl2cGlmX2RiZygyLCBkZWJ1ZywgIlNEIGZvcm1hdFxuIik7CisJCQlpZiAoY29uZmlnLT5zdGRpZCAmIHZpZF9jaC0+c3RkaWQpIHsKKwkJCQltZW1jcHkoc3RkX2luZm8sIGNvbmZpZywgc2l6ZW9mKCpjb25maWcpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXZwaWZfZGJnKDIsIGRlYnVnLCAiSEQgZm9ybWF0XG4iKTsKKwkJCWlmIChjb25maWctPmR2X3ByZXNldCA9PSB2aWRfY2gtPmR2X3ByZXNldCkgeworCQkJCW1lbWNweShzdGRfaW5mbywgY29uZmlnLCBzaXplb2YoKmNvbmZpZykpOworCQkJCWJyZWFrOworCQkJfQogCQl9CiAJfQogCiAJLyogc3RhbmRhcmQgbm90IGZvdW5kICovCi0JaWYgKGluZGV4ID09IEFSUkFZX1NJWkUoY2hfcGFyYW1zKSkKKwlpZiAoaW5kZXggPT0gdnBpZl9jaF9wYXJhbXNfY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJY29tbW9uLT5mbXQuZm10LnBpeC53aWR0aCA9IHN0ZF9pbmZvLT53aWR0aDsKQEAgLTQ2Miw2ICs0NTYsNyBAQAogCWNvbW1vbi0+Zm10LmZtdC5waXguYnl0ZXNwZXJsaW5lID0gc3RkX2luZm8tPndpZHRoOwogCXZwaWZwYXJhbXMtPnZpZGVvX3BhcmFtcy5ocGl0Y2ggPSBzdGRfaW5mby0+d2lkdGg7CiAJdnBpZnBhcmFtcy0+dmlkZW9fcGFyYW1zLnN0b3JhZ2VfbW9kZSA9IHN0ZF9pbmZvLT5mcm1fZm10OworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1Nyw3ICs3NTIsNyBAQAogCXN0cnVjdCB2aWRlb19vYmogKnZpZF9jaDsKIAlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoOwogCXN0cnVjdCB2cGlmX2ZoICpmaDsKLQlpbnQgaSwgcmV0ID0gMDsKKwlpbnQgaTsKIAogCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl9vcGVuXG4iKTsKIApAQCAtNzY2LDkgKzc2MSw2IEBACiAJdmlkX2NoID0gJmNoLT52aWRlbzsKIAljb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKIAotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KIAlpZiAoTlVMTCA9PSBjaC0+Y3Vycl9zdWJkZXZfaW5mbykgewogCQkvKioKIAkJICogc2VhcmNoIHRocm91Z2ggdGhlIHN1YiBkZXZpY2UgdG8gc2VlIGEgcmVnaXN0ZXJlZApAQCAtNzg1LDggKzc3Nyw3IEBACiAJCX0KIAkJaWYgKGkgPT0gY29uZmlnLT5zdWJkZXZfY291bnQpIHsKIAkJCXZwaWZfZXJyKCJObyBzdWIgZGV2aWNlIHJlZ2lzdGVyZWRcbiIpOwotCQkJcmV0ID0gLUVOT0VOVDsKLQkJCWdvdG8gZXhpdDsKKwkJCXJldHVybiAtRU5PRU5UOwogCQl9CiAJfQogCkBAIC03OTQsOCArNzg1LDcgQEAKIAlmaCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2cGlmX2ZoKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKE5VTEwgPT0gZmgpIHsKIAkJdnBpZl9lcnIoInVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpbGUgaGFuZGxlIG9iamVjdFxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXhpdDsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogc3RvcmUgcG9pbnRlciB0byBmaCBpbiBwcml2YXRlX2RhdGEgbWVtYmVyIG9mIGZpbGVwICovCkBAIC04MTUsOSArODA1LDcgQEAKIAkvKiBJbml0aWFsaXplIHByaW9yaXR5IG9mIHRoaXMgaW5zdGFuY2UgdG8gZGVmYXVsdCBwcmlvcml0eSAqLwogCWZoLT5wcmlvID0gVjRMMl9QUklPUklUWV9VTlNFVDsKIAl2NGwyX3ByaW9fb3BlbigmY2gtPnByaW8sICZmaC0+cHJpbyk7Ci1leGl0OgotCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTgzNyw5ICs4MjUsNiBAQAogCiAJY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CiAKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmxvY2spKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCiAJLyogaWYgdGhpcyBpbnN0YW5jZSBpcyBkb2luZyBJTyAqLwogCWlmIChmaC0+aW9fYWxsb3dlZFtWUElGX1ZJREVPX0lOREVYXSkgewogCQkvKiBSZXNldCBpb191c3JzIG1lbWJlciBvZiBjaGFubmVsIG9iamVjdCAqLwpAQCAtODYzLDkgKzg0OCw2IEBACiAJLyogRGVjcmVtZW50IGNoYW5uZWwgdXNycyBjb3VudGVyICovCiAJY2gtPnVzcnMtLTsKIAotCS8qIHVubG9jayBtdXRleCBvbiBjaGFubmVsIG9iamVjdCAqLwotCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKLQogCS8qIENsb3NlIHRoZSBwcmlvcml0eSAqLwogCXY0bDJfcHJpb19jbG9zZSgmY2gtPnByaW8sIGZoLT5wcmlvKTsKIApAQCAtODkwLDcgKzg3Miw2IEBACiAJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOwogCXN0cnVjdCBjb21tb25fb2JqICpjb21tb247CiAJdTggaW5kZXggPSAwOwotCWludCByZXQgPSAwOwogCiAJdnBpZl9kYmcoMiwgZGVidWcsICJ2cGlmX3JlcWJ1ZnNcbiIpOwogCkBAIC05MTMsMTMgKzg5NCw4IEBACiAKIAljb21tb24gPSAmY2gtPmNvbW1vbltpbmRleF07CiAKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmxvY2spKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCi0JaWYgKDAgIT0gY29tbW9uLT5pb191c3JzKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byByZXFidWZfZXhpdDsKLQl9CisJaWYgKDAgIT0gY29tbW9uLT5pb191c3JzKQorCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogSW5pdGlhbGl6ZSB2aWRlb2J1ZiBxdWV1ZSBhcyBwZXIgdGhlIGJ1ZmZlciB0eXBlICovCiAJdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0KCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSwKQEAgLTkyOCw3ICs5MDQsNyBAQAogCQkJCQkgICAgcmVxYnVmLT50eXBlLAogCQkJCQkgICAgY29tbW9uLT5mbXQuZm10LnBpeC5maWVsZCwKIAkJCQkJICAgIHNpemVvZihzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyKSwgZmgsCi0JCQkJCSAgICBOVUxMKTsKKwkJCQkJICAgICZjb21tb24tPmxvY2spOwogCiAJLyogU2V0IGlvIGFsbG93ZWQgbWVtYmVyIG9mIGZpbGUgaGFuZGxlIHRvIFRSVUUgKi8KIAlmaC0+aW9fYWxsb3dlZFtpbmRleF0gPSAxOwpAQCAtOTM5LDExICs5MTUsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZjb21tb24tPmRtYV9xdWV1ZSk7CiAKIAkvKiBBbGxvY2F0ZSBidWZmZXJzICovCi0JcmV0ID0gdmlkZW9idWZfcmVxYnVmcygmY29tbW9uLT5idWZmZXJfcXVldWUsIHJlcWJ1Zik7Ci0KLXJlcWJ1Zl9leGl0OgotCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiB2aWRlb2J1Zl9yZXFidWZzKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSwgcmVxYnVmKTsKIH0KIAogLyoqCkBAIC0xMTU3LDExICsxMTI5LDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmxvY2spKSB7Ci0JCXJldCA9IC1FUkVTVEFSVFNZUzsKLQkJZ290byBzdHJlYW1vZmZfZXhpdDsKLQl9Ci0KIAkvKiBJZiBidWZmZXIgcXVldWUgaXMgZW1wdHksIHJldHVybiBlcnJvciAqLwogCWlmIChsaXN0X2VtcHR5KCZjb21tb24tPmRtYV9xdWV1ZSkpIHsKIAkJdnBpZl9kYmcoMSwgZGVidWcsICJidWZmZXIgcXVldWUgaXMgZW1wdHlcbiIpOwpAQCAtMTI0MCwxMyArMTIwNywxMCBAQAogCQllbmFibGVfY2hhbm5lbDEoMSk7CiAJfQogCWNoYW5uZWxfZmlyc3RfaW50W1ZQSUZfVklERU9fSU5ERVhdW2NoLT5jaGFubmVsX2lkXSA9IDE7Ci0JbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOwogCXJldHVybiByZXQ7CiAKIGV4aXQ6Ci0JbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOwotc3RyZWFtb2ZmX2V4aXQ6Ci0JcmV0ID0gdmlkZW9idWZfc3RyZWFtb2ZmKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSk7CisJdmlkZW9idWZfc3RyZWFtb2ZmKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTI4NCw5ICsxMjQ4LDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29tbW9uLT5sb2NrKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQogCS8qIGRpc2FibGUgY2hhbm5lbCAqLwogCWlmIChWUElGX0NIQU5ORUwwX1ZJREVPID09IGNoLT5jaGFubmVsX2lkKSB7CiAJCWVuYWJsZV9jaGFubmVsMCgwKTsKQEAgLTEzMDQsOCArMTI2NSw2IEBACiAJaWYgKHJldCAmJiAocmV0ICE9IC1FTk9JT0NUTENNRCkpCiAJCXZwaWZfZGJnKDEsIGRlYnVnLCAic3RyZWFtIG9mZiBmYWlsZWQgaW4gc3ViZGV2XG4iKTsKIAotCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKLQogCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vZmYoJmNvbW1vbi0+YnVmZmVyX3F1ZXVlKTsKIH0KIApAQCAtMTM4MSwyMSArMTM0MCwxNiBAQAogewogCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CiAJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOwotCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKIAlpbnQgcmV0ID0gMDsKIAogCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl9xdWVyeXN0ZFxuIik7CiAKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmxvY2spKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCiAJLyogQ2FsbCBxdWVyeXN0ZCBmdW5jdGlvbiBvZiBkZWNvZGVyIGRldmljZSAqLwogCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwodnBpZl9vYmouc2RbY2gtPmN1cnJfc2RfaW5kZXhdLCB2aWRlbywKIAkJCQlxdWVyeXN0ZCwgc3RkX2lkKTsKIAlpZiAocmV0IDwgMCkKIAkJdnBpZl9kYmcoMSwgZGVidWcsICJGYWlsZWQgdG8gc2V0IHN0YW5kYXJkIGZvciBzdWIgZGV2aWNlc1xuIik7CiAKLQltdXRleF91bmxvY2soJmNvbW1vbi0+bG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTQ1MSwxNiArMTQwNSwxNCBAQAogCWZoLT5pbml0aWFsaXplZCA9IDE7CiAKIAkvKiBDYWxsIGVuY29kZXIgc3ViZGV2aWNlIGZ1bmN0aW9uIHRvIHNldCB0aGUgc3RhbmRhcmQgKi8KLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmxvY2spKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCiAJY2gtPnZpZGVvLnN0ZGlkID0gKnN0ZF9pZDsKKwljaC0+dmlkZW8uZHZfcHJlc2V0ID0gVjRMMl9EVl9JTlZBTElEOworCW1lbXNldCgmY2gtPnZpZGVvLmJ0X3RpbWluZ3MsIDAsIHNpemVvZihjaC0+dmlkZW8uYnRfdGltaW5ncykpOwogCiAJLyogR2V0IHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhbmRhcmQgKi8KIAlpZiAodnBpZl91cGRhdGVfc3RkX2luZm8oY2gpKSB7Ci0JCXJldCA9IC1FSU5WQUw7CiAJCXZwaWZfZXJyKCJFcnJvciBnZXR0aW5nIHRoZSBzdGFuZGFyZCBpbmZvXG4iKTsKLQkJZ290byBzX3N0ZF9leGl0OworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBDb25maWd1cmUgdGhlIGRlZmF1bHQgZm9ybWF0IGluZm9ybWF0aW9uICovCkBAIC0xNDcxLDkgKzE0MjMsNiBAQAogCQkJCXNfc3RkLCAqc3RkX2lkKTsKIAlpZiAocmV0IDwgMCkKIAkJdnBpZl9kYmcoMSwgZGVidWcsICJGYWlsZWQgdG8gc2V0IHN0YW5kYXJkIGZvciBzdWIgZGV2aWNlc1xuIik7Ci0KLXNfc3RkX2V4aXQ6Ci0JbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE1NjcsOSArMTUxNiw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KIAkvKiBmaXJzdCBzZXR1cCBpbnB1dCBwYXRoIGZyb20gc3ViIGRldmljZSB0byB2cGlmICovCiAJaWYgKGNvbmZpZy0+c2V0dXBfaW5wdXRfcGF0aCkgewogCQlyZXQgPSBjb25maWctPnNldHVwX2lucHV0X3BhdGgoY2gtPmNoYW5uZWxfaWQsCkBAIC0xNTc4LDcgKzE1MjQsNyBAQAogCQkJdnBpZl9kYmcoMSwgZGVidWcsICJjb3VsZG4ndCBzZXR1cCBpbnB1dCBwYXRoIGZvciB0aGUiCiAJCQkJIiBzdWIgZGV2aWNlICVzLCBmb3IgaW5wdXQgaW5kZXggJWRcbiIsCiAJCQkJc3ViZGV2X2luZm8tPm5hbWUsIGluZGV4KTsKLQkJCWdvdG8gZXhpdDsKKwkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKQEAgLTE1ODksNyArMTUzNSw3IEBACiAJCQkJCWlucHV0LCBvdXRwdXQsIDApOwogCQlpZiAocmV0IDwgMCkgewogCQkJdnBpZl9kYmcoMSwgZGVidWcsICJGYWlsZWQgdG8gc2V0IGlucHV0XG4iKTsKLQkJCWdvdG8gZXhpdDsKKwkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAJdmlkX2NoLT5pbnB1dF9pZHggPSBpbmRleDsKQEAgLTE2MDAsOSArMTU0Niw2IEBACiAKIAkvKiB1cGRhdGUgdHZub3JtcyBmcm9tIHRoZSBzdWIgZGV2aWNlIGlucHV0IGluZm8gKi8KIAljaC0+dmlkZW9fZGV2LT50dm5vcm1zID0gY2hhbl9jZmctPmlucHV0c1tpbmRleF0uaW5wdXQuc3RkOwotCi1leGl0OgotCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNjcxLDExICsxNjE0LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBGaWxsIGluIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBmb3JtYXQgKi8KLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmxvY2spKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCiAJKmZtdCA9IGNvbW1vbi0+Zm10OwotCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTY5NCw3ICsxNjMzLDcgQEAKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXhmbXQ7CiAJaW50IHJldCA9IDA7CiAKLQl2cGlmX2RiZygyLCBkZWJ1ZywgIlZJRElPQ19TX0ZNVFxuIik7CisJdnBpZl9kYmcoMiwgZGVidWcsICIlc1xuIiwgX19mdW5jX18pOwogCiAJLyogSWYgc3RyZWFtaW5nIGlzIHN0YXJ0ZWQsIHJldHVybiBlcnJvciAqLwogCWlmIChjb21tb24tPnN0YXJ0ZWQpIHsKQEAgLTE3MjMsMTIgKzE2NjIsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAJLyogc3RvcmUgdGhlIGZvcm1hdCBpbiB0aGUgY2hhbm5lbCBvYmplY3QgKi8KLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmxvY2spKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCiAJY29tbW9uLT5mbXQgPSAqZm10OwotCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xODA3LDYgKzE3NDEsMzA2IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogdnBpZl9lbnVtX2R2X3ByZXNldHMoKSAtIEVOVU1fRFZfUFJFU0VUUyBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQHByZXNldDogaW5wdXQgcHJlc2V0CisgKi8KK3N0YXRpYyBpbnQgdnBpZl9lbnVtX2R2X3ByZXNldHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2R2X2VudW1fcHJlc2V0ICpwcmVzZXQpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh2cGlmX29iai5zZFtjaC0+Y3Vycl9zZF9pbmRleF0sCisJCQl2aWRlbywgZW51bV9kdl9wcmVzZXRzLCBwcmVzZXQpOworfQorCisvKioKKyAqIHZwaWZfcXVlcnlfZHZfcHJlc2V0cygpIC0gUVVFUllfRFZfUFJFU0VUIGhhbmRsZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAcHJlc2V0OiBpbnB1dCBwcmVzZXQKKyAqLworc3RhdGljIGludCB2cGlmX3F1ZXJ5X2R2X3ByZXNldChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfZHZfcHJlc2V0ICpwcmVzZXQpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh2cGlmX29iai5zZFtjaC0+Y3Vycl9zZF9pbmRleF0sCisJCSAgICAgICB2aWRlbywgcXVlcnlfZHZfcHJlc2V0LCBwcmVzZXQpOworfQorLyoqCisgKiB2cGlmX3NfZHZfcHJlc2V0cygpIC0gU19EVl9QUkVTRVRTIGhhbmRsZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAcHJlc2V0OiBpbnB1dCBwcmVzZXQKKyAqLworc3RhdGljIGludCB2cGlmX3NfZHZfcHJlc2V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQgKnByZXNldCkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisJaW50IHJldCA9IDA7CisKKwlpZiAoY29tbW9uLT5zdGFydGVkKSB7CisJCXZwaWZfZGJnKDEsIGRlYnVnLCAic3RyZWFtaW5nIGluIHByb2dyZXNzXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAoKFZQSUZfQ0hBTk5FTDBfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpIHx8CisJICAgIChWUElGX0NIQU5ORUwxX1ZJREVPID09IGNoLT5jaGFubmVsX2lkKSkgeworCQlpZiAoIWZoLT5pbml0aWFsaXplZCkgeworCQkJdnBpZl9kYmcoMSwgZGVidWcsICJDaGFubmVsIEJ1c3lcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKworCXJldCA9IHY0bDJfcHJpb19jaGVjaygmY2gtPnByaW8sIGZoLT5wcmlvKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZmgtPmluaXRpYWxpemVkID0gMTsKKworCS8qIENhbGwgZW5jb2RlciBzdWJkZXZpY2UgZnVuY3Rpb24gdG8gc2V0IHRoZSBzdGFuZGFyZCAqLworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwljaC0+dmlkZW8uZHZfcHJlc2V0ID0gcHJlc2V0LT5wcmVzZXQ7CisJY2gtPnZpZGVvLnN0ZGlkID0gVjRMMl9TVERfVU5LTk9XTjsKKwltZW1zZXQoJmNoLT52aWRlby5idF90aW1pbmdzLCAwLCBzaXplb2YoY2gtPnZpZGVvLmJ0X3RpbWluZ3MpKTsKKworCS8qIEdldCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YW5kYXJkICovCisJaWYgKHZwaWZfdXBkYXRlX3N0ZF9pbmZvKGNoKSkgeworCQl2cGlmX2RiZygxLCBkZWJ1ZywgIkVycm9yIGdldHRpbmcgdGhlIHN0YW5kYXJkIGluZm9cbiIpOworCQlyZXQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCS8qIENvbmZpZ3VyZSB0aGUgZGVmYXVsdCBmb3JtYXQgaW5mb3JtYXRpb24gKi8KKwkJdnBpZl9jb25maWdfZm9ybWF0KGNoKTsKKworCQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHZwaWZfb2JqLnNkW2NoLT5jdXJyX3NkX2luZGV4XSwKKwkJCQl2aWRlbywgc19kdl9wcmVzZXQsIHByZXNldCk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKy8qKgorICogdnBpZl9nX2R2X3ByZXNldHMoKSAtIEdfRFZfUFJFU0VUUyBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQHByZXNldDogaW5wdXQgcHJlc2V0CisgKi8KK3N0YXRpYyBpbnQgdnBpZl9nX2R2X3ByZXNldChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfZHZfcHJlc2V0ICpwcmVzZXQpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisKKwlwcmVzZXQtPnByZXNldCA9IGNoLT52aWRlby5kdl9wcmVzZXQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2cGlmX3NfZHZfdGltaW5ncygpIC0gU19EVl9USU1JTkdTIGhhbmRsZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAdGltaW5nczogZGlnaXRhbCB2aWRlbyB0aW1pbmdzCisgKi8KK3N0YXRpYyBpbnQgdnBpZl9zX2R2X3RpbWluZ3Moc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgKnRpbWluZ3MpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IHZwaWZfcGFyYW1zICp2cGlmcGFyYW1zID0gJmNoLT52cGlmcGFyYW1zOworCXN0cnVjdCB2cGlmX2NoYW5uZWxfY29uZmlnX3BhcmFtcyAqc3RkX2luZm8gPSAmdnBpZnBhcmFtcy0+c3RkX2luZm87CisJc3RydWN0IHZpZGVvX29iaiAqdmlkX2NoID0gJmNoLT52aWRlbzsKKwlzdHJ1Y3QgdjRsMl9idF90aW1pbmdzICpidCA9ICZ2aWRfY2gtPmJ0X3RpbWluZ3M7CisJaW50IHJldDsKKworCWlmICh0aW1pbmdzLT50eXBlICE9IFY0TDJfRFZfQlRfNjU2XzExMjApIHsKKwkJdnBpZl9kYmcoMiwgZGVidWcsICJUaW1pbmcgdHlwZSBub3QgZGVmaW5lZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENvbmZpZ3VyZSBzdWJkZXZpY2UgdGltaW5ncywgaWYgYW55ICovCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbCh2cGlmX29iai5zZFtjaC0+Y3Vycl9zZF9pbmRleF0sCisJCQl2aWRlbywgc19kdl90aW1pbmdzLCB0aW1pbmdzKTsKKwlpZiAocmV0ID09IC1FTk9JT0NUTENNRCkgeworCQl2cGlmX2RiZygyLCBkZWJ1ZywgIkN1c3RvbSBEViB0aW1pbmdzIG5vdCBzdXBwb3J0ZWQgYnkgIgorCQkJCSJzdWJkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJldCA8IDApIHsKKwkJdnBpZl9kYmcoMiwgZGVidWcsICJFcnJvciBzZXR0aW5nIGN1c3RvbSBEViB0aW1pbmdzXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoISh0aW1pbmdzLT5idC53aWR0aCAmJiB0aW1pbmdzLT5idC5oZWlnaHQgJiYKKwkJCQkodGltaW5ncy0+YnQuaGJhY2twb3JjaCB8fAorCQkJCSB0aW1pbmdzLT5idC5oZnJvbnRwb3JjaCB8fAorCQkJCSB0aW1pbmdzLT5idC5oc3luYykgJiYKKwkJCQl0aW1pbmdzLT5idC52ZnJvbnRwb3JjaCAmJgorCQkJCSh0aW1pbmdzLT5idC52YmFja3BvcmNoIHx8CisJCQkJIHRpbWluZ3MtPmJ0LnZzeW5jKSkpIHsKKwkJdnBpZl9kYmcoMiwgZGVidWcsICJUaW1pbmdzIGZvciB3aWR0aCwgaGVpZ2h0LCAiCisJCQkJImhvcml6b250YWwgYmFjayBwb3JjaCwgaG9yaXpvbnRhbCBzeW5jLCAiCisJCQkJImhvcml6b250YWwgZnJvbnQgcG9yY2gsIHZlcnRpY2FsIGJhY2sgcG9yY2gsICIKKwkJCQkidmVydGljYWwgc3luYyBhbmQgdmVydGljYWwgYmFjayBwb3JjaCAiCisJCQkJIm11c3QgYmUgZGVmaW5lZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCSpidCA9IHRpbWluZ3MtPmJ0OworCisJLyogQ29uZmlndXJlIHZpZGVvIHBvcnQgdGltaW5ncyAqLworCisJc3RkX2luZm8tPmVhdjJzYXYgPSBidC0+aGJhY2twb3JjaCArIGJ0LT5oZnJvbnRwb3JjaCArCisJCWJ0LT5oc3luYyAtIDg7CisJc3RkX2luZm8tPnNhdjJlYXYgPSBidC0+d2lkdGg7CisKKwlzdGRfaW5mby0+bDEgPSAxOworCXN0ZF9pbmZvLT5sMyA9IGJ0LT52c3luYyArIGJ0LT52YmFja3BvcmNoICsgMTsKKworCWlmIChidC0+aW50ZXJsYWNlZCkgeworCQlpZiAoYnQtPmlsX3ZiYWNrcG9yY2ggfHwgYnQtPmlsX3Zmcm9udHBvcmNoIHx8IGJ0LT5pbF92c3luYykgeworCQkJc3RkX2luZm8tPnZzaXplID0gYnQtPmhlaWdodCAqIDIgKworCQkJCWJ0LT52ZnJvbnRwb3JjaCArIGJ0LT52c3luYyArIGJ0LT52YmFja3BvcmNoICsKKwkJCQlidC0+aWxfdmZyb250cG9yY2ggKyBidC0+aWxfdnN5bmMgKworCQkJCWJ0LT5pbF92YmFja3BvcmNoOworCQkJc3RkX2luZm8tPmw1ID0gc3RkX2luZm8tPnZzaXplLzIgLQorCQkJCShidC0+dmZyb250cG9yY2ggLSAxKTsKKwkJCXN0ZF9pbmZvLT5sNyA9IHN0ZF9pbmZvLT52c2l6ZS8yICsgMTsKKwkJCXN0ZF9pbmZvLT5sOSA9IHN0ZF9pbmZvLT5sNyArIGJ0LT5pbF92c3luYyArCisJCQkJYnQtPmlsX3ZiYWNrcG9yY2ggKyAxOworCQkJc3RkX2luZm8tPmwxMSA9IHN0ZF9pbmZvLT52c2l6ZSAtCisJCQkJKGJ0LT5pbF92ZnJvbnRwb3JjaCAtIDEpOworCQl9IGVsc2UgeworCQkJdnBpZl9kYmcoMiwgZGVidWcsICJSZXF1aXJlZCB0aW1pbmcgdmFsdWVzIGZvciAiCisJCQkJCSJpbnRlcmxhY2VkIEJUIGZvcm1hdCBtaXNzaW5nXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJc3RkX2luZm8tPnZzaXplID0gYnQtPmhlaWdodCArIGJ0LT52ZnJvbnRwb3JjaCArCisJCQlidC0+dnN5bmMgKyBidC0+dmJhY2twb3JjaDsKKwkJc3RkX2luZm8tPmw1ID0gc3RkX2luZm8tPnZzaXplIC0gKGJ0LT52ZnJvbnRwb3JjaCAtIDEpOworCX0KKwlzdHJuY3B5KHN0ZF9pbmZvLT5uYW1lLCAiQ3VzdG9tIHRpbWluZ3MgQlQ2NTYvMTEyMCIsIFZQSUZfTUFYX05BTUUpOworCXN0ZF9pbmZvLT53aWR0aCA9IGJ0LT53aWR0aDsKKwlzdGRfaW5mby0+aGVpZ2h0ID0gYnQtPmhlaWdodDsKKwlzdGRfaW5mby0+ZnJtX2ZtdCA9IGJ0LT5pbnRlcmxhY2VkID8gMCA6IDE7CisJc3RkX2luZm8tPnljbXV4X21vZGUgPSAwOworCXN0ZF9pbmZvLT5jYXB0dXJlX2Zvcm1hdCA9IDA7CisJc3RkX2luZm8tPnZiaV9zdXBwb3J0ZWQgPSAwOworCXN0ZF9pbmZvLT5oZF9zZCA9IDE7CisJc3RkX2luZm8tPnN0ZGlkID0gMDsKKwlzdGRfaW5mby0+ZHZfcHJlc2V0ID0gVjRMMl9EVl9JTlZBTElEOworCisJdmlkX2NoLT5zdGRpZCA9IDA7CisJdmlkX2NoLT5kdl9wcmVzZXQgPSBWNEwyX0RWX0lOVkFMSUQ7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdnBpZl9nX2R2X3RpbWluZ3MoKSAtIEdfRFZfVElNSU5HUyBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQHRpbWluZ3M6IGRpZ2l0YWwgdmlkZW8gdGltaW5ncworICovCitzdGF0aWMgaW50IHZwaWZfZ19kdl90aW1pbmdzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzICp0aW1pbmdzKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCB2aWRlb19vYmogKnZpZF9jaCA9ICZjaC0+dmlkZW87CisJc3RydWN0IHY0bDJfYnRfdGltaW5ncyAqYnQgPSAmdmlkX2NoLT5idF90aW1pbmdzOworCisJdGltaW5ncy0+YnQgPSAqYnQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHZwaWZfZ19jaGlwX2lkZW50KCkgLSBJZGVudGlmeSB0aGUgY2hpcAorICogQGZpbGU6IGZpbGUgcHRyCisgKiBAcHJpdjogZmlsZSBoYW5kbGUKKyAqIEBjaGlwOiBjaGlwIGlkZW50aXR5CisgKgorICogUmV0dXJucyB6ZXJvIG9yIC1FSU5WQUwgaWYgcmVhZCBvcGVyYXRpb25zIGZhaWxzLgorICovCitzdGF0aWMgaW50IHZwaWZfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwljaGlwLT5pZGVudCA9IFY0TDJfSURFTlRfTk9ORTsKKwljaGlwLT5yZXZpc2lvbiA9IDA7CisJaWYgKGNoaXAtPm1hdGNoLnR5cGUgIT0gVjRMMl9DSElQX01BVENIX0kyQ19EUklWRVIgJiYKKwkJCWNoaXAtPm1hdGNoLnR5cGUgIT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSKSB7CisJCXZwaWZfZGJnKDIsIGRlYnVnLCAibWF0Y2hfdHlwZSBpcyBpbnZhbGlkLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycigmdnBpZl9vYmoudjRsMl9kZXYsIDAsIGNvcmUsCisJCQlnX2NoaXBfaWRlbnQsIGNoaXApOworfQorCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworLyoKKyAqIHZwaWZfZGJnX2dfcmVnaXN0ZXIoKSAtIFJlYWQgcmVnaXN0ZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAcmVnOiByZWdpc3RlciB0byBiZSByZWFkCisgKgorICogRGVidWdnaW5nIG9ubHkKKyAqIFJldHVybnMgemVybyBvciAtRUlOVkFMIGlmIHJlYWQgb3BlcmF0aW9ucyBmYWlscy4KKyAqLworc3RhdGljIGludCB2cGlmX2RiZ19nX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZyl7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh2cGlmX29iai5zZFtjaC0+Y3Vycl9zZF9pbmRleF0sIGNvcmUsCisJCQlnX3JlZ2lzdGVyLCByZWcpOworfQorCisvKgorICogdnBpZl9kYmdfc19yZWdpc3RlcigpIC0gV3JpdGUgdG8gcmVnaXN0ZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAcmVnOiByZWdpc3RlciB0byBiZSBtb2RpZmllZAorICoKKyAqIERlYnVnZ2luZyBvbmx5CisgKiBSZXR1cm5zIHplcm8gb3IgLUVJTlZBTCBpZiB3cml0ZSBvcGVyYXRpb25zIGZhaWxzLgorICovCitzdGF0aWMgaW50IHZwaWZfZGJnX3NfcmVnaXN0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKXsKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHZwaWZfb2JqLnNkW2NoLT5jdXJyX3NkX2luZGV4XSwgY29yZSwKKwkJCXNfcmVnaXN0ZXIsIHJlZyk7Cit9CisjZW5kaWYKKworLyoKKyAqIHZwaWZfbG9nX3N0YXR1cygpIC0gU3RhdHVzIGluZm9ybWF0aW9uCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICoKKyAqIFJldHVybnMgemVyby4KKyAqLworc3RhdGljIGludCB2cGlmX2xvZ19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbGVwLCB2b2lkICpwcml2KQoreworCS8qIHN0YXR1cyBmb3Igc3ViIGRldmljZXMgKi8KKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmdnBpZl9vYmoudjRsMl9kZXYsIDAsIGNvcmUsIGxvZ19zdGF0dXMpOworCisJcmV0dXJuIDA7Cit9CisKIC8qIHZwaWYgY2FwdHVyZSBpb2N0bCBvcGVyYXRpb25zICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZwaWZfaW9jdGxfb3BzID0gewogCS52aWRpb2NfcXVlcnljYXAgICAgICAgIAk9IHZwaWZfcXVlcnljYXAsCkBAIC0xODI5LDYgKzIwNjMsMTggQEAKIAkudmlkaW9jX3N0cmVhbW9uICAgICAgICAJPSB2cGlmX3N0cmVhbW9uLAogCS52aWRpb2Nfc3RyZWFtb2ZmICAgICAgIAk9IHZwaWZfc3RyZWFtb2ZmLAogCS52aWRpb2NfY3JvcGNhcCAgICAgICAgIAk9IHZwaWZfY3JvcGNhcCwKKwkudmlkaW9jX2VudW1fZHZfcHJlc2V0cyAgICAgICAgID0gdnBpZl9lbnVtX2R2X3ByZXNldHMsCisJLnZpZGlvY19zX2R2X3ByZXNldCAgICAgICAgICAgICA9IHZwaWZfc19kdl9wcmVzZXQsCisJLnZpZGlvY19nX2R2X3ByZXNldCAgICAgICAgICAgICA9IHZwaWZfZ19kdl9wcmVzZXQsCisJLnZpZGlvY19xdWVyeV9kdl9wcmVzZXQgICAgICAgICA9IHZwaWZfcXVlcnlfZHZfcHJlc2V0LAorCS52aWRpb2Nfc19kdl90aW1pbmdzICAgICAgICAgICAgPSB2cGlmX3NfZHZfdGltaW5ncywKKwkudmlkaW9jX2dfZHZfdGltaW5ncyAgICAgICAgICAgID0gdnBpZl9nX2R2X3RpbWluZ3MsCisJLnZpZGlvY19nX2NoaXBfaWRlbnQJCT0gdnBpZl9nX2NoaXBfaWRlbnQsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS52aWRpb2NfZ19yZWdpc3RlcgkJPSB2cGlmX2RiZ19nX3JlZ2lzdGVyLAorCS52aWRpb2Nfc19yZWdpc3RlcgkJPSB2cGlmX2RiZ19zX3JlZ2lzdGVyLAorI2VuZGlmCisJLnZpZGlvY19sb2dfc3RhdHVzCQk9IHZwaWZfbG9nX3N0YXR1cywKIH07CiAKIC8qIHZwaWYgZmlsZSBvcGVyYXRpb25zICovCkBAIC0xODM2LDcgKzIwODIsNyBAQAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gdnBpZl9vcGVuLAogCS5yZWxlYXNlID0gdnBpZl9yZWxlYXNlLAotCS5pb2N0bCA9IHZpZGVvX2lvY3RsMiwKKwkudW5sb2NrZWRfaW9jdGwgPSB2aWRlb19pb2N0bDIsCiAJLm1tYXAgPSB2cGlmX21tYXAsCiAJLnBvbGwgPSB2cGlmX3BvbGwKIH07CkBAIC0xOTc5LDYgKzIyMjUsNyBAQAogCQljb21tb24gPSAmKGNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF0pOwogCQlzcGluX2xvY2tfaW5pdCgmY29tbW9uLT5pcnFsb2NrKTsKIAkJbXV0ZXhfaW5pdCgmY29tbW9uLT5sb2NrKTsKKwkJY2gtPnZpZGVvX2Rldi0+bG9jayA9ICZjb21tb24tPmxvY2s7CiAJCS8qIEluaXRpYWxpemUgcHJpbyBtZW1iZXIgb2YgY2hhbm5lbCBvYmplY3QgKi8KIAkJdjRsMl9wcmlvX2luaXQoJmNoLT5wcmlvKTsKIAkJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGNoLT52aWRlb19kZXYsCkBAIC0yMDI2LDkgKzIyNzMsOSBAQAogCQlpZiAodnBpZl9vYmouc2RbaV0pCiAJCQl2cGlmX29iai5zZFtpXS0+Z3JwX2lkID0gMSA8PCBpOwogCX0KLQl2NGwyX2luZm8oJnZwaWZfb2JqLnY0bDJfZGV2LCAiRE02NDZ4IFZQSUYgQ2FwdHVyZSBkcml2ZXIiCi0JCSAgIiBpbml0aWFsaXplZFxuIik7CiAKKwl2NGwyX2luZm8oJnZwaWZfb2JqLnY0bDJfZGV2LAorCQkJIkRNNjQ2eCBWUElGIGNhcHR1cmUgZHJpdmVyIGluaXRpYWxpemVkXG4iKTsKIAlyZXR1cm4gMDsKIAogcHJvYmVfc3ViZGV2X291dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2NhcHR1cmUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2NhcHR1cmUuaAppbmRleCA0ZTEyZWM4Li43YTQxOTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9jYXB0dXJlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfY2FwdHVyZS5oCkBAIC01OSw2ICs1OSw4IEBACiAJZW51bSB2NGwyX2ZpZWxkIGJ1Zl9maWVsZDsKIAkvKiBDdXJyZW50bHkgc2VsZWN0ZWQgb3IgZGVmYXVsdCBzdGFuZGFyZCAqLwogCXY0bDJfc3RkX2lkIHN0ZGlkOworCXUzMiBkdl9wcmVzZXQ7CisJc3RydWN0IHY0bDJfYnRfdGltaW5ncyBidF90aW1pbmdzOwogCS8qIFRoaXMgaXMgdG8gdHJhY2sgdGhlIGxhc3QgaW5wdXQgdGhhdCBpcyBwYXNzZWQgdG8gYXBwbGljYXRpb24gKi8KIAl1MzIgaW5wdXRfaWR4OwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2Rpc3BsYXkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2Rpc3BsYXkuYwppbmRleCA0MTJjNjVkLi5jZGY2NTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfZGlzcGxheS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bWVkaWEvYWR2NzM0My5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogCiAjaW5jbHVkZSA8bWFjaC9kbTY0NnguaD4KIApAQCAtODQsMTcgKzg1LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgdnBpZl9kZXZpY2UgdnBpZl9vYmogPSB7IHtOVUxMfSB9Owogc3RhdGljIHN0cnVjdCBkZXZpY2UgKnZwaWZfZGV2OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHZwaWZfY2hhbm5lbF9jb25maWdfcGFyYW1zIGNoX3BhcmFtc1tdID0gewotCXsKLQkJIk5UU0MiLCA3MjAsIDQ4MCwgMzAsIDAsIDEsIDI2OCwgMTQ0MCwgMSwgMjMsIDI2MywgMjY2LAotCQkyODYsIDUyNSwgNTI1LCAwLCAxLCAwLCBWNEwyX1NURF81MjVfNjAsCi0JfSwKLQl7Ci0JCSJQQUwiLCA3MjAsIDU3NiwgMjUsIDAsIDEsIDI4MCwgMTQ0MCwgMSwgMjMsIDMxMSwgMzEzLAotCQkzMzYsIDYyNCwgNjI1LCAwLCAxLCAwLCBWNEwyX1NURF82MjVfNTAsCi0JfSwKLX07Ci0KIC8qCiAgKiB2cGlmX3VzZXJ2aXJ0X3RvX3BoeXM6IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjb252ZXJ0IHVzZXIKICAqIHNwYWNlIHZpcnR1YWwgYWRkcmVzcyB0byBwaHlzaWNhbCBhZGRyZXNzLgpAQCAtMzczLDMwICszNjMsNTQgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgdnBpZl9nZXRfc3RkX2luZm8oc3RydWN0IGNoYW5uZWxfb2JqICpjaCkKK3N0YXRpYyBpbnQgdnBpZl91cGRhdGVfc3RkX2luZm8oc3RydWN0IGNoYW5uZWxfb2JqICpjaCkKIHsKLQlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CiAJc3RydWN0IHZpZGVvX29iaiAqdmlkX2NoID0gJmNoLT52aWRlbzsKIAlzdHJ1Y3QgdnBpZl9wYXJhbXMgKnZwaWZwYXJhbXMgPSAmY2gtPnZwaWZwYXJhbXM7CiAJc3RydWN0IHZwaWZfY2hhbm5lbF9jb25maWdfcGFyYW1zICpzdGRfaW5mbyA9ICZ2cGlmcGFyYW1zLT5zdGRfaW5mbzsKIAljb25zdCBzdHJ1Y3QgdnBpZl9jaGFubmVsX2NvbmZpZ19wYXJhbXMgKmNvbmZpZzsKIAotCWludCBpbmRleDsKKwlpbnQgaTsKIAotCXN0ZF9pbmZvLT5zdGRpZCA9IHZpZF9jaC0+c3RkaWQ7Ci0JaWYgKCFzdGRfaW5mby0+c3RkaWQpCi0JCXJldHVybiAtMTsKLQotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEFSUkFZX1NJWkUoY2hfcGFyYW1zKTsgaW5kZXgrKykgewotCQljb25maWcgPSAmY2hfcGFyYW1zW2luZGV4XTsKLQkJaWYgKGNvbmZpZy0+c3RkaWQgJiBzdGRfaW5mby0+c3RkaWQpIHsKLQkJCW1lbWNweShzdGRfaW5mbywgY29uZmlnLCBzaXplb2YoKmNvbmZpZykpOwotCQkJYnJlYWs7CisJZm9yIChpID0gMDsgaSA8IHZwaWZfY2hfcGFyYW1zX2NvdW50OyBpKyspIHsKKwkJY29uZmlnID0gJmNoX3BhcmFtc1tpXTsKKwkJaWYgKGNvbmZpZy0+aGRfc2QgPT0gMCkgeworCQkJdnBpZl9kYmcoMiwgZGVidWcsICJTRCBmb3JtYXRcbiIpOworCQkJaWYgKGNvbmZpZy0+c3RkaWQgJiB2aWRfY2gtPnN0ZGlkKSB7CisJCQkJbWVtY3B5KHN0ZF9pbmZvLCBjb25maWcsIHNpemVvZigqY29uZmlnKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQl2cGlmX2RiZygyLCBkZWJ1ZywgIkhEIGZvcm1hdFxuIik7CisJCQlpZiAoY29uZmlnLT5kdl9wcmVzZXQgPT0gdmlkX2NoLT5kdl9wcmVzZXQpIHsKKwkJCQltZW1jcHkoc3RkX2luZm8sIGNvbmZpZywgc2l6ZW9mKCpjb25maWcpKTsKKwkJCQlicmVhazsKKwkJCX0KIAkJfQogCX0KIAotCWlmIChpbmRleCA9PSBBUlJBWV9TSVpFKGNoX3BhcmFtcykpCi0JCXJldHVybiAtMTsKKwlpZiAoaSA9PSB2cGlmX2NoX3BhcmFtc19jb3VudCkgeworCQl2cGlmX2RiZygxLCBkZWJ1ZywgIkZvcm1hdCBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cGlmX3VwZGF0ZV9yZXNvbHV0aW9uKHN0cnVjdCBjaGFubmVsX29iaiAqY2gpCit7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCXN0cnVjdCB2aWRlb19vYmogKnZpZF9jaCA9ICZjaC0+dmlkZW87CisJc3RydWN0IHZwaWZfcGFyYW1zICp2cGlmcGFyYW1zID0gJmNoLT52cGlmcGFyYW1zOworCXN0cnVjdCB2cGlmX2NoYW5uZWxfY29uZmlnX3BhcmFtcyAqc3RkX2luZm8gPSAmdnBpZnBhcmFtcy0+c3RkX2luZm87CisKKwlpZiAoIXZpZF9jaC0+c3RkaWQgJiYgIXZpZF9jaC0+ZHZfcHJlc2V0ICYmICF2aWRfY2gtPmJ0X3RpbWluZ3MuaGVpZ2h0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2aWRfY2gtPnN0ZGlkIHx8IHZpZF9jaC0+ZHZfcHJlc2V0KSB7CisJCWlmICh2cGlmX3VwZGF0ZV9zdGRfaW5mbyhjaCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAljb21tb24tPmZtdC5mbXQucGl4LndpZHRoID0gc3RkX2luZm8tPndpZHRoOwogCWNvbW1vbi0+Zm10LmZtdC5waXguaGVpZ2h0ID0gc3RkX2luZm8tPmhlaWdodDsKQEAgLTQwNCw4ICs0MTgsOCBAQAogCQkJY29tbW9uLT5mbXQuZm10LnBpeC53aWR0aCwgY29tbW9uLT5mbXQuZm10LnBpeC5oZWlnaHQpOwogCiAJLyogU2V0IGhlaWdodCBhbmQgd2lkdGggcGFyYW1hdGVyZXMgKi8KLQljaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdLmhlaWdodCA9IHN0ZF9pbmZvLT5oZWlnaHQ7Ci0JY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXS53aWR0aCA9IHN0ZF9pbmZvLT53aWR0aDsKKwljb21tb24tPmhlaWdodCA9IHN0ZF9pbmZvLT5oZWlnaHQ7CisJY29tbW9uLT53aWR0aCA9IHN0ZF9pbmZvLT53aWR0aDsKIAogCXJldHVybiAwOwogfQpAQCAtNTE2LDEwICs1MzAsOCBAQAogCWVsc2UKIAkJc2l6ZWltYWdlID0gY29uZmlnX3BhcmFtcy5jaGFubmVsX2J1ZnNpemVbY2gtPmNoYW5uZWxfaWRdOwogCi0JaWYgKHZwaWZfZ2V0X3N0ZF9pbmZvKGNoKSkgewotCQl2cGlmX2VycigiRXJyb3IgZ2V0dGluZyB0aGUgc3RhbmRhcmQgaW5mb1xuIik7CisJaWYgKHZwaWZfdXBkYXRlX3Jlc29sdXRpb24oY2gpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAlocGl0Y2ggPSBwaXhmbXQtPmJ5dGVzcGVybGluZTsKIAl2cGl0Y2ggPSBzaXplaW1hZ2UgLyAoaHBpdGNoICogMik7CkBAIC01NjgsNyArNTgwLDEwIEBACiBzdGF0aWMgaW50IHZwaWZfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCB2cGlmX2ZoICpmaCA9IGZpbGVwLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZmaC0+Y2hhbm5lbC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJihjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdKTsKKworCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl9tbWFwXG4iKTsKIAogCXJldHVybiB2aWRlb2J1Zl9tbWFwX21hcHBlcigmY29tbW9uLT5idWZmZXJfcXVldWUsIHZtYSk7CiB9CkBAIC02MzcsOSArNjUyLDYgQEAKIAlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CiAJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOwogCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29tbW9uLT5sb2NrKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQogCS8qIGlmIHRoaXMgaW5zdGFuY2UgaXMgZG9pbmcgSU8gKi8KIAlpZiAoZmgtPmlvX2FsbG93ZWRbVlBJRl9WSURFT19JTkRFWF0pIHsKIAkJLyogUmVzZXQgaW9fdXNycyBtZW1iZXIgb2YgY2hhbm5lbCBvYmplY3QgKi8KQEAgLTY2Miw4ICs2NzQsNiBAQAogCQkgICAgY29uZmlnX3BhcmFtcy5udW1idWZmZXJzW2NoLT5jaGFubmVsX2lkXTsKIAl9CiAKLQltdXRleF91bmxvY2soJmNvbW1vbi0+bG9jayk7Ci0KIAkvKiBEZWNyZW1lbnQgY2hhbm5lbCB1c3JzIGNvdW50ZXIgKi8KIAlhdG9taWNfZGVjKCZjaC0+dXNycyk7CiAJLyogSWYgdGhpcyBmaWxlIGhhbmRsZSBoYXMgaW5pdGlhbGl6ZSBlbmNvZGVyIGRldmljZSwgcmVzZXQgaXQgKi8KQEAgLTY4MCw3ICs2OTAsMTIgQEAKIH0KIAogLyogZnVuY3Rpb25zIGltcGxlbWVudGluZyBpb2N0bHMgKi8KLQorLyoqCisgKiB2cGlmX3F1ZXJ5Y2FwKCkgLSBRVUVSWUNBUCBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQGNhcDogcHRyIHRvIHY0bDJfY2FwYWJpbGl0eSBzdHJ1Y3R1cmUKKyAqLwogc3RhdGljIGludCB2cGlmX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7CkBAIC03MjIsMTcgKzczNyw5IEBACiAJaWYgKGNvbW1vbi0+Zm10LnR5cGUgIT0gZm10LT50eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIEZpbGwgaW4gdGhlIGluZm9ybWF0aW9uIGFib3V0IGZvcm1hdCAqLwotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQlpZiAodnBpZl9nZXRfc3RkX2luZm8oY2gpKSB7Ci0JCXZwaWZfZXJyKCJFcnJvciBnZXR0aW5nIHRoZSBzdGFuZGFyZCBpbmZvXG4iKTsKKwlpZiAodnBpZl91cGRhdGVfcmVzb2x1dGlvbihjaCkpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KLQogCSpmbXQgPSBjb21tb24tPmZtdDsKLQltdXRleF91bmxvY2soJmNvbW1vbi0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc3MywxMiArNzgwLDcgQEAKIAkvKiBzdG9yZSB0aGUgcGl4IGZvcm1hdCBpbiB0aGUgY2hhbm5lbCBvYmplY3QgKi8KIAljb21tb24tPmZtdC5mbXQucGl4ID0gKnBpeGZtdDsKIAkvKiBzdG9yZSB0aGUgZm9ybWF0IGluIHRoZSBjaGFubmVsIG9iamVjdCAqLwotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KIAljb21tb24tPmZtdCA9ICpmbXQ7Ci0JbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgwOCw3ICs4MTAsNiBAQAogCXN0cnVjdCBjb21tb25fb2JqICpjb21tb247CiAJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOwogCXU4IGluZGV4ID0gMDsKLQlpbnQgcmV0ID0gMDsKIAogCS8qIFRoaXMgZmlsZSBoYW5kbGUgaGFzIG5vdCBpbml0aWFsaXplZCB0aGUgY2hhbm5lbCwKIAkgICBJdCBpcyBub3QgYWxsb3dlZCB0byBkbyBzZXR0aW5ncyAqLwpAQCAtODI2LDE4ICs4MjcsMTIgQEAKIAlpbmRleCA9IFZQSUZfVklERU9fSU5ERVg7CiAKIAljb21tb24gPSAmY2gtPmNvbW1vbltpbmRleF07Ci0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29tbW9uLT5sb2NrKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAotCWlmIChjb21tb24tPmZtdC50eXBlICE9IHJlcWJ1Zi0+dHlwZSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIHJlcWJ1Zl9leGl0OwotCX0KKwlpZiAoY29tbW9uLT5mbXQudHlwZSAhPSByZXFidWYtPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKDAgIT0gY29tbW9uLT5pb191c3JzKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byByZXFidWZfZXhpdDsKLQl9CisJaWYgKDAgIT0gY29tbW9uLT5pb191c3JzKQorCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKHJlcWJ1Zi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCkgewogCQlpZiAoY29tbW9uLT5mbXQuZm10LnBpeC5maWVsZCA9PSBWNEwyX0ZJRUxEX0FOWSkKQEAgLTg1NCw3ICs4NDksNyBAQAogCQkJCQkgICAgJmNvbW1vbi0+aXJxbG9jaywKIAkJCQkJICAgIHJlcWJ1Zi0+dHlwZSwgZmllbGQsCiAJCQkJCSAgICBzaXplb2Yoc3RydWN0IHZpZGVvYnVmX2J1ZmZlciksIGZoLAotCQkJCQkgICAgTlVMTCk7CisJCQkJCSAgICAmY29tbW9uLT5sb2NrKTsKIAogCS8qIFNldCBpbyBhbGxvd2VkIG1lbWJlciBvZiBmaWxlIGhhbmRsZSB0byBUUlVFICovCiAJZmgtPmlvX2FsbG93ZWRbaW5kZXhdID0gMTsKQEAgLTg2NSwxMSArODYwLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmY29tbW9uLT5kbWFfcXVldWUpOwogCiAJLyogQWxsb2NhdGUgYnVmZmVycyAqLwotCXJldCA9IHZpZGVvYnVmX3JlcWJ1ZnMoJmNvbW1vbi0+YnVmZmVyX3F1ZXVlLCByZXFidWYpOwotCi1yZXFidWZfZXhpdDoKLQltdXRleF91bmxvY2soJmNvbW1vbi0+bG9jayk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gdmlkZW9idWZfcmVxYnVmcygmY29tbW9uLT5idWZmZXJfcXVldWUsIHJlcWJ1Zik7CiB9CiAKIHN0YXRpYyBpbnQgdnBpZl9xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTk5MCwyMiArOTgxLDE5IEBACiAJfQogCiAJLyogQ2FsbCBlbmNvZGVyIHN1YmRldmljZSBmdW5jdGlvbiB0byBzZXQgdGhlIHN0YW5kYXJkICovCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29tbW9uLT5sb2NrKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQogCWNoLT52aWRlby5zdGRpZCA9ICpzdGRfaWQ7CisJY2gtPnZpZGVvLmR2X3ByZXNldCA9IFY0TDJfRFZfSU5WQUxJRDsKKwltZW1zZXQoJmNoLT52aWRlby5idF90aW1pbmdzLCAwLCBzaXplb2YoY2gtPnZpZGVvLmJ0X3RpbWluZ3MpKTsKKwogCS8qIEdldCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YW5kYXJkICovCi0JaWYgKHZwaWZfZ2V0X3N0ZF9pbmZvKGNoKSkgewotCQl2cGlmX2VycigiRXJyb3IgZ2V0dGluZyB0aGUgc3RhbmRhcmQgaW5mb1xuIik7CisJaWYgKHZwaWZfdXBkYXRlX3Jlc29sdXRpb24oY2gpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAlpZiAoKGNoLT52cGlmcGFyYW1zLnN0ZF9pbmZvLndpZHRoICoKIAkJY2gtPnZwaWZwYXJhbXMuc3RkX2luZm8uaGVpZ2h0ICogMikgPgogCQljb25maWdfcGFyYW1zLmNoYW5uZWxfYnVmc2l6ZVtjaC0+Y2hhbm5lbF9pZF0pIHsKIAkJdnBpZl9lcnIoImludmFsaWQgc3RkIGZvciB0aGlzIHNpemVcbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIHNfc3RkX2V4aXQ7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWNvbW1vbi0+Zm10LmZtdC5waXguYnl0ZXNwZXJsaW5lID0gY29tbW9uLT5mbXQuZm10LnBpeC53aWR0aDsKQEAgLTEwMTYsMTYgKzEwMDQsMTMgQEAKIAkJCQkJCXNfc3RkX291dHB1dCwgKnN0ZF9pZCk7CiAJaWYgKHJldCA8IDApIHsKIAkJdnBpZl9lcnIoIkZhaWxlZCB0byBzZXQgb3V0cHV0IHN0YW5kYXJkXG4iKTsKLQkJZ290byBzX3N0ZF9leGl0OworCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKCZ2cGlmX29iai52NGwyX2RldiwgMSwgY29yZSwKIAkJCQkJCQlzX3N0ZCwgKnN0ZF9pZCk7CiAJaWYgKHJldCA8IDApCiAJCXZwaWZfZXJyKCJGYWlsZWQgdG8gc2V0IHN0YW5kYXJkIGZvciBzdWIgZGV2aWNlc1xuIik7Ci0KLXNfc3RkX2V4aXQ6Ci0JbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwOTAsMjEgKzEwNzUsMTcgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIENhbGwgdmlkZW9idWZfc3RyZWFtb24gdG8gc3RhcnQgc3RyZWFtaW5nICBpbiB2aWRlb2J1ZiAqLworCS8qIENhbGwgdmlkZW9idWZfc3RyZWFtb24gdG8gc3RhcnQgc3RyZWFtaW5nIGluIHZpZGVvYnVmICovCiAJcmV0ID0gdmlkZW9idWZfc3RyZWFtb24oJmNvbW1vbi0+YnVmZmVyX3F1ZXVlKTsKIAlpZiAocmV0IDwgMCkgewogCQl2cGlmX2VycigidmlkZW9idWZfc3RyZWFtb25cbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KIAkvKiBJZiBidWZmZXIgcXVldWUgaXMgZW1wdHksIHJldHVybiBlcnJvciAqLwogCWlmIChsaXN0X2VtcHR5KCZjb21tb24tPmRtYV9xdWV1ZSkpIHsKIAkJdnBpZl9lcnIoImJ1ZmZlciBxdWV1ZSBpcyBlbXB0eVxuIik7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gc3RyZWFtb25fZXhpdDsKKwkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogR2V0IHRoZSBuZXh0IGZyYW1lIGZyb20gdGhlIGJ1ZmZlciBxdWV1ZSAqLwpAQCAtMTEzMCw4ICsxMTExLDcgQEAKIAkJCXx8ICghY2gtPnZwaWZwYXJhbXMuc3RkX2luZm8uZnJtX2ZtdAogCQkJJiYgKGNvbW1vbi0+Zm10LmZtdC5waXguZmllbGQgPT0gVjRMMl9GSUVMRF9OT05FKSkpIHsKIAkJCXZwaWZfZXJyKCJjb25mbGljdCBpbiBmaWVsZCBmb3JtYXQgYW5kIHN0ZCBmb3JtYXRcbiIpOwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWdvdG8gc3RyZWFtb25fZXhpdDsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJLyogY2xvY2sgc2V0dGluZ3MgKi8KQEAgLTExNDAsMTMgKzExMjAsMTMgQEAKIAkJCQkJCWNoLT52cGlmcGFyYW1zLnN0ZF9pbmZvLmhkX3NkKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXZwaWZfZXJyKCJjYW4ndCBzZXQgY2xvY2tcbiIpOwotCQkJZ290byBzdHJlYW1vbl9leGl0OworCQkJcmV0dXJuIHJldDsKIAkJfQogCiAJCS8qIHNldCB0aGUgcGFyYW1ldGVycyBhbmQgYWRkcmVzc2VzICovCiAJCXJldCA9IHZwaWZfc2V0X3ZpZGVvX3BhcmFtcyh2cGlmLCBjaC0+Y2hhbm5lbF9pZCArIDIpOwogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gc3RyZWFtb25fZXhpdDsKKwkJCXJldHVybiByZXQ7CiAKIAkJY29tbW9uLT5zdGFydGVkID0gcmV0OwogCQl2cGlmX2NvbmZpZ19hZGRyKGNoLCByZXQpOwpAQCAtMTE3MSw5ICsxMTUxLDYgQEAKIAkJfQogCQljaGFubmVsX2ZpcnN0X2ludFtWUElGX1ZJREVPX0lOREVYXVtjaC0+Y2hhbm5lbF9pZF0gPSAxOwogCX0KLQotc3RyZWFtb25fZXhpdDoKLQltdXRleF91bmxvY2soJmNvbW1vbi0+bG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTE5OSw5ICsxMTc2LDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29tbW9uLT5sb2NrKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQogCWlmIChidWZ0eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUKSB7CiAJCS8qIGRpc2FibGUgY2hhbm5lbCAqLwogCQlpZiAoVlBJRl9DSEFOTkVMMl9WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkgewpAQCAtMTIxNiw4ICsxMTkwLDYgQEAKIAl9CiAKIAljb21tb24tPnN0YXJ0ZWQgPSAwOwotCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKLQogCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vZmYoJmNvbW1vbi0+YnVmZmVyX3F1ZXVlKTsKIH0KIApAQCAtMTI2NCwxMyArMTIzNiw5IEBACiAJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOwogCWludCByZXQgPSAwOwogCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29tbW9uLT5sb2NrKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQogCWlmIChjb21tb24tPnN0YXJ0ZWQpIHsKIAkJdnBpZl9lcnIoIlN0cmVhbWluZyBpbiBwcm9ncmVzc1xuIik7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBzX291dHB1dF9leGl0OworCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKCZ2cGlmX29iai52NGwyX2RldiwgMSwgdmlkZW8sCkBAIC0xMjgwLDkgKzEyNDgsNiBAQAogCQl2cGlmX2VycigiRmFpbGVkIHRvIHNldCBvdXRwdXQgc3RhbmRhcmRcbiIpOwogCiAJdmlkX2NoLT5vdXRwdXRfaWQgPSBpOwotCi1zX291dHB1dF9leGl0OgotCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMzE1LDYgKzEyODAsMjg3IEBACiAJcmV0dXJuIHY0bDJfcHJpb19jaGFuZ2UoJmNoLT5wcmlvLCAmZmgtPnByaW8sIHApOwogfQogCisvKioKKyAqIHZwaWZfZW51bV9kdl9wcmVzZXRzKCkgLSBFTlVNX0RWX1BSRVNFVFMgaGFuZGxlcgorICogQGZpbGU6IGZpbGUgcHRyCisgKiBAcHJpdjogZmlsZSBoYW5kbGUKKyAqIEBwcmVzZXQ6IGlucHV0IHByZXNldAorICovCitzdGF0aWMgaW50IHZwaWZfZW51bV9kdl9wcmVzZXRzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9kdl9lbnVtX3ByZXNldCAqcHJlc2V0KQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCB2aWRlb19vYmogKnZpZF9jaCA9ICZjaC0+dmlkZW87CisKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh2cGlmX29iai5zZFt2aWRfY2gtPm91dHB1dF9pZF0sCisJCQl2aWRlbywgZW51bV9kdl9wcmVzZXRzLCBwcmVzZXQpOworfQorCisvKioKKyAqIHZwaWZfc19kdl9wcmVzZXRzKCkgLSBTX0RWX1BSRVNFVFMgaGFuZGxlcgorICogQGZpbGU6IGZpbGUgcHRyCisgKiBAcHJpdjogZmlsZSBoYW5kbGUKKyAqIEBwcmVzZXQ6IGlucHV0IHByZXNldAorICovCitzdGF0aWMgaW50IHZwaWZfc19kdl9wcmVzZXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2R2X3ByZXNldCAqcHJlc2V0KQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKwlzdHJ1Y3QgdmlkZW9fb2JqICp2aWRfY2ggPSAmY2gtPnZpZGVvOworCWludCByZXQgPSAwOworCisJaWYgKGNvbW1vbi0+c3RhcnRlZCkgeworCQl2cGlmX2RiZygxLCBkZWJ1ZywgInN0cmVhbWluZyBpbiBwcm9ncmVzc1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0ID0gdjRsMl9wcmlvX2NoZWNrKCZjaC0+cHJpbywgZmgtPnByaW8pOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCWZoLT5pbml0aWFsaXplZCA9IDE7CisKKwkvKiBDYWxsIGVuY29kZXIgc3ViZGV2aWNlIGZ1bmN0aW9uIHRvIHNldCB0aGUgc3RhbmRhcmQgKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmxvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJY2gtPnZpZGVvLmR2X3ByZXNldCA9IHByZXNldC0+cHJlc2V0OworCWNoLT52aWRlby5zdGRpZCA9IFY0TDJfU1REX1VOS05PV047CisJbWVtc2V0KCZjaC0+dmlkZW8uYnRfdGltaW5ncywgMCwgc2l6ZW9mKGNoLT52aWRlby5idF90aW1pbmdzKSk7CisKKwkvKiBHZXQgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGFuZGFyZCAqLworCWlmICh2cGlmX3VwZGF0ZV9yZXNvbHV0aW9uKGNoKSkgeworCQlyZXQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCS8qIENvbmZpZ3VyZSB0aGUgZGVmYXVsdCBmb3JtYXQgaW5mb3JtYXRpb24gKi8KKwkJdnBpZl9jb25maWdfZm9ybWF0KGNoKTsKKworCQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHZwaWZfb2JqLnNkW3ZpZF9jaC0+b3V0cHV0X2lkXSwKKwkJCQl2aWRlbywgc19kdl9wcmVzZXQsIHByZXNldCk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKy8qKgorICogdnBpZl9nX2R2X3ByZXNldHMoKSAtIEdfRFZfUFJFU0VUUyBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQHByZXNldDogaW5wdXQgcHJlc2V0CisgKi8KK3N0YXRpYyBpbnQgdnBpZl9nX2R2X3ByZXNldChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfZHZfcHJlc2V0ICpwcmVzZXQpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisKKwlwcmVzZXQtPnByZXNldCA9IGNoLT52aWRlby5kdl9wcmVzZXQ7CisKKwlyZXR1cm4gMDsKK30KKy8qKgorICogdnBpZl9zX2R2X3RpbWluZ3MoKSAtIFNfRFZfVElNSU5HUyBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQHRpbWluZ3M6IGRpZ2l0YWwgdmlkZW8gdGltaW5ncworICovCitzdGF0aWMgaW50IHZwaWZfc19kdl90aW1pbmdzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzICp0aW1pbmdzKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCB2cGlmX3BhcmFtcyAqdnBpZnBhcmFtcyA9ICZjaC0+dnBpZnBhcmFtczsKKwlzdHJ1Y3QgdnBpZl9jaGFubmVsX2NvbmZpZ19wYXJhbXMgKnN0ZF9pbmZvID0gJnZwaWZwYXJhbXMtPnN0ZF9pbmZvOworCXN0cnVjdCB2aWRlb19vYmogKnZpZF9jaCA9ICZjaC0+dmlkZW87CisJc3RydWN0IHY0bDJfYnRfdGltaW5ncyAqYnQgPSAmdmlkX2NoLT5idF90aW1pbmdzOworCWludCByZXQ7CisKKwlpZiAodGltaW5ncy0+dHlwZSAhPSBWNEwyX0RWX0JUXzY1Nl8xMTIwKSB7CisJCXZwaWZfZGJnKDIsIGRlYnVnLCAiVGltaW5nIHR5cGUgbm90IGRlZmluZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDb25maWd1cmUgc3ViZGV2aWNlIHRpbWluZ3MsIGlmIGFueSAqLworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwodnBpZl9vYmouc2RbdmlkX2NoLT5vdXRwdXRfaWRdLAorCQkJdmlkZW8sIHNfZHZfdGltaW5ncywgdGltaW5ncyk7CisJaWYgKHJldCA9PSAtRU5PSU9DVExDTUQpIHsKKwkJdnBpZl9kYmcoMiwgZGVidWcsICJDdXN0b20gRFYgdGltaW5ncyBub3Qgc3VwcG9ydGVkIGJ5ICIKKwkJCQkic3ViZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChyZXQgPCAwKSB7CisJCXZwaWZfZGJnKDIsIGRlYnVnLCAiRXJyb3Igc2V0dGluZyBjdXN0b20gRFYgdGltaW5nc1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKCEodGltaW5ncy0+YnQud2lkdGggJiYgdGltaW5ncy0+YnQuaGVpZ2h0ICYmCisJCQkJKHRpbWluZ3MtPmJ0LmhiYWNrcG9yY2ggfHwKKwkJCQkgdGltaW5ncy0+YnQuaGZyb250cG9yY2ggfHwKKwkJCQkgdGltaW5ncy0+YnQuaHN5bmMpICYmCisJCQkJdGltaW5ncy0+YnQudmZyb250cG9yY2ggJiYKKwkJCQkodGltaW5ncy0+YnQudmJhY2twb3JjaCB8fAorCQkJCSB0aW1pbmdzLT5idC52c3luYykpKSB7CisJCXZwaWZfZGJnKDIsIGRlYnVnLCAiVGltaW5ncyBmb3Igd2lkdGgsIGhlaWdodCwgIgorCQkJCSJob3Jpem9udGFsIGJhY2sgcG9yY2gsIGhvcml6b250YWwgc3luYywgIgorCQkJCSJob3Jpem9udGFsIGZyb250IHBvcmNoLCB2ZXJ0aWNhbCBiYWNrIHBvcmNoLCAiCisJCQkJInZlcnRpY2FsIHN5bmMgYW5kIHZlcnRpY2FsIGJhY2sgcG9yY2ggIgorCQkJCSJtdXN0IGJlIGRlZmluZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqYnQgPSB0aW1pbmdzLT5idDsKKworCS8qIENvbmZpZ3VyZSB2aWRlbyBwb3J0IHRpbWluZ3MgKi8KKworCXN0ZF9pbmZvLT5lYXYyc2F2ID0gYnQtPmhiYWNrcG9yY2ggKyBidC0+aGZyb250cG9yY2ggKworCQlidC0+aHN5bmMgLSA4OworCXN0ZF9pbmZvLT5zYXYyZWF2ID0gYnQtPndpZHRoOworCisJc3RkX2luZm8tPmwxID0gMTsKKwlzdGRfaW5mby0+bDMgPSBidC0+dnN5bmMgKyBidC0+dmJhY2twb3JjaCArIDE7CisKKwlpZiAoYnQtPmludGVybGFjZWQpIHsKKwkJaWYgKGJ0LT5pbF92YmFja3BvcmNoIHx8IGJ0LT5pbF92ZnJvbnRwb3JjaCB8fCBidC0+aWxfdnN5bmMpIHsKKwkJCXN0ZF9pbmZvLT52c2l6ZSA9IGJ0LT5oZWlnaHQgKiAyICsKKwkJCQlidC0+dmZyb250cG9yY2ggKyBidC0+dnN5bmMgKyBidC0+dmJhY2twb3JjaCArCisJCQkJYnQtPmlsX3Zmcm9udHBvcmNoICsgYnQtPmlsX3ZzeW5jICsKKwkJCQlidC0+aWxfdmJhY2twb3JjaDsKKwkJCXN0ZF9pbmZvLT5sNSA9IHN0ZF9pbmZvLT52c2l6ZS8yIC0KKwkJCQkoYnQtPnZmcm9udHBvcmNoIC0gMSk7CisJCQlzdGRfaW5mby0+bDcgPSBzdGRfaW5mby0+dnNpemUvMiArIDE7CisJCQlzdGRfaW5mby0+bDkgPSBzdGRfaW5mby0+bDcgKyBidC0+aWxfdnN5bmMgKworCQkJCWJ0LT5pbF92YmFja3BvcmNoICsgMTsKKwkJCXN0ZF9pbmZvLT5sMTEgPSBzdGRfaW5mby0+dnNpemUgLQorCQkJCShidC0+aWxfdmZyb250cG9yY2ggLSAxKTsKKwkJfSBlbHNlIHsKKwkJCXZwaWZfZGJnKDIsIGRlYnVnLCAiUmVxdWlyZWQgdGltaW5nIHZhbHVlcyBmb3IgIgorCQkJCQkiaW50ZXJsYWNlZCBCVCBmb3JtYXQgbWlzc2luZ1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCXN0ZF9pbmZvLT52c2l6ZSA9IGJ0LT5oZWlnaHQgKyBidC0+dmZyb250cG9yY2ggKworCQkJYnQtPnZzeW5jICsgYnQtPnZiYWNrcG9yY2g7CisJCXN0ZF9pbmZvLT5sNSA9IHN0ZF9pbmZvLT52c2l6ZSAtIChidC0+dmZyb250cG9yY2ggLSAxKTsKKwl9CisJc3RybmNweShzdGRfaW5mby0+bmFtZSwgIkN1c3RvbSB0aW1pbmdzIEJUNjU2LzExMjAiLAorCQkJVlBJRl9NQVhfTkFNRSk7CisJc3RkX2luZm8tPndpZHRoID0gYnQtPndpZHRoOworCXN0ZF9pbmZvLT5oZWlnaHQgPSBidC0+aGVpZ2h0OworCXN0ZF9pbmZvLT5mcm1fZm10ID0gYnQtPmludGVybGFjZWQgPyAwIDogMTsKKwlzdGRfaW5mby0+eWNtdXhfbW9kZSA9IDA7CisJc3RkX2luZm8tPmNhcHR1cmVfZm9ybWF0ID0gMDsKKwlzdGRfaW5mby0+dmJpX3N1cHBvcnRlZCA9IDA7CisJc3RkX2luZm8tPmhkX3NkID0gMTsKKwlzdGRfaW5mby0+c3RkaWQgPSAwOworCXN0ZF9pbmZvLT5kdl9wcmVzZXQgPSBWNEwyX0RWX0lOVkFMSUQ7CisKKwl2aWRfY2gtPnN0ZGlkID0gMDsKKwl2aWRfY2gtPmR2X3ByZXNldCA9IFY0TDJfRFZfSU5WQUxJRDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZwaWZfZ19kdl90aW1pbmdzKCkgLSBHX0RWX1RJTUlOR1MgaGFuZGxlcgorICogQGZpbGU6IGZpbGUgcHRyCisgKiBAcHJpdjogZmlsZSBoYW5kbGUKKyAqIEB0aW1pbmdzOiBkaWdpdGFsIHZpZGVvIHRpbWluZ3MKKyAqLworc3RhdGljIGludCB2cGlmX2dfZHZfdGltaW5ncyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfZHZfdGltaW5ncyAqdGltaW5ncykKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgdmlkZW9fb2JqICp2aWRfY2ggPSAmY2gtPnZpZGVvOworCXN0cnVjdCB2NGwyX2J0X3RpbWluZ3MgKmJ0ID0gJnZpZF9jaC0+YnRfdGltaW5nczsKKworCXRpbWluZ3MtPmJ0ID0gKmJ0OworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB2cGlmX2dfY2hpcF9pZGVudCgpIC0gSWRlbnRpZnkgdGhlIGNoaXAKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAY2hpcDogY2hpcCBpZGVudGl0eQorICoKKyAqIFJldHVybnMgemVybyBvciAtRUlOVkFMIGlmIHJlYWQgb3BlcmF0aW9ucyBmYWlscy4KKyAqLworc3RhdGljIGludCB2cGlmX2dfY2hpcF9pZGVudChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX05PTkU7CisJY2hpcC0+cmV2aXNpb24gPSAwOworCWlmIChjaGlwLT5tYXRjaC50eXBlICE9IFY0TDJfQ0hJUF9NQVRDSF9JMkNfRFJJVkVSICYmCisJCQljaGlwLT5tYXRjaC50eXBlICE9IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUikgeworCQl2cGlmX2RiZygyLCBkZWJ1ZywgIm1hdGNoX3R5cGUgaXMgaW52YWxpZC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoJnZwaWZfb2JqLnY0bDJfZGV2LCAwLCBjb3JlLAorCQkJZ19jaGlwX2lkZW50LCBjaGlwKTsKK30KKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKy8qCisgKiB2cGlmX2RiZ19nX3JlZ2lzdGVyKCkgLSBSZWFkIHJlZ2lzdGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQHJlZzogcmVnaXN0ZXIgdG8gYmUgcmVhZAorICoKKyAqIERlYnVnZ2luZyBvbmx5CisgKiBSZXR1cm5zIHplcm8gb3IgLUVJTlZBTCBpZiByZWFkIG9wZXJhdGlvbnMgZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgdnBpZl9kYmdfZ19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpeworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCB2aWRlb19vYmogKnZpZF9jaCA9ICZjaC0+dmlkZW87CisKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh2cGlmX29iai5zZFt2aWRfY2gtPm91dHB1dF9pZF0sIGNvcmUsCisJCQlnX3JlZ2lzdGVyLCByZWcpOworfQorCisvKgorICogdnBpZl9kYmdfc19yZWdpc3RlcigpIC0gV3JpdGUgdG8gcmVnaXN0ZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAcmVnOiByZWdpc3RlciB0byBiZSBtb2RpZmllZAorICoKKyAqIERlYnVnZ2luZyBvbmx5CisgKiBSZXR1cm5zIHplcm8gb3IgLUVJTlZBTCBpZiB3cml0ZSBvcGVyYXRpb25zIGZhaWxzLgorICovCitzdGF0aWMgaW50IHZwaWZfZGJnX3NfcmVnaXN0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKXsKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgdmlkZW9fb2JqICp2aWRfY2ggPSAmY2gtPnZpZGVvOworCisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodnBpZl9vYmouc2RbdmlkX2NoLT5vdXRwdXRfaWRdLCBjb3JlLAorCQkJc19yZWdpc3RlciwgcmVnKTsKK30KKyNlbmRpZgorCisvKgorICogdnBpZl9sb2dfc3RhdHVzKCkgLSBTdGF0dXMgaW5mb3JtYXRpb24KKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKgorICogUmV0dXJucyB6ZXJvLgorICovCitzdGF0aWMgaW50IHZwaWZfbG9nX3N0YXR1cyhzdHJ1Y3QgZmlsZSAqZmlsZXAsIHZvaWQgKnByaXYpCit7CisJLyogc3RhdHVzIGZvciBzdWIgZGV2aWNlcyAqLworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZ2cGlmX29iai52NGwyX2RldiwgMCwgY29yZSwgbG9nX3N0YXR1cyk7CisKKwlyZXR1cm4gMDsKK30KKwogLyogdnBpZiBkaXNwbGF5IGlvY3RsIG9wZXJhdGlvbnMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdnBpZl9pb2N0bF9vcHMgPSB7CiAJLnZpZGlvY19xdWVyeWNhcCAgICAgICAgCT0gdnBpZl9xdWVyeWNhcCwKQEAgLTEzMzYsMTMgKzE1ODIsMjQgQEAKIAkudmlkaW9jX3Nfb3V0cHV0CQk9IHZwaWZfc19vdXRwdXQsCiAJLnZpZGlvY19nX291dHB1dAkJPSB2cGlmX2dfb3V0cHV0LAogCS52aWRpb2NfY3JvcGNhcCAgICAgICAgIAk9IHZwaWZfY3JvcGNhcCwKKwkudmlkaW9jX2VudW1fZHZfcHJlc2V0cyAgICAgICAgID0gdnBpZl9lbnVtX2R2X3ByZXNldHMsCisJLnZpZGlvY19zX2R2X3ByZXNldCAgICAgICAgICAgICA9IHZwaWZfc19kdl9wcmVzZXQsCisJLnZpZGlvY19nX2R2X3ByZXNldCAgICAgICAgICAgICA9IHZwaWZfZ19kdl9wcmVzZXQsCisJLnZpZGlvY19zX2R2X3RpbWluZ3MgICAgICAgICAgICA9IHZwaWZfc19kdl90aW1pbmdzLAorCS52aWRpb2NfZ19kdl90aW1pbmdzICAgICAgICAgICAgPSB2cGlmX2dfZHZfdGltaW5ncywKKwkudmlkaW9jX2dfY2hpcF9pZGVudAkJPSB2cGlmX2dfY2hpcF9pZGVudCwKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLnZpZGlvY19nX3JlZ2lzdGVyCQk9IHZwaWZfZGJnX2dfcmVnaXN0ZXIsCisJLnZpZGlvY19zX3JlZ2lzdGVyCQk9IHZwaWZfZGJnX3NfcmVnaXN0ZXIsCisjZW5kaWYKKwkudmlkaW9jX2xvZ19zdGF0dXMJCT0gdnBpZl9sb2dfc3RhdHVzLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2cGlmX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IHZwaWZfb3BlbiwKIAkucmVsZWFzZQk9IHZwaWZfcmVsZWFzZSwKLQkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAorCS51bmxvY2tlZF9pb2N0bAk9IHZpZGVvX2lvY3RsMiwKIAkubW1hcAkJPSB2cGlmX21tYXAsCiAJLnBvbGwJCT0gdnBpZl9wb2xsCiB9OwpAQCAtMTUyNiw2ICsxNzgzLDcgQEAKIAkJdjRsMl9wcmlvX2luaXQoJmNoLT5wcmlvKTsKIAkJY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXS5mbXQudHlwZSA9CiAJCQkJCQlWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDsKKwkJY2gtPnZpZGVvX2Rldi0+bG9jayA9ICZjb21tb24tPmxvY2s7CiAKIAkJLyogcmVnaXN0ZXIgdmlkZW8gZGV2aWNlICovCiAJCXZwaWZfZGJnKDEsIGRlYnVnLCAiY2hhbm5lbD0leCxjaGFubmVsLT52aWRlb19kZXY9JXhcbiIsCkBAIC0xNTY1LDYgKzE4MjMsOCBAQAogCQkJdnBpZl9vYmouc2RbaV0tPmdycF9pZCA9IDEgPDwgaTsKIAl9CiAKKwl2NGwyX2luZm8oJnZwaWZfb2JqLnY0bDJfZGV2LAorCQkJIkRNNjQ2eCBWUElGIGRpc3BsYXkgZHJpdmVyIGluaXRpYWxpemVkXG4iKTsKIAlyZXR1cm4gMDsKIAogcHJvYmVfc3ViZGV2X291dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2Rpc3BsYXkuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2Rpc3BsYXkuaAppbmRleCBhMmE3Y2QxLi5iNTNhYWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9kaXNwbGF5LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfZGlzcGxheS5oCkBAIC02Nyw2ICs2Nyw4IEBACiAJCQkJCSAqIG1vc3QgcmVjZW50IGRpc3BsYXllZCBmcmFtZSBvbmx5ICovCiAJdjRsMl9zdGRfaWQgc3RkaWQ7CQkvKiBDdXJyZW50bHkgc2VsZWN0ZWQgb3IgZGVmYXVsdAogCQkJCQkgKiBzdGFuZGFyZCAqLworCXUzMiBkdl9wcmVzZXQ7CisJc3RydWN0IHY0bDJfYnRfdGltaW5ncyBidF90aW1pbmdzOwogCXUzMiBvdXRwdXRfaWQ7CQkJLyogQ3VycmVudCBvdXRwdXQgaWQgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKaW5kZXggMDk5ZDVkZi4uODdmNzdhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxtZWRpYS9zYWE3MTE1Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdHZwNTE1MC5oPgogI2luY2x1ZGUgPG1lZGlhL3R2YXVkaW8uaD4KKyNpbmNsdWRlIDxtZWRpYS9tdDl2MDExLmg+CiAjaW5jbHVkZSA8bWVkaWEvaTJjLWFkZHIuaD4KICNpbmNsdWRlIDxtZWRpYS90dmVlcHJvbS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CkBAIC0xOTE3LDExICsxOTE4LDYgQEAKIAlJMkNfQ0xJRU5UX0VORAogfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG10OXYwMTFfYWRkcnNbXSA9IHsKLQkweGJhID4+IDEsCi0JSTJDX0NMSUVOVF9FTkQKLX07Ci0KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtc3AzNDAwX2FkZHJzW10gPSB7CiAJMHg4MCA+PiAxLAogCTB4ODggPj4gMSwKQEAgLTI0MzcsNiArMjQzMyw3IEBACiAJCWRldi0+aW5pdF9kYXRhLmlyX2NvZGVzID0gUkNfTUFQX1JDNV9IQVVQUEFVR0VfTkVXOwogCQlkZXYtPmluaXRfZGF0YS5nZXRfa2V5ID0gZW0yOHh4X2dldF9rZXlfZW1faGF1cDsKIAkJZGV2LT5pbml0X2RhdGEubmFtZSA9ICJpMmMgSVIgKEVNMjg0MCBIYXVwcGF1Z2UpIjsKKwkJYnJlYWs7CiAJY2FzZSBFTTI4MjBfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1VTQklJX0RFTFVYRToKIAkJZGV2LT5pbml0X2RhdGEuaXJfY29kZXMgPSBSQ19NQVBfV0lORkFTVF9VU0JJSV9ERUxVWEU7CiAJCWRldi0+aW5pdF9kYXRhLmdldF9rZXkgPSBlbTI4eHhfZ2V0X2tleV93aW5mYXN0X3VzYmlpX2RlbHV4ZTsKQEAgLTI2MjMsMTEgKzI2MjAsMTcgQEAKIAkJCSJ0dnA1MTUwIiwgMCwgdHZwNTE1MF9hZGRycyk7CiAKIAlpZiAoZGV2LT5lbTI4eHhfc2Vuc29yID09IEVNMjhYWF9NVDlWMDExKSB7CisJCXN0cnVjdCBtdDl2MDExX3BsYXRmb3JtX2RhdGEgcGRhdGE7CisJCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBtdDl2MDExX2luZm8gPSB7CisJCQkudHlwZSA9ICJtdDl2MDExIiwKKwkJCS5hZGRyID0gMHhiYSA+PiAxLAorCQkJLnBsYXRmb3JtX2RhdGEgPSAmcGRhdGEsCisJCX07CiAJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKLQkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LAotCQkJICZkZXYtPmkyY19hZGFwLCAibXQ5djAxMSIsIDAsIG10OXYwMTFfYWRkcnMpOwotCQl2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBzX2NvbmZpZywgMCwgJmRldi0+c2Vuc29yX3h0YWwpOworCQlwZGF0YS54dGFsID0gZGV2LT5zZW5zb3JfeHRhbDsKKwkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2X2JvYXJkKCZkZXYtPnY0bDJfZGV2LCAmZGV2LT5pMmNfYWRhcCwKKwkJCQkmbXQ5djAxMV9pbmZvLCBOVUxMKTsKIAl9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MS5oCmluZGV4IGNjNzdkMTQuLmJmNjYxODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTEuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxLmgKQEAgLTU5LDMxICs1OSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBldDYxeDI1MV9pZF90YWJsZVtdID0gewotCXsgVVNCX0RFVklDRSgweDEwMmMsIDB4NjE1MSksIH0sCiAJeyBVU0JfREVWSUNFKDB4MTAyYywgMHg2MjUxKSwgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxMDJjLCAweDYyNTMpLCB9LAotCXsgVVNCX0RFVklDRSgweDEwMmMsIDB4NjI1NCksIH0sCi0JeyBVU0JfREVWSUNFKDB4MTAyYywgMHg2MjU1KSwgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxMDJjLCAweDYyNTYpLCB9LAotCXsgVVNCX0RFVklDRSgweDEwMmMsIDB4NjI1NyksIH0sCi0JeyBVU0JfREVWSUNFKDB4MTAyYywgMHg2MjU4KSwgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxMDJjLCAweDYyNTkpLCB9LAotCXsgVVNCX0RFVklDRSgweDEwMmMsIDB4NjI1YSksIH0sCi0JeyBVU0JfREVWSUNFKDB4MTAyYywgMHg2MjViKSwgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxMDJjLCAweDYyNWMpLCB9LAotCXsgVVNCX0RFVklDRSgweDEwMmMsIDB4NjI1ZCksIH0sCi0JeyBVU0JfREVWSUNFKDB4MTAyYywgMHg2MjVlKSwgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxMDJjLCAweDYyNWYpLCB9LAotCXsgVVNCX0RFVklDRSgweDEwMmMsIDB4NjI2MCksIH0sCi0JeyBVU0JfREVWSUNFKDB4MTAyYywgMHg2MjYxKSwgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxMDJjLCAweDYyNjIpLCB9LAotCXsgVVNCX0RFVklDRSgweDEwMmMsIDB4NjI2MyksIH0sCi0JeyBVU0JfREVWSUNFKDB4MTAyYywgMHg2MjY0KSwgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxMDJjLCAweDYyNjUpLCB9LAotCXsgVVNCX0RFVklDRSgweDEwMmMsIDB4NjI2NiksIH0sCi0JeyBVU0JfREVWSUNFKDB4MTAyYywgMHg2MjY3KSwgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxMDJjLCAweDYyNjgpLCB9LAotCXsgVVNCX0RFVklDRSgweDEwMmMsIDB4NjI2OSksIH0sCiAJeyB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2JlbnEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvYmVucS5jCmluZGV4IDYyOTA0MzkuLmEwOWM0NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvYmVucS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvYmVucS5jCkBAIC0yNzYsNyArMjc2LDcgQEAKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwotc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgwNGE1LCAweDMwMzUpfSwKIAl7fQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYwppbmRleCAxZWFjYjZjLi44YjM5ODQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jCkBAIC0xMDQwLDE0ICsxMDQwLDE0IEBACiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSBfX2RldmluaXRjb25zdCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRSgweDA1NzIsIDB4MDA0MSl9LAogCXt9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CiAKIC8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jcGlhMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jcGlhMS5jCmluZGV4IGMxYWUwNWYuLjRiZjJjYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY3BpYTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NwaWExLmMKQEAgLTIwODgsNyArMjA4OCw3IEBACiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KLXN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MDU1MywgMHgwMDAyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwODEzLCAweDAwMDEpfSwKIAl7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jCmluZGV4IGE1OTRiMzYuLjRiMmM0ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZXRvbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMKQEAgLTg2NCw3ICs4NjQsNyBAQAogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gX19kZXZpbml0Y29uc3QgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgxMDJjLCAweDYxNTEpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFTMTA2fSwKICNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX0VUNjFYMjUxICYmICFkZWZpbmVkIENPTkZJR19VU0JfRVQ2MVgyNTFfTU9EVUxFCiAJe1VTQl9ERVZJQ0UoMHgxMDJjLCAweDYyNTEpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfVEFTNTEzMENYWH0sCkBAIC04NzUsNyArODc1LDcgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOwogCiAvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLwotc3RhdGljIGludCBfX2RldmluaXQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZmluZXBpeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9maW5lcGl4LmMKaW5kZXggZDc4MjI2NC4uOTg3YjRiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9maW5lcGl4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9maW5lcGl4LmMKQEAgLTIyOSw3ICsyMjksNyBAQAogfQogCiAvKiBUYWJsZSBvZiBzdXBwb3J0ZWQgVVNCIGRldmljZXMgKi8KLXN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MDRjYiwgMHgwMTA0KX0sCiAJe1VTQl9ERVZJQ0UoMHgwNGNiLCAweDAxMDkpfSwKIAl7VVNCX0RFVklDRSgweDA0Y2IsIDB4MDEwYil9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5jCmluZGV4IGIwNWJlYzcuLjk5MDgzMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmMKQEAgLTQ4OCw3ICs0ODgsNyBAQAogCiAvKj09PT09PT09PT09PT09PT09PT0gVVNCIGRyaXZlciBzdHJ1Y3R1cmUgaW5pdGlhbGlzYXRpb24gPT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgwNWUzLCAweDA1MDMpfSwKIAl7VVNCX0RFVklDRSgweDA1ZTMsIDB4ZjE5MSl9LAogCXt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKaW5kZXggNDQyOTcwMC4uZjIxZjJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYwpAQCAtNTUsNyArNTUsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQSBVU0IgQ2FtZXJhIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OX05VTUJFUglLRVJORUxfVkVSU0lPTigyLCAxMSwgMCkKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDEyLCAwKQogCiAjaWZkZWYgR1NQQ0FfREVCVUcKIGludCBnc3BjYV9kZWJ1ZyA9IERfRVJSIHwgRF9QUk9CRTsKQEAgLTUwOCw4ICs1MDgsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZyYW1lX2FsbG9jKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCXVuc2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyBpbnQgZnJhbWVfYWxsb2Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCWVudW0gdjRsMl9tZW1vcnkgbWVtb3J5LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKIAl1bnNpZ25lZCBpbnQgZnJzejsKQEAgLTUxOSw3ICs1MTksNiBAQAogCWZyc3ogPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtpXS5zaXplaW1hZ2U7CiAJUERFQlVHKERfU1RSRUFNLCAiZnJhbWUgYWxsb2MgZnJzejogJWQiLCBmcnN6KTsKIAlmcnN6ID0gUEFHRV9BTElHTihmcnN6KTsKLQlnc3BjYV9kZXYtPmZyc3ogPSBmcnN6OwogCWlmIChjb3VudCA+PSBHU1BDQV9NQVhfRlJBTUVTKQogCQljb3VudCA9IEdTUENBX01BWF9GUkFNRVMgLSAxOwogCWdzcGNhX2Rldi0+ZnJidWYgPSB2bWFsbG9jXzMyKGZyc3ogKiBjb3VudCk7CkBAIC01MjcsNiArNTI2LDkgQEAKIAkJZXJyKCJmcmFtZSBhbGxvYyBmYWlsZWQiKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCWdzcGNhX2Rldi0+Y2FwdF9maWxlID0gZmlsZTsKKwlnc3BjYV9kZXYtPm1lbW9yeSA9IG1lbW9yeTsKKwlnc3BjYV9kZXYtPmZyc3ogPSBmcnN6OwogCWdzcGNhX2Rldi0+bmZyYW1lcyA9IGNvdW50OwogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCWZyYW1lID0gJmdzcGNhX2Rldi0+ZnJhbWVbaV07CkBAIC01MzUsNyArNTM3LDcgQEAKIAkJZnJhbWUtPnY0bDJfYnVmLmZsYWdzID0gMDsKIAkJZnJhbWUtPnY0bDJfYnVmLmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwogCQlmcmFtZS0+djRsMl9idWYubGVuZ3RoID0gZnJzejsKLQkJZnJhbWUtPnY0bDJfYnVmLm1lbW9yeSA9IGdzcGNhX2Rldi0+bWVtb3J5OworCQlmcmFtZS0+djRsMl9idWYubWVtb3J5ID0gbWVtb3J5OwogCQlmcmFtZS0+djRsMl9idWYuc2VxdWVuY2UgPSAwOwogCQlmcmFtZS0+ZGF0YSA9IGdzcGNhX2Rldi0+ZnJidWYgKyBpICogZnJzejsKIAkJZnJhbWUtPnY0bDJfYnVmLm0ub2Zmc2V0ID0gaSAqIGZyc3o7CkBAIC01NTgsNiArNTYwLDkgQEAKIAkJCWdzcGNhX2Rldi0+ZnJhbWVbaV0uZGF0YSA9IE5VTEw7CiAJfQogCWdzcGNhX2Rldi0+bmZyYW1lcyA9IDA7CisJZ3NwY2FfZGV2LT5mcnN6ID0gMDsKKwlnc3BjYV9kZXYtPmNhcHRfZmlsZSA9IE5VTEw7CisJZ3NwY2FfZGV2LT5tZW1vcnkgPSBHU1BDQV9NRU1PUllfTk87CiB9CiAKIHN0YXRpYyB2b2lkIGRlc3Ryb3lfdXJicyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC0xMjEwLDI5ICsxMjE1LDE1IEBACiBzdGF0aWMgaW50IGRldl9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldjsKLQlpbnQgcmV0OwogCiAJUERFQlVHKERfU1RSRUFNLCAiWyVzXSBvcGVuIiwgY3VycmVudC0+Y29tbSk7CiAJZ3NwY2FfZGV2ID0gKHN0cnVjdCBnc3BjYV9kZXYgKikgdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChnc3BjYV9kZXYtPnVzZXJzID4gNCkgewkvKiAoYXJiaXRyYXJ5IHZhbHVlKSAqLwotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBwcm90ZWN0IHRoZSBzdWJkcml2ZXIgYWdhaW5zdCBybW1vZCAqLwotCWlmICghdHJ5X21vZHVsZV9nZXQoZ3NwY2FfZGV2LT5tb2R1bGUpKSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWdzcGNhX2Rldi0+dXNlcnMrKzsKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KGdzcGNhX2Rldi0+bW9kdWxlKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBnc3BjYV9kZXY7CiAjaWZkZWYgR1NQQ0FfREVCVUcKQEAgLTEyNDQsMTQgKzEyMzUsNyBAQAogCQlnc3BjYV9kZXYtPnZkZXYuZGVidWcgJj0gfihWNEwyX0RFQlVHX0lPQ1RMCiAJCQkJCXwgVjRMMl9ERUJVR19JT0NUTF9BUkcpOwogI2VuZGlmCi0JcmV0ID0gMDsKLW91dDoKLQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+cXVldWVfbG9jayk7Ci0JaWYgKHJldCAhPSAwKQotCQlQREVCVUcoRF9FUlJ8RF9TVFJFQU0sICJvcGVuIGZhaWxlZCBlcnIgJWQiLCByZXQpOwotCWVsc2UKLQkJUERFQlVHKERfU1RSRUFNLCAib3BlbiBkb25lIik7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBkZXZfY2xvc2Uoc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0xMjYxLDcgKzEyNDUsNiBAQAogCVBERUJVRyhEX1NUUkVBTSwgIlslc10gY2xvc2UiLCBjdXJyZW50LT5jb21tKTsKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCWdzcGNhX2Rldi0+dXNlcnMtLTsKIAogCS8qIGlmIHRoZSBmaWxlIGRpZCB0aGUgY2FwdHVyZSwgZnJlZSB0aGUgc3RyZWFtaW5nIHJlc291cmNlcyAqLwogCWlmIChnc3BjYV9kZXYtPmNhcHRfZmlsZSA9PSBmaWxlKSB7CkBAIC0xMjcyLDggKzEyNTUsNiBAQAogCQkJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAkJfQogCQlmcmFtZV9mcmVlKGdzcGNhX2Rldik7Ci0JCWdzcGNhX2Rldi0+Y2FwdF9maWxlID0gTlVMTDsKLQkJZ3NwY2FfZGV2LT5tZW1vcnkgPSBHU1BDQV9NRU1PUllfTk87CiAJfQogCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAJbW9kdWxlX3B1dChnc3BjYV9kZXYtPm1vZHVsZSk7CkBAIC0xNTE2LDYgKzE0OTcsNyBAQAogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKGdzcGNhX2Rldi0+bWVtb3J5ICE9IEdTUENBX01FTU9SWV9OTworCSAgICAmJiBnc3BjYV9kZXYtPm1lbW9yeSAhPSBHU1BDQV9NRU1PUllfUkVBRAogCSAgICAmJiBnc3BjYV9kZXYtPm1lbW9yeSAhPSByYi0+bWVtb3J5KSB7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBvdXQ7CkBAIC0xNTQ0LDE5ICsxNTI2LDE4IEBACiAJCWdzcGNhX3N0cmVhbV9vZmYoZ3NwY2FfZGV2KTsKIAkJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAl9CisJLyogRG9uJ3QgcmVzdGFydCB0aGUgc3RyZWFtIHdoZW4gc3dpdGNoaW5nIGZyb20gcmVhZCB0byBtbWFwIG1vZGUgKi8KKwlpZiAoZ3NwY2FfZGV2LT5tZW1vcnkgPT0gR1NQQ0FfTUVNT1JZX1JFQUQpCisJCXN0cmVhbWluZyA9IDA7CiAKIAkvKiBmcmVlIHRoZSBwcmV2aW91cyBhbGxvY2F0ZWQgYnVmZmVycywgaWYgYW55ICovCi0JaWYgKGdzcGNhX2Rldi0+bmZyYW1lcyAhPSAwKSB7CisJaWYgKGdzcGNhX2Rldi0+bmZyYW1lcyAhPSAwKQogCQlmcmFtZV9mcmVlKGdzcGNhX2Rldik7Ci0JCWdzcGNhX2Rldi0+Y2FwdF9maWxlID0gTlVMTDsKLQl9CiAJaWYgKHJiLT5jb3VudCA9PSAwKQkJCS8qIHVucmVxdWVzdCAqLwogCQlnb3RvIG91dDsKLQlnc3BjYV9kZXYtPm1lbW9yeSA9IHJiLT5tZW1vcnk7Ci0JcmV0ID0gZnJhbWVfYWxsb2MoZ3NwY2FfZGV2LCByYi0+Y291bnQpOworCXJldCA9IGZyYW1lX2FsbG9jKGdzcGNhX2RldiwgZmlsZSwgcmItPm1lbW9yeSwgcmItPmNvdW50KTsKIAlpZiAocmV0ID09IDApIHsKIAkJcmItPmNvdW50ID0gZ3NwY2FfZGV2LT5uZnJhbWVzOwotCQlnc3BjYV9kZXYtPmNhcHRfZmlsZSA9IGZpbGU7CiAJCWlmIChzdHJlYW1pbmcpCiAJCQlyZXQgPSBnc3BjYV9pbml0X3RyYW5zZmVyKGdzcGNhX2Rldik7CiAJfQpAQCAtMTYzMCwxMSArMTYxMSwxNSBAQAogCiAJaWYgKGJ1Zl90eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFnc3BjYV9kZXYtPnN0cmVhbWluZykKLQkJcmV0dXJuIDA7CisKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCisJaWYgKCFnc3BjYV9kZXYtPnN0cmVhbWluZykgeworCQlyZXQgPSAwOworCQlnb3RvIG91dDsKKwl9CisKIAkvKiBjaGVjayB0aGUgY2FwdHVyZSBmaWxlICovCiAJaWYgKGdzcGNhX2Rldi0+Y2FwdF9maWxlICE9IGZpbGUpIHsKIAkJcmV0ID0gLUVCVVNZOwpAQCAtMTY0OSw2ICsxNjM0LDggQEAKIAlnc3BjYV9kZXYtPnVzYl9lcnIgPSAwOwogCWdzcGNhX3N0cmVhbV9vZmYoZ3NwY2FfZGV2KTsKIAltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCS8qIEluIGNhc2UgYW5vdGhlciB0aHJlYWQgaXMgd2FpdGluZyBpbiBkcWJ1ZiAqLworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT53cSk7CiAKIAkvKiBlbXB0eSB0aGUgdHJhbnNmZXIgcXVldWVzICovCiAJYXRvbWljX3NldCgmZ3NwY2FfZGV2LT5mcl9xLCAwKTsKQEAgLTE4MjcsNDMgKzE4MTQsMjkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogd2FpdCBmb3IgYSB2aWRlbyBmcmFtZQotICoKLSAqIElmIGEgZnJhbWUgaXMgcmVhZHksIGl0cyBpbmRleCBpcyByZXR1cm5lZC4KLSAqLwotc3RhdGljIGludCBmcmFtZV93YWl0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCWludCBub25ibG9ja19pbmcpCitzdGF0aWMgaW50IGZyYW1lX3JlYWR5X25vbG9jayhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCWVudW0gdjRsMl9tZW1vcnkgbWVtb3J5KQogewotCWludCBpLCByZXQ7CisJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCisJCXJldHVybiAtRU5PREVWOworCWlmIChnc3BjYV9kZXYtPmNhcHRfZmlsZSAhPSBmaWxlIHx8IGdzcGNhX2Rldi0+bWVtb3J5ICE9IG1lbW9yeSB8fAorCQkJIWdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGNoZWNrIGlmIGEgZnJhbWUgaXMgcmVhZHkgKi8KLQlpID0gZ3NwY2FfZGV2LT5mcl9vOwotCWlmIChpID09IGF0b21pY19yZWFkKCZnc3BjYV9kZXYtPmZyX2kpKSB7Ci0JCWlmIChub25ibG9ja19pbmcpCi0JCQlyZXR1cm4gLUVBR0FJTjsKKwlyZXR1cm4gZ3NwY2FfZGV2LT5mcl9vICE9IGF0b21pY19yZWFkKCZnc3BjYV9kZXYtPmZyX2kpOworfQogCi0JCS8qIHdhaXQgdGlsbCBhIGZyYW1lIGlzIHJlYWR5ICovCi0JCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGdzcGNhX2Rldi0+d3EsCi0JCQlpICE9IGF0b21pY19yZWFkKCZnc3BjYV9kZXYtPmZyX2kpIHx8Ci0JCQkhZ3NwY2FfZGV2LT5zdHJlYW1pbmcgfHwgIWdzcGNhX2Rldi0+cHJlc2VudCwKLQkJCW1zZWNzX3RvX2ppZmZpZXMoMzAwMCkpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JCWlmIChyZXQgPT0gMCB8fCAhZ3NwY2FfZGV2LT5zdHJlYW1pbmcgfHwgIWdzcGNhX2Rldi0+cHJlc2VudCkKLQkJCXJldHVybiAtRUlPOwotCX0KK3N0YXRpYyBpbnQgZnJhbWVfcmVhZHkoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCWVudW0gdjRsMl9tZW1vcnkgbWVtb3J5KQoreworCWludCByZXQ7CiAKLQlnc3BjYV9kZXYtPmZyX28gPSAoaSArIDEpICUgR1NQQ0FfTUFYX0ZSQU1FUzsKLQotCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPmRxX2NhbGxiYWNrKSB7Ci0JCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwotCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSAwOwotCQlpZiAoZ3NwY2FfZGV2LT5wcmVzZW50KQotCQkJZ3NwY2FfZGV2LT5zZF9kZXNjLT5kcV9jYWxsYmFjayhnc3BjYV9kZXYpOwotCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwotCX0KLQlyZXR1cm4gZ3NwY2FfZGV2LT5mcl9xdWV1ZVtpXTsKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCXJldCA9IGZyYW1lX3JlYWR5X25vbG9jayhnc3BjYV9kZXYsIGZpbGUsIG1lbW9yeSk7CisJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0xODc2LDMzICsxODQ5LDU3IEBACiB7CiAJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gcHJpdjsKIAlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOwotCWludCBpLCByZXQ7CisJaW50IGksIGosIHJldDsKIAogCVBERUJVRyhEX0ZSQU0sICJkcWJ1ZiIpOwotCWlmICh2NGwyX2J1Zi0+bWVtb3J5ICE9IGdzcGNhX2Rldi0+bWVtb3J5KQotCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIGlmIG5vdCBzdHJlYW1pbmcsIGJlIHN1cmUgdGhlIGFwcGxpY2F0aW9uIHdpbGwgbm90IGxvb3AgZm9yZXZlciAqLwotCWlmICghKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQotCSAgICAmJiAhZ3NwY2FfZGV2LT5zdHJlYW1pbmcgJiYgZ3NwY2FfZGV2LT51c2VycyA9PSAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIG9ubHkgdGhlIGNhcHR1cmluZyBmaWxlIG1heSBkZXF1ZXVlICovCi0JaWYgKGdzcGNhX2Rldi0+Y2FwdF9maWxlICE9IGZpbGUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogb25seSBvbmUgZGVxdWV1ZSAvIHJlYWQgYXQgYSB0aW1lICovCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT5yZWFkX2xvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+cXVldWVfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQlyZXQgPSBmcmFtZV93YWl0KGdzcGNhX2RldiwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQlpID0gcmV0OwkJCQkvKiBmcmFtZSBpbmRleCAqLwotCWZyYW1lID0gJmdzcGNhX2Rldi0+ZnJhbWVbaV07CisJZm9yICg7OykgeworCQlyZXQgPSBmcmFtZV9yZWFkeV9ub2xvY2soZ3NwY2FfZGV2LCBmaWxlLCB2NGwyX2J1Zi0+bWVtb3J5KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwkJaWYgKHJldCA+IDApCisJCQlicmVhazsKKworCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+cXVldWVfbG9jayk7CisKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkJcmV0dXJuIC1FQUdBSU47CisKKwkJLyogd2FpdCB0aWxsIGEgZnJhbWUgaXMgcmVhZHkgKi8KKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZ3NwY2FfZGV2LT53cSwKKwkJCWZyYW1lX3JlYWR5KGdzcGNhX2RldiwgZmlsZSwgdjRsMl9idWYtPm1lbW9yeSksCisJCQltc2Vjc190b19qaWZmaWVzKDMwMDApKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlpZiAocmV0ID09IDApCisJCQlyZXR1cm4gLUVJTzsKKworCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spKQorCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisKKwlpID0gZ3NwY2FfZGV2LT5mcl9vOworCWogPSBnc3BjYV9kZXYtPmZyX3F1ZXVlW2ldOworCWZyYW1lID0gJmdzcGNhX2Rldi0+ZnJhbWVbal07CisKKwlnc3BjYV9kZXYtPmZyX28gPSAoaSArIDEpICUgR1NQQ0FfTUFYX0ZSQU1FUzsKKworCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPmRxX2NhbGxiYWNrKSB7CisJCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSAwOworCQlpZiAoZ3NwY2FfZGV2LT5wcmVzZW50KQorCQkJZ3NwY2FfZGV2LT5zZF9kZXNjLT5kcV9jYWxsYmFjayhnc3BjYV9kZXYpOworCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCX0KKworCWZyYW1lLT52NGwyX2J1Zi5mbGFncyAmPSB+VjRMMl9CVUZfRkxBR19ET05FOworCW1lbWNweSh2NGwyX2J1ZiwgJmZyYW1lLT52NGwyX2J1Ziwgc2l6ZW9mICp2NGwyX2J1Zik7CisJUERFQlVHKERfRlJBTSwgImRxYnVmICVkIiwgaik7CisJcmV0ID0gMDsKKwogCWlmIChnc3BjYV9kZXYtPm1lbW9yeSA9PSBWNEwyX01FTU9SWV9VU0VSUFRSKSB7CiAJCWlmIChjb3B5X3RvX3VzZXIoKF9fdTggX191c2VyICopIGZyYW1lLT52NGwyX2J1Zi5tLnVzZXJwdHIsCiAJCQkJIGZyYW1lLT5kYXRhLApAQCAtMTkxMCwxNSArMTkwNywxMCBAQAogCQkJUERFQlVHKERfRVJSfERfU1RSRUFNLAogCQkJCSJkcWJ1ZiBjcCB0byB1c2VyIGZhaWxlZCIpOwogCQkJcmV0ID0gLUVGQVVMVDsKLQkJCWdvdG8gb3V0OwogCQl9CiAJfQotCWZyYW1lLT52NGwyX2J1Zi5mbGFncyAmPSB+VjRMMl9CVUZfRkxBR19ET05FOwotCW1lbWNweSh2NGwyX2J1ZiwgJmZyYW1lLT52NGwyX2J1Ziwgc2l6ZW9mICp2NGwyX2J1Zik7Ci0JUERFQlVHKERfRlJBTSwgImRxYnVmICVkIiwgaSk7Ci0JcmV0ID0gMDsKIG91dDoKLQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+cmVhZF9sb2NrKTsKKwltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+cXVldWVfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjAzMyw5ICsyMDI1LDcgQEAKIAlwb2xsX3dhaXQoZmlsZSwgJmdzcGNhX2Rldi0+d3EsIHdhaXQpOwogCiAJLyogaWYgcmVxYnVmcyBpcyBub3QgZG9uZSwgdGhlIHVzZXIgd291bGQgdXNlIHJlYWQoKSAqLwotCWlmIChnc3BjYV9kZXYtPm5mcmFtZXMgPT0gMCkgewotCQlpZiAoZ3NwY2FfZGV2LT5tZW1vcnkgIT0gR1NQQ0FfTUVNT1JZX05PKQotCQkJcmV0dXJuIFBPTExFUlI7CQkvKiBub3QgdGhlIDFzdCB0aW1lICovCisJaWYgKGdzcGNhX2Rldi0+bWVtb3J5ID09IEdTUENBX01FTU9SWV9OTykgewogCQlyZXQgPSByZWFkX2FsbG9jKGdzcGNhX2RldiwgZmlsZSk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXJldHVybiBQT0xMRVJSOwpAQCAtMjA2NywxOCArMjA1NywxMCBAQAogCVBERUJVRyhEX0ZSQU0sICJyZWFkICglemQpIiwgY291bnQpOwogCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KQogCQlyZXR1cm4gLUVOT0RFVjsKLQlzd2l0Y2ggKGdzcGNhX2Rldi0+bWVtb3J5KSB7Ci0JY2FzZSBHU1BDQV9NRU1PUllfTk86CQkJLyogZmlyc3QgdGltZSAqLworCWlmIChnc3BjYV9kZXYtPm1lbW9yeSA9PSBHU1BDQV9NRU1PUllfTk8pIHsgLyogZmlyc3QgdGltZSA/ICovCiAJCXJldCA9IHJlYWRfYWxsb2MoZ3NwY2FfZGV2LCBmaWxlKTsKIAkJaWYgKHJldCAhPSAwKQogCQkJcmV0dXJuIHJldDsKLQkJYnJlYWs7Ci0JY2FzZSBHU1BDQV9NRU1PUllfUkVBRDoKLQkJaWYgKGdzcGNhX2Rldi0+Y2FwdF9maWxlID09IGZpbGUpCi0JCQlicmVhazsKLQkJLyogZmFsbCB0aHJ1ICovCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogZ2V0IGEgZnJhbWUgKi8KQEAgLTIyNjYsNyArMjI0OCw2IEBACiAJCWdvdG8gb3V0OwogCiAJbXV0ZXhfaW5pdCgmZ3NwY2FfZGV2LT51c2JfbG9jayk7Ci0JbXV0ZXhfaW5pdCgmZ3NwY2FfZGV2LT5yZWFkX2xvY2spOwogCW11dGV4X2luaXQoJmdzcGNhX2Rldi0+cXVldWVfbG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZ3NwY2FfZGV2LT53cSk7CiAKQEAgLTIzNDEsMTIgKzIzMjIsMTEgQEAKIAlQREVCVUcoRF9QUk9CRSwgIiVzIGRpc2Nvbm5lY3QiLAogCQl2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKCZnc3BjYV9kZXYtPnZkZXYpKTsKIAltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKLQlnc3BjYV9kZXYtPnByZXNlbnQgPSAwOwogCi0JaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7Ci0JCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+d3EpOwotCX0KKwlnc3BjYV9kZXYtPnByZXNlbnQgPSAwOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT53cSk7CisKKwlkZXN0cm95X3VyYnMoZ3NwY2FfZGV2KTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUKSB8fCBkZWZpbmVkKENPTkZJR19JTlBVVF9NT0RVTEUpCiAJZ3NwY2FfaW5wdXRfZGVzdHJveV91cmIoZ3NwY2FfZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaAppbmRleCA5N2I3N2EyLi40MTc1NTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCkBAIC0yMDUsMTQgKzIwNSwxMiBAQAogCiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CQkvKiB3YWl0IHF1ZXVlICovCiAJc3RydWN0IG11dGV4IHVzYl9sb2NrOwkJLyogdXNiIGV4Y2hhbmdlIHByb3RlY3Rpb24gKi8KLQlzdHJ1Y3QgbXV0ZXggcmVhZF9sb2NrOwkJLyogcmVhZCBwcm90ZWN0aW9uICovCiAJc3RydWN0IG11dGV4IHF1ZXVlX2xvY2s7CS8qIElTT0MgcXVldWUgcHJvdGVjdGlvbiAqLwogCWludCB1c2JfZXJyOwkJCS8qIFVTQiBlcnJvciAtIHByb3RlY3RlZCBieSB1c2JfbG9jayAqLwogCXUxNiBwa3Rfc2l6ZTsJCQkvKiBJU09DIHBhY2tldCBzaXplICovCiAjaWZkZWYgQ09ORklHX1BNCiAJY2hhciBmcm96ZW47CQkJLyogc3VzcGVuZCAtIHJlc3VtZSAqLwogI2VuZGlmCi0JY2hhciB1c2VyczsJCQkvKiBudW1iZXIgb2Ygb3BlbnMgKi8KIAljaGFyIHByZXNlbnQ7CQkJLyogZGV2aWNlIGNvbm5lY3RlZCAqLwogCWNoYXIgbmJ1ZnJlYWQ7CQkJLyogbnVtYmVyIG9mIGJ1ZmZlcnMgZm9yIHJlYWQoKSAqLwogCWNoYXIgbWVtb3J5OwkJCS8qIG1lbW9yeSB0eXBlIChWNEwyX01FTU9SWV94eHgpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2plaWxpbmouYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvamVpbGluai5jCmluZGV4IGEzNWU4N2IuLjA2Yjc3N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvamVpbGluai5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvamVpbGluai5jCkBAIC0zMTQsNyArMzE0LDcgQEAKIH0KIAogLyogVGFibGUgb2Ygc3VwcG9ydGVkIFVTQiBkZXZpY2VzICovCi1zdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRSgweDA5NzksIDB4MDI4MCl9LAogCXt9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9qcGVnLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2pwZWcuaAppbmRleCBkZTYzYzM2Li5hYjU0OTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2pwZWcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2pwZWcuaApAQCAtMTQxLDkgKzE0MSw5IEBACiAJbWVtY3B5KGpwZWdfaGRyLCBqcGVnX2hlYWQsIHNpemVvZiBqcGVnX2hlYWQpOwogI2lmbmRlZiBDT05FWF9DQU0KIAlqcGVnX2hkcltKUEVHX0hFSUdIVF9PRkZTRVQgKyAwXSA9IGhlaWdodCA+PiA4OwotCWpwZWdfaGRyW0pQRUdfSEVJR0hUX09GRlNFVCArIDFdID0gaGVpZ2h0ICYgMHhmZjsKKwlqcGVnX2hkcltKUEVHX0hFSUdIVF9PRkZTRVQgKyAxXSA9IGhlaWdodDsKIAlqcGVnX2hkcltKUEVHX0hFSUdIVF9PRkZTRVQgKyAyXSA9IHdpZHRoID4+IDg7Ci0JanBlZ19oZHJbSlBFR19IRUlHSFRfT0ZGU0VUICsgM10gPSB3aWR0aCAmIDB4ZmY7CisJanBlZ19oZHJbSlBFR19IRUlHSFRfT0ZGU0VUICsgM10gPSB3aWR0aDsKIAlqcGVnX2hkcltKUEVHX0hFSUdIVF9PRkZTRVQgKyA2XSA9IHNhbXBsZXNZOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2tvbmljYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9rb25pY2EuYwppbmRleCBkMmNlNjVkLi41OTY0NjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2tvbmljYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Eva29uaWNhLmMKQEAgLTYwNyw3ICs2MDcsNyBAQAogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCi1zdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRSgweDA0YzgsIDB4MDcyMCl9LCAvKiBJbnRlbCBZQyA3NiAqLwogCXt9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2NvcmUuYwppbmRleCBjODcyYjkzLi5hNzcyMmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2NvcmUuYwpAQCAtMjgsNyArMjgsNyBAQAogc3RhdGljIGludCBkdW1wX2JyaWRnZTsKIGludCBkdW1wX3NlbnNvcjsKIAotc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgbTU2MDJfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtNTYwMl90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MDQwMiwgMHg1NjAyKX0sCiAJe30KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCmluZGV4IGE4MTUzNmUuLmNiNGQwYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCkBAIC00OTAsNyArNDkwLDcgQEAKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwotc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDA1MGYpfSwKIAl7fQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYwppbmRleCA3NjA3YTI4Li4zODg0YzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jCkBAIC0xMjI5LDcgKzEyMjksNyBAQAogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCi1zdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRSgweDA4Y2EsIDB4MDExMCl9LAkvKiBUcnVzdCBTcHljQG0gMTAwICovCiAJe1VTQl9ERVZJQ0UoMHgwOGNhLCAweDAxMTEpfSwJLyogQWlwdGVrIFBlbmNhbSBWR0ErICovCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDAxMGYpfSwJLyogQWxsIG90aGVyIGtub3duIE1SOTczMTBBIFZHQSBjYW1zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKaW5kZXggZTFjM2I5My4uOGFiMmM0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwpAQCAtNDg4LDcgKzQ4OCw2IEBACiAjZGVmaW5lIFI1MTFfU05BUF9QWERJVgkJCTB4MWMKICNkZWZpbmUgUjUxMV9TTkFQX0xORElWCQkJMHgxZAogI2RlZmluZSBSNTExX1NOQVBfVVZfRU4JCQkweDFlCi0jZGVmaW5lIFI1MTFfU05BUF9VVl9FTgkJCTB4MWUKICNkZWZpbmUgUjUxMV9TTkFQX09QVFMJCQkweDFmCiAKICNkZWZpbmUgUjUxMV9EUkFNX0ZMT1dfQ1RMCQkweDIwCkBAIC0xODQ3LDggKzE4NDYsNyBAQAogCXsgMHg2YywgMHgwYSB9LAogCXsgMHg2ZCwgMHg1NSB9LAogCXsgMHg2ZSwgMHgxMSB9LAotCXsgMHg2ZiwgMHg5ZiB9LAotCQkJCQkvKiAiOWUgZm9yIGFkdmFuY2UgQVdCIiAqLworCXsgMHg2ZiwgMHg5ZiB9LAkJCS8qICI5ZSBmb3IgYWR2YW5jZSBBV0IiICovCiAJeyAweDZhLCAweDQwIH0sCiAJeyBPVjc2NzBfUjAxX0JMVUUsIDB4NDAgfSwKIAl7IE9WNzY3MF9SMDJfUkVELCAweDYwIH0sCkBAIC0zMDU0LDcgKzMwNTIsNyBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3ZfcmVndmFscyBpbml0XzUxOVtdID0gewogCQl7IDB4NWEsIDB4NmQgfSwgLyogRW5hYmxlU3lzdGVtICovCi0JCXsgMHg1MywgMHg5YiB9LAorCQl7IDB4NTMsIDB4OWIgfSwgLyogZG9uJ3QgZW5hYmxlIHRoZSBtaWNyb2NvbnRyb2xsZXIgKi8KIAkJeyBPVjUxOV9SNTRfRU5fQ0xLMSwgMHhmZiB9LCAvKiBzZXQgYml0MiB0byBlbmFibGUganBlZyAqLwogCQl7IDB4NWQsIDB4MDMgfSwKIAkJeyAweDQ5LCAweDAxIH0sCkBAIC00NzQ3LDcgKzQ3NDUsNyBAQAogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCi1zdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDAwMyksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9XOTk2OENGIH0sCiAJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwNTIpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfSwKIAl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDA1ZiksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxOSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNC5jCmluZGV4IDBlZGY5MzkuLjA0ZGEyMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0LmMKQEAgLTQ3OSwxNSArNDc5LDIwIEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlpbnQgcmV0OwogCi0JUERFQlVHKERfVVNCTywgInJlZz0weCUwNHgsIHZhbD0wJTAyeCIsIHJlZywgdmFsKTsKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOworCisJUERFQlVHKERfVVNCTywgIlNFVCAwMSAwMDAwICUwNHggJTAyeCIsIHJlZywgdmFsKTsKIAlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWw7CiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCiAJCQkgICAgICB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCiAJCQkgICAgICAweDAxLAogCQkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAogCQkJICAgICAgMHgwMCwgcmVnLCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsIENUUkxfVElNRU9VVCk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCA8IDApIHsKIAkJZXJyKCJ3cml0ZSBmYWlsZWQgJWQiLCByZXQpOworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCiBzdGF0aWMgdTggb3Y1MzRfcmVnX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnKQpAQCAtNDk1LDE0ICs1MDAsMTggQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCByZXQ7CiAKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuIDA7CiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCiAJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCiAJCQkgICAgICAweDAxLAogCQkJICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQkgICAgICAweDAwLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgQ1RSTF9USU1FT1VUKTsKLQlQREVCVUcoRF9VU0JJLCAicmVnPTB4JTA0eCwgZGF0YT0weCUwMngiLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7Ci0JaWYgKHJldCA8IDApCisJUERFQlVHKERfVVNCSSwgIkdFVCAwMSAwMDAwICUwNHggJTAyeCIsIHJlZywgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKKwlpZiAocmV0IDwgMCkgewogCQllcnIoInJlYWQgZmFpbGVkICVkIiwgcmV0KTsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OworCX0KIAlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwogfQogCkBAIC01NTgsMTMgKzU2NywxNSBAQAogCiBzdGF0aWMgdm9pZCBzY2NiX3JlZ193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4IHJlZywgdTggdmFsKQogewotCVBERUJVRyhEX1VTQk8sICJyZWc6IDB4JTAyeCwgdmFsOiAweCUwMngiLCByZWcsIHZhbCk7CisJUERFQlVHKERfVVNCTywgInNjY2Igd3JpdGU6ICUwMnggJTAyeCIsIHJlZywgdmFsKTsKIAlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfU1VCQUREUiwgcmVnKTsKIAlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfV1JJVEUsIHZhbCk7CiAJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfV1JJVEVfMyk7CiAKLQlpZiAoIXNjY2JfY2hlY2tfc3RhdHVzKGdzcGNhX2RldikpCisJaWYgKCFzY2NiX2NoZWNrX3N0YXR1cyhnc3BjYV9kZXYpKSB7CiAJCWVycigic2NjYl9yZWdfd3JpdGUgZmFpbGVkIik7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IC1FSU87CisJfQogfQogCiBzdGF0aWMgdTggc2NjYl9yZWdfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcpCkBAIC04ODUsNyArODk2LDcgQEAKIAlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7CiAJc2V0X2ZyYW1lX3JhdGUoZ3NwY2FfZGV2KTsKIAotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtOTIwLDcgKzkzMSw3IEBACiAKIAlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMSk7CiAJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtMTI4OSw3ICsxMzAwLDcgQEAKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwotc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgxNDE1LCAweDIwMDApfSwKIAl7fQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzRfOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNF85LmMKaW5kZXggYzUyNDRiNC4uYWFmNTQyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNF85LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNF85LmMKQEAgLTE0MjksNyArMTQyOSw3IEBACiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KLXN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MDZmOCwgMHgzMDAzKX0sCiAJe30KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYwppbmRleCA5NmY5OTg2Li44MTczOWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMKQEAgLTUzMCw3ICs1MzAsNyBAQAogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCi1zdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDAyOCl9LAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNDYwKX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI0NjEpfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMwMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzAyLmMKaW5kZXggMjcwMDk3NS4uNTYxNWQ3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzAyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzAyLmMKQEAgLTExODQsNyArMTE4NCw3IEBACiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSBfX2RldmluaXRjb25zdCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRSgweDA2ZjgsIDB4MzAwOSl9LAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNjIwKX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MjEpfSwKQEAgLTEyMDEsNyArMTIwMSw3IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKIAogLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCmluZGV4IDY4MjBmNWQuLmY4ODAxYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCkBAIC04MzcsNyArODM3LDcgQEAKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdIF9fZGV2aW5pdGNvbnN0ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNjAwKX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MDEpfSwKIAl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjYwMyl9LApAQCAtODQ5LDcgKzg0OSw3IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKIAogLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmMKaW5kZXggNDBhMDY2OC4uNDI3MWY4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zbjljMjAyOC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIwMjguYwpAQCAtNzAzLDcgKzcwMyw3IEBACiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KLXN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MDQ1OCwgMHg3MDA1KX0sIC8qIEdlbml1cyBTbWFydCAzMDAsIHZlcnNpb24gMiAqLwogCS8qIFRoZSBHZW5pdXMgU21hcnQgaXMgdW50ZXN0ZWQuIEkgY2FuJ3QgZmluZCBhbiBvd25lciAhICovCiAJLyoge1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDgwMDApfSwgREMzMVZDLCBEb24ndCBrbm93IHRoaXMgY2FtZXJhICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIweC5jCmluZGV4IGNiMDhkMDAuLmZjZjI5ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIweC5jCkBAIC0yNDcwLDcgKzI0NzAsNyBAQAogCQkJfCAoU0VOU09SXyAjIyBzZW5zb3IgPDwgOCkgXAogCQkJfCAoaTJjX2FkZHIpCiAKLXN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MjQwKSwgU045QzIwWChNVDlNMDAxLCAweDVkLCAwKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYyNDIpLCBTTjlDMjBYKE1UOU0xMTEsIDB4NWQsIDApfSwKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjI0OCksIFNOOUMyMFgoT1Y5NjU1LCAweDMwLCAwKX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYwppbmRleCA3MzUwNGEzLi5jNmNkNjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKQEAgLTIzLDggKzIzLDE1IEBACiAvKiBTb21lIGRvY3VtZW50YXRpb24gb24ga25vd24gc29uaXhiIHJlZ2lzdGVyczoKIAogUmVnCVVzZQorc245YzEwMSAvIHNuOWMxMDI6CiAweDEwCWhpZ2ggbmliYmxlIHJlZCBnYWluIGxvdyBuaWJibGUgYmx1ZSBnYWluCiAweDExCWxvdyBuaWJibGUgZ3JlZW4gZ2Fpbgorc245YzEwMzoKKzB4MDUJcmVkIGdhaW4gMC0xMjcKKzB4MDYJYmx1ZSBnYWluIDAtMTI3CisweDA3CWdyZWVuIGdhaW4gMC0xMjcKK2FsbDoKKzB4MDgtMHgwZiBpMmMgLyAzd2lyZSByZWdpc3RlcnMKIDB4MTIJaHN0YXJ0CiAweDEzCXZzdGFydAogMHgxNQloc2l6ZSAoaHNpemUgPSByZWdpc3Rlci12YWx1ZSAqIDE2KQpAQCAtODgsMTIgKzk1LDkgQEAKIHR5cGVkZWYgY29uc3QgX191OCBzZW5zb3JfaW5pdF90WzhdOwogCiBzdHJ1Y3Qgc2Vuc29yX2RhdGEgewotCWNvbnN0IF9fdTggKmJyaWRnZV9pbml0WzJdOwotCWludCBicmlkZ2VfaW5pdF9zaXplWzJdOworCWNvbnN0IF9fdTggKmJyaWRnZV9pbml0OwogCXNlbnNvcl9pbml0X3QgKnNlbnNvcl9pbml0OwogCWludCBzZW5zb3JfaW5pdF9zaXplOwotCXNlbnNvcl9pbml0X3QgKnNlbnNvcl9icmlkZ2VfaW5pdFsyXTsKLQlpbnQgc2Vuc29yX2JyaWRnZV9pbml0X3NpemVbMl07CiAJaW50IGZsYWdzOwogCXVuc2lnbmVkIGN0cmxfZGlzOwogCV9fdTggc2Vuc29yX2FkZHI7CkBAIC0xMTQsNyArMTE4LDYgQEAKICNkZWZpbmUgTk9fRlJFUSAoMSA8PCBGUkVRX0lEWCkKICNkZWZpbmUgTk9fQlJJR0hUTkVTUyAoMSA8PCBCUklHSFRORVNTX0lEWCkKIAotI2RlZmluZSBDT01QMiAweDhmCiAjZGVmaW5lIENPTVAgMHhjNwkJLyogMHg4NyAvLzB4MDcgKi8KICNkZWZpbmUgQ09NUDEgMHhjOQkJLyogMHg4OSAvLzB4MDkgKi8KIApAQCAtMTIzLDE1ICsxMjYsMTEgQEAKIAogI2RlZmluZSBTWVNfQ0xLIDB4MDQKIAotI2RlZmluZSBTRU5TKGJyaWRnZV8xLCBicmlkZ2VfMywgc2Vuc29yLCBzZW5zb3JfMSwgXAotCXNlbnNvcl8zLCBfZmxhZ3MsIF9jdHJsX2RpcywgX3NlbnNvcl9hZGRyKSBcCisjZGVmaW5lIFNFTlMoYnJpZGdlLCBzZW5zb3IsIF9mbGFncywgX2N0cmxfZGlzLCBfc2Vuc29yX2FkZHIpIFwKIHsgXAotCS5icmlkZ2VfaW5pdCA9IHsgYnJpZGdlXzEsIGJyaWRnZV8zIH0sIFwKLQkuYnJpZGdlX2luaXRfc2l6ZSA9IHsgc2l6ZW9mKGJyaWRnZV8xKSwgc2l6ZW9mKGJyaWRnZV8zKSB9LCBcCisJLmJyaWRnZV9pbml0ID0gYnJpZGdlLCBcCiAJLnNlbnNvcl9pbml0ID0gc2Vuc29yLCBcCiAJLnNlbnNvcl9pbml0X3NpemUgPSBzaXplb2Yoc2Vuc29yKSwgXAotCS5zZW5zb3JfYnJpZGdlX2luaXQgPSB7IHNlbnNvcl8xLCBzZW5zb3JfMyx9LCBcCi0JLnNlbnNvcl9icmlkZ2VfaW5pdF9zaXplID0geyBzaXplb2Yoc2Vuc29yXzEpLCBzaXplb2Yoc2Vuc29yXzMpfSwgXAogCS5mbGFncyA9IF9mbGFncywgLmN0cmxfZGlzID0gX2N0cmxfZGlzLCAuc2Vuc29yX2FkZHIgPSBfc2Vuc29yX2FkZHIgXAogfQogCkBAIC0zMTEsNyArMzEwLDYgQEAKIAkweDAwLCAweDAwLAogCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDIsIDB4MDAsCiAJMHgyOCwgMHgxZSwgMHg2MCwgMHg4ZSwgMHg0MiwKLQkweDFkLCAweDEwLCAweDAyLCAweDAzLCAweDBmLCAweDBjCiB9Owogc3RhdGljIGNvbnN0IF9fdTggaHY3MTMxZF9zZW5zb3JfaW5pdFtdWzhdID0gewogCXsweGEwLCAweDExLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDE3fSwKQEAgLTMyNiw3ICszMjQsNiBAQAogCTB4MDAsIDB4MDAsCiAJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMSwgMHgwMCwKIAkweDI4LCAweDFlLCAweDYwLCAweDhhLCAweDIwLAotCTB4MWQsIDB4MTAsIDB4MDIsIDB4MDMsIDB4MGYsIDB4MGMKIH07CiBzdGF0aWMgY29uc3QgX191OCBodjcxMzFyX3NlbnNvcl9pbml0W11bOF0gPSB7CiAJezB4YzAsIDB4MTEsIDB4MzEsIDB4MzgsIDB4MmEsIDB4MmUsIDB4MDAsIDB4MTB9LApAQCAtMzM5LDcgKzMzNiw3IEBACiAJMHg0NCwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKIAkweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4MDEsIDB4MDEsIDB4MGEsIDB4MTYsIDB4MTIsIDB4NjgsIDB4OGIsCi0JMHgxMCwgMHgxZCwgMHgxMCwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwNworCTB4MTAsCiB9Owogc3RhdGljIGNvbnN0IF9fdTggb3Y2NjUwX3NlbnNvcl9pbml0W11bOF0gPSB7CiAJLyogQnJpZ2h0LCBjb250cmFzdCwgZXRjIGFyZSBzZXQgdGhyb3VnaCBTQ0JCIGludGVyZmFjZS4KQEAgLTM3OCwyNCArMzc1LDEzIEBACiAJMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogcjA5IC4uIHIxMCAqLwogCTB4MDAsIDB4MDEsIDB4MDEsIDB4MGEsCQkJCS8qIHIxMSAuLiByMTQgKi8KIAkweDI4LCAweDFlLAkJCS8qIEggJiBWIHNpemVzICAgICByMTUgLi4gcjE2ICovCi0JMHg2OCwgQ09NUDIsIE1DS19JTklUMSwJCQkJLyogcjE3IC4uIHIxOSAqLwotCTB4MWQsIDB4MTAsIDB4MDIsIDB4MDMsIDB4MGYsIDB4MGMJCS8qIHIxYSAuLiByMWYgKi8KLX07Ci1zdGF0aWMgY29uc3QgX191OCBpbml0T3Y3NjMwXzNbXSA9IHsKLQkweDQ0LCAweDQ0LCAweDAwLCAweDFhLCAweDIwLCAweDIwLCAweDIwLCAweDgwLAkvKiByMDEgLi4gcjA4ICovCi0JMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogcjA5IC4uIHIxMCAqLwotCTB4MDAsIDB4MDIsIDB4MDEsIDB4MGEsCQkJCS8qIHIxMSAuLiByMTQgKi8KLQkweDI4LCAweDFlLAkJCS8qIEggJiBWIHNpemVzICAgICByMTUgLi4gcjE2ICovCiAJMHg2OCwgMHg4ZiwgTUNLX0lOSVQxLAkJCQkvKiByMTcgLi4gcjE5ICovCi0JMHgxZCwgMHgxMCwgMHgwMiwgMHgwMywgMHgwZiwgMHgwYywgMHgwMCwJLyogcjFhIC4uIHIyMCAqLwotCTB4MTAsIDB4MjAsIDB4MzAsIDB4NDAsIDB4NTAsIDB4NjAsIDB4NzAsIDB4ODAsIC8qIHIyMSAuLiByMjggKi8KLQkweDkwLCAweGEwLCAweGIwLCAweGMwLCAweGQwLCAweGUwLCAweGYwLCAweGZmICAvKiByMjkgLi4gcjMwICovCiB9Owogc3RhdGljIGNvbnN0IF9fdTggb3Y3NjMwX3NlbnNvcl9pbml0W11bOF0gPSB7CiAJezB4YTAsIDB4MjEsIDB4MTIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXsweGIwLCAweDIxLCAweDAxLCAweDc3LCAweDNhLCAweDAwLCAweDAwLCAweDEwfSwKIC8qCXsweGQwLCAweDIxLCAweDEyLCAweDdjLCAweDAxLCAweDgwLCAweDM0LCAweDEwfSwJICAgamZtICovCi0JezB4ZDAsIDB4MjEsIDB4MTIsIDB4MWMsIDB4MDAsIDB4ODAsIDB4MzQsIDB4MTB9LAkvKiBqZm0gKi8KKwl7MHhkMCwgMHgyMSwgMHgxMiwgMHg1YywgMHgwMCwgMHg4MCwgMHgzNCwgMHgxMH0sCS8qIGpmbSAqLwogCXsweGEwLCAweDIxLCAweDFiLCAweDA0LCAweDAwLCAweDgwLCAweDM0LCAweDEwfSwKIAl7MHhhMCwgMHgyMSwgMHgyMCwgMHg0NCwgMHgwMCwgMHg4MCwgMHgzNCwgMHgxMH0sCiAJezB4YTAsIDB4MjEsIDB4MjMsIDB4ZWUsIDB4MDAsIDB4ODAsIDB4MzQsIDB4MTB9LApAQCAtNDEzLDE2ICszOTksMTEgQEAKIAl7MHhkMCwgMHgyMSwgMHgxNywgMHgxYywgMHhiZCwgMHgwNiwgMHhmNiwgMHgxMH0sCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBvdjc2MzBfc2Vuc29yX2luaXRfM1tdWzhdID0gewotCXsweGEwLCAweDIxLCAweDEzLCAweDgwLCAweDAwLAkweDAwLCAweDAwLCAweDEwfSwKLX07Ci0KIHN0YXRpYyBjb25zdCBfX3U4IGluaXRQYXMxMDZbXSA9IHsKIAkweDA0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4MDAsCiAJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMSwgMHgwMCwKIAkweDE2LCAweDEyLCAweDI0LCBDT01QMSwgTUNLX0lOSVQxLAotCTB4MTgsIDB4MTAsIDB4MDIsIDB4MDIsIDB4MDksIDB4MDcKIH07CiAvKiBjb21wcmVzc2lvbiAweDg2IG1ja2luaXQxIDB4MmIgKi8KIApAQCAtNDk2LDcgKzQ3Nyw2IEBACiAJMHgwMCwgMHgwMCwKIAkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAzLCAweDBhLAogCTB4MjgsIDB4MWUsIDB4MjAsIDB4ODksIDB4MjAsCi0JMHgwMCwgMHgwMCwgMHgwMiwgMHgwMywgMHgwZiwgMHgwYwogfTsKIAogLyogIktub3duIiBQQVMyMDJCQ0IgcmVnaXN0ZXJzOgpAQCAtNTM3LDcgKzUxNyw2IEBACiAJMHgwMCwgMHgwMCwKIAkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDA5LCAweDBhLAogCTB4MTYsIDB4MTIsIDB4NjAsIDB4ODYsIDB4MmIsCi0JMHgxNCwgMHgwYSwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwNwogfTsKIC8qIFNhbWUgYXMgYWJvdmUsIGV4Y2VwdCBhIGRpZmZlcmVudCBoc3RhcnQgKi8KIHN0YXRpYyBjb25zdCBfX3U4IGluaXRUYXM1MTEwZFtdID0gewpAQCAtNTQ1LDEyICs1MjQsMTkgQEAKIAkweDAwLCAweDAwLAogCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDksIDB4MGEsCiAJMHgxNiwgMHgxMiwgMHg2MCwgMHg4NiwgMHgyYiwKLQkweDE0LCAweDBhLCAweDAyLCAweDAyLCAweDA5LCAweDA3CiB9Owotc3RhdGljIGNvbnN0IF9fdTggdGFzNTExMF9zZW5zb3JfaW5pdFtdWzhdID0geworLyogdGFzNTExMGMgaXMgMyB3aXJlLCB0YXM1MTEwZCBpcyAyIHdpcmUgKHJlZ3VsYXIgaTJjKSAqLworc3RhdGljIGNvbnN0IF9fdTggdGFzNTExMGNfc2Vuc29yX2luaXRbXVs4XSA9IHsKIAl7MHgzMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgxMH0sCiAJezB4MzAsIDB4MTEsIDB4MDIsIDB4MjAsIDB4YTksIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweGEwLCAweDYxLCAweDlhLCAweGNhLCAweDAwLCAweDAwLCAweDAwLCAweDE3fSwKK307CisvKiBLbm93biBUQVM1MTEwRCByZWdpc3RlcnMKKyAqIHJlZzAyOiBnYWluLCBiaXQgb3JkZXIgcmV2ZXJzZWQhISAwID09IG1heCBnYWluLCAyNTUgPT0gbWluIGdhaW4KKyAqIHJlZzAzOiBiaXQzOiB2ZmxpcCwgYml0NDogfmhmbGlwLCBiaXQ3OiB+Z2FpbmJvb3N0ICh+ID09IGludmVydGVkKQorICogICAgICAgIE5vdGU6IHdyaXRpbmcgcmVnMDMgc2VlbXMgdG8gb25seSB3b3JrIHdoZW4gd3JpdHRlbiB0b2dldGhlciB3aXRoIDAyCisgKi8KK3N0YXRpYyBjb25zdCBfX3U4IHRhczUxMTBkX3NlbnNvcl9pbml0W11bOF0gPSB7CisJezB4YTAsIDB4NjEsIDB4OWEsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTd9LCAvKiByZXNldCAqLwogfTsKIAogc3RhdGljIGNvbnN0IF9fdTggaW5pdFRhczUxMzBbXSA9IHsKQEAgLTU1OCw3ICs1NDQsNiBAQAogCTB4MDAsIDB4MDAsCiAJMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwYywgMHgwYSwKIAkweDI4LCAweDFlLCAweDYwLCBDT01QLCBNQ0tfSU5JVCwKLQkweDE4LCAweDEwLCAweDA0LCAweDAzLCAweDExLCAweDBjCiB9Owogc3RhdGljIGNvbnN0IF9fdTggdGFzNTEzMF9zZW5zb3JfaW5pdFtdWzhdID0gewogLyoJezB4MzAsIDB4MTEsIDB4MDAsIDB4NDAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MTB9LApAQCAtNTY5LDIxICs1NTQsMTggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RhdGEgc2Vuc29yX2RhdGFbXSA9IHsKLVNFTlMoaW5pdEh2NzEzMWQsIE5VTEwsIGh2NzEzMWRfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfR0FJTiwgTk9fQlJJR0hUTkVTU3xOT19GUkVRLCAwKSwKLVNFTlMoaW5pdEh2NzEzMXIsIE5VTEwsIGh2NzEzMXJfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIDAsIE5PX0JSSUdIVE5FU1N8Tk9fRVhQT3xOT19GUkVRLCAwKSwKLVNFTlMoaW5pdE92NjY1MCwgTlVMTCwgb3Y2NjUwX3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLCBGX0dBSU58Rl9TSUYsIDAsIDB4NjApLAotU0VOUyhpbml0T3Y3NjMwLCBpbml0T3Y3NjMwXzMsIG92NzYzMF9zZW5zb3JfaW5pdCwgTlVMTCwgb3Y3NjMwX3NlbnNvcl9pbml0XzMsCi0JRl9HQUlOLCAwLCAweDIxKSwKLVNFTlMoaW5pdFBhczEwNiwgTlVMTCwgcGFzMTA2X3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLCBGX0dBSU58Rl9TSUYsIE5PX0ZSRVEsCi0JMCksCi1TRU5TKGluaXRQYXMyMDIsIGluaXRQYXMyMDIsIHBhczIwMl9zZW5zb3JfaW5pdCwgTlVMTCwgTlVMTCwgRl9HQUlOLAotCU5PX0ZSRVEsIDApLAotU0VOUyhpbml0VGFzNTExMGMsIE5VTEwsIHRhczUxMTBfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsCi0JRl9HQUlOfEZfU0lGfEZfQ09BUlNFX0VYUE8sIE5PX0JSSUdIVE5FU1N8Tk9fRlJFUSwgMCksCi1TRU5TKGluaXRUYXM1MTEwZCwgTlVMTCwgdGFzNTExMF9zZW5zb3JfaW5pdCwgTlVMTCwgTlVMTCwKLQlGX0dBSU58Rl9TSUZ8Rl9DT0FSU0VfRVhQTywgTk9fQlJJR0hUTkVTU3xOT19GUkVRLCAwKSwKLVNFTlMoaW5pdFRhczUxMzAsIE5VTEwsIHRhczUxMzBfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIDAsIE5PX0VYUE98Tk9fRlJFUSwKLQkwKSwKK1NFTlMoaW5pdEh2NzEzMWQsIGh2NzEzMWRfc2Vuc29yX2luaXQsIEZfR0FJTiwgTk9fQlJJR0hUTkVTU3xOT19GUkVRLCAwKSwKK1NFTlMoaW5pdEh2NzEzMXIsIGh2NzEzMXJfc2Vuc29yX2luaXQsIDAsIE5PX0JSSUdIVE5FU1N8Tk9fRVhQT3xOT19GUkVRLCAwKSwKK1NFTlMoaW5pdE92NjY1MCwgb3Y2NjUwX3NlbnNvcl9pbml0LCBGX0dBSU58Rl9TSUYsIDAsIDB4NjApLAorU0VOUyhpbml0T3Y3NjMwLCBvdjc2MzBfc2Vuc29yX2luaXQsIEZfR0FJTiwgMCwgMHgyMSksCitTRU5TKGluaXRQYXMxMDYsIHBhczEwNl9zZW5zb3JfaW5pdCwgRl9HQUlOfEZfU0lGLCBOT19GUkVRLCAwKSwKK1NFTlMoaW5pdFBhczIwMiwgcGFzMjAyX3NlbnNvcl9pbml0LCBGX0dBSU4sIE5PX0ZSRVEsIDApLAorU0VOUyhpbml0VGFzNTExMGMsIHRhczUxMTBjX3NlbnNvcl9pbml0LCBGX0dBSU58Rl9TSUZ8Rl9DT0FSU0VfRVhQTywKKwlOT19CUklHSFRORVNTfE5PX0ZSRVEsIDApLAorU0VOUyhpbml0VGFzNTExMGQsIHRhczUxMTBkX3NlbnNvcl9pbml0LCBGX0dBSU58Rl9TSUZ8Rl9DT0FSU0VfRVhQTywKKwlOT19CUklHSFRORVNTfE5PX0ZSRVEsIDApLAorU0VOUyhpbml0VGFzNTEzMCwgdGFzNTEzMF9zZW5zb3JfaW5pdCwgRl9HQUlOLAorCU5PX0JSSUdIVE5FU1N8Tk9fRVhQT3xOT19GUkVRLCAwKSwKIH07CiAKIC8qIGdldCBvbmUgYnl0ZSBpbiBnc3BjYV9kZXYtPnVzYl9idWYgKi8KQEAgLTY1NSw3ICs2MzcsNiBAQAogc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCV9fdTggdmFsdWU7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlICBTRU5TT1JfT1Y2NjUwOgpAQCAtNjk3LDE3ICs2NzgsNiBAQAogCQkJZ290byBlcnI7CiAJCWJyZWFrOwogCSAgICB9Ci0JY2FzZSBTRU5TT1JfVEFTNTEzMENYWDogewotCQlfX3U4IGkyY1tdID0KLQkJCXsweDMwLCAweDExLCAweDAyLCAweDIwLCAweDcwLCAweDAwLCAweDAwLCAweDEwfTsKLQotCQl2YWx1ZSA9IDB4ZmYgLSBzZC0+YnJpZ2h0bmVzczsKLQkJaTJjWzRdID0gdmFsdWU7Ci0JCVBERUJVRyhEX0NPTkYsICJicmlnaHRuZXNzICVkIDogJWQiLCB2YWx1ZSwgaTJjWzRdKTsKLQkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjKSA8IDApCi0JCQlnb3RvIGVycjsKLQkJYnJlYWs7Ci0JICAgIH0KIAl9CiAJcmV0dXJuOwogZXJyOgpAQCAtNzMzLDcgKzcwMyw3IEBACiAJCWJyZWFrOwogCSAgICB9CiAJY2FzZSBTRU5TT1JfVEFTNTExMEM6Ci0JY2FzZSBTRU5TT1JfVEFTNTExMEQ6IHsKKwljYXNlIFNFTlNPUl9UQVM1MTMwQ1hYOiB7CiAJCV9fdTggaTJjW10gPQogCQkJezB4MzAsIDB4MTEsIDB4MDIsIDB4MjAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MTB9OwogCkBAIC03NDIsNiArNzEyLDIzIEBACiAJCQlnb3RvIGVycjsKIAkJYnJlYWs7CiAJICAgIH0KKwljYXNlIFNFTlNPUl9UQVM1MTEwRDogeworCQlfX3U4IGkyY1tdID0geworCQkJMHhiMCwgMHg2MSwgMHgwMiwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNyB9OworCQlnYWluID0gMjU1IC0gZ2FpbjsKKwkJLyogVGhlIGJpdHMgaW4gdGhlIHJlZ2lzdGVyIGFyZSB0aGUgd3Jvbmcgd2F5IGFyb3VuZCEhICovCisJCWkyY1szXSB8PSAoZ2FpbiAmIDB4ODApID4+IDc7CisJCWkyY1szXSB8PSAoZ2FpbiAmIDB4NDApID4+IDU7CisJCWkyY1szXSB8PSAoZ2FpbiAmIDB4MjApID4+IDM7CisJCWkyY1szXSB8PSAoZ2FpbiAmIDB4MTApID4+IDE7CisJCWkyY1szXSB8PSAoZ2FpbiAmIDB4MDgpIDw8IDE7CisJCWkyY1szXSB8PSAoZ2FpbiAmIDB4MDQpIDw8IDM7CisJCWkyY1szXSB8PSAoZ2FpbiAmIDB4MDIpIDw8IDU7CisJCWkyY1szXSB8PSAoZ2FpbiAmIDB4MDEpIDw8IDc7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyYykgPCAwKQorCQkJZ290byBlcnI7CisJCWJyZWFrOworCSAgICB9CiAKIAljYXNlIFNFTlNPUl9PVjY2NTA6CiAJCWdhaW4gPj49IDE7CkBAIC03OTYsNyArNzgzLDcgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJX191OCBnYWluOwotCV9fdTggYnVmWzJdID0geyAwLCAwIH07CisJX191OCBidWZbM10gPSB7IDAsIDAsIDAgfTsKIAogCWlmIChzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5mbGFncyAmIEZfR0FJTikgewogCQkvKiBVc2UgdGhlIHNlbnNvciBnYWluIHRvIGRvIHRoZSBhY3R1YWwgZ2FpbiAqLwpAQCAtODA0LDEzICs3OTEsMTggQEAKIAkJcmV0dXJuOwogCX0KIAotCWdhaW4gPSBzZC0+Z2FpbiA+PiA0OwotCi0JLyogcmVkIGFuZCBibHVlIGdhaW4gKi8KLQlidWZbMF0gPSBnYWluIDw8IDQgfCBnYWluOwotCS8qIGdyZWVuIGdhaW4gKi8KLQlidWZbMV0gPSBnYWluOwotCXJlZ193KGdzcGNhX2RldiwgMHgxMCwgYnVmLCAyKTsKKwlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfMTAzKSB7CisJCWdhaW4gPSBzZC0+Z2FpbiA+PiAxOworCQlidWZbMF0gPSBnYWluOyAvKiBSZWQgKi8KKwkJYnVmWzFdID0gZ2FpbjsgLyogR3JlZW4gKi8KKwkJYnVmWzJdID0gZ2FpbjsgLyogQmx1ZSAqLworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDUsIGJ1ZiwgMyk7CisJfSBlbHNlIHsKKwkJZ2FpbiA9IHNkLT5nYWluID4+IDQ7CisJCWJ1ZlswXSA9IGdhaW4gPDwgNCB8IGdhaW47IC8qIFJlZCBhbmQgYmx1ZSAqLworCQlidWZbMV0gPSBnYWluOyAvKiBHcmVlbiAqLworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MTAsIGJ1ZiwgMik7CisJfQogfQogCiBzdGF0aWMgdm9pZCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC0xMDQ5LDcgKzEwNDEsNyBAQAogCQlkZXNpcmVkX2F2Z19sdW0gPSA1MDAwOwogCX0gZWxzZSB7CiAJCWRlYWR6b25lID0gMTUwMDsKLQkJZGVzaXJlZF9hdmdfbHVtID0gMTgwMDA7CisJCWRlc2lyZWRfYXZnX2x1bSA9IDEzMDAwOwogCX0KIAogCWlmIChzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5mbGFncyAmIEZfQ09BUlNFX0VYUE8pCkBAIC0xMTI3LDUzICsxMTE5LDkxIEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCBjYW0gKmNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQlpbnQgbW9kZSwgbDsKLQljb25zdCBfX3U4ICpzbjljMTB4OwotCV9fdTggcmVnMTJfMTlbOF07CisJaW50IGksIG1vZGU7CisJX191OCByZWdzWzB4MzFdOwogCiAJbW9kZSA9IGNhbS0+Y2FtX21vZGVbZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXYgJiAweDA3OwotCXNuOWMxMHggPSBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5icmlkZ2VfaW5pdFtzZC0+YnJpZGdlXTsKLQlsID0gc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uYnJpZGdlX2luaXRfc2l6ZVtzZC0+YnJpZGdlXTsKLQltZW1jcHkocmVnMTJfMTksICZzbjljMTB4WzB4MTIgLSAxXSwgOCk7Ci0JcmVnMTJfMTlbNl0gPSBzbjljMTB4WzB4MTggLSAxXSB8IChtb2RlIDw8IDQpOwotCS8qIFNwZWNpYWwgY2FzZXMgd2hlcmUgcmVnIDE3IGFuZCBvciAxOSB2YWx1ZSBkZXBlbmRzIG9uIG1vZGUgKi8KKwkvKiBDb3B5IHJlZ2lzdGVycyAweDAxIC0gMHgxOSBmcm9tIHRoZSB0ZW1wbGF0ZSAqLworCW1lbWNweSgmcmVnc1sweDAxXSwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uYnJpZGdlX2luaXQsIDB4MTkpOworCS8qIFNldCB0aGUgbW9kZSAqLworCXJlZ3NbMHgxOF0gfD0gbW9kZSA8PCA0OworCisJLyogU2V0IGJyaWRnZSBnYWluIHRvIDEuMCAqLworCWlmIChzZC0+YnJpZGdlID09IEJSSURHRV8xMDMpIHsKKwkJcmVnc1sweDA1XSA9IDB4MjA7IC8qIFJlZCAqLworCQlyZWdzWzB4MDZdID0gMHgyMDsgLyogR3JlZW4gKi8KKwkJcmVnc1sweDA3XSA9IDB4MjA7IC8qIEJsdWUgKi8KKwl9IGVsc2UgeworCQlyZWdzWzB4MTBdID0gMHgwMDsgLyogUmVkIGFuZCBibHVlICovCisJCXJlZ3NbMHgxMV0gPSAweDAwOyAvKiBHcmVlbiAqLworCX0KKworCS8qIFNldHVwIHBpeGVsIG51bWJlcnMgYW5kIGF1dG8gZXhwb3N1cmUgd2luZG93ICovCisJaWYgKHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmZsYWdzICYgRl9TSUYpIHsKKwkJcmVnc1sweDFhXSA9IDB4MTQ7IC8qIEhPX1NJWkUgNjQwLCBtYWtlcyBubyBzZW5zZSAqLworCQlyZWdzWzB4MWJdID0gMHgwYTsgLyogVk9fU0laRSAzMjAsIG1ha2VzIG5vIHNlbnNlICovCisJCXJlZ3NbMHgxY10gPSAweDAyOyAvKiBBRSBILXN0YXJ0IDY0ICovCisJCXJlZ3NbMHgxZF0gPSAweDAyOyAvKiBBRSBWLXN0YXJ0IDY0ICovCisJCXJlZ3NbMHgxZV0gPSAweDA5OyAvKiBBRSBILWVuZCAyODggKi8KKwkJcmVnc1sweDFmXSA9IDB4MDc7IC8qIEFFIFYtZW5kIDIyNCAqLworCX0gZWxzZSB7CisJCXJlZ3NbMHgxYV0gPSAweDFkOyAvKiBIT19TSVpFIDk2MCwgbWFrZXMgbm8gc2Vuc2UgKi8KKwkJcmVnc1sweDFiXSA9IDB4MTA7IC8qIFZPX1NJWkUgNTEyLCBtYWtlcyBubyBzZW5zZSAqLworCQlyZWdzWzB4MWNdID0gMHgwNTsgLyogQUUgSC1zdGFydCAxNjAgKi8KKwkJcmVnc1sweDFkXSA9IDB4MDM7IC8qIEFFIFYtc3RhcnQgOTYgKi8KKwkJcmVnc1sweDFlXSA9IDB4MGY7IC8qIEFFIEgtZW5kIDQ4MCAqLworCQlyZWdzWzB4MWZdID0gMHgwYzsgLyogQUUgVi1lbmQgMzg0ICovCisJfQorCisJLyogU2V0dXAgdGhlIGdhbW1hIHRhYmxlIChvbmx5IHVzZWQgd2l0aCB0aGUgc245YzEwMyBicmlkZ2UpICovCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCXJlZ3NbMHgyMCArIGldID0gaSAqIDE2OworCXJlZ3NbMHgyMCArIGldID0gMjU1OworCisJLyogU3BlY2lhbCBjYXNlcyB3aGVyZSBzb21lIHJlZ3MgZGVwZW5kIG9uIG1vZGUgb3IgYnJpZGdlICovCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfVEFTNTEzMENYWDoKLQkJLyogcHJvYmFibHkgbm90IG1vZGUgc3BlY2lmaWMgYXQgYWxsIG1vc3QgbGlrZWx5IHRoZSB1cHBlcgorCQkvKiBGSVhNRSAvIFRFU1RNRQorCQkgICBwcm9iYWJseSBub3QgbW9kZSBzcGVjaWZpYyBhdCBhbGwgbW9zdCBsaWtlbHkgdGhlIHVwcGVyCiAJCSAgIG5pYmJsZSBvZiAweDE5IGlzIGV4cG9zdXJlIChjbG9jayBkaXZpZGVyKSBqdXN0IGFzIHdpdGgKIAkJICAgdGhlIHRhczUxMTAsIHdlIG5lZWQgc29tZW9uZSB0byB0ZXN0IHRoaXMuICovCi0JCXJlZzEyXzE5WzddID0gbW9kZSA/IDB4MjMgOiAweDQzOworCQlyZWdzWzB4MTldID0gbW9kZSA/IDB4MjMgOiAweDQzOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9PVjc2MzA6CisJCS8qIEZJWE1FIC8gVEVTVE1FIGZvciBzb21lIHJlYXNvbiB3aXRoIHRoZSAxMDEvMTAyIGJyaWRnZSB0aGUKKwkJICAgY2xvY2sgaXMgc2V0IHRvIDEyIE1oeiAocmVnMSA9PSAweDA0KSwgcmF0aGVyIHRoZW4gMjQuCisJCSAgIEFsc28gdGhlIGhzdGFydCBuZWVkcyB0byBnbyBmcm9tIDEgdG8gMiB3aGVuIHVzaW5nIGEgMTAzLAorCQkgICB3aGljaCBpcyBsaWtlbHkgcmVsYXRlZC4gVGhpcyBkb2VzIG5vdCBzZWVtIHJpZ2h0LiAqLworCQlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfMTAzKSB7CisJCQlyZWdzWzB4MDFdID0gMHg0NDsgLyogU2VsZWN0IDI0IE1oeiBjbG9jayAqLworCQkJcmVnc1sweDEyXSA9IDB4MDI7IC8qIFNldCBoc3RhcnQgdG8gMiAqLworCQl9CiAJfQogCS8qIERpc2FibGUgY29tcHJlc3Npb24gd2hlbiB0aGUgcmF3IGJheWVyIGZvcm1hdCBoYXMgYmVlbiBzZWxlY3RlZCAqLwogCWlmIChjYW0tPmNhbV9tb2RlW2dzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2ICYgTU9ERV9SQVcpCi0JCXJlZzEyXzE5WzZdICY9IH4weDgwOworCQlyZWdzWzB4MThdICY9IH4weDgwOwogCiAJLyogVmdhIG1vZGUgZW11bGF0aW9uIG9uIFNJRiBzZW5zb3I/ICovCiAJaWYgKGNhbS0+Y2FtX21vZGVbZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXYgJiBNT0RFX1JFRFVDRURfU0lGKSB7Ci0JCXJlZzEyXzE5WzBdICs9IDE2OyAvKiAweDEyOiBoc3RhcnQgYWRqdXN0ICovCi0JCXJlZzEyXzE5WzFdICs9IDI0OyAvKiAweDEzOiB2c3RhcnQgYWRqdXN0ICovCi0JCXJlZzEyXzE5WzNdID0gMzIwIC8gMTY7IC8qIDB4MTU6IGhzaXplICovCi0JCXJlZzEyXzE5WzRdID0gMjQwIC8gMTY7IC8qIDB4MTY6IHZzaXplICovCisJCXJlZ3NbMHgxMl0gKz0gMTY7CS8qIGhzdGFydCBhZGp1c3QgKi8KKwkJcmVnc1sweDEzXSArPSAyNDsJLyogdnN0YXJ0IGFkanVzdCAqLworCQlyZWdzWzB4MTVdICA9IDMyMCAvIDE2OyAvKiBoc2l6ZSAqLworCQlyZWdzWzB4MTZdICA9IDI0MCAvIDE2OyAvKiB2c2l6ZSAqLwogCX0KIAogCS8qIHJlZyAweDAxIGJpdCAyIHZpZGVvIHRyYW5zZmVydCBvbiAqLwotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgJnNuOWMxMHhbMHgwMSAtIDFdLCAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsICZyZWdzWzB4MDFdLCAxKTsKIAkvKiByZWcgMHgxNyBTZW5zb3JDbGsgZW5hYmxlIGludiBDbGsgMHg2MCAqLwotCXJlZ193KGdzcGNhX2RldiwgMHgxNywgJnNuOWMxMHhbMHgxNyAtIDFdLCAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTcsICZyZWdzWzB4MTddLCAxKTsKIAkvKiBTZXQgdGhlIHJlZ2lzdGVycyBmcm9tIHRoZSB0ZW1wbGF0ZSAqLwotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgc245YzEweCwgbCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAmcmVnc1sweDAxXSwKKwkgICAgICAoc2QtPmJyaWRnZSA9PSBCUklER0VfMTAzKSA/IDB4MzAgOiAweDFmKTsKIAogCS8qIEluaXQgdGhlIHNlbnNvciAqLwogCWkyY193X3ZlY3Rvcihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnNlbnNvcl9pbml0LAogCQkJc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc2Vuc29yX2luaXRfc2l6ZSk7Ci0JaWYgKHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnNlbnNvcl9icmlkZ2VfaW5pdFtzZC0+YnJpZGdlXSkKLQkJaTJjX3dfdmVjdG9yKGdzcGNhX2RldiwKLQkJCXNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnNlbnNvcl9icmlkZ2VfaW5pdFtzZC0+YnJpZGdlXSwKLQkJCXNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnNlbnNvcl9icmlkZ2VfaW5pdF9zaXplWwotCQkJCXNkLT5icmlkZ2VdKTsKIAotCS8qIE1vZGUgc3BlY2lmaWMgc2Vuc29yIHNldHVwICovCisJLyogTW9kZSAvIGJyaWRnZSBzcGVjaWZpYyBzZW5zb3Igc2V0dXAgKi8KIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9QQVMyMDI6IHsKIAkJY29uc3QgX191OCBpMmNwY2xvY2tkaXZbXSA9CkBAIC0xMTgxLDI3ICsxMjExLDM3IEBACiAJCS8qIGNsb2NrZGl2IGZyb20gNCB0byAzICg3LjUgLT4gMTAgZnBzKSB3aGVuIGluIGxvdyByZXMgbW9kZSAqLwogCQlpZiAobW9kZSkKIAkJCWkyY193KGdzcGNhX2RldiwgaTJjcGNsb2NrZGl2KTsKKwkJYnJlYWs7CiAJICAgIH0KKwljYXNlIFNFTlNPUl9PVjc2MzA6CisJCS8qIEZJWE1FIC8gVEVTVE1FIFdlIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGlzIGlkZW50aWNhbAorCQkgICBmb3IgdGhlIDEwMS8xMDIgYW5kIHRoZSAxMDMgY2FzZSAqLworCQlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfMTAzKSB7CisJCQljb25zdCBfX3U4IGkyY1tdID0geyAweGEwLCAweDIxLCAweDEzLAorCQkJCQkgICAgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAgfTsKKwkJCWkyY193KGdzcGNhX2RldiwgaTJjKTsKKwkJfQorCQlicmVhazsKIAl9CiAJLyogSF9zaXplIFZfc2l6ZSAweDI4LCAweDFlIC0+IDY0MHg0ODAuIDB4MTYsIDB4MTIgLT4gMzUyeDI4OCAqLwotCXJlZ193KGdzcGNhX2RldiwgMHgxNSwgJnJlZzEyXzE5WzNdLCAyKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTUsICZyZWdzWzB4MTVdLCAyKTsKIAkvKiBjb21wcmVzc2lvbiByZWdpc3RlciAqLwotCXJlZ193KGdzcGNhX2RldiwgMHgxOCwgJnJlZzEyXzE5WzZdLCAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTgsICZyZWdzWzB4MThdLCAxKTsKIAkvKiBIX3N0YXJ0ICovCi0JcmVnX3coZ3NwY2FfZGV2LCAweDEyLCAmcmVnMTJfMTlbMF0sIDEpOworCXJlZ193KGdzcGNhX2RldiwgMHgxMiwgJnJlZ3NbMHgxMl0sIDEpOwogCS8qIFZfU1RBUlQgKi8KLQlyZWdfdyhnc3BjYV9kZXYsIDB4MTMsICZyZWcxMl8xOVsxXSwgMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDEzLCAmcmVnc1sweDEzXSwgMSk7CiAJLyogcmVzZXQgMHgxNyBTZW5zb3JDbGsgZW5hYmxlIGludiBDbGsgMHg2MCAqLwogCQkJCS8qZml4bWU6IG92NzYzMCBbMTddPTY4IDhmICgrMjAgaWYgMTAyKSovCi0JcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAmcmVnMTJfMTlbNV0sIDEpOworCXJlZ193KGdzcGNhX2RldiwgMHgxNywgJnJlZ3NbMHgxN10sIDEpOwogCS8qTUNLU0laRSAtPjMgKi8JLypmaXhtZTogbm90IG92NzYzMCovCi0JcmVnX3coZ3NwY2FfZGV2LCAweDE5LCAmcmVnMTJfMTlbN10sIDEpOworCXJlZ193KGdzcGNhX2RldiwgMHgxOSwgJnJlZ3NbMHgxOV0sIDEpOwogCS8qIEFFX1NUUlggQUVfU1RSWSBBRV9FTkRYIEFFX0VORFkgKi8KLQlyZWdfdyhnc3BjYV9kZXYsIDB4MWMsICZzbjljMTB4WzB4MWMgLSAxXSwgNCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDFjLCAmcmVnc1sweDFjXSwgNCk7CiAJLyogRW5hYmxlIHZpZGVvIHRyYW5zZmVydCAqLwotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgJnNuOWMxMHhbMF0sIDEpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgJnJlZ3NbMHgwMV0sIDEpOwogCS8qIENvbXByZXNzaW9uICovCi0JcmVnX3coZ3NwY2FfZGV2LCAweDE4LCAmcmVnMTJfMTlbNl0sIDIpOworCXJlZ193KGdzcGNhX2RldiwgMHgxOCwgJnJlZ3NbMHgxOF0sIDIpOwogCW1zbGVlcCgyMCk7CiAKIAlzZC0+cmVnMTEgPSAtMTsKQEAgLTE1MjUsMTUgKzE1NjUsMTUgQEAKIAkuZHJpdmVyX2luZm8gPSAoU0VOU09SXyAjIyBzZW5zb3IgPDwgOCkgfCBCUklER0VfICMjIGJyaWRnZQogCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSBfX2RldmluaXRjb25zdCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAwMSksIFNCKFRBUzUxMTBDLCAxMDIpfSwgLyogVEFTNTExMEMxQiAqLwogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA1KSwgU0IoVEFTNTExMEMsIDEwMSl9LCAvKiBUQVM1MTEwQzFCICovCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDcpLCBTQihUQVM1MTEwRCwgMTAxKX0sIC8qIFRBUzUxMTBEICovCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDkpLCBTQihQQVMxMDYsIDEwMSl9LAogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDBkKSwgU0IoUEFTMTA2LCAxMDEpfSwKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAxMSksIFNCKE9WNjY1MCwgMTAxKX0sCi0jaWYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyICYmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMl9NT0RVTEUKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAxOSksIFNCKE9WNzYzMCwgMTAxKX0sCisjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyICYmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMl9NT0RVTEUKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyNCksIFNCKFRBUzUxMzBDWFgsIDEwMil9LAogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI1KSwgU0IoVEFTNTEzMENYWCwgMTAyKX0sCiAjZW5kaWYKQEAgLTE1NDQsMTggKzE1ODQsMjIgQEAKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYyksIFNCKE9WNzYzMCwgMTAyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmQpLCBTQihIVjcxMzFSLCAxMDIpfSwKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyZSksIFNCKE9WNzYzMCwgMTAyKX0sCi0JLyoge1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmIpLCBTQihNSTAzWFgsIDEwMil9LCAqLyAvKiBNSTAzNDMgTUkwMzYwIE1JMDMzMCAqLworCS8qIHtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDMwKSwgU0IoTUkwM1hYLCAxMDIpfSwgKi8gLyogTUkwMzQzIE1JMDM2MCBNSTAzMzAgKi8KKwkvKiB7VVNCX0RFVklDRSgweDBjNDUsIDB4NjA4MiksIFNCKE1JMDNYWCwgMTAzKX0sICovIC8qIE1JMDM0MyBNSTAzNjAgKi8KKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjA4MyksIFNCKEhWNzEzMUQsIDEwMyl9LAorCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDhjKSwgU0IoSFY3MTMxUiwgMTAzKX0sCisJLyoge1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwOGUpLCBTQihDSVNWRjEwLCAxMDMpfSwgKi8KIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjA4ZiksIFNCKE9WNzYzMCwgMTAzKX0sCi0jaWYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyICYmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMl9NT0RVTEUKKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBhOCksIFNCKFBBUzEwNiwgMTAzKX0sCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYWEpLCBTQihUQVM1MTMwQ1hYLCAxMDMpfSwKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBhZiksIFNCKFBBUzIwMiwgMTAzKX0sCi0jZW5kaWYKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBiMCksIFNCKE9WNzYzMCwgMTAzKX0sCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKIAogLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYwppbmRleCAyZDBiYjE3Li5kNmYzOWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKQEAgLTI1LDEyICsyNSwxMiBAQAogI2luY2x1ZGUgImdzcGNhLmgiCiAjaW5jbHVkZSAianBlZy5oIgogCi0jZGVmaW5lIFY0TDJfQ0lEX0lORlJBUkVEIChWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAwKQotCiBNT0RVTEVfQVVUSE9SKCJKZWFuLUZyYW7Dp29pcyBNb2luZSA8aHR0cDovL21vaW5lamYuZnJlZS5mcj4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EvU09OSVggSlBFRyBVU0IgQ2FtZXJhIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCitzdGF0aWMgaW50IHN0YXJjYW07CisKIC8qIGNvbnRyb2xzICovCiBlbnVtIGVfY3RybCB7CiAJQlJJR0hUTkVTUywKQEAgLTQzLDcgKzQzLDcgQEAKIAlIRkxJUCwKIAlWRkxJUCwKIAlTSEFSUE5FU1MsCi0JSU5GUkFSRUQsCisJSUxMVU0sCiAJRlJFUSwKIAlOQ1RSTFMJCS8qIG51bWJlciBvZiBjb250cm9scyAqLwogfTsKQEAgLTEwMCw3ICsxMDAsOCBAQAogfTsKIAogLyogZGV2aWNlIGZsYWdzICovCi0jZGVmaW5lIFBETl9JTlYJMQkJLyogaW52ZXJzZSBwaW4gU19QV1JfRE4gLyBzbl94eHggdGFibGVzICovCisjZGVmaW5lIEZfUEROX0lOVgkweDAxCS8qIGludmVyc2UgcGluIFNfUFdSX0ROIC8gc25feHh4IHRhYmxlcyAqLworI2RlZmluZSBGX0lMTFVNCQkweDAyCS8qIHByZXNlbmNlIG9mIGlsbHVtaW5hdG9yICovCiAKIC8qIHNuOWMxeHggZGVmaW5pdGlvbnMgKi8KIC8qIHJlZ2lzdGVyIDB4MDEgKi8KQEAgLTEyNCw3ICsxMjUsNyBAQAogc3RhdGljIHZvaWQgc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKIHN0YXRpYyB2b2lkIHNldGh2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOwogc3RhdGljIHZvaWQgc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7Ci1zdGF0aWMgdm9pZCBzZXRpbmZyYXJlZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIHZvaWQgc2V0aWxsdW0oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKIHN0YXRpYyB2b2lkIHNldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW05DVFJMU10gPSB7CkBAIC0yNTEsMTggKzI1MiwxNyBAQAogCSAgICB9LAogCSAgICAuc2V0X2NvbnRyb2wgPSBzZXRzaGFycG5lc3MKIAl9LAotLyogbXQ5djExMSBvbmx5ICovCi1bSU5GUkFSRURdID0geworW0lMTFVNXSA9IHsKIAkgICAgewotCQkuaWQgICAgICA9IFY0TDJfQ0lEX0lORlJBUkVELAorCQkuaWQgICAgICA9IFY0TDJfQ0lEX0lMTFVNSU5BVE9SU18xLAogCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JCS5uYW1lICAgID0gIkluZnJhcmVkIiwKKwkJLm5hbWUgICAgPSAiSWxsdW1pbmF0b3IgLyBpbmZyYXJlZCIsCiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAxLAogCQkuc3RlcCAgICA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gMCwKIAkgICAgfSwKLQkgICAgLnNldF9jb250cm9sID0gc2V0aW5mcmFyZWQKKwkgICAgLnNldF9jb250cm9sID0gc2V0aWxsdW0KIAl9LAogLyogb3Y3NjMwL292NzY0OC9vdjc2NjAgb25seSAqLwogW0ZSRVFdID0gewpAQCAtMjgyLDMyICsyODIsMjYgQEAKIC8qIHRhYmxlIG9mIHRoZSBkaXNhYmxlZCBjb250cm9scyAqLwogc3RhdGljIGNvbnN0IF9fdTMyIGN0cmxfZGlzW10gPSB7CiBbU0VOU09SX0FEQ00xNzAwXSA9CSgxIDw8IEFVVE9HQUlOKSB8Ci0JCQkoMSA8PCBJTkZSQVJFRCkgfAogCQkJKDEgPDwgSEZMSVApIHwKIAkJCSgxIDw8IFZGTElQKSB8CiAJCQkoMSA8PCBGUkVRKSwKIAotW1NFTlNPUl9HQzAzMDddID0JKDEgPDwgSU5GUkFSRUQpIHwKLQkJCSgxIDw8IEhGTElQKSB8CitbU0VOU09SX0dDMDMwN10gPQkoMSA8PCBIRkxJUCkgfAogCQkJKDEgPDwgVkZMSVApIHwKIAkJCSgxIDw8IEZSRVEpLAogCi1bU0VOU09SX0hWNzEzMVJdID0JKDEgPDwgSU5GUkFSRUQpIHwKLQkJCSgxIDw8IEhGTElQKSB8CitbU0VOU09SX0hWNzEzMVJdID0JKDEgPDwgSEZMSVApIHwKIAkJCSgxIDw8IEZSRVEpLAogCi1bU0VOU09SX01JMDM2MF0gPQkoMSA8PCBJTkZSQVJFRCkgfAotCQkJKDEgPDwgSEZMSVApIHwKK1tTRU5TT1JfTUkwMzYwXSA9CSgxIDw8IEhGTElQKSB8CiAJCQkoMSA8PCBWRkxJUCkgfAogCQkJKDEgPDwgRlJFUSksCiAKLVtTRU5TT1JfTUkwMzYwQl0gPQkoMSA8PCBJTkZSQVJFRCkgfAotCQkJKDEgPDwgSEZMSVApIHwKK1tTRU5TT1JfTUkwMzYwQl0gPQkoMSA8PCBIRkxJUCkgfAogCQkJKDEgPDwgVkZMSVApIHwKIAkJCSgxIDw8IEZSRVEpLAogCi1bU0VOU09SX01PNDAwMF0gPQkoMSA8PCBJTkZSQVJFRCkgfAotCQkJKDEgPDwgSEZMSVApIHwKK1tTRU5TT1JfTU80MDAwXSA9CSgxIDw8IEhGTElQKSB8CiAJCQkoMSA8PCBWRkxJUCkgfAogCQkJKDEgPDwgRlJFUSksCiAKQEAgLTMxNSw0MCArMzA5LDMyIEBACiAJCQkoMSA8PCBWRkxJUCkgfAogCQkJKDEgPDwgRlJFUSksCiAKLVtTRU5TT1JfT002ODAyXSA9CSgxIDw8IElORlJBUkVEKSB8Ci0JCQkoMSA8PCBIRkxJUCkgfAorW1NFTlNPUl9PTTY4MDJdID0JKDEgPDwgSEZMSVApIHwKIAkJCSgxIDw8IFZGTElQKSB8CiAJCQkoMSA8PCBGUkVRKSwKIAotW1NFTlNPUl9PVjc2MzBdID0JKDEgPDwgSU5GUkFSRUQpIHwKLQkJCSgxIDw8IEhGTElQKSwKK1tTRU5TT1JfT1Y3NjMwXSA9CSgxIDw8IEhGTElQKSwKIAotW1NFTlNPUl9PVjc2NDhdID0JKDEgPDwgSU5GUkFSRUQpIHwKLQkJCSgxIDw8IEhGTElQKSwKK1tTRU5TT1JfT1Y3NjQ4XSA9CSgxIDw8IEhGTElQKSwKIAogW1NFTlNPUl9PVjc2NjBdID0JKDEgPDwgQVVUT0dBSU4pIHwKLQkJCSgxIDw8IElORlJBUkVEKSB8CiAJCQkoMSA8PCBIRkxJUCkgfAogCQkJKDEgPDwgVkZMSVApLAogCiBbU0VOU09SX1BPMTAzMF0gPQkoMSA8PCBBVVRPR0FJTikgfAotCQkJKDEgPDwgSU5GUkFSRUQpIHwKIAkJCSgxIDw8IEhGTElQKSB8CiAJCQkoMSA8PCBWRkxJUCkgfAogCQkJKDEgPDwgRlJFUSksCiAKIFtTRU5TT1JfUE8yMDMwTl0gPQkoMSA8PCBBVVRPR0FJTikgfAotCQkJKDEgPDwgSU5GUkFSRUQpIHwKIAkJCSgxIDw8IEZSRVEpLAogCiBbU0VOU09SX1NPSTc2OF0gPQkoMSA8PCBBVVRPR0FJTikgfAotCQkJKDEgPDwgSU5GUkFSRUQpIHwKIAkJCSgxIDw8IEhGTElQKSB8CiAJCQkoMSA8PCBWRkxJUCkgfAogCQkJKDEgPDwgRlJFUSksCiAKIFtTRU5TT1JfU1A4MDcwOF0gPQkoMSA8PCBBVVRPR0FJTikgfAotCQkJKDEgPDwgSU5GUkFSRUQpIHwKIAkJCSgxIDw8IEhGTElQKSB8CiAJCQkoMSA8PCBWRkxJUCkgfAogCQkJKDEgPDwgRlJFUSksCkBAIC0xODIyLDQ0ICsxODA4LDQ2IEBACiAJUERFQlVHKERfUFJPQkUsICJTb25peCBjaGlwIGlkOiAlMDJ4IiwgcmVnRjEpOwogCXN3aXRjaCAoc2QtPmJyaWRnZSkgewogCWNhc2UgQlJJREdFX1NOOUMxMDJQOgotCQlpZiAocmVnRjEgIT0gMHgxMSkKLQkJCXJldHVybiAtRU5PREVWOwotCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAyLCByZWdHcGlvWzFdKTsKLQkJYnJlYWs7CiAJY2FzZSBCUklER0VfU045QzEwNToKIAkJaWYgKHJlZ0YxICE9IDB4MTEpCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX01JMDM2MCkKLQkJCW1pMDM2MF9wcm9iZShnc3BjYV9kZXYpOwotCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIHJlZ0dwaW8sIDIpOwotCQlicmVhazsKLQljYXNlIEJSSURHRV9TTjlDMTIwOgotCQlpZiAocmVnRjEgIT0gMHgxMikKLQkJCXJldHVybiAtRU5PREVWOwotCQlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKLQkJY2FzZSBTRU5TT1JfTUkwMzYwOgotCQkJbWkwMzYwX3Byb2JlKGdzcGNhX2Rldik7Ci0JCQlicmVhazsKLQkJY2FzZSBTRU5TT1JfT1Y3NjMwOgotCQkJb3Y3NjMwX3Byb2JlKGdzcGNhX2Rldik7Ci0JCQlicmVhazsKLQkJY2FzZSBTRU5TT1JfT1Y3NjQ4OgotCQkJb3Y3NjQ4X3Byb2JlKGdzcGNhX2Rldik7Ci0JCQlicmVhazsKLQkJY2FzZSBTRU5TT1JfUE8yMDMwTjoKLQkJCXBvMjAzMG5fcHJvYmUoZ3NwY2FfZGV2KTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJlZ0dwaW9bMV0gPSAweDcwOwkJLyogbm8gYXVkaW8gKi8KLQkJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCByZWdHcGlvLCAyKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIC8qCWNhc2UgQlJJREdFX1NOOUMxMTA6ICovCi0vKgljYXNlIEJSSURHRV9TTjlDMzI1OiAqLworLyoJY2FzZSBCUklER0VfU045QzEyMDogKi8KIAkJaWYgKHJlZ0YxICE9IDB4MTIpCiAJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9NSTAzNjA6CisJCW1pMDM2MF9wcm9iZShnc3BjYV9kZXYpOworCQlicmVhazsKKwljYXNlIFNFTlNPUl9PVjc2MzA6CisJCW92NzYzMF9wcm9iZShnc3BjYV9kZXYpOworCQlicmVhazsKKwljYXNlIFNFTlNPUl9PVjc2NDg6CisJCW92NzY0OF9wcm9iZShnc3BjYV9kZXYpOworCQlicmVhazsKKwljYXNlIFNFTlNPUl9QTzIwMzBOOgorCQlwbzIwMzBuX3Byb2JlKGdzcGNhX2Rldik7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoc2QtPmJyaWRnZSkgeworCWNhc2UgQlJJREdFX1NOOUMxMDJQOgorCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAyLCByZWdHcGlvWzFdKTsKKwkJYnJlYWs7CisJY2FzZSBCUklER0VfU045QzEwNToKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCByZWdHcGlvLCAyKTsKKwkJYnJlYWs7CisJY2FzZSBCUklER0VfU045QzExMDoKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMiwgMHg2Mik7CiAJCWJyZWFrOworCWNhc2UgQlJJREdFX1NOOUMxMjA6CisJCXJlZ0dwaW9bMV0gPSAweDcwOwkJLyogbm8gYXVkaW8gKi8KKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCByZWdHcGlvLCAyKTsKKwkJYnJlYWs7CiAJfQogCiAJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09NNjgwMikKQEAgLTE4NzQsNiArMTg2Miw4IEBACiAJc2QtPmkyY19hZGRyID0gc245YzF4eFs5XTsKIAogCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSBjdHJsX2Rpc1tzZC0+c2Vuc29yXTsKKwlpZiAoIShzZC0+ZmxhZ3MgJiBGX0lMTFVNKSkKKwkJZ3NwY2FfZGV2LT5jdHJsX2RpcyB8PSAoMSA8PCBJTExVTSk7CiAKIAlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQpAQCAtMjE5NywxNiArMjE4NywyOCBAQAogCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIHNkLT5jdHJsc1tTSEFSUE5FU1NdLnZhbCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldGluZnJhcmVkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGlsbHVtKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlpZiAoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IElORlJBUkVEKSkKKwlpZiAoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IElMTFVNKSkKIAkJcmV0dXJuOwotLypmaXhtZTogZGlmZmVyZW50IHNlcXVlbmNlIGZvciBTdGFyQ2FtIENsaXAgYW5kIFN0YXJDYW0gMzcwaSAqLwotLyogQ2xpcCAqLwotCWkyY193MShnc3BjYV9kZXYsIDB4MDIsCQkJCS8qIGdwaW8gKi8KLQkJc2QtPmN0cmxzW0lORlJBUkVEXS52YWwgPyAweDY2IDogMHg2NCk7CisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTE3MDA6CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MDIsCQkJCS8qIGdwaW8gKi8KKwkJCXNkLT5jdHJsc1tJTExVTV0udmFsID8gMHg2NCA6IDB4NjApOworCQlicmVhazsKKwljYXNlIFNFTlNPUl9NVDlWMTExOgorCQlpZiAoc3RhcmNhbSkKKwkJCXJlZ193MShnc3BjYV9kZXYsIDB4MDIsCisJCQkJc2QtPmN0cmxzW0lMTFVNXS52YWwgPworCQkJCQkJMHg1NSA6IDB4NTQpOwkvKiAzNzBpICovCisJCWVsc2UKKwkJCXJlZ193MShnc3BjYV9kZXYsIDB4MDIsCisJCQkJc2QtPmN0cmxzW0lMTFVNXS52YWwgPworCQkJCQkJMHg2NiA6IDB4NjQpOwkvKiBDbGlwICovCisJCWJyZWFrOworCX0KIH0KIAogc3RhdGljIHZvaWQgc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC0yMzQ0LDcgKzIzNDYsNyBAQAogCS8qIHNlbnNvciBjbG9jayBhbHJlYWR5IGVuYWJsZWQgaW4gc2RfaW5pdCAqLwogCS8qIHJlZ193MShnc3BjYV9kZXYsIDB4ZjEsIDB4MDApOyAqLwogCXJlZzAxID0gc245YzF4eFsxXTsKLQlpZiAoc2QtPmZsYWdzICYgUEROX0lOVikKKwlpZiAoc2QtPmZsYWdzICYgRl9QRE5fSU5WKQogCQlyZWcwMSBePSBTX1BETl9JTlY7CQkvKiBwb3dlciBkb3duIGludmVydGVkICovCiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgcmVnMDEpOwogCkBAIC0yOTA3LDEzICsyOTA5LDExIEBACiAJLmRyaXZlcl9pbmZvID0gKEJSSURHRV8gIyMgYnJpZGdlIDw8IDE2KSBcCiAJCQl8IChTRU5TT1JfICMjIHNlbnNvciA8PCA4KSBcCiAJCQl8IChmbGFncykKLXN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewotI2lmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMiAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDJfTU9EVUxFCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgwNDU4LCAweDcwMjUpLCBCUyhTTjlDMTIwLCBNSTAzNjApfSwKIAl7VVNCX0RFVklDRSgweDA0NTgsIDB4NzAyZSksIEJTKFNOOUMxMjAsIE9WNzY2MCl9LAotI2VuZGlmCi0Je1VTQl9ERVZJQ0UoMHgwNDVlLCAweDAwZjUpLCBCU0YoU045QzEwNSwgT1Y3NjYwLCBQRE5fSU5WKX0sCi0Je1VTQl9ERVZJQ0UoMHgwNDVlLCAweDAwZjcpLCBCU0YoU045QzEwNSwgT1Y3NjYwLCBQRE5fSU5WKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDVlLCAweDAwZjUpLCBCU0YoU045QzEwNSwgT1Y3NjYwLCBGX1BETl9JTlYpfSwKKwl7VVNCX0RFVklDRSgweDA0NWUsIDB4MDBmNyksIEJTRihTTjlDMTA1LCBPVjc2NjAsIEZfUEROX0lOVil9LAogCXtVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI3KSwgQlMoU045QzEwNSwgTUkwMzYwKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMjgpLCBCUyhTTjlDMTA1LCBNSTAzNjApfSwKIAl7VVNCX0RFVklDRSgweDA0NzEsIDB4MDMzMCksIEJTKFNOOUMxMDUsIE1JMDM2MCl9LApAQCAtMjkyNSw3ICsyOTI1LDcgQEAKIC8qCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDdiKSwgQlMoU045QzEwMlAsIE9WNzY2MCl9LCAqLwogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDdjKSwgQlMoU045QzEwMlAsIEhWNzEzMVIpfSwKIC8qCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDdlKSwgQlMoU045QzEwMlAsIE9WNzYzMCl9LCAqLwotCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGMwKSwgQlMoU045QzEwNSwgTUkwMzYwKX0sCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYzApLCBCU0YoU045QzEwNSwgTUkwMzYwLCBGX0lMTFVNKX0sCiAJCQkJCQkvKiBvciBNVDlWMTExICovCiAvKgl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBjMiksIEJTKFNOOUMxMDUsIFAxMDMweEMpfSwgKi8KIC8qCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGM4KSwgQlMoU045QzEwNSwgT002ODAyKX0sICovCkBAIC0yOTM2LDEwICsyOTM2LDggQEAKIC8qCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGZhKSwgQlMoU045QzEwNSwgT1Y3NjQ4KX0sICovCiAvKgl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBmMiksIEJTKFNOOUMxMDUsIE9WNzY2MCl9LCAqLwogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGZiKSwgQlMoU045QzEwNSwgT1Y3NjYwKX0sCi0jaWYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyICYmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMl9NT0RVTEUKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBmYyksIEJTKFNOOUMxMDUsIEhWNzEzMVIpfSwKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBmZSksIEJTKFNOOUMxMDUsIE9WNzYzMCl9LAotI2VuZGlmCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxMDApLCBCUyhTTjlDMTIwLCBNSTAzNjApfSwJLypzbjljMTI4Ki8KIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEwMiksIEJTKFNOOUMxMjAsIFBPMjAzME4pfSwJLyogL0dDMDMwNSovCiAvKgl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEwOCksIEJTKFNOOUMxMjAsIE9NNjgwMil9LCAqLwpAQCAtMjk2MiwxNiArMjk2MCwxNSBAQAogLyoJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxMzIpLCBCUyhTTjlDMTIwLCBPVjc2NzApfSwgKi8KIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEzOCksIEJTKFNOOUMxMjAsIE1PNDAwMCl9LAogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNhKSwgQlMoU045QzEyMCwgT1Y3NjQ4KX0sCi0jaWYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyICYmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMl9NT0RVTEUKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEzYiksIEJTKFNOOUMxMjAsIE9WNzY2MCl9LAotI2VuZGlmCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxM2MpLCBCUyhTTjlDMTIwLCBIVjcxMzFSKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxM2UpLCBCUyhTTjlDMTIwLCBPVjc2MzApfSwKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjE0MiksIEJTKFNOOUMxMjAsIFBPMjAzME4pfSwJLypzbjljMTIwYiovCiAJCQkJCQkvKiBvciBHQzAzMDUgLyBHQzAzMDcgKi8KIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjE0MyksIEJTKFNOOUMxMjAsIFNQODA3MDgpfSwJLypzbjljMTIwYiovCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxNDgpLCBCUyhTTjlDMTIwLCBPTTY4MDIpfSwJLypzbjljMTIwYiovCi0Je1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxNGEpLCBCUyhTTjlDMTIwLCBBRENNMTcwMCl9LAkvKnNuOWMxMjBiKi8KKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjE0YSksIEJTRihTTjlDMTIwLCBBRENNMTcwMCwgRl9JTExVTSl9LAorLyoJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxNGMpLCBCUyhTTjlDMTIwLCBHQzAzMDYpfSwgKi8JLypzbjljMTIwYiovCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKQEAgLTMwMDcsMyArMzAwNCw3IEBACiAKIG1vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKIG1vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKKworbW9kdWxlX3BhcmFtKHN0YXJjYW0sIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHN0YXJjYW0sCisJIlN0YXJDYW0gbW9kZWwuIDA6IENsaXAsIDE6IDM3MGkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTE1MjguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTE1MjguYwppbmRleCBlNjQzMzg2Li43NmMwMDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2ExNTI4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhMTUyOC5jCkBAIC01NTUsNyArNTU1LDcgQEAKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwotc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgwNGZjLCAweDE1MjgpfSwKIAl7fQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKaW5kZXggOGUyMDJiOS4uNDU1NTJjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKQEAgLTEwNTEsNyArMTA1MSw3IEBACiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KLXN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MDQwYSwgMHgwMzAwKSwgLmRyaXZlcl9pbmZvID0gS29kYWtFWjIwMH0sCiAJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwMGEpLCAuZHJpdmVyX2luZm8gPSBDcmVhdGl2ZVBDQ2FtMzAwfSwKIAl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDg5MCksIC5kcml2ZXJfaW5mbyA9IExvZ2l0ZWNoVHJhdmVsZXJ9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYwppbmRleCA2NDI4MzlhLi5mN2VmMjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYwpAQCAtMjE1NSw3ICsyMTU1LDcgQEAKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwotc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgwNDBhLCAweDAwMDIpLCAuZHJpdmVyX2luZm8gPSBLb2Rha0RWQzMyNX0sCiAJe1VTQl9ERVZJQ0UoMHgwNDk3LCAweGMwMDEpLCAuZHJpdmVyX2luZm8gPSBTbWlsZUludGxDYW1lcmF9LAogCXtVU0JfREVWSUNFKDB4MDUwNiwgMHgwMGRmKSwgLmRyaXZlcl9pbmZvID0gVGhyZWVDb21Ib21lQ29ubmVjdExpdGV9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYwppbmRleCBiYzlkZDkwLi5lNWJmODY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYwpAQCAtNzg2LDcgKzc4Niw3IEBACiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KLXN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDFkKSwgLmRyaXZlcl9pbmZvID0gTnh1bHRyYX0sCiAJe1VTQl9ERVZJQ0UoMHgwNzMzLCAweDA0MzApLCAuZHJpdmVyX2luZm8gPSBJbnRlbFBDQ2FtZXJhUHJvfSwKIC8qZml4bWU6IG1heSBiZSBVc2JHcmFiYmVyUFYzMjEgQlJJREdFX1NQQ0E1MDYgU0VOU09SX1NBQTcxMTMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA4LmMKaW5kZXggNzMwNzYzOC4uMzQ4MzE5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA4LmMKQEAgLTE1MDksNyArMTUwOSw3IEBACiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KLXN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MDEzMCwgMHgwMTMwKSwgLmRyaXZlcl9pbmZvID0gSGFtYVVTQlNpZ2h0Y2FtfSwKIAl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDAxOCksIC5kcml2ZXJfaW5mbyA9IENyZWF0aXZlVmlzdGF9LAogCXtVU0JfREVWSUNFKDB4MDczMywgMHgwMTEwKSwgLmRyaXZlcl9pbmZvID0gVmlld1F1ZXN0VlExMTB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1NjEuYwppbmRleCAzYTE2MmM2Li5lODM2ZTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1NjEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1NjEuYwpAQCAtMTA2MSw3ICsxMDYxLDcgQEAKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwotc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwMWEpLCAuZHJpdmVyX2luZm8gPSBSZXYwNzJBfSwKIAl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDAzYiksIC5kcml2ZXJfaW5mbyA9IFJldjAxMkF9LAogCXtVU0JfREVWSUNFKDB4MDQ1OCwgMHg3MDA0KSwgLmRyaXZlcl9pbmZvID0gUmV2MDcyQX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1LmMKaW5kZXggNDA0MDY3Ny4uMmU5YzA2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkwNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MDUuYwpAQCAtMzk2LDcgKzM5Niw3IEBACiB9CiAKIC8qIFRhYmxlIG9mIHN1cHBvcnRlZCBVU0IgZGV2aWNlcyAqLwotc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkxMjApfSwKIAl7fQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MDVjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1Yy5jCmluZGV4IDhiYTE5OTUuLjQ1NzU2M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MDVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkwNWMuYwpAQCAtMjk4LDcgKzI5OCw3IEBACiB9CiAKIC8qIFRhYmxlIG9mIHN1cHBvcnRlZCBVU0IgZGV2aWNlcyAqLwotc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkwNWMpfSwKIAl7VVNCX0RFVklDRSgweDI3NzAsIDB4OTA1MCl9LAogCXtVU0JfREVWSUNFKDB4Mjc3MCwgMHg5MDUxKX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTMweC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkzMHguYwppbmRleCBhNGE5ODgxLi44MjE1ZDVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTMweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MzB4LmMKQEAgLTExNjMsNyArMTE2Myw3IEBACiAjZGVmaW5lIFNUKHNlbnNvciwgdHlwZSkgXAogCS5kcml2ZXJfaW5mbyA9IChTRU5TT1JfICMjIHNlbnNvciA8PCA4KSBcCiAJCQl8ICh0eXBlKQotc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwMzgpLCBTVChNSTAzNjAsIDApfSwKIAl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDAzYyksIFNUKExaMjRCUCwgMCl9LAogCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDNkKSwgU1QoTFoyNEJQLCAwKX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdGswMTQuYwppbmRleCAxMWExOTJiLi44N2JlNTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMKQEAgLTQ5NSw3ICs0OTUsNyBAQAogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCi1zdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRSgweDA1ZTEsIDB4MDg5Myl9LAogCXt9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNjgwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2ODAuYwppbmRleCBiMTk5YWQ0Li5lMmVmNDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2ODAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2ODAuYwpAQCAtMzI3LDcgKzMyNyw3IEBACiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KLXN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MDU1MywgMHgwMjAyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwMDcpfSwKIAl7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKaW5kZXggMjhlYTQxNy4uN2UwNjYxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCkBAIC01NjQsNyArNTY0LDcgQEAKIAogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KLXN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewogCS8qIFF1aWNrQ2FtIEV4cHJlc3MgKi8KIAl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDg0MCksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9TVFY2MDAgfSwKIAkvKiBMRUdPIGNhbSAvIFF1aWNrQ2FtIFdlYiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwppbmRleCBhOWNiY2Q2Li41NDM1NDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwpAQCAtMTE2Miw3ICsxMTYyLDcgQEAKICNkZWZpbmUgQlMoYnJpZGdlLCBzdWJ0eXBlKSBcCiAJLmRyaXZlcl9pbmZvID0gKEJSSURHRV8gIyMgYnJpZGdlIDw8IDgpIFwKIAkJCXwgKHN1YnR5cGUpCi1zdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDAwYiksIEJTKFNQQ0E1MDRDLCAwKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwMTIpLCBCUyhTUENBNTA0QywgMCl9LAogCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDEzKSwgQlMoU1BDQTUwNEMsIDApfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKaW5kZXggOGYwYzMzMS4uYTNlY2NkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKQEAgLTE0MTYsNyArMTQxNiw3IEBACiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KLXN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MTdhMSwgMHgwMTI4KX0sCiAJe30KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYwppbmRleCAzOGMyMmYwLi45MzNlZjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMKQEAgLTM4OCw3ICszODgsNyBAQAogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCi1zdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDkyMCl9LAogCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOTIxKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNTQ1LCAweDgwOGIpfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCmluZGV4IDliMmFlMWIuLjZjYWVkNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYwpAQCAtNDE5Miw3ICs0MTkyLDcgQEAKICNkZWZpbmUgQkYoYnJpZGdlLCBmbGFncykgXAogCS5kcml2ZXJfaW5mbyA9IChCUklER0VfICMjIGJyaWRnZSA8PCA4KSBcCiAJCXwgKGZsYWdzKQotc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwNWIpLCBCRihWQzAzMjMsIEZMX1ZGTElQKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4OTIpLCBCRihWQzAzMjEsIDApfSwKIAl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDg5NiksIEJGKFZDMDMyMSwgMCl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS94aXJsaW5rX2NpdC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS94aXJsaW5rX2NpdC5jCmluZGV4IDViNTAzOWEuLmMwODlhMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EveGlybGlua19jaXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3hpcmxpbmtfY2l0LmMKQEAgLTMyNzAsNyArMzI3MCw3IEBACiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KLXN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRV9WRVIoMHgwNTQ1LCAweDgwODAsIDB4MDAwMSwgMHgwMDAxKSwgLmRyaXZlcl9pbmZvID0gQ0lUX01PREVMMCB9LAogCXsgVVNCX0RFVklDRV9WRVIoMHgwNTQ1LCAweDgwODAsIDB4MDAwMiwgMHgwMDAyKSwgLmRyaXZlcl9pbmZvID0gQ0lUX01PREVMMSB9LAogCXsgVVNCX0RFVklDRV9WRVIoMHgwNTQ1LCAweDgwODAsIDB4MDMwYSwgMHgwMzBhKSwgLmRyaXZlcl9pbmZvID0gQ0lUX01PREVMMiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCmluZGV4IDE0Yjg1ZDQuLjQ3MjM2YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKQEAgLTU3OTMsNyArNTc5Myw3IEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIC8qCQljYXNlIDB4ZGQ6CSAqIGRlbGF5ICovCi0JCQltc2xlZXAoYWN0aW9uLT52YWwgLyA2NCArIDEwKTsKKwkJCW1zbGVlcChhY3Rpb24tPmlkeCk7CiAJCQlicmVhazsKIAkJfQogCQlhY3Rpb24rKzsKQEAgLTU4MzAsNyArNTgzMCw3IEBACiAJCVtTRU5TT1JfR0MwMzA1XSA9CWdjMDMwNV9tYXRyaXgsCiAJCVtTRU5TT1JfSERDUzIwMjBiXSA9CU5VTEwsCiAJCVtTRU5TT1JfSFY3MTMxQl0gPQlOVUxMLAotCQlbU0VOU09SX0hWNzEzMVJdID0JTlVMTCwKKwkJW1NFTlNPUl9IVjcxMzFSXSA9CXBvMjAzMF9tYXRyaXgsCiAJCVtTRU5TT1JfSUNNMTA1QV0gPQlwbzIwMzBfbWF0cml4LAogCQlbU0VOU09SX01DNTAxQ0JdID0JTlVMTCwKIAkJW1NFTlNPUl9NVDlWMTExXzFdID0JZ2MwMzA1X21hdHJpeCwKQEAgLTU5MzYsNiArNTkzNiw3IEBACiAJY2FzZSBTRU5TT1JfQURDTTI3MDA6CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgogCWNhc2UgU0VOU09SX0hWNzEzMUI6CisJY2FzZSBTRU5TT1JfSFY3MTMxUjoKIAljYXNlIFNFTlNPUl9PVjc2MjA6CiAJY2FzZSBTRU5TT1JfUEFTMjAyQjoKIAljYXNlIFNFTlNPUl9QTzIwMzA6CkBAIC02MTA4LDExICs2MTA5LDEzIEBACiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMiwgMHgwMDNiKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDAwMzgpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgogCWNhc2UgU0VOU09SX1BBUzIwMkI6CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMywgMHgwMDNiKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDBjLCAweDAwM2EpOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MGIsIDB4MDAzOSk7Ci0JCXJlZ193KGdzcGNhX2RldiwgMHgwYiwgMHgwMDM4KTsKKwkJaWYgKHNlbnNvciA9PSBTRU5TT1JfUEFTMjAyQikKKwkJCXJlZ193KGdzcGNhX2RldiwgMHgwYiwgMHgwMDM4KTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtNjcwNCwxMCArNjcwNywxMyBAQAogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDIsIDB4MDAzYik7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgwMDM4KTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfSFY3MTMxUjoKIAljYXNlIFNFTlNPUl9QQVMyMDJCOgogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDMsIDB4MDAzYik7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwYywgMHgwMDNhKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDBiLCAweDAwMzkpOworCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfSFY3MTMxUikKKwkJCXJlZ193KGdzcGNhX2RldiwgMHg1MCwgWkMzWFhfUjExRF9HTE9CQUxHQUlOKTsKIAkJYnJlYWs7CiAJfQogCkBAIC02NzIwLDYgKzY3MjYsNyBAQAogCQlicmVhazsKIAljYXNlIFNFTlNPUl9QQVMyMDJCOgogCWNhc2UgU0VOU09SX0dDMDMwNToKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgogCWNhc2UgU0VOU09SX1RBUzUxMzBDOgogCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwOCk7CiAJCS8qIGZhbGwgdGhydSAqLwpAQCAtNjc2MCw2ICs2NzY3LDEyIEBACiAJCQkJCQkvKiBtcy13aW4gKyAqLwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4NDAsIDB4MDExNyk7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX0hWNzEzMVI6CisJCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MjUsIDB4MDQsIDB4MDApOwkvKiBleHBvc3VyZSAqLworCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDI2LCAweDkzLCAweDAwKTsKKwkJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgyNywgMHhlMCwgMHgwMCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTik7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX0dDMDMwNToKIAljYXNlIFNFTlNPUl9UQVM1MTMwQzoKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDA5LCAweDAxYWQpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLwpAQCAtNjgwOCw5ICs2ODIxLDE3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JaWYgKGRhdGFbMF0gPT0gMHhmZiAmJiBkYXRhWzFdID09IDB4ZDgpIHsJLyogc3RhcnQgb2YgZnJhbWUgKi8KKwkvKiBjaGVjayB0aGUgSlBFRyBlbmQgb2YgZnJhbWUgKi8KKwlpZiAobGVuID49IDMKKwkgJiYgZGF0YVtsZW4gLSAzXSA9PSAweGZmICYmIGRhdGFbbGVuIC0gMl0gPT0gMHhkOSkgeworLypmaXhtZTogd2hhdCBkb2VzIHRoZSBsYXN0IGJ5dGUgbWVhbj8qLwogCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwKLQkJCQkJTlVMTCwgMCk7CisJCQkJCWRhdGEsIGxlbiAtIDEpOworCQlyZXR1cm47CisJfQorCisJLyogY2hlY2sgdGhlIEpQRUcgc3RhcnQgb2YgYSBmcmFtZSAqLworCWlmIChkYXRhWzBdID09IDB4ZmYgJiYgZGF0YVsxXSA9PSAweGQ4KSB7CiAJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgaW4gdGhlIG5ldyBmcmFtZSAqLwogCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCiAJCQlzZC0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKQEAgLTY5MDksNyArNjkzMCw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MDQxZSwgMHgwNDFlKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwMTcpfSwKIAl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDAxYyksIC5kcml2ZXJfaW5mbyA9IFNFTlNPUl9QQVMxMDZ9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvTWFrZWZpbGUKaW5kZXggZTAyMzBmYy4uM2JhYTlmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL01ha2VmaWxlCkBAIC0xLDYgKzEsNCBAQAotaGRwdnItb2Jqcwk6PSBoZHB2ci1jb250cm9sLm8gaGRwdnItY29yZS5vIGhkcHZyLXZpZGVvLm8KLQotaGRwdnItJChDT05GSUdfSTJDKSArPSBoZHB2ci1pMmMubworaGRwdnItb2Jqcwk6PSBoZHB2ci1jb250cm9sLm8gaGRwdnItY29yZS5vIGhkcHZyLXZpZGVvLm8gaGRwdnItaTJjLm8KIAogb2JqLSQoQ09ORklHX1ZJREVPX0hEUFZSKSArPSBoZHB2ci5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKaW5kZXggZjdkMWVlNS4uYTI3ZDkzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKQEAgLTI4Myw2ICsyODMsNyBAQAogCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOwogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzaXplX3QgYnVmZmVyX3NpemU7CiAJaW50IGk7CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CkBAIC0zNzgsMjUgKzM3OSwzNSBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotI2lmZGVmIENPTkZJR19JMkMKLQkvKiB1bnRpbCBpMmMgaXMgd29ya2luZyBwcm9wZXJseSAqLwotCXJldHZhbCA9IDA7IC8qIGhkcHZyX3JlZ2lzdGVyX2kyY19hZGFwdGVyKGRldik7ICovCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCXJldHZhbCA9IGhkcHZyX3JlZ2lzdGVyX2kyY19hZGFwdGVyKGRldik7CiAJaWYgKHJldHZhbCA8IDApIHsKLQkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJyZWdpc3RlcmluZyBpMmMgYWRhcHRlciBmYWlsZWRcbiIpOworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImkyYyBhZGFwdGVyIHJlZ2lzdGVyIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JLyogdW50aWwgaTJjIGlzIHdvcmtpbmcgcHJvcGVybHkgKi8KLQlyZXR2YWwgPSAwOyAvKiBoZHB2cl9yZWdpc3Rlcl9pMmNfaXIoZGV2KTsgKi8KLQlpZiAocmV0dmFsIDwgMCkKLQkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJyZWdpc3RlcmluZyBpMmMgSVIgZGV2aWNlcyBmYWlsZWRcbiIpOwotI2VuZGlmIC8qIENPTkZJR19JMkMgKi8KKwljbGllbnQgPSBoZHB2cl9yZWdpc3Rlcl9pcl9yeF9pMmMoZGV2KTsKKwlpZiAoIWNsaWVudCkgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImkyYyBJUiBSWCBkZXZpY2UgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byByZWdfZmFpbDsKKwl9CisKKwljbGllbnQgPSBoZHB2cl9yZWdpc3Rlcl9pcl90eF9pMmMoZGV2KTsKKwlpZiAoIWNsaWVudCkgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImkyYyBJUiBUWCBkZXZpY2UgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byByZWdfZmFpbDsKKwl9CisjZW5kaWYKIAogCS8qIGxldCB0aGUgdXNlciBrbm93IHdoYXQgbm9kZSB0aGlzIGRldmljZSBpcyBub3cgYXR0YWNoZWQgdG8gKi8KIAl2NGwyX2luZm8oJmRldi0+djRsMl9kZXYsICJkZXZpY2Ugbm93IGF0dGFjaGVkIHRvICVzXG4iLAogCQkgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoZGV2LT52aWRlb19kZXYpKTsKIAlyZXR1cm4gMDsKIAorcmVnX2ZhaWw6CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCWkyY19kZWxfYWRhcHRlcigmZGV2LT5pMmNfYWRhcHRlcik7CisjZW5kaWYKIGVycm9yOgogCWlmIChkZXYpIHsKIAkJLyogRGVzdHJveSBzaW5nbGUgdGhyZWFkICovCkBAIC00MjYsNiArNDM3LDkgQEAKIAltdXRleF9sb2NrKCZkZXYtPmlvX211dGV4KTsKIAloZHB2cl9jYW5jZWxfcXVldWUoZGV2KTsKIAltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlpMmNfZGVsX2FkYXB0ZXIoJmRldi0+aTJjX2FkYXB0ZXIpOworI2VuZGlmCiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52aWRlb19kZXYpOwogCWF0b21pY19kZWMoJmRldl9ucik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1pMmMuYwppbmRleCAyNDk2NmFhLi5lNTNmYTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMKQEAgLTEzLDYgKzEzLDggQEAKICAqCiAgKi8KIAorI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIApAQCAtMjgsMTA2ICszMCw4NiBAQAogI2RlZmluZSBaOEYwODExX0lSX1RYX0kyQ19BRERSCTB4NzAKICNkZWZpbmUgWjhGMDgxMV9JUl9SWF9JMkNfQUREUgkweDcxCiAKLXN0YXRpYyBjb25zdCB1OCBpcl9pMmNfYWRkcnNbXSA9IHsKLQlaOEYwODExX0lSX1RYX0kyQ19BRERSLAotCVo4RjA4MTFfSVJfUlhfSTJDX0FERFIsCi19OwogCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGlyX2RldmljZW5hbWVzW10gPSB7Ci0JImlyX3R4X3o4ZjA4MTFfaGRwdnIiLAotCSJpcl9yeF96OGYwODExX2hkcHZyIiwKLX07Ci0KLXN0YXRpYyBpbnQgaGRwdnJfbmV3X2kyY19pcihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwKLQkJCSAgICBjb25zdCBjaGFyICp0eXBlLCB1OCBhZGRyKQorc3RydWN0IGkyY19jbGllbnQgKmhkcHZyX3JlZ2lzdGVyX2lyX3R4X2kyYyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CiAJc3RydWN0IElSX2kyY19pbml0X2RhdGEgKmluaXRfZGF0YSA9ICZkZXYtPmlyX2kyY19pbml0X2RhdGE7Ci0JdW5zaWduZWQgc2hvcnQgYWRkcl9saXN0WzJdID0geyBhZGRyLCBJMkNfQ0xJRU5UX0VORCB9OworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBoZHB2cl9pcl90eF9pMmNfYm9hcmRfaW5mbyA9IHsKKwkJSTJDX0JPQVJEX0lORk8oImlyX3R4X3o4ZjA4MTFfaGRwdnIiLCBaOEYwODExX0lSX1RYX0kyQ19BRERSKSwKKwl9OwogCi0JbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7Ci0Jc3RybGNweShpbmZvLnR5cGUsIHR5cGUsIEkyQ19OQU1FX1NJWkUpOworCWluaXRfZGF0YS0+bmFtZSA9ICJIRC1QVlIiOworCWhkcHZyX2lyX3R4X2kyY19ib2FyZF9pbmZvLnBsYXRmb3JtX2RhdGEgPSBpbml0X2RhdGE7CisKKwlyZXR1cm4gaTJjX25ld19kZXZpY2UoJmRldi0+aTJjX2FkYXB0ZXIsICZoZHB2cl9pcl90eF9pMmNfYm9hcmRfaW5mbyk7Cit9CisKK3N0cnVjdCBpMmNfY2xpZW50ICpoZHB2cl9yZWdpc3Rlcl9pcl9yeF9pMmMoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBJUl9pMmNfaW5pdF9kYXRhICppbml0X2RhdGEgPSAmZGV2LT5pcl9pMmNfaW5pdF9kYXRhOworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBoZHB2cl9pcl9yeF9pMmNfYm9hcmRfaW5mbyA9IHsKKwkJSTJDX0JPQVJEX0lORk8oImlyX3J4X3o4ZjA4MTFfaGRwdnIiLCBaOEYwODExX0lSX1JYX0kyQ19BRERSKSwKKwl9OwogCiAJLyogT3VyIGRlZmF1bHQgaW5mb3JtYXRpb24gZm9yIGlyLWtiZC1pMmMuYyB0byB1c2UgKi8KLQlzd2l0Y2ggKGFkZHIpIHsKLQljYXNlIFo4RjA4MTFfSVJfUlhfSTJDX0FERFI6Ci0JCWluaXRfZGF0YS0+aXJfY29kZXMgPSBSQ19NQVBfSEFVUFBBVUdFX05FVzsKLQkJaW5pdF9kYXRhLT5pbnRlcm5hbF9nZXRfa2V5X2Z1bmMgPSBJUl9LQkRfR0VUX0tFWV9IQVVQX1hWUjsKLQkJaW5pdF9kYXRhLT50eXBlID0gUkNfVFlQRV9SQzU7Ci0JCWluaXRfZGF0YS0+bmFtZSA9ICJIRCBQVlIiOwotCQlpbmZvLnBsYXRmb3JtX2RhdGEgPSBpbml0X2RhdGE7Ci0JCWJyZWFrOwotCX0KKwlpbml0X2RhdGEtPmlyX2NvZGVzID0gUkNfTUFQX0hBVVBQQVVHRV9ORVc7CisJaW5pdF9kYXRhLT5pbnRlcm5hbF9nZXRfa2V5X2Z1bmMgPSBJUl9LQkRfR0VUX0tFWV9IQVVQX1hWUjsKKwlpbml0X2RhdGEtPnR5cGUgPSBSQ19UWVBFX1JDNTsKKwlpbml0X2RhdGEtPm5hbWUgPSAiSEQtUFZSIjsKKwloZHB2cl9pcl9yeF9pMmNfYm9hcmRfaW5mby5wbGF0Zm9ybV9kYXRhID0gaW5pdF9kYXRhOwogCi0JcmV0dXJuIGkyY19uZXdfcHJvYmVkX2RldmljZShhZGFwLCAmaW5mbywgYWRkcl9saXN0LCBOVUxMKSA9PSBOVUxMID8KLQkgICAgICAgLTEgOiAwOworCXJldHVybiBpMmNfbmV3X2RldmljZSgmZGV2LT5pMmNfYWRhcHRlciwgJmhkcHZyX2lyX3J4X2kyY19ib2FyZF9pbmZvKTsKIH0KIAotaW50IGhkcHZyX3JlZ2lzdGVyX2kyY19pcihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCi17Ci0JaW50IGk7Ci0JaW50IHJldCA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcl9pMmNfYWRkcnMpOyBpKyspCi0JCXJldCArPSBoZHB2cl9uZXdfaTJjX2lyKGRldiwgZGV2LT5pMmNfYWRhcHRlciwKLQkJCQkJaXJfZGV2aWNlbmFtZXNbaV0sIGlyX2kyY19hZGRyc1tpXSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGhkcHZyX2kyY19yZWFkKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciBhZGRyLAotCQkJICBjaGFyICpkYXRhLCBpbnQgbGVuKQorc3RhdGljIGludCBoZHB2cl9pMmNfcmVhZChzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIGludCBidXMsCisJCQkgIHVuc2lnbmVkIGNoYXIgYWRkciwgY2hhciAqZGF0YSwgaW50IGxlbikKIHsKIAlpbnQgcmV0OwotCWNoYXIgKmJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAobGVuID4gc2l6ZW9mKGRldi0+aTJjX2J1ZikpCisJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKIAkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZShkZXYtPnVkZXYsIDApLAogCQkJICAgICAgUkVRVFlQRV9JMkNfUkVBRCwgQ1RSTF9SRUFEX1JFUVVFU1QsCi0JCQkgICAgICAweDEwMHxhZGRyLCAwLCBidWYsIGxlbiwgMTAwMCk7CisJCQkgICAgICAoYnVzIDw8IDgpIHwgYWRkciwgMCwgJmRldi0+aTJjX2J1ZiwgbGVuLCAxMDAwKTsKIAogCWlmIChyZXQgPT0gbGVuKSB7Ci0JCW1lbWNweShkYXRhLCBidWYsIGxlbik7CisJCW1lbWNweShkYXRhLCAmZGV2LT5pMmNfYnVmLCBsZW4pOwogCQlyZXQgPSAwOwogCX0gZWxzZSBpZiAocmV0ID49IDApCiAJCXJldCA9IC1FSU87CiAKLQlrZnJlZShidWYpOwotCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBoZHB2cl9pMmNfd3JpdGUoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIGFkZHIsCi0JCQkgICBjaGFyICpkYXRhLCBpbnQgbGVuKQorc3RhdGljIGludCBoZHB2cl9pMmNfd3JpdGUoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCBpbnQgYnVzLAorCQkJICAgdW5zaWduZWQgY2hhciBhZGRyLCBjaGFyICpkYXRhLCBpbnQgbGVuKQogewogCWludCByZXQ7Ci0JY2hhciAqYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCWlmICghYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbWNweShidWYsIGRhdGEsIGxlbik7CisJaWYgKGxlbiA+IHNpemVvZihkZXYtPmkyY19idWYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbWNweSgmZGV2LT5pMmNfYnVmLCBkYXRhLCBsZW4pOwogCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCiAJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKIAkJCSAgICAgIFJFUVRZUEVfSTJDX1dSSVRFLCBDVFJMX1dSSVRFX1JFUVVFU1QsCi0JCQkgICAgICAweDEwMHxhZGRyLCAwLCBidWYsIGxlbiwgMTAwMCk7CisJCQkgICAgICAoYnVzIDw8IDgpIHwgYWRkciwgMCwgJmRldi0+aTJjX2J1ZiwgbGVuLCAxMDAwKTsKIAogCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycm9yOworCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKIAkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZShkZXYtPnVkZXYsIDApLAogCQkJICAgICAgUkVRVFlQRV9JMkNfV1JJVEVfU1RBVFQsIENUUkxfUkVBRF9SRVFVRVNULAotCQkJICAgICAgMCwgMCwgYnVmLCAyLCAxMDAwKTsKKwkJCSAgICAgIDAsIDAsICZkZXYtPmkyY19idWYsIDIsIDEwMDApOwogCi0JaWYgKHJldCA9PSAyKQorCWlmICgocmV0ID09IDIpICYmIChkZXYtPmkyY19idWZbMV0gPT0gKGxlbiAtIDEpKSkKIAkJcmV0ID0gMDsKIAllbHNlIGlmIChyZXQgPj0gMCkKIAkJcmV0ID0gLUVJTzsKIAotZXJyb3I6Ci0Ja2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNDYsMTAgKzEyOCwxMCBAQAogCQlhZGRyID0gbXNnc1tpXS5hZGRyIDw8IDE7CiAKIAkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkKLQkJCXJldHZhbCA9IGhkcHZyX2kyY19yZWFkKGRldiwgYWRkciwgbXNnc1tpXS5idWYsCisJCQlyZXR2YWwgPSBoZHB2cl9pMmNfcmVhZChkZXYsIDEsIGFkZHIsIG1zZ3NbaV0uYnVmLAogCQkJCQkJbXNnc1tpXS5sZW4pOwogCQllbHNlCi0JCQlyZXR2YWwgPSBoZHB2cl9pMmNfd3JpdGUoZGV2LCBhZGRyLCBtc2dzW2ldLmJ1ZiwKKwkJCXJldHZhbCA9IGhkcHZyX2kyY193cml0ZShkZXYsIDEsIGFkZHIsIG1zZ3NbaV0uYnVmLAogCQkJCQkJIG1zZ3NbaV0ubGVuKTsKIAl9CiAKQEAgLTE2OCwzMCArMTUwLDQ3IEBACiAJLmZ1bmN0aW9uYWxpdHkgPSBoZHB2cl9mdW5jdGlvbmFsaXR5LAogfTsKIAorc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBoZHB2cl9pMmNfYWRhcHRlcl90ZW1wbGF0ZSA9IHsKKwkubmFtZSAgID0gIkhhdXBwYWdlIEhEIFBWUiBJMkMiLAorCS5vd25lciAgPSBUSElTX01PRFVMRSwKKwkuYWxnbyAgID0gJmhkcHZyX2FsZ28sCit9OworCitzdGF0aWMgaW50IGhkcHZyX2FjdGl2YXRlX2lyKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3sKKwljaGFyIGJ1ZmZlcls4XTsKKworCW11dGV4X2xvY2soJmRldi0+aTJjX211dGV4KTsKKworCWhkcHZyX2kyY19yZWFkKGRldiwgMCwgMHg1NCwgYnVmZmVyLCAxKTsKKworCWJ1ZmZlclswXSA9IDA7CisJYnVmZmVyWzFdID0gMHg4OworCWhkcHZyX2kyY193cml0ZShkZXYsIDEsIDB4NTQsIGJ1ZmZlciwgMik7CisKKwlidWZmZXJbMV0gPSAweDE4OworCWhkcHZyX2kyY193cml0ZShkZXYsIDEsIDB4NTQsIGJ1ZmZlciwgMik7CisKKwltdXRleF91bmxvY2soJmRldi0+aTJjX211dGV4KTsKKworCXJldHVybiAwOworfQorCiBpbnQgaGRwdnJfcmVnaXN0ZXJfaTJjX2FkYXB0ZXIoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXA7CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CiAKLQlpMmNfYWRhcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfYWRhcHRlciksIEdGUF9LRVJORUwpOwotCWlmIChpMmNfYWRhcCA9PSBOVUxMKQotCQlnb3RvIGVycm9yOworCWhkcHZyX2FjdGl2YXRlX2lyKGRldik7CiAKLQlzdHJsY3B5KGkyY19hZGFwLT5uYW1lLCAiSGF1cHBhdWdlIEhEIFBWUiBJMkMiLAotCQlzaXplb2YoaTJjX2FkYXAtPm5hbWUpKTsKLQlpMmNfYWRhcC0+YWxnbyAgPSAmaGRwdnJfYWxnbzsKLQlpMmNfYWRhcC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQlpMmNfYWRhcC0+ZGV2LnBhcmVudCA9ICZkZXYtPnVkZXYtPmRldjsKKwltZW1jcHkoJmRldi0+aTJjX2FkYXB0ZXIsICZoZHB2cl9pMmNfYWRhcHRlcl90ZW1wbGF0ZSwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBpMmNfYWRhcHRlcikpOworCWRldi0+aTJjX2FkYXB0ZXIuZGV2LnBhcmVudCA9ICZkZXYtPnVkZXYtPmRldjsKIAotCWkyY19zZXRfYWRhcGRhdGEoaTJjX2FkYXAsIGRldik7CisJaTJjX3NldF9hZGFwZGF0YSgmZGV2LT5pMmNfYWRhcHRlciwgZGV2KTsKIAotCXJldHZhbCA9IGkyY19hZGRfYWRhcHRlcihpMmNfYWRhcCk7CisJcmV0dmFsID0gaTJjX2FkZF9hZGFwdGVyKCZkZXYtPmkyY19hZGFwdGVyKTsKIAotCWlmICghcmV0dmFsKQotCQlkZXYtPmkyY19hZGFwdGVyID0gaTJjX2FkYXA7Ci0JZWxzZQotCQlrZnJlZShpMmNfYWRhcCk7Ci0KLWVycm9yOgogCXJldHVybiByZXR2YWw7CiB9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci12aWRlby5jCmluZGV4IGQzOGZlMTAuLjUxNGFlYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLXZpZGVvLmMKQEAgLTEyMjAsMTIgKzEyMjAsOSBAQAogCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOwogCiAJLyogZGVyZWdpc3RlciBJMkMgYWRhcHRlciAqLwotI2lmZGVmIENPTkZJR19JMkMKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IChDT05GSUdfSTJDX01PRFVMRSkKIAltdXRleF9sb2NrKCZkZXYtPmkyY19tdXRleCk7Ci0JaWYgKGRldi0+aTJjX2FkYXB0ZXIpCi0JCWkyY19kZWxfYWRhcHRlcihkZXYtPmkyY19hZGFwdGVyKTsKLQlrZnJlZShkZXYtPmkyY19hZGFwdGVyKTsKLQlkZXYtPmkyY19hZGFwdGVyID0gTlVMTDsKKwlpMmNfZGVsX2FkYXB0ZXIoJmRldi0+aTJjX2FkYXB0ZXIpOwogCW11dGV4X3VubG9jaygmZGV2LT5pMmNfbXV0ZXgpOwogI2VuZGlmIC8qIENPTkZJR19JMkMgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oCmluZGV4IDM3ZjFlNGMuLjA3MmYyM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAlLRVJORUxfVkVSU0lPTihIRFBWUl9NQUpPUl9WRVJTSU9OLCBIRFBWUl9NSU5PUl9WRVJTSU9OLCBIRFBWUl9SRUxFQVNFKQogCiAjZGVmaW5lIEhEUFZSX01BWCA4CisjZGVmaW5lIEhEUFZSX0kyQ19NQVhfU0laRSAxMjgKIAogLyogRGVmaW5lIHRoZXNlIHZhbHVlcyB0byBtYXRjaCB5b3VyIGRldmljZXMgKi8KICNkZWZpbmUgSERfUFZSX1ZFTkRPUl9JRAkweDIwNDAKQEAgLTEwNiw5ICsxMDcsMTEgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29ya2VyOwogCiAJLyogSTJDIGFkYXB0ZXIgKi8KLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIJKmkyY19hZGFwdGVyOworCXN0cnVjdCBpMmNfYWRhcHRlcglpMmNfYWRhcHRlcjsKIAkvKiBJMkMgbG9jayAqLwogCXN0cnVjdCBtdXRleAkJaTJjX211dGV4OworCS8qIEkyQyBtZXNzYWdlIGJ1ZmZlciBzcGFjZSAqLworCWNoYXIJCQlpMmNfYnVmW0hEUFZSX0kyQ19NQVhfU0laRV07CiAKIAkvKiBGb3IgcGFzc2luZyBkYXRhIHRvIGlyLWtiZC1pMmMgKi8KIAlzdHJ1Y3QgSVJfaTJjX2luaXRfZGF0YQlpcl9pMmNfaW5pdF9kYXRhOwpAQCAtMzEwLDcgKzMxMyw4IEBACiAvKiBpMmMgYWRhcHRlciByZWdpc3RyYXRpb24gKi8KIGludCBoZHB2cl9yZWdpc3Rlcl9pMmNfYWRhcHRlcihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOwogCi1pbnQgaGRwdnJfcmVnaXN0ZXJfaTJjX2lyKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CitzdHJ1Y3QgaTJjX2NsaWVudCAqaGRwdnJfcmVnaXN0ZXJfaXJfcnhfaTJjKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CitzdHJ1Y3QgaTJjX2NsaWVudCAqaGRwdnJfcmVnaXN0ZXJfaXJfdHhfaTJjKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIGJ1ZmZlciBtYW5hZ2VtZW50ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCmluZGV4IGM4N2I2YmMuLmEyMjFhZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCkBAIC0xMjgsNiArMTI4LDE5IEBACiAKIHN0YXRpYyBpbnQgZ2V0X2tleV9oYXVwX3h2cihzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQogeworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBidWZbMV0gPSB7IDAgfTsKKworCS8qCisJICogVGhpcyBpcyB0aGUgc2FtZSBhcHBhcmVudCAiYXJlIHlvdSByZWFkeT8iIHBvbGwgY29tbWFuZCBvYnNlcnZlZAorCSAqIHdhdGNoaW5nIFdpbmRvd3MgZHJpdmVyIHRyYWZmaWMgYW5kIGltcGxlbWVudGVkIGluIGxpcmNfemlsb2cuIFdpdGgKKwkgKiB0aGlzIGFkZGVkLCB3ZSBnZXQgZmFyIHNhbmVyIHJlbW90ZSBiZWhhdmlvciB3aXRoIHo4IGNoaXBzIG9uIHVzYgorCSAqIGNvbm5lY3RlZCBkZXZpY2VzLCBldmVuIHdpdGggdGhlIGRlZmF1bHQgcG9sbGluZyBpbnRlcnZhbCBvZiAxMDBtcy4KKwkgKi8KKwlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoaXItPmMsIGJ1ZiwgMSk7CisJaWYgKHJldCAhPSAxKQorCQlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogLUVJTlZBTDsKKwogCXJldHVybiBnZXRfa2V5X2hhdXBfY29tbW9uIChpciwgaXJfa2V5LCBpcl9yYXcsIDYsIDMpOwogfQogCkBAIC0yNDQsMTUgKzI1NywxNyBAQAogCXN0YXRpYyB1MzIgaXJfa2V5LCBpcl9yYXc7CiAJaW50IHJjOwogCi0JZHByaW50aygyLCJpcl9wb2xsX2tleVxuIik7CisJZHByaW50aygzLCAiJXNcbiIsIF9fZnVuY19fKTsKIAlyYyA9IGlyLT5nZXRfa2V5KGlyLCAmaXJfa2V5LCAmaXJfcmF3KTsKIAlpZiAocmMgPCAwKSB7CiAJCWRwcmludGsoMiwiZXJyb3JcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKHJjKQorCWlmIChyYykgeworCQlkcHJpbnRrKDEsICIlczoga2V5Y29kZSA9IDB4JTA0eFxuIiwgX19mdW5jX18sIGlyX2tleSk7CiAJCXJjX2tleWRvd24oaXItPnJjLCBpcl9rZXksIDApOworCX0KIH0KIAogc3RhdGljIHZvaWQgaXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0zMjEsNiArMzM2LDEyIEBACiAJCXJjX3R5cGUgICAgID0gUkNfVFlQRV9PVEhFUjsKIAkJaXJfY29kZXMgICAgPSBSQ19NQVBfQVZFUk1FRElBX0NBUkRCVVM7CiAJCWJyZWFrOworCWNhc2UgMHg3MToKKwkJbmFtZSAgICAgICAgPSAiSGF1cHBhdWdlL1ppbG9nIFo4IjsKKwkJaXItPmdldF9rZXkgPSBnZXRfa2V5X2hhdXBfeHZyOworCQlyY190eXBlICAgICA9IFJDX1RZUEVfUkM1OworCQlpcl9jb2RlcyAgICA9IGhhdXBwYXVnZSA/IFJDX01BUF9IQVVQUEFVR0VfTkVXIDogUkNfTUFQX1JDNV9UVjsKKwkJYnJlYWs7CiAJfQogCiAJLyogTGV0IHRoZSBjYWxsZXIgb3ZlcnJpZGUgc2V0dGluZ3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKaW5kZXggZTEwM2I4Zi4uOWZiODZhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKQEAgLTMwMCwxMCArMzAwLDE1IEBACiAJCQkJYWRhcCwgdHlwZSwgMCwgSTJDX0FERFJTKGh3X2FkZHJzW2lkeF0pKTsKIAl9IGVsc2UgaWYgKGh3ID09IElWVFZfSFdfQ1gyNTg0MCkgewogCQlzdHJ1Y3QgY3gyNTg0MF9wbGF0Zm9ybV9kYXRhIHBkYXRhOworCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gY3gyNTg0MF9pbmZvID0geworCQkJLnR5cGUgPSAiY3gyNTg0MCIsCisJCQkuYWRkciA9IGh3X2FkZHJzW2lkeF0sCisJCQkucGxhdGZvcm1fZGF0YSA9ICZwZGF0YSwKKwkJfTsKIAogCQlwZGF0YS5wdnIxNTBfd29ya2Fyb3VuZCA9IGl0di0+cHZyMTUwX3dvcmthcm91bmQ7Ci0JCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldl9jZmcoJml0di0+djRsMl9kZXYsCi0JCQkJYWRhcCwgdHlwZSwgMCwgJnBkYXRhLCBod19hZGRyc1tpZHhdLCBOVUxMKTsKKwkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2X2JvYXJkKCZpdHYtPnY0bDJfZGV2LCBhZGFwLAorCQkJCSZjeDI1ODQwX2luZm8sIE5VTEwpOwogCX0gZWxzZSB7CiAJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmaXR2LT52NGwyX2RldiwKIAkJCQlhZGFwLCB0eXBlLCBod19hZGRyc1tpZHhdLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAxMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDExLmMKaW5kZXggMjA5ZmY5Ny4uNDkwNGQyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDExLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDExLmMKQEAgLTEyLDE3ICsxMiw0MSBAQAogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+Ci0jaW5jbHVkZSAibXQ5djAxMS5oIgorI2luY2x1ZGUgPG1lZGlhL210OXYwMTEuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNaWNyb24gbXQ5djAxMSBzZW5zb3IgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTIpIik7CiAKKyNkZWZpbmUgUjAwX01UOVYwMTFfQ0hJUF9WRVJTSU9OCTB4MDAKKyNkZWZpbmUgUjAxX01UOVYwMTFfUk9XU1RBUlQJCTB4MDEKKyNkZWZpbmUgUjAyX01UOVYwMTFfQ09MU1RBUlQJCTB4MDIKKyNkZWZpbmUgUjAzX01UOVYwMTFfSEVJR0hUCQkweDAzCisjZGVmaW5lIFIwNF9NVDlWMDExX1dJRFRICQkweDA0CisjZGVmaW5lIFIwNV9NVDlWMDExX0hCTEFOSwkJMHgwNQorI2RlZmluZSBSMDZfTVQ5VjAxMV9WQkxBTksJCTB4MDYKKyNkZWZpbmUgUjA3X01UOVYwMTFfT1VUX0NUUkwJCTB4MDcKKyNkZWZpbmUgUjA5X01UOVYwMTFfU0hVVFRFUl9XSURUSAkweDA5CisjZGVmaW5lIFIwQV9NVDlWMDExX0NMS19TUEVFRAkJMHgwYQorI2RlZmluZSBSMEJfTVQ5VjAxMV9SRVNUQVJUCQkweDBiCisjZGVmaW5lIFIwQ19NVDlWMDExX1NIVVRURVJfREVMQVkJMHgwYworI2RlZmluZSBSMERfTVQ5VjAxMV9SRVNFVAkJMHgwZAorI2RlZmluZSBSMUVfTVQ5VjAxMV9ESUdJVEFMX1pPT00JMHgxZQorI2RlZmluZSBSMjBfTVQ5VjAxMV9SRUFEX01PREUJCTB4MjAKKyNkZWZpbmUgUjJCX01UOVYwMTFfR1JFRU5fMV9HQUlOCTB4MmIKKyNkZWZpbmUgUjJDX01UOVYwMTFfQkxVRV9HQUlOCQkweDJjCisjZGVmaW5lIFIyRF9NVDlWMDExX1JFRF9HQUlOCQkweDJkCisjZGVmaW5lIFIyRV9NVDlWMDExX0dSRUVOXzJfR0FJTgkweDJlCisjZGVmaW5lIFIzNV9NVDlWMDExX0dMT0JBTF9HQUlOCQkweDM1CisjZGVmaW5lIFJGMV9NVDlWMDExX0NISVBfRU5BQkxFCQkweGYxCisKKyNkZWZpbmUgTVQ5VjAxMV9WRVJTSU9OCQkJMHg4MjMyCisjZGVmaW5lIE1UOVYwMTFfUkVWX0JfVkVSU0lPTgkJMHg4MjQzCisKIC8qIHN1cHBvcnRlZCBjb250cm9scyAqLwogc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBtdDl2MDExX3FjdHJsW10gPSB7CiAJewpAQCAtNDY5LDIzICs0OTMsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG10OXYwMTFfc19jb25maWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGR1bWIsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IG10OXYwMTEgKmNvcmUgPSB0b19tdDl2MDExKHNkKTsKLQl1bnNpZ25lZCAqeHRhbCA9IGRhdGE7Ci0KLQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzX2NvbmZpZyBjYWxsZWRcbiIpOwotCi0JaWYgKHh0YWwpIHsKLQkJY29yZS0+eHRhbCA9ICp4dGFsOwotCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJ4dGFsIHNldCB0byAlZC4lMDNkIE1IelxuIiwKLQkJCSAqeHRhbCAvIDEwMDAwMDAsICgqeHRhbCAvIDEwMDApICUgMTAwMCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKIHN0YXRpYyBpbnQgbXQ5djAxMV9nX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKQEAgLTUzNiw3ICs1NDMsNiBAQAogCS5nX2N0cmwgPSBtdDl2MDExX2dfY3RybCwKIAkuc19jdHJsID0gbXQ5djAxMV9zX2N0cmwsCiAJLnJlc2V0ID0gbXQ5djAxMV9yZXNldCwKLQkuc19jb25maWcgPSBtdDl2MDExX3NfY29uZmlnLAogCS5nX2NoaXBfaWRlbnQgPSBtdDl2MDExX2dfY2hpcF9pZGVudCwKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCiAJLmdfcmVnaXN0ZXIgPSBtdDl2MDExX2dfcmVnaXN0ZXIsCkBAIC01OTYsNiArNjAyLDE0IEBACiAJY29yZS0+aGVpZ2h0ID0gNDgwOwogCWNvcmUtPnh0YWwgPSAyNzAwMDAwMDsJLyogSHogKi8KIAorCWlmIChjLT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlzdHJ1Y3QgbXQ5djAxMV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGMtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJCWNvcmUtPnh0YWwgPSBwZGF0YS0+eHRhbDsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAieHRhbCBzZXQgdG8gJWQuJTAzZCBNSHpcbiIsCisJCQljb3JlLT54dGFsIC8gMTAwMDAwMCwgKGNvcmUtPnh0YWwgLyAxMDAwKSAlIDEwMDApOworCX0KKwogCXY0bF9pbmZvKGMsICJjaGlwIGZvdW5kIEAgMHglMDJ4ICglcyAtIGNoaXAgdmVyc2lvbiAweCUwNHgpXG4iLAogCQkgYy0+YWRkciA8PCAxLCBjLT5hZGFwdGVyLT5uYW1lLCB2ZXJzaW9uKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDExLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM1MGZkNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBtdDl2MDExIC1NaWNyb24gMS80LUluY2ggVkdBIERpZ2l0YWwgSW1hZ2UgU2Vuc29yCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE1hdXJvIENhcnZhbGhvIENoZWhhYiAobWNoZWhhYkByZWRoYXQuY29tKQotICogVGhpcyBjb2RlIGlzIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyCi0gKi8KLQotI2lmbmRlZiBNVDlWMDExX0hfCi0jZGVmaW5lIE1UOVYwMTFfSF8KLQotI2RlZmluZSBSMDBfTVQ5VjAxMV9DSElQX1ZFUlNJT04JMHgwMAotI2RlZmluZSBSMDFfTVQ5VjAxMV9ST1dTVEFSVAkJMHgwMQotI2RlZmluZSBSMDJfTVQ5VjAxMV9DT0xTVEFSVAkJMHgwMgotI2RlZmluZSBSMDNfTVQ5VjAxMV9IRUlHSFQJCTB4MDMKLSNkZWZpbmUgUjA0X01UOVYwMTFfV0lEVEgJCTB4MDQKLSNkZWZpbmUgUjA1X01UOVYwMTFfSEJMQU5LCQkweDA1Ci0jZGVmaW5lIFIwNl9NVDlWMDExX1ZCTEFOSwkJMHgwNgotI2RlZmluZSBSMDdfTVQ5VjAxMV9PVVRfQ1RSTAkJMHgwNwotI2RlZmluZSBSMDlfTVQ5VjAxMV9TSFVUVEVSX1dJRFRICTB4MDkKLSNkZWZpbmUgUjBBX01UOVYwMTFfQ0xLX1NQRUVECQkweDBhCi0jZGVmaW5lIFIwQl9NVDlWMDExX1JFU1RBUlQJCTB4MGIKLSNkZWZpbmUgUjBDX01UOVYwMTFfU0hVVFRFUl9ERUxBWQkweDBjCi0jZGVmaW5lIFIwRF9NVDlWMDExX1JFU0VUCQkweDBkCi0jZGVmaW5lIFIxRV9NVDlWMDExX0RJR0lUQUxfWk9PTQkweDFlCi0jZGVmaW5lIFIyMF9NVDlWMDExX1JFQURfTU9ERQkJMHgyMAotI2RlZmluZSBSMkJfTVQ5VjAxMV9HUkVFTl8xX0dBSU4JMHgyYgotI2RlZmluZSBSMkNfTVQ5VjAxMV9CTFVFX0dBSU4JCTB4MmMKLSNkZWZpbmUgUjJEX01UOVYwMTFfUkVEX0dBSU4JCTB4MmQKLSNkZWZpbmUgUjJFX01UOVYwMTFfR1JFRU5fMl9HQUlOCTB4MmUKLSNkZWZpbmUgUjM1X01UOVYwMTFfR0xPQkFMX0dBSU4JCTB4MzUKLSNkZWZpbmUgUkYxX01UOVYwMTFfQ0hJUF9FTkFCTEUJCTB4ZjEKLQotI2RlZmluZSBNVDlWMDExX1ZFUlNJT04JCQkweDgyMzIKLSNkZWZpbmUgTVQ5VjAxMV9SRVZfQl9WRVJTSU9OCQkweDgyNDMKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzY3MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc2NzAuYwppbmRleCBjODgxYTY0Li5kNGU3YzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzY3MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NjcwLmMKQEAgLTE0NDksNDcgKzE0NDksNiBAQAogCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfT1Y3NjcwLCAwKTsKIH0KIAotc3RhdGljIGludCBvdjc2NzBfc19jb25maWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGR1bWIsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwotCXN0cnVjdCBvdjc2NzBfY29uZmlnICpjb25maWcgPSBkYXRhOwotCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbyA9IHRvX3N0YXRlKHNkKTsKLQlpbnQgcmV0OwotCi0JaW5mby0+Y2xvY2tfc3BlZWQgPSAzMDsgLyogZGVmYXVsdDogYSBndWVzcyAqLwotCi0JLyoKLQkgKiBNdXN0IGFwcGx5IGNvbmZpZ3VyYXRpb24gYmVmb3JlIGluaXRpYWxpemluZyBkZXZpY2UsIGJlY2F1c2UgaXQKLQkgKiBzZWxlY3RzIEkvTyBtZXRob2QuCi0JICovCi0JaWYgKGNvbmZpZykgewotCQlpbmZvLT5taW5fd2lkdGggPSBjb25maWctPm1pbl93aWR0aDsKLQkJaW5mby0+bWluX2hlaWdodCA9IGNvbmZpZy0+bWluX2hlaWdodDsKLQkJaW5mby0+dXNlX3NtYnVzID0gY29uZmlnLT51c2Vfc21idXM7Ci0KLQkJaWYgKGNvbmZpZy0+Y2xvY2tfc3BlZWQpCi0JCQlpbmZvLT5jbG9ja19zcGVlZCA9IGNvbmZpZy0+Y2xvY2tfc3BlZWQ7Ci0JfQotCi0JLyogTWFrZSBzdXJlIGl0J3MgYW4gb3Y3NjcwICovCi0JcmV0ID0gb3Y3NjcwX2RldGVjdChzZCk7Ci0JaWYgKHJldCkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCi0JCQkiY2hpcCBmb3VuZCBAIDB4JXggKCVzKSBpcyBub3QgYW4gb3Y3NjcwIGNoaXAuXG4iLAotCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7Ci0JCWtmcmVlKGluZm8pOwotCQlyZXR1cm4gcmV0OwotCX0KLQl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHglMDJ4ICglcylcbiIsCi0JCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKLQotCWluZm8tPmZtdCA9ICZvdjc2NzBfZm9ybWF0c1swXTsKLQlpbmZvLT5zYXQgPSAxMjg7CS8qIFJldmlldyB0aGlzICovCi0JaW5mby0+Y2xrcmMgPSBpbmZvLT5jbG9ja19zcGVlZCAvIDMwOwotCi0JcmV0dXJuIDA7Ci19Ci0KICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCiBzdGF0aWMgaW50IG92NzY3MF9nX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQogewpAQCAtMTUyOCw3ICsxNDg3LDYgQEAKIAkuc19jdHJsID0gb3Y3NjcwX3NfY3RybCwKIAkucXVlcnljdHJsID0gb3Y3NjcwX3F1ZXJ5Y3RybCwKIAkucmVzZXQgPSBvdjc2NzBfcmVzZXQsCi0JLnNfY29uZmlnID0gb3Y3NjcwX3NfY29uZmlnLAogCS5pbml0ID0gb3Y3NjcwX2luaXQsCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwogCS5nX3JlZ2lzdGVyID0gb3Y3NjcwX2dfcmVnaXN0ZXIsCkBAIC0xNTU4LDYgKzE1MTYsNyBAQAogewogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAJc3RydWN0IG92NzY3MF9pbmZvICppbmZvOworCWludCByZXQ7CiAKIAlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG92NzY3MF9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGluZm8gPT0gTlVMTCkKQEAgLTE1NjUsNiArMTUyNCwzNyBAQAogCXNkID0gJmluZm8tPnNkOwogCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZvdjc2NzBfb3BzKTsKIAorCWluZm8tPmNsb2NrX3NwZWVkID0gMzA7IC8qIGRlZmF1bHQ6IGEgZ3Vlc3MgKi8KKwlpZiAoY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlzdHJ1Y3Qgb3Y3NjcwX2NvbmZpZyAqY29uZmlnID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCQkvKgorCQkgKiBNdXN0IGFwcGx5IGNvbmZpZ3VyYXRpb24gYmVmb3JlIGluaXRpYWxpemluZyBkZXZpY2UsIGJlY2F1c2UgaXQKKwkJICogc2VsZWN0cyBJL08gbWV0aG9kLgorCQkgKi8KKwkJaW5mby0+bWluX3dpZHRoID0gY29uZmlnLT5taW5fd2lkdGg7CisJCWluZm8tPm1pbl9oZWlnaHQgPSBjb25maWctPm1pbl9oZWlnaHQ7CisJCWluZm8tPnVzZV9zbWJ1cyA9IGNvbmZpZy0+dXNlX3NtYnVzOworCisJCWlmIChjb25maWctPmNsb2NrX3NwZWVkKQorCQkJaW5mby0+Y2xvY2tfc3BlZWQgPSBjb25maWctPmNsb2NrX3NwZWVkOworCX0KKworCS8qIE1ha2Ugc3VyZSBpdCdzIGFuIG92NzY3MCAqLworCXJldCA9IG92NzY3MF9kZXRlY3Qoc2QpOworCWlmIChyZXQpIHsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJImNoaXAgZm91bmQgQCAweCV4ICglcykgaXMgbm90IGFuIG92NzY3MCBjaGlwLlxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOworCQlrZnJlZShpbmZvKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JTAyeCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CisKKwlpbmZvLT5mbXQgPSAmb3Y3NjcwX2Zvcm1hdHNbMF07CisJaW5mby0+c2F0ID0gMTI4OwkvKiBSZXZpZXcgdGhpcyAqLworCWluZm8tPmNsa3JjID0gaW5mby0+Y2xvY2tfc3BlZWQgLyAzMDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaAppbmRleCBhYzk0YThiLi4zMDVlNmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgInB2cnVzYjItaW8uaCIKICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL2N4MjM0MXguaD4KKyNpbmNsdWRlIDxtZWRpYS9pci1rYmQtaTJjLmg+CiAjaW5jbHVkZSAicHZydXNiMi1kZXZhdHRyLmgiCiAKIC8qIExlZ2FsIHZhbHVlcyBmb3IgUFZSMl9DSURfSFNNICovCkBAIC0yMDIsNiArMjAzLDcgQEAKIAogCS8qIElSIHJlbGF0ZWQgKi8KIAl1bnNpZ25lZCBpbnQgaXJfc2NoZW1lX2FjdGl2ZTsgLyogSVIgc2NoZW1lIGFzIHNlZW4gZnJvbSB0aGUgb3V0c2lkZSAqLworCXN0cnVjdCBJUl9pMmNfaW5pdF9kYXRhIGlyX2luaXRfZGF0YTsgLyogcGFyYW1zIHBhc3NlZCB0byBJUiBtb2R1bGVzICovCiAKIAkvKiBGcmVxdWVuY3kgdGFibGUgKi8KIAl1bnNpZ25lZCBpbnQgZnJlcVRhYmxlW0ZSRVFUQUJMRV9TSVpFXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCmluZGV4IDdjYmUxOGMuLjQ1MWVjZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYwpAQCAtMTksNiArMTksNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxtZWRpYS9pci1rYmQtaTJjLmg+CiAjaW5jbHVkZSAicHZydXNiMi1pMmMtY29yZS5oIgogI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCiAjaW5jbHVkZSAicHZydXNiMi1kZWJ1Zy5oIgpAQCAtNDgsMTMgKzQ5LDYgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9hdXRvbG9hZF9pcl92aWRlbywKIAkJICIxPWRvIG5vdCB0cnkgdG8gYXV0b2xvYWQgaXJfdmlkZW8gSVIgcmVjZWl2ZXIiKTsKIAotLyogTWFwcGluZyBvZiBJUiBzY2hlbWVzIHRvIGtub3duIEkyQyBhZGRyZXNzZXMgLSBpZiBhbnkgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGlyX3ZpZGVvX2FkZHJlc3Nlc1tdID0gewotCVtQVlIyX0lSX1NDSEVNRV9aSUxPR10gPSAweDcxLAotCVtQVlIyX0lSX1NDSEVNRV8yOVhYWF0gPSAweDE4LAotCVtQVlIyX0lSX1NDSEVNRV8yNFhYWF0gPSAweDE4LAotfTsKLQogc3RhdGljIGludCBwdnIyX2kyY193cml0ZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgLyogQ29udGV4dCAqLwogCQkJICB1OCBpMmNfYWRkciwgICAgICAvKiBJMkMgYWRkcmVzcyB3ZSdyZSB0YWxraW5nIHRvICovCiAJCQkgIHU4ICpkYXRhLCAgICAgICAgIC8qIERhdGEgdG8gd3JpdGUgKi8KQEAgLTU3NCwyNiArNTY4LDU1IEBACiBzdGF0aWMgdm9pZCBwdnIyX2kyY19yZWdpc3Rlcl9pcihzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKIHsKIAlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKLQl1bnNpZ25lZCBjaGFyIGFkZHIgPSAwOworCXN0cnVjdCBJUl9pMmNfaW5pdF9kYXRhICppbml0X2RhdGEgPSAmaGR3LT5pcl9pbml0X2RhdGE7CiAJaWYgKHB2cjJfZGlzYWJsZV9pcl92aWRlbykgewogCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5GTywKIAkJCSAgICJBdXRvbWF0aWMgYmluZGluZyBvZiBpcl92aWRlbyBoYXMgYmVlbiBkaXNhYmxlZC4iKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAoaGR3LT5pcl9zY2hlbWVfYWN0aXZlIDwgQVJSQVlfU0laRShpcl92aWRlb19hZGRyZXNzZXMpKSB7Ci0JCWFkZHIgPSBpcl92aWRlb19hZGRyZXNzZXNbaGR3LT5pcl9zY2hlbWVfYWN0aXZlXTsKLQl9Ci0JaWYgKCFhZGRyKSB7CisJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7CisJc3dpdGNoIChoZHctPmlyX3NjaGVtZV9hY3RpdmUpIHsKKwljYXNlIFBWUjJfSVJfU0NIRU1FXzI0WFhYOiAvKiBGWDItY29udHJvbGxlZCBJUiAqLworCWNhc2UgUFZSMl9JUl9TQ0hFTUVfMjlYWFg6IC8qIE9yaWdpbmFsIDI5eHh4IGRldmljZSAqLworCQlpbml0X2RhdGEtPmlyX2NvZGVzICAgICAgICAgICAgICA9IFJDX01BUF9IQVVQUEFVR0VfTkVXOworCQlpbml0X2RhdGEtPmludGVybmFsX2dldF9rZXlfZnVuYyA9IElSX0tCRF9HRVRfS0VZX0hBVVA7CisJCWluaXRfZGF0YS0+dHlwZSAgICAgICAgICAgICAgICAgID0gUkNfVFlQRV9SQzU7CisJCWluaXRfZGF0YS0+bmFtZSAgICAgICAgICAgICAgICAgID0gaGR3LT5oZHdfZGVzYy0+ZGVzY3JpcHRpb247CisJCWluaXRfZGF0YS0+cG9sbGluZ19pbnRlcnZhbCAgICAgID0gMTAwOyAvKiBtcyBGcm9tIGlyLWtiZC1pMmMgKi8KKwkJLyogSVIgUmVjZWl2ZXIgKi8KKwkJaW5mby5hZGRyICAgICAgICAgID0gMHgxODsKKwkJaW5mby5wbGF0Zm9ybV9kYXRhID0gaW5pdF9kYXRhOworCQlzdHJsY3B5KGluZm8udHlwZSwgImlyX3ZpZGVvIiwgSTJDX05BTUVfU0laRSk7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTkZPLCAiQmluZGluZyAlcyB0byBpMmMgYWRkcmVzcyAweCUwMnguIiwKKwkJCSAgIGluZm8udHlwZSwgaW5mby5hZGRyKTsKKwkJaTJjX25ld19kZXZpY2UoJmhkdy0+aTJjX2FkYXAsICZpbmZvKTsKKwkJYnJlYWs7CisJY2FzZSBQVlIyX0lSX1NDSEVNRV9aSUxPRzogICAgIC8qIEhWUi0xOTUwIHN0eWxlICovCisJY2FzZSBQVlIyX0lSX1NDSEVNRV8yNFhYWF9NQ0U6IC8qIDI0eHh4IE1DRSBkZXZpY2UgKi8KKwkJaW5pdF9kYXRhLT5pcl9jb2RlcyAgICAgICAgICAgICAgPSBSQ19NQVBfSEFVUFBBVUdFX05FVzsKKwkJaW5pdF9kYXRhLT5pbnRlcm5hbF9nZXRfa2V5X2Z1bmMgPSBJUl9LQkRfR0VUX0tFWV9IQVVQX1hWUjsKKwkJaW5pdF9kYXRhLT50eXBlICAgICAgICAgICAgICAgICAgPSBSQ19UWVBFX1JDNTsKKwkJaW5pdF9kYXRhLT5uYW1lICAgICAgICAgICAgICAgICAgPSBoZHctPmhkd19kZXNjLT5kZXNjcmlwdGlvbjsKKwkJLyogSVIgUmVjZWl2ZXIgKi8KKwkJaW5mby5hZGRyICAgICAgICAgID0gMHg3MTsKKwkJaW5mby5wbGF0Zm9ybV9kYXRhID0gaW5pdF9kYXRhOworCQlzdHJsY3B5KGluZm8udHlwZSwgImlyX3J4X3o4ZjA4MTFfaGF1cCIsIEkyQ19OQU1FX1NJWkUpOworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5GTywgIkJpbmRpbmcgJXMgdG8gaTJjIGFkZHJlc3MgMHglMDJ4LiIsCisJCQkgICBpbmZvLnR5cGUsIGluZm8uYWRkcik7CisJCWkyY19uZXdfZGV2aWNlKCZoZHctPmkyY19hZGFwLCAmaW5mbyk7CisJCS8qIElSIFRyYXNtaXR0ZXIgKi8KKwkJaW5mby5hZGRyICAgICAgICAgID0gMHg3MDsKKwkJaW5mby5wbGF0Zm9ybV9kYXRhID0gaW5pdF9kYXRhOworCQlzdHJsY3B5KGluZm8udHlwZSwgImlyX3R4X3o4ZjA4MTFfaGF1cCIsIEkyQ19OQU1FX1NJWkUpOworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5GTywgIkJpbmRpbmcgJXMgdG8gaTJjIGFkZHJlc3MgMHglMDJ4LiIsCisJCQkgICBpbmZvLnR5cGUsIGluZm8uYWRkcik7CisJCWkyY19uZXdfZGV2aWNlKCZoZHctPmkyY19hZGFwLCAmaW5mbyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCS8qIFRoZSBkZXZpY2UgZWl0aGVyIGRvZXNuJ3Qgc3VwcG9ydCBJMkMtYmFzZWQgSVIgb3Igd2UKIAkJICAgZG9uJ3Qga25vdyAoeWV0KSBob3cgdG8gb3BlcmF0ZSBJUiBvbiB0aGUgZGV2aWNlLiAqLwotCQlyZXR1cm47CisJCWJyZWFrOwogCX0KLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5GTywKLQkJICAgIkJpbmRpbmcgaXJfdmlkZW8gdG8gaTJjIGFkZHJlc3MgMHglMDJ4LiIsIGFkZHIpOwotCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOwotCXN0cmxjcHkoaW5mby50eXBlLCAiaXJfdmlkZW8iLCBJMkNfTkFNRV9TSVpFKTsKLQlpbmZvLmFkZHIgPSBhZGRyOwotCWkyY19uZXdfZGV2aWNlKCZoZHctPmkyY19hZGFwLCAmaW5mbyk7CiB9CiAKIHZvaWQgcHZyMl9pMmNfY29yZV9pbml0KHN0cnVjdCBwdnIyX2hkdyAqaGR3KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwppbmRleCBmMzU0NTlkLi4wZGI5MDkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwpAQCAtMTU2NSw3ICsxNTY1LDcgQEAKIAljaGlwX2lkID0gbmFtZVs1XTsKIAogCS8qIENoZWNrIHdoZXRoZXIgdGhpcyBjaGlwIGlzIHBhcnQgb2YgdGhlIHNhYTcxMXggc2VyaWVzICovCi0JaWYgKG1lbWNtcChuYW1lLCAiMWY3MTEiLCA1KSkgeworCWlmIChtZW1jbXAobmFtZSArIDEsICJmNzExIiwgNCkpIHsKIAkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKElEICVzKSBkb2VzIG5vdCBtYXRjaCBhIGtub3duIHNhYTcxMXggY2hpcC5cbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgbmFtZSk7CiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKaW5kZXggZTdhYTU4OC4uZGViOGZjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCkBAIC01MTc5LDE4ICs1MTc5LDggQEAKIAlbU0FBNzEzNF9CT0FSRF9LV09STERfUENJX1NCVFZEX0ZVTExTRUddID0gewogCQkubmFtZSAgICAgICAgICAgPSAiS3dvcmxkIFBDSSBTQlRWRC9JU0RCLVQgRnVsbC1TZWcgSHlicmlkIiwKIAkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKLSNpZiAwCi0JLyoKLQkgKiBGSVhNRTogQW5hbG9nIG1vZGUgZG9lc24ndCB3b3JrLCBpZiBkaWdpdGFsIGlzIGVuYWJsZWQuIFRoZSBwcm9wZXIKLQkgKiBmaXggaXMgdG8gdXNlIHRkYTgyOTAgZHJpdmVyLCBidXQgS3dvcmxkIHNlZW1zIHRvIHVzZSBhbgotCSAqIHVuc3VwcG9ydGVkIHZlcnNpb24gb2YgdGRhODI5NS4KLQkgKi8KLQkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfTlhQX1REQTE4MjcxLAkvKiBUVU5FUl9QSElMSVBTX1REQTgyOTAgKi8KLQkJLnR1bmVyX2FkZHIgICAgID0gMHg2MCwKLSNlbHNlCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCi0jZW5kaWYKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKIAkJLmdwaW9tYXNrICAgICAgID0gMHg4ZTA1NDAwMCwKQEAgLTY5MzIsMTAgKzY5MjIsMTcgQEAKIAkvKiB0b2dnbGUgQUdDIHN3aXRjaCB0aHJvdWdoIEdQSU8gMjcgKi8KIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIFREQTE4MjcxX0FOQUxPRzoKLQkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDI3LCAwKTsKKwkJc2FhX3dyaXRlbChTQUE3MTM0X0dQSU9fR1BNT0RFMCA+PiAyLCAweDQwMDApOworCQlzYWFfd3JpdGVsKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAgPj4gMiwgMHg0MDAwKTsKKwkJbXNsZWVwKDIwKTsKIAkJYnJlYWs7CiAJY2FzZSBUREExODI3MV9ESUdJVEFMOgotCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjcsIDEpOworCQlzYWFfd3JpdGVsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsIDB4MTQwMDApOworCQlzYWFfd3JpdGVsKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAgPj4gMiwgMHgxNDAwMCk7CisJCW1zbGVlcCgyMCk7CisJCXNhYV93cml0ZWwoU0FBNzEzNF9HUElPX0dQTU9ERTAgPj4gMiwgMHg1NDAwMCk7CisJCXNhYV93cml0ZWwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyLCAweDU0MDAwKTsKKwkJbXNsZWVwKDMwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02OTkzLDYgKzY5OTAsNyBAQAogaW50IHNhYTcxMzRfdHVuZXJfY2FsbGJhY2sodm9pZCAqcHJpdiwgaW50IGNvbXBvbmVudCwgaW50IGNvbW1hbmQsIGludCBhcmcpCiB7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBwcml2OworCiAJaWYgKGRldiAhPSBOVUxMKSB7CiAJCXN3aXRjaCAoZGV2LT50dW5lcl90eXBlKSB7CiAJCWNhc2UgVFVORVJfUEhJTElQU19UREE4MjkwOgpAQCAtNzY1OSwzNiArNzY1NywxMSBAQAogCQlicmVhazsKIAl9CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9QQ0lfU0JUVkRfRlVMTFNFRzoKLQl7Ci0JCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSAweDRiLCAuZmxhZ3MgPSAwIH07Ci0JCWludCBpOwotCQlzdGF0aWMgdTggYnVmZmVyW11bMl0gPSB7Ci0JCQl7MHgzMCwgMHgzMX0sCi0JCQl7MHhmZiwgMHgwMH0sCi0JCQl7MHg0MSwgMHgwM30sCi0JCQl7MHg0MSwgMHgxYX0sCi0JCQl7MHhmZiwgMHgwMn0sCi0JCQl7MHgzNCwgMHgwMH0sCi0JCQl7MHg0NSwgMHg5N30sCi0JCQl7MHg0NSwgMHhjMX0sCi0JCX07CiAJCXNhYV93cml0ZWwoU0FBNzEzNF9HUElPX0dQTU9ERTAgPj4gMiwgMHg0MDAwKTsKIAkJc2FhX3dyaXRlbChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIsIDB4NDAwMCk7CiAKLQkJLyoKLQkJICogRklYTUU6IGlkZW50aWZ5IHdoYXQgZGV2aWNlIGlzIGF0IGFkZHIgMHg0YiBhbmQgd2hhdCBtZWFucwotCQkgKiB0aGlzIGluaXRpYWxpemF0aW9uCi0JCSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWZmZXIpOyBpKyspIHsKLQkJCW1zZy5idWYgPSAmYnVmZmVyW2ldWzBdOwotCQkJbXNnLmxlbiA9IEFSUkFZX1NJWkUoYnVmZmVyWzBdKTsKLQkJCWlmIChpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSAgICAgICAiJXM6IFVuYWJsZSB0byBlbmFibGUgdHVuZXIoJWkpLlxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBpKTsKLQkJfQorCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjcsIDApOwogCQlicmVhazsKLQl9CiAJfSAvKiBzd2l0Y2goKSAqLwogCiAJLyogaW5pdGlhbGl6ZSB0dW5lciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwppbmRleCAzMzE1YTQ4Li5mNjVjYWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwpAQCAtMjM3LDEyICsyMzcsMzkgQEAKIHN0YXRpYyBzdHJ1Y3QgdGRhMTgyNzFfY29uZmlnIGt3b3JsZF90ZGExODI3MV9jb25maWcgPSB7CiAJLnN0ZF9tYXAgPSAmbWI4NmEyMHNfdGRhMTgyNzFfc3RkX21hcCwKIAkuZ2F0ZSAgICA9IFREQTE4MjcxX0dBVEVfRElHSVRBTCwKKwkuY29uZmlnICA9IDMsCS8qIFVzZSB0dW5lciBjYWxsYmFjayBmb3IgQUdDICovCisKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWI4NmEyMHNfY29uZmlnIGt3b3JsZF9tYjg2YTIwc19jb25maWcgPSB7CiAJLmRlbW9kX2FkZHJlc3MgPSAweDEwLAogfTsKIAorc3RhdGljIGludCBrd29ybGRfc2J0dmRfZ2F0ZV9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKKworCXVuc2lnbmVkIGNoYXIgaW5pdG1zZ1tdID0gezB4NDUsIDB4OTd9OworCXVuc2lnbmVkIGNoYXIgbXNnX2VuYWJsZVtdID0gezB4NDUsIDB4YzF9OworCXVuc2lnbmVkIGNoYXIgbXNnX2Rpc2FibGVbXSA9IHsweDQ1LCAweDgxfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHIgPSAweDRiLCAuZmxhZ3MgPSAwLCAuYnVmID0gaW5pdG1zZywgLmxlbiA9IDJ9OworCisJaWYgKGkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkgeworCQl3cHJpbnRrKCJjb3VsZCBub3QgYWNjZXNzIHRoZSBJMkMgZ2F0ZVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoZW5hYmxlKQorCQltc2cuYnVmID0gbXNnX2VuYWJsZTsKKwllbHNlCisJCW1zZy5idWYgPSBtc2dfZGlzYWJsZTsKKwlpZiAoaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKSB7CisJCXdwcmludGsoImNvdWxkIG5vdCBhY2Nlc3MgdGhlIEkyQyBnYXRlXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCW1zbGVlcCgyMCk7CisJcmV0dXJuIDA7Cit9CisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogdGRhMTAwNHggYmFzZWQgRFZCLVQgY2FyZHMsIGhlbHBlciBmdW5jdGlvbnMKICAqLwpAQCAtNjIzLDM3ICs2NTAsNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCBfX2t3b3JsZF9zYnR2ZF9pMmNfZ2F0ZV9jdHJsKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LCBpbnQgZW5hYmxlKQotewotCXVuc2lnbmVkIGNoYXIgaW5pdG1zZ1tdID0gezB4NDUsIDB4OTd9OwotCXVuc2lnbmVkIGNoYXIgbXNnX2VuYWJsZVtdID0gezB4NDUsIDB4YzF9OwotCXVuc2lnbmVkIGNoYXIgbXNnX2Rpc2FibGVbXSA9IHsweDQ1LCAweDgxfTsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHIgPSAweDRiLCAuZmxhZ3MgPSAwLCAuYnVmID0gaW5pdG1zZywgLmxlbiA9IDJ9OwotCi0JaWYgKGkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkgewotCQl3cHJpbnRrKCJjb3VsZCBub3QgYWNjZXNzIHRoZSBJMkMgZ2F0ZVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlpZiAoZW5hYmxlKQotCQltc2cuYnVmID0gbXNnX2VuYWJsZTsKLQllbHNlCi0JCW1zZy5idWYgPSBtc2dfZGlzYWJsZTsKLQlpZiAoaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKSB7Ci0JCXdwcmludGsoImNvdWxkIG5vdCBhY2Nlc3MgdGhlIEkyQyBnYXRlXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCW1zbGVlcCgyMCk7Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW50IGt3b3JsZF9zYnR2ZF9pMmNfZ2F0ZV9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgZW5hYmxlKQotewotCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKLQotCXJldHVybiBfX2t3b3JsZF9zYnR2ZF9pMmNfZ2F0ZV9jdHJsKGRldiwgZW5hYmxlKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KIHN0YXRpYyBzdHJ1Y3QgdGRhMTAwNHhfY29uZmlnIHRkYTgyN3hfbGlmZXZpZXdfY29uZmlnID0gewogCS5kZW1vZF9hZGRyZXNzID0gMHgwOCwKIAkuaW52ZXJ0ICAgICAgICA9IDEsCkBAIC0xNjYwLDI3ICsxNjU2LDIzIEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9QQ0lfU0JUVkRfRlVMTFNFRzoKLQkJX19rd29ybGRfc2J0dmRfaTJjX2dhdGVfY3RybChkZXYsIDApOwotCQlzYWFfd3JpdGVsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsIDB4MTQwMDApOwotCQlzYWFfd3JpdGVsKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAgPj4gMiwgMHgxNDAwMCk7Ci0JCW1zbGVlcCgyMCk7Ci0JCXNhYV93cml0ZWwoU0FBNzEzNF9HUElPX0dQTU9ERTAgPj4gMiwgMHg1NDAwMCk7Ci0JCXNhYV93cml0ZWwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyLCAweDU0MDAwKTsKLQkJbXNsZWVwKDIwKTsKKwkJLyogU3dpdGNoIHRvIGRpZ2l0YWwgbW9kZSAqLworCQlzYWE3MTM0X3R1bmVyX2NhbGxiYWNrKGRldiwgMCwKKwkJCQkgICAgICAgVERBMTgyNzFfQ0FMTEJBQ0tfQ01EX0FHQ19FTkFCTEUsIDEpOwogCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobWI4NmEyMHNfYXR0YWNoLAogCQkJCQkgICAgICAgJmt3b3JsZF9tYjg2YTIwc19jb25maWcsCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCV9fa3dvcmxkX3NidHZkX2kyY19nYXRlX2N0cmwoZGV2LCAxKTsKIAkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWR2Yl9hdHRhY2godGRhODI5eF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAorCQkJCSAgICZkZXYtPmkyY19hZGFwLCAweDRiLAorCQkJCSAgICZ0ZGE4Mjl4X25vX3Byb2JlKTsKIAkJCWR2Yl9hdHRhY2godGRhMTgyNzFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAweDYwLCAmZGV2LT5pMmNfYWRhcCwKIAkJCQkgICAma3dvcmxkX3RkYTE4MjcxX2NvbmZpZyk7Ci0JCQkvKgotCQkJICogT25seSBhZnRlciBzdWNjZXNzLCBpdCBjYW4gaW5pdGlhbGl6ZSB0aGUgZ2F0ZSwgb3RoZXJ3aXNlCi0JCQkgKiBhbiBPT1BTIHdpbGwgaGl0LCBkdWUgdG8ga2ZyZWUoZmUwLT5kdmIuZnJvbnRlbmQpCi0JCQkgKi8KLQkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCA9IGt3b3JsZF9zYnR2ZF9pMmNfZ2F0ZV9jdHJsOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsID0ga3dvcmxkX3NidHZkX2dhdGVfY3RybDsKIAkJfQorCisJCS8qIG1iODZhMjBzIG5lZWQgdG8gdXNlIHRoZSBJMkMgZ2F0ZXdheSAqLwogCQlicmVhazsKIAlkZWZhdWx0OgogCQl3cHJpbnRrKCJIdWg/IHVua25vd24gRFZCIGNhcmQ/XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oCmluZGV4IDQxMDY0YzcuLmIzZDJjYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaApAQCAtNDcsOCArNDcsOCBAQAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA5LCBCUklER0VfU045QzEwMiksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMGQsIEJSSURHRV9TTjlDMTAyKSwgfSwKIC8qCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDExLCBCUklER0VfU045QzEwMiksIH0sIE9WNjY1MCAqLwotI2VuZGlmCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMTksIEJSSURHRV9TTjlDMTAyKSwgfSwKKyNlbmRpZgogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI0LCBCUklER0VfU045QzEwMiksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjUsIEJSSURHRV9TTjlDMTAyKSwgfSwKICNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX1NPTklYQiAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX1NPTklYQl9NT0RVTEUKQEAgLTU2LDc4ICs1Niw2OCBAQAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI5LCBCUklER0VfU045QzEwMiksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmEsIEJSSURHRV9TTjlDMTAyKSwgfSwKICNlbmRpZgotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJiLCBCUklER0VfU045QzEwMiksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmIsIEJSSURHRV9TTjlDMTAyKSwgfSwgLyogbm90IGluIHNvbml4YiAqLwogI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0FfU09OSVhCICYmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0FfU09OSVhCX01PRFVMRQogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJjLCBCUklER0VfU045QzEwMiksIH0sCiAvKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyZCwgQlJJREdFX1NOOUMxMDIpLCB9LCBIVjcxMzFSICovCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmUsIEJSSURHRV9TTjlDMTAyKSwgfSwKICNlbmRpZgotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDMwLCBCUklER0VfU045QzEwMiksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMzAsIEJSSURHRV9TTjlDMTAyKSwgfSwgLyogbm90IGluIHNvbml4YiAqLwogCS8qIFNOOUMxMDMgKi8KLQl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4MCwgQlJJREdFX1NOOUMxMDMpLCB9LAotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDgyLCBCUklER0VfU045QzEwMyksIH0sCisvKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4MCwgQlJJREdFX1NOOUMxMDMpLCB9LCBub24gZXhpc3RlbnQgPyAqLworCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDgyLCBCUklER0VfU045QzEwMyksIH0sIC8qIG5vdCBpbiBzb25peGIgKi8KKyNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX1NPTklYQiAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX1NPTklYQl9NT0RVTEUKIC8qCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDgzLCBCUklER0VfU045QzEwMyksIH0sIEhZNzEzMUQvRSAqLwotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDg4LCBCUklER0VfU045QzEwMyksIH0sCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwOGEsIEJSSURHRV9TTjlDMTAzKSwgfSwKLQl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4YiwgQlJJREdFX1NOOUMxMDMpLCB9LAorLyoJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwODgsIEJSSURHRV9TTjlDMTAzKSwgfSwgbm9uIGV4aXN0ZW50ID8gKi8KKy8qCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDhhLCBCUklER0VfU045QzEwMyksIH0sIG5vbiBleGlzdGVudCA/ICovCisvKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4YiwgQlJJREdFX1NOOUMxMDMpLCB9LCBub24gZXhpc3RlbnQgPyAqLwogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDhjLCBCUklER0VfU045QzEwMyksIH0sCiAvKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4ZSwgQlJJREdFX1NOOUMxMDMpLCB9LCBDSVNWRjEwICovCi0jaWYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9TT05JWEIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9TT05JWEJfTU9EVUxFCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwOGYsIEJSSURHRV9TTjlDMTAzKSwgfSwKLSNlbmRpZgotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGEwLCBCUklER0VfU045QzEwMyksIH0sCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYTIsIEJSSURHRV9TTjlDMTAzKSwgfSwKLQl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhMywgQlJJREdFX1NOOUMxMDMpLCB9LAorLyoJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYTAsIEJSSURHRV9TTjlDMTAzKSwgfSwgbm9uIGV4aXN0ZW50ID8gKi8KKy8qCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGEyLCBCUklER0VfU045QzEwMyksIH0sIG5vbiBleGlzdGVudCA/ICovCisvKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhMywgQlJJREdFX1NOOUMxMDMpLCB9LCBub24gZXhpc3RlbnQgPyAqLwogLyoJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYTgsIEJSSURHRV9TTjlDMTAzKSwgfSwgUEFTMTA2ICovCiAvKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhYSwgQlJJREdFX1NOOUMxMDMpLCB9LCBUQVM1MTMwICovCi0vKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhYiwgQlJJREdFX1NOOUMxMDMpLCB9LCBUQVM1MTMwICovCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYWMsIEJSSURHRV9TTjlDMTAzKSwgfSwKLQl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhZSwgQlJJREdFX1NOOUMxMDMpLCB9LAorLyoJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYWIsIEJSSURHRV9TTjlDMTAzKSwgfSwgVEFTNTExMCwgbm9uIGV4aXN0ZW50ICovCisvKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhYywgQlJJREdFX1NOOUMxMDMpLCB9LCBub24gZXhpc3RlbnQgPyAqLworLyoJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYWUsIEJSSURHRV9TTjlDMTAzKSwgfSwgbm9uIGV4aXN0ZW50ID8gKi8KIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhZiwgQlJJREdFX1NOOUMxMDMpLCB9LAotI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0FfU09OSVhCICYmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0FfU09OSVhCX01PRFVMRQogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGIwLCBCUklER0VfU045QzEwMyksIH0sCisvKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiMiwgQlJJREdFX1NOOUMxMDMpLCB9LCBub24gZXhpc3RlbnQgPyAqLworLyoJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYjMsIEJSSURHRV9TTjlDMTAzKSwgfSwgbm9uIGV4aXN0ZW50ID8gKi8KKy8qCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGI4LCBCUklER0VfU045QzEwMyksIH0sIG5vbiBleGlzdGVudCA/ICovCisvKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiYSwgQlJJREdFX1NOOUMxMDMpLCB9LCBub24gZXhpc3RlbnQgPyAqLworLyoJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYmIsIEJSSURHRV9TTjlDMTAzKSwgfSwgbm9uIGV4aXN0ZW50ID8gKi8KKy8qCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGJjLCBCUklER0VfU045QzEwMyksIH0sIG5vbiBleGlzdGVudCA/ICovCisvKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiZSwgQlJJREdFX1NOOUMxMDMpLCB9LCBub24gZXhpc3RlbnQgPyAqLwogI2VuZGlmCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYjIsIEJSSURHRV9TTjlDMTAzKSwgfSwKLQl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiMywgQlJJREdFX1NOOUMxMDMpLCB9LAotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGI4LCBCUklER0VfU045QzEwMyksIH0sCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYmEsIEJSSURHRV9TTjlDMTAzKSwgfSwKLQl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiYiwgQlJJREdFX1NOOUMxMDMpLCB9LAotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGJjLCBCUklER0VfU045QzEwMyksIH0sCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYmUsIEJSSURHRV9TTjlDMTAzKSwgfSwKIAkvKiBTTjlDMTA1ICovCiAjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9TT05JWEogJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9TT05JWEpfTU9EVUxFCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwNDVlLCAweDAwZjUsIEJSSURHRV9TTjlDMTA1KSwgfSwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDA0NWUsIDB4MDBmNywgQlJJREdFX1NOOUMxMDUpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI3LCBCUklER0VfU045QzEwNSksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMjgsIEJSSURHRV9TTjlDMTA1KSwgfSwKLSNlbmRpZgogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGMwLCBCUklER0VfU045QzEwNSksIH0sCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYzIsIEJSSURHRV9TTjlDMTA1KSwgfSwKLQl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBjOCwgQlJJREdFX1NOOUMxMDUpLCB9LAotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGNjLCBCUklER0VfU045QzEwNSksIH0sCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwZWEsIEJSSURHRV9TTjlDMTA1KSwgfSwKLQl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBlYywgQlJJREdFX1NOOUMxMDUpLCB9LAotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGVmLCBCUklER0VfU045QzEwNSksIH0sCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwZmEsIEJSSURHRV9TTjlDMTA1KSwgfSwKKy8qCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGMyLCBCUklER0VfU045QzEwNSksIH0sIFBPMTAzMCAqLworLyoJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYzgsIEJSSURHRV9TTjlDMTA1KSwgfSwgT002ODAxICovCisvKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBjYywgQlJJREdFX1NOOUMxMDUpLCB9LCBIVjcxMzFHUCAqLworLyoJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwZWEsIEJSSURHRV9TTjlDMTA1KSwgfSwgbm9uIGV4aXN0ZW50ID8gKi8KKy8qCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGVjLCBCUklER0VfU045QzEwNSksIH0sIE1PNDAwMCAqLworLyoJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwZWYsIEJSSURHRV9TTjlDMTA1KSwgfSwgSUNNMTA1QyAqLworLyoJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwZmEsIEJSSURHRV9TTjlDMTA1KSwgfSwgT1Y3NjQ4ICovCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwZmIsIEJSSURHRV9TTjlDMTA1KSwgfSwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBmYywgQlJJREdFX1NOOUMxMDUpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGZlLCBCUklER0VfU045QzEwNSksIH0sCiAJLyogU045QzEyMCAqLwogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MDQ1OCwgMHg3MDI1LCBCUklER0VfU045QzEyMCksIH0sCi0jaWYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9TT05JWEogJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9TT05JWEpfTU9EVUxFCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxMDIsIEJSSURHRV9TTjlDMTIwKSwgfSwKLSNlbmRpZgotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTA4LCBCUklER0VfU045QzEyMCksIH0sCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxMGYsIEJSSURHRV9TTjlDMTIwKSwgfSwKLSNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX1NPTklYSiAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX1NPTklYSl9NT0RVTEUKKy8qCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTAyLCBCUklER0VfU045QzEyMCksIH0sIHBvMjAzMCAqLworLyoJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxMDgsIEJSSURHRV9TTjlDMTIwKSwgfSwgb202ODAxICovCisvKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjEwZiwgQlJJREdFX1NOOUMxMjApLCB9LCBTNUs1M0JFQiAqLwogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTMwLCBCUklER0VfU045QzEyMCksIH0sCi0jZW5kaWYKIC8qCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTM4LCBCUklER0VfU045QzEyMCksIH0sIE1PODAwMCAqLwotI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0FfU09OSVhKICYmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0FfU09OSVhKX01PRFVMRQogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNhLCBCUklER0VfU045QzEyMCksIH0sCi0jZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjEzYiwgQlJJREdFX1NOOUMxMjApLCB9LAotI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0FfU09OSVhKICYmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0FfU09OSVhKX01PRFVMRQogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNjLCBCUklER0VfU045QzEyMCksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxM2UsIEJSSURHRV9TTjlDMTIwKSwgfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zcjAzMHBjMzAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3IwMzBwYzMwLmMKaW5kZXggODY0Njk2Yi4uYzkwMTcyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zcjAzMHBjMzAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NyMDMwcGMzMC5jCkBAIC03MTQsMTUgKzcxNCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzcjAzMHBjMzBfc19jb25maWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKLQkJCSAgICAgIGludCBpcnEsIHZvaWQgKnBsYXRmb3JtX2RhdGEpCi17Ci0Jc3RydWN0IHNyMDMwcGMzMF9pbmZvICppbmZvID0gdG9fc3IwMzBwYzMwKHNkKTsKLQotCWluZm8tPnBkYXRhID0gcGxhdGZvcm1fZGF0YTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBzcjAzMHBjMzBfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKIHsKIAlyZXR1cm4gMDsKQEAgLTc2Myw3ICs3NTQsNiBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHNyMDMwcGMzMF9jb3JlX29wcyA9IHsKLQkuc19jb25maWcJPSBzcjAzMHBjMzBfc19jb25maWcsCiAJLnNfcG93ZXIJPSBzcjAzMHBjMzBfc19wb3dlciwKIAkucXVlcnljdHJsCT0gc3IwMzBwYzMwX3F1ZXJ5Y3RybCwKIAkuc19jdHJsCQk9IHNyMDMwcGMzMF9zX2N0cmwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NzUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg3NS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWI2ZmY1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg3NS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDExICswLDAgQEAKLS8qCi0gKiBGb3IgdGhlIFREQTk4NzUgY2hpcAotICogKFRoZSBUREE5ODc1IGlzIHVzZWQgb24gdGhlIERpYW1vbmQgRFRWMjAwMCBmcmVuY2ggdmVyc2lvbgotICogT3RoZXIgY2FyZHMgcHJvYmFibHkgdXNlIHRoZXNlIGNoaXBzIGFzIHdlbGwuKQotICogVGhpcyBkcml2ZXIgd2lsbCBub3QgY29tcGxhaW4gaWYgdXNlZCB3aXRoIGFueQotICogb3RoZXIgaTJjIGRldmljZSB3aXRoIHRoZSBzYW1lIGFkZHJlc3MuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAwIEd1aWxsYXVtZSBEZWx2aXQgYmFzZWQgb24gR2VyZCBLbm9yciBzb3VyY2UgYW5kCi0gKiBFcmljIFNhbmRlZW4KLSAqIENvcHlyaWdodCAoYykgMjAwNiBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KLSAqIFRoaXMgY29kZSBpcyBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogQmFzZWQgb24gdGRhOTg1NS5jIGJ5IFN0ZXZlIFZhbkRlQm9nYXJ0ICh2YW5kZWJvQHVjbGluay5iZXJrZWxleS5lZHUpCi0gKiBXaGljaCB3YXMgYmFzZWQgb24gdGRhODQyNS5jIGJ5IEdyZWcgQWxleGFuZGVyIChjKSAxOTk4Ci0gKgotICogT1BUSU9OUzoKLSAqIGRlYnVnICAgLSBzZXQgdG8gMSBpZiB5b3UnZCBsaWtlIHRvIHNlZSBkZWJ1ZyBtZXNzYWdlcwotICoKLSAqICBSZXZpc2lvbjogMC4xIC0gb3JpZ2luYWwgdmVyc2lvbgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KLSNpbmNsdWRlIDxtZWRpYS9pMmMtYWRkci5oPgotCi1zdGF0aWMgaW50IGRlYnVnOyAvKiBpbnNtb2QgcGFyYW1ldGVyICovCi1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0KLS8qIFRoaXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgVERBOTg3NSAqLwotc3RydWN0IHRkYTk4NzUgewotCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKLQlpbnQgcnZvbCwgbHZvbDsKLQlpbnQgYmFzcywgdHJlYmxlOwotfTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgdGRhOTg3NSAqdG9fc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgdGRhOTg3NSwgc2QpOwotfQotCi0jZGVmaW5lIGRwcmludGsgIGlmIChkZWJ1ZykgcHJpbnRrCi0KLS8qIFRoZSBUREE5ODc1IGlzIG1hZGUgYnkgUGhpbGlwcyBTZW1pY29uZHVjdG9yCi0gKiBodHRwOi8vd3d3LnNlbWljb25kdWN0b3JzLnBoaWxpcHMuY29tCi0gKiBUREE5ODc1OiBJMkMtYnVzIGNvbnRyb2xsZWQgRFNQIGF1ZGlvIHByb2Nlc3NvciwgRk0gZGVtb2R1bGF0b3IKLSAqCi0gKi8KLQotCQkvKiBzdWJhZGRyZXNzZXMgZm9yIFREQTk4NzUgKi8KLSNkZWZpbmUgVERBOTg3NV9NVVQgICAgICAgICAweDEyICAvKkdlbmVyYWwgbXV0ZSAgKHZhbHVlIC0tPiAwYjExMDAxMTAwKi8KLSNkZWZpbmUgVERBOTg3NV9DRkcgICAgICAgICAweDAxICAvKiBDb25maWcgcmVnaXN0ZXIgKHZhbHVlIC0tPiAwYjAwMDAwMDAwICovCi0jZGVmaW5lIFREQTk4NzVfREFDT1MgICAgICAgMHgxMyAgLypEQUMgaS9vIHNlbGVjdCAoQURDKSAwYjAwMDAxMDAqLwotI2RlZmluZSBUREE5ODc1X0xPU1IgICAgICAgIDB4MTYgIC8qTGluZSBvdXRwdXQgc2VsZWN0IHJlZ2lydGVyIDBiMDEwMCAwMDAxKi8KLQotI2RlZmluZSBUREE5ODc1X0NIMVYgICAgICAgIDB4MGMgIC8qQ2hhbm5lbCAxIHZvbHVtZSAobXV0ZSkqLwotI2RlZmluZSBUREE5ODc1X0NIMlYgICAgICAgIDB4MGQgIC8qQ2hhbm5lbCAyIHZvbHVtZSAobXV0ZSkqLwotI2RlZmluZSBUREE5ODc1X1NDMSAgICAgICAgIDB4MTQgIC8qU0NBUlQgMSBpbiAobW9ubykqLwotI2RlZmluZSBUREE5ODc1X1NDMiAgICAgICAgIDB4MTUgIC8qU0NBUlQgMiBpbiAobW9ubykqLwotCi0jZGVmaW5lIFREQTk4NzVfQURDSVMgICAgICAgMHgxNyAgLypBREMgaW5wdXQgc2VsZWN0IChtb25vKSAwYjAxMTAgMDAwKi8KLSNkZWZpbmUgVERBOTg3NV9BRVIgICAgICAgICAweDE5ICAvKkF1ZGlvIGVmZmVjdCAoQVZMK1BzZXVkbykgMGIwMDAwIDAxMTAqLwotI2RlZmluZSBUREE5ODc1X01DUyAgICAgICAgIDB4MTggIC8qTWFpbiBjaGFubmVsIHNlbGVjdCAoREFDKSAwYjAwMDAxMDAqLwotI2RlZmluZSBUREE5ODc1X01WTCAgICAgICAgIDB4MWEgIC8qIE1haW4gdm9sdW1lIGdhdWNoZSAqLwotI2RlZmluZSBUREE5ODc1X01WUiAgICAgICAgIDB4MWIgIC8qIE1haW4gdm9sdW1lIGRyb2l0ZSAqLwotI2RlZmluZSBUREE5ODc1X01CQSAgICAgICAgIDB4MWQgIC8qIE1haW4gQmFzc2UgKi8KLSNkZWZpbmUgVERBOTg3NV9NVFIgICAgICAgICAweDFlICAvKiBNYWluIHRyZWJsZSAqLwotI2RlZmluZSBUREE5ODc1X0FDUyAgICAgICAgIDB4MWYgIC8qIEF1eGlsYXJ5IGNoYW5uZWwgc2VsZWN0IChGTSkgMGIwMDAwMDAwKi8KLSNkZWZpbmUgVERBOTg3NV9BVkwgICAgICAgICAweDIwICAvKiBBdXhpbGFyeSB2b2x1bWUgZ2F1Y2hlICovCi0jZGVmaW5lIFREQTk4NzVfQVZSICAgICAgICAgMHgyMSAgLyogQXV4aWxhcnkgdm9sdW1lIGRyb2l0ZSAqLwotI2RlZmluZSBUREE5ODc1X0FCQSAgICAgICAgIDB4MjIgIC8qIEF1eGlsYXJ5IEJhc3NlICovCi0jZGVmaW5lIFREQTk4NzVfQVRSICAgICAgICAgMHgyMyAgLyogQXV4aWxhcnkgdHJlYmxlICovCi0KLSNkZWZpbmUgVERBOTg3NV9NU1IgICAgICAgICAweDAyICAvKiBNb25pdG9yIHNlbGVjdCByZWdpc3RlciAqLwotI2RlZmluZSBUREE5ODc1X0MxTVNCICAgICAgIDB4MDMgIC8qIENhcnJpZXIgMSAoRk0pIGZyZXF1ZW5jeSByZWdpc3RlciBNU0IgKi8KLSNkZWZpbmUgVERBOTg3NV9DMU1JQiAgICAgICAweDA0ICAvKiBDYXJyaWVyIDEgKEZNKSBmcmVxdWVuY3kgcmVnaXN0ZXIgKDE2LThdYiAqLwotI2RlZmluZSBUREE5ODc1X0MxTFNCICAgICAgIDB4MDUgIC8qIENhcnJpZXIgMSAoRk0pIGZyZXF1ZW5jeSByZWdpc3RlciBMU0IgKi8KLSNkZWZpbmUgVERBOTg3NV9DMk1TQiAgICAgICAweDA2ICAvKiBDYXJyaWVyIDIgKG5pY2FtKSBmcmVxdWVuY3kgcmVnaXN0ZXIgTVNCICovCi0jZGVmaW5lIFREQTk4NzVfQzJNSUIgICAgICAgMHgwNyAgLyogQ2FycmllciAyIChuaWNhbSkgZnJlcXVlbmN5IHJlZ2lzdGVyICgxNi04XWIgKi8KLSNkZWZpbmUgVERBOTg3NV9DMkxTQiAgICAgICAweDA4ICAvKiBDYXJyaWVyIDIgKG5pY2FtKSBmcmVxdWVuY3kgcmVnaXN0ZXIgTFNCICovCi0jZGVmaW5lIFREQTk4NzVfRENSICAgICAgICAgMHgwOSAgLyogRGVtb2R1bGF0ZXVyIGNvbmZpZ3VyYXRpb24gcmVnaXJ0ZXIqLwotI2RlZmluZSBUREE5ODc1X0RFRU0gICAgICAgIDB4MGEgIC8qIEZNIGRlLWVtcGhhc2lzIHJlZ2lydGVyKi8KLSNkZWZpbmUgVERBOTg3NV9GTUFUICAgICAgICAweDBiICAvKiBGTSBNYXRyaXggcmVnaXJ0ZXIqLwotCi0vKiB2YWx1ZXMgKi8KLSNkZWZpbmUgVERBOTg3NV9NVVRFX09OCSAgICAweGZmIC8qIGdlbmVyYWwgbXV0ZSAqLwotI2RlZmluZSBUREE5ODc1X01VVEVfT0ZGICAgIDB4Y2MgLyogZ2VuZXJhbCBubyBtdXRlICovCi0KLQotCi0vKiBCZWdpbiBjb2RlICovCi0KLXN0YXRpYyBpbnQgdGRhOTg3NV93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgc3ViYWRkciwgdW5zaWduZWQgY2hhciB2YWwpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwotCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzJdOwotCi0JdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiV3JpdGluZyAlZCAweCV4XG4iLCBzdWJhZGRyLCB2YWwpOwotCWJ1ZmZlclswXSA9IHN1YmFkZHI7Ci0JYnVmZmVyWzFdID0gdmFsOwotCWlmICgyICE9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZmZlciwgMikpIHsKLQkJdjRsMl93YXJuKHNkLCAiSS9PIGVycm9yLCB0cnlpbmcgKHdyaXRlICVkIDB4JXgpXG4iLAotCQkgICAgICAgc3ViYWRkciwgdmFsKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGkyY19yZWFkX3JlZ2lzdGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBhZGRyLCBpbnQgcmVnKQotewotCXVuc2lnbmVkIGNoYXIgd3JpdGVbMV07Ci0JdW5zaWduZWQgY2hhciByZWFkWzFdOwotCXN0cnVjdCBpMmNfbXNnIG1zZ3NbMl0gPSB7Ci0JCXsgYWRkciwgMCwgICAgICAgIDEsIHdyaXRlIH0sCi0JCXsgYWRkciwgSTJDX01fUkQsIDEsIHJlYWQgIH0KLQl9OwotCi0Jd3JpdGVbMF0gPSByZWc7Ci0KLQlpZiAoMiAhPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCAyKSkgewotCQl2NGxfd2FybihjbGllbnQsICJJL08gZXJyb3IgKHJlYWQyKVxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiY2hpcF9yZWFkMjogcmVnJWQ9MHgleFxuIiwgcmVnLCByZWFkWzBdKTsKLQlyZXR1cm4gcmVhZFswXTsKLX0KLQotc3RhdGljIHZvaWQgdGRhOTg3NV9zZXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKLXsKLQlzdHJ1Y3QgdGRhOTg3NSAqdGRhID0gdG9fc3RhdGUoc2QpOwotCXVuc2lnbmVkIGNoYXIgYTsKLQotCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInRkYTk4NzVfc2V0KCUwNHgsJTA0eCwlMDR4LCUwNHgpXG4iLAotCQl0ZGEtPmx2b2wsIHRkYS0+cnZvbCwgdGRhLT5iYXNzLCB0ZGEtPnRyZWJsZSk7Ci0KLQlhID0gdGRhLT5sdm9sICYgMHhmZjsKLQl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X01WTCwgYSk7Ci0JYSA9dGRhLT5ydm9sICYgMHhmZjsKLQl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X01WUiwgYSk7Ci0JYSA9dGRhLT5iYXNzICYgMHhmZjsKLQl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X01CQSwgYSk7Ci0JYSA9dGRhLT50cmVibGUgICYgMHhmZjsKLQl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X01UUiwgYSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX3RkYTk4NzVfaW5pdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQotewotCXN0cnVjdCB0ZGE5ODc1ICp0ID0gdG9fc3RhdGUoc2QpOwotCi0JdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiSW4gdGRhOTg3NV9pbml0XG4iKTsKLQl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X0NGRywgMHhkMCk7IC8qcmVnIGRlIGNvbmZpZyAwIChyZXNldCkqLwotCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfTVNSLCAweDAzKTsgICAgLyogTW9uaXRvciAwYjAwMDAwWFhYKi8KLQl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X0MxTVNCLCAweDAwKTsgIC8qQ2FyMShGTSkgTVNCIFhNSHoqLwotCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfQzFNSUIsIDB4MDApOyAgLypDYXIxKEZNKSBNSUIgWE1IeiovCi0JdGRhOTg3NV93cml0ZShzZCwgVERBOTg3NV9DMUxTQiwgMHgwMCk7ICAvKkNhcjEoRk0pIExTQiBYTUh6Ki8KLQl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X0MyTVNCLCAweDAwKTsgIC8qQ2FyMihOSUNBTSkgTVNCIFhNSHoqLwotCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfQzJNSUIsIDB4MDApOyAgLypDYXIyKE5JQ0FNKSBNSUIgWE1IeiovCi0JdGRhOTg3NV93cml0ZShzZCwgVERBOTg3NV9DMkxTQiwgMHgwMCk7ICAvKkNhcjIoTklDQU0pIExTQiBYTUh6Ki8KLQl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X0RDUiwgMHgwMCk7ICAgIC8qRGVtb2QgY29uZmlnIDB4MDAqLwotCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfREVFTSwgMHg0NCk7ICAgLypERS1FbXBoIDBiMDEwMCAwMTAwKi8KLQl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X0ZNQVQsIDB4MDApOyAgIC8qRk0gTWF0cml4IHJlZyAweDAwKi8KLQl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X1NDMSwgMHgwMCk7ICAgIC8qIFNDQVJUIDEgKFNDMSkqLwotCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfU0MyLCAweDAxKTsgICAgLyogU0NBUlQgMiAoc2MyKSovCi0KLQl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X0NIMVYsIDB4MTApOyAgLyogQ2hhbm5lbCB2b2x1bWUgMSBtdXRlKi8KLQl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X0NIMlYsIDB4MTApOyAgLyogQ2hhbm5lbCB2b2x1bWUgMiBtdXRlICovCi0JdGRhOTg3NV93cml0ZShzZCwgVERBOTg3NV9EQUNPUywgMHgwMik7IC8qIHNpZyBEQUMgaS9vKGluOm5pY2FtKSovCi0JdGRhOTg3NV93cml0ZShzZCwgVERBOTg3NV9BRENJUywgMHg2Zik7IC8qIHNpZyBBREMgaW5wdXQoaW46bW9ubykqLwotCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfTE9TUiwgMHgwMCk7ICAvKiBsaW5lIG91dCAoaW46bW9ubykqLwotCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfQUVSLCAweDAwKTsgICAvKjA2IEVmZmVjdCAoQVZMK1BTRVVETykgKi8KLQl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X01DUywgMHg0NCk7ICAgLyogTWFpbiBjaCBzZWxlY3QgKERBQykgKi8KLQl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X01WTCwgMHgwMyk7ICAgLyogVm9sIE1haW4gbGVmdCAxMGRCICovCi0JdGRhOTg3NV93cml0ZShzZCwgVERBOTg3NV9NVlIsIDB4MDMpOyAgIC8qIFZvbCBNYWluIHJpZ2h0IDEwZEIqLwotCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfTUJBLCAweDAwKTsgICAvKiBNYWluIEJhc3MgTWFpbiAwZEIqLwotCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfTVRSLCAweDAwKTsgICAvKiBNYWluIFRyZWJsZSBNYWluIDBkQiovCi0JdGRhOTg3NV93cml0ZShzZCwgVERBOTg3NV9BQ1MsIDB4NDQpOyAgIC8qIEF1eCBjaGFuIHNlbGVjdCAoZGFjKSovCi0JdGRhOTg3NV93cml0ZShzZCwgVERBOTg3NV9BVkwsIDB4MDApOyAgIC8qIFZvbCBBdXggbGVmdCAwZEIqLwotCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfQVZSLCAweDAwKTsgICAvKiBWb2wgQXV4IHJpZ2h0IDBkQiovCi0JdGRhOTg3NV93cml0ZShzZCwgVERBOTg3NV9BQkEsIDB4MDApOyAgIC8qIEF1eCBCYXNzIE1haW4gMGRCKi8KLQl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X0FUUiwgMHgwMCk7ICAgLyogQXV4IEFpZ3VzIE1haW4gMGRCKi8KLQotCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfTVVULCAweGNjKTsgICAvKiBHZW5lcmFsIG11dGUgICovCi0KLQl0LT5sdm9sID0gdC0+cnZvbCA9IDA7ICAJLyogMGRCICovCi0JdC0+YmFzcyA9IDA7IAkJCS8qIDBkQiAqLwotCXQtPnRyZWJsZSA9IDA7ICAJCS8qIDBkQiAqLwotCXRkYTk4NzVfc2V0KHNkKTsKLX0KLQotCi1zdGF0aWMgaW50IHRkYTk4NzVfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCi17Ci0Jc3RydWN0IHRkYTk4NzUgKnQgPSB0b19zdGF0ZShzZCk7Ci0KLQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JewotCQlpbnQgbGVmdCA9ICh0LT5sdm9sKzg0KSo2MDY7Ci0JCWludCByaWdodCA9ICh0LT5ydm9sKzg0KSo2MDY7Ci0KLQkJY3RybC0+dmFsdWU9bWF4KGxlZnQscmlnaHQpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCXsKLQkJaW50IGxlZnQgPSAodC0+bHZvbCs4NCkqNjA2OwotCQlpbnQgcmlnaHQgPSAodC0+cnZvbCs4NCkqNjA2OwotCQlpbnQgdm9sdW1lID0gbWF4KGxlZnQscmlnaHQpOwotCQlpbnQgYmFsYW5jZSA9ICgzMjc2OCptaW4obGVmdCxyaWdodCkpLwotCQkJICAgICAgKHZvbHVtZSA/IHZvbHVtZSA6IDEpOwotCQljdHJsLT52YWx1ZT0obGVmdDxyaWdodCk/Ci0JCQkoNjU1MzUtYmFsYW5jZSkgOiBiYWxhbmNlOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgotCQljdHJsLT52YWx1ZSA9ICh0LT5iYXNzKzEyKSoyNDI3OyAgICAvKiBtaW4gLTEyIG1heCArMTUgKi8KLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCWN0cmwtPnZhbHVlID0gKHQtPnRyZWJsZSsxMikqMjczMDsvKiBtaW4gLTEyIG1heCArMTIgKi8KLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IHRkYTk4NzVfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCi17Ci0Jc3RydWN0IHRkYTk4NzUgKnQgPSB0b19zdGF0ZShzZCk7Ci0JaW50IGNodm9sID0gMCwgdm9sdW1lID0gMCwgYmFsYW5jZSA9IDAsIGxlZnQsIHJpZ2h0OwotCi0Jc3dpdGNoIChjdHJsLT5pZCkgewotCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQlsZWZ0ID0gKHQtPmx2b2wrODQpKjYwNjsKLQkJcmlnaHQgPSAodC0+cnZvbCs4NCkqNjA2OwotCi0JCXZvbHVtZSA9IG1heChsZWZ0LHJpZ2h0KTsKLQkJYmFsYW5jZSA9ICgzMjc2OCptaW4obGVmdCxyaWdodCkpLwotCQkJICAgICAgKHZvbHVtZSA/IHZvbHVtZSA6IDEpOwotCQliYWxhbmNlID0obGVmdDxyaWdodCk/Ci0JCQkoNjU1MzUtYmFsYW5jZSkgOiBiYWxhbmNlOwotCi0JCXZvbHVtZSA9IGN0cmwtPnZhbHVlOwotCi0JCWNodm9sPTE7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKLQkJbGVmdCA9ICh0LT5sdm9sKzg0KSo2MDY7Ci0JCXJpZ2h0ID0gKHQtPnJ2b2wrODQpKjYwNjsKLQotCQl2b2x1bWU9bWF4KGxlZnQscmlnaHQpOwotCi0JCWJhbGFuY2UgPSBjdHJsLT52YWx1ZTsKLQotCQljaHZvbD0xOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JCXQtPmJhc3MgPSAoKGN0cmwtPnZhbHVlLzI0MDApLTEyKSAmIDB4ZmY7Ci0JCWlmICh0LT5iYXNzID4gMTUpCi0JCQl0LT5iYXNzID0gMTU7Ci0JCWlmICh0LT5iYXNzIDwgLTEyKQotCQkJdC0+YmFzcyA9IC0xMiAmIDB4ZmY7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQl0LT50cmVibGUgPSAoKGN0cmwtPnZhbHVlLzI3MDApLTEyKSAmIDB4ZmY7Ci0JCWlmICh0LT50cmVibGUgPiAxMikKLQkJCXQtPnRyZWJsZSA9IDEyOwotCQlpZiAodC0+dHJlYmxlIDwgLTEyKQotCQkJdC0+dHJlYmxlID0gLTEyICYgMHhmZjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGNodm9sKSB7Ci0JCWxlZnQgPSAobWluKDY1NTM2IC0gYmFsYW5jZSwzMjc2OCkgKgotCQkJdm9sdW1lKSAvIDMyNzY4OwotCQlyaWdodCA9IChtaW4oYmFsYW5jZSwzMjc2OCkgKgotCQkJCXZvbHVtZSkgLyAzMjc2ODsKLQkJdC0+bHZvbCA9ICgobGVmdC82MDYpLTg0KSAmIDB4ZmY7Ci0JCWlmICh0LT5sdm9sID4gMjQpCi0JCQl0LT5sdm9sID0gMjQ7Ci0JCWlmICh0LT5sdm9sIDwgLTg0KQotCQkJdC0+bHZvbCA9IC04NCAmIDB4ZmY7Ci0KLQkJdC0+cnZvbCA9ICgocmlnaHQvNjA2KS04NCkgJiAweGZmOwotCQlpZiAodC0+cnZvbCA+IDI0KQotCQkJdC0+cnZvbCA9IDI0OwotCQlpZiAodC0+cnZvbCA8IC04NCkKLQkJCXQtPnJ2b2wgPSAtODQgJiAweGZmOwotCX0KLQotCXRkYTk4NzVfc2V0KHNkKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0ZGE5ODc1X3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQotewotCXN3aXRjaCAocWMtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCA1ODg4MCk7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgotCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgMzI3NjgpOwotCX0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB0ZGE5ODc1X2NvcmVfb3BzID0gewotCS5xdWVyeWN0cmwgPSB0ZGE5ODc1X3F1ZXJ5Y3RybCwKLQkuZ19jdHJsID0gdGRhOTg3NV9nX2N0cmwsCi0JLnNfY3RybCA9IHRkYTk4NzVfc19jdHJsLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgdGRhOTg3NV9vcHMgPSB7Ci0JLmNvcmUgPSAmdGRhOTg3NV9jb3JlX29wcywKLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLQotLyogKioqKioqKioqKioqKioqKioqKioqKiogKgotICogaTJjIGludGVyZmFjZSBmdW5jdGlvbnMgKgotICogKioqKioqKioqKioqKioqKioqKioqKiogKi8KLQotc3RhdGljIGludCB0ZGE5ODc1X2NoZWNraXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGFkZHIpCi17Ci0JaW50IGRpYywgcmV2OwotCi0JZGljID0gaTJjX3JlYWRfcmVnaXN0ZXIoY2xpZW50LCBhZGRyLCAyNTQpOwotCXJldiA9IGkyY19yZWFkX3JlZ2lzdGVyKGNsaWVudCwgYWRkciwgMjU1KTsKLQotCWlmIChkaWMgPT0gMCB8fCBkaWMgPT0gMikgeyAvKiB0ZGE5ODc1IGFuZCB0ZGE5ODc1QSAqLwotCQl2NGxfaW5mbyhjbGllbnQsICJ0ZGE5ODc1JXMgcmV2LiAlZCBkZXRlY3RlZCBhdCAweCUwMnhcbiIsCi0JCQlkaWMgPT0gMCA/ICIiIDogIkEiLCByZXYsIGFkZHIgPDwgMSk7Ci0JCXJldHVybiAxOwotCX0KLQl2NGxfaW5mbyhjbGllbnQsICJubyBzdWNoIGNoaXAgYXQgMHglMDJ4IChkaWM9MHgleCByZXY9MHgleClcbiIsCi0JCQlhZGRyIDw8IDEsIGRpYywgcmV2KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0ZGE5ODc1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHRkYTk4NzUgKnQ7Ci0Jc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKLQotCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCUwMnggKCVzKVxuIiwKLQkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwotCi0JaWYgKCF0ZGE5ODc1X2NoZWNraXQoY2xpZW50LCBjbGllbnQtPmFkZHIpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXQgPSBremFsbG9jKHNpemVvZigqdCksIEdGUF9LRVJORUwpOwotCWlmICghdCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0Jc2QgPSAmdC0+c2Q7Ci0JdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnRkYTk4NzVfb3BzKTsKLQotCWRvX3RkYTk4NzVfaW5pdChzZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdGRhOTg3NV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlkb190ZGE5ODc1X2luaXQoc2QpOwotCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKLQlrZnJlZSh0b19zdGF0ZShzZCkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdGRhOTg3NV9pZFtdID0gewotCXsgInRkYTk4NzUiLCAwIH0sCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRkYTk4NzVfaWQpOwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGRhOTg3NV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JCS5uYW1lCT0gInRkYTk4NzUiLAotCX0sCi0JLnByb2JlCQk9IHRkYTk4NzVfcHJvYmUsCi0JLnJlbW92ZQkJPSB0ZGE5ODc1X3JlbW92ZSwKLQkuaWRfdGFibGUJPSB0ZGE5ODc1X2lkLAotfTsKLQotc3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZGE5ODc1KHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0ZGE5ODc1X2RyaXZlcik7Ci19Ci0KLXN0YXRpYyBfX2V4aXQgdm9pZCBleGl0X3RkYTk4NzUodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmdGRhOTg3NV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3RkYTk4NzUpOwotbW9kdWxlX2V4aXQoZXhpdF90ZGE5ODc1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLXZpZGVvLmMKaW5kZXggYTFmZmUxOC4uZGYzM2ExZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLXZpZGVvLmMKQEAgLTUxMiwxOSArNTEyLDIwIEBACiAJCQlpbnQgYnVmX3NpemUsIGdmcF90IGdmcF9mbGFncywKIAkJCXVzYl9jb21wbGV0ZV90IGNvbXBsZXRlX2ZuLCB2b2lkICpjb250ZXh0KQogewotCXN0cnVjdCB1cmIgKnVyYjsKLQl2b2lkICptZW07Ci0JaW50IGk7CisJaW50IGkgPSAwOwogCi0JZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0JCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgZ2ZwX2ZsYWdzKTsKKwlmb3IgKDsgaSA8IG51bTsgaSsrKSB7CisJCXZvaWQgKm1lbTsKKwkJc3RydWN0IHVyYiAqdXJiID0gdXNiX2FsbG9jX3VyYigwLCBnZnBfZmxhZ3MpOwogCQlpZiAodXJiID09IE5VTEwpCiAJCQlyZXR1cm4gaTsKIAogCQltZW0gPSB1c2JfYWxsb2NfY29oZXJlbnQodWRldiwgYnVmX3NpemUsIGdmcF9mbGFncywKIAkJCQkJICZ1cmItPnRyYW5zZmVyX2RtYSk7Ci0JCWlmIChtZW0gPT0gTlVMTCkKKwkJaWYgKG1lbSA9PSBOVUxMKSB7CisJCQl1c2JfZnJlZV91cmIodXJiKTsKIAkJCXJldHVybiBpOworCQl9CiAKIAkJdXNiX2ZpbGxfYnVsa191cmIodXJiLCB1ZGV2LCB1c2JfcmN2YnVsa3BpcGUodWRldiwgZXBfYWRkciksCiAJCQkJbWVtLCBidWZfc2l6ZSwgY29tcGxldGVfZm4sIGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCmluZGV4IDNmMDg3MWIuLjgxMGVlZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKQEAgLTQwNywxOCArNDA3LDYgQEAKIAkvKiBEZWNyZWFzZSB0aGUgbW9kdWxlIHVzZSBjb3VudCB0byBtYXRjaCB0aGUgZmlyc3QgdHJ5X21vZHVsZV9nZXQuICovCiAJbW9kdWxlX3B1dChjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKIAotCWlmIChzZCkgewotCQkvKiBXZSByZXR1cm4gZXJyb3JzIGZyb20gdjRsMl9zdWJkZXZfY2FsbCBvbmx5IGlmIHdlIGhhdmUgdGhlCi0JCSAgIGNhbGxiYWNrIGFzIHRoZSAuc19jb25maWcgaXMgbm90IG1hbmRhdG9yeSAqLwotCQlpbnQgZXJyID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19jb25maWcsCi0JCQkJaW5mby0+aXJxLCBpbmZvLT5wbGF0Zm9ybV9kYXRhKTsKLQotCQlpZiAoZXJyICYmIGVyciAhPSAtRU5PSU9DVExDTUQpIHsKLQkJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKLQkJCXNkID0gTlVMTDsKLQkJfQotCX0KLQogZXJyb3I6CiAJLyogSWYgd2UgaGF2ZSBhIGNsaWVudCBidXQgbm8gc3ViZGV2LCB0aGVuIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZAogCSAgIHdlIG11c3QgdW5yZWdpc3RlciB0aGUgY2xpZW50LiAqLwpAQCAtNDI4LDkgKzQxNiw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2kyY19uZXdfc3ViZGV2X2JvYXJkKTsKIAotc3RydWN0IHY0bDJfc3ViZGV2ICp2NGwyX2kyY19uZXdfc3ViZGV2X2NmZyhzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2LAorc3RydWN0IHY0bDJfc3ViZGV2ICp2NGwyX2kyY19uZXdfc3ViZGV2KHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYsCiAJCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgY29uc3QgY2hhciAqY2xpZW50X3R5cGUsCi0JCWludCBpcnEsIHZvaWQgKnBsYXRmb3JtX2RhdGEsCiAJCXU4IGFkZHIsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwcm9iZV9hZGRycykKIHsKIAlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKQEAgLTQ0MCwxMiArNDI3LDEwIEBACiAJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOwogCXN0cmxjcHkoaW5mby50eXBlLCBjbGllbnRfdHlwZSwgc2l6ZW9mKGluZm8udHlwZSkpOwogCWluZm8uYWRkciA9IGFkZHI7Ci0JaW5mby5pcnEgPSBpcnE7Ci0JaW5mby5wbGF0Zm9ybV9kYXRhID0gcGxhdGZvcm1fZGF0YTsKIAogCXJldHVybiB2NGwyX2kyY19uZXdfc3ViZGV2X2JvYXJkKHY0bDJfZGV2LCBhZGFwdGVyLCAmaW5mbywgcHJvYmVfYWRkcnMpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9pMmNfbmV3X3N1YmRldl9jZmcpOworRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9pMmNfbmV3X3N1YmRldik7CiAKIC8qIFJldHVybiBpMmMgY2xpZW50IGFkZHJlc3Mgb2YgdjRsMl9zdWJkZXYuICovCiB1bnNpZ25lZCBzaG9ydCB2NGwyX2kyY19zdWJkZXZfYWRkcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWN0cmxzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY3RybHMuYwppbmRleCA4ZjgxZWZjLi5lZjY2ZDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY3RybHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY3RybHMuYwpAQCAtNTY5LDcgKzU2OSw3IEBACiAJaW50IHJldDsKIAl1MzIgc2l6ZTsKIAotCWN0cmwtPmhhc19uZXcgPSAxOworCWN0cmwtPmlzX25ldyA9IDE7CiAJc3dpdGNoIChjdHJsLT50eXBlKSB7CiAJY2FzZSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSNjQ6CiAJCWN0cmwtPnZhbDY0ID0gYy0+dmFsdWU2NDsKQEAgLTEyODAsOCArMTI4MCwxMiBAQAogCQlpZiAoY3RybC0+ZG9uZSkKIAkJCWNvbnRpbnVlOwogCi0JCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm5jb250cm9sczsgaSsrKQotCQkJY3VyX3RvX25ldyhtYXN0ZXItPmNsdXN0ZXJbaV0pOworCQlmb3IgKGkgPSAwOyBpIDwgbWFzdGVyLT5uY29udHJvbHM7IGkrKykgeworCQkJaWYgKG1hc3Rlci0+Y2x1c3RlcltpXSkgeworCQkJCWN1cl90b19uZXcobWFzdGVyLT5jbHVzdGVyW2ldKTsKKwkJCQltYXN0ZXItPmNsdXN0ZXJbaV0tPmlzX25ldyA9IDE7CisJCQl9CisJCX0KIAogCQkvKiBTa2lwIGJ1dHRvbiBjb250cm9scyBhbmQgcmVhZC1vbmx5IGNvbnRyb2xzLiAqLwogCQlpZiAoY3RybC0+dHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9CVVRUT04gfHwKQEAgLTEzNDAsMTIgKzEzNDQsMTUgQEAKIAogCWN0cmwgPSByZWYtPmN0cmw7CiAJbWVtc2V0KHFjLCAwLCBzaXplb2YoKnFjKSk7Ci0JcWMtPmlkID0gY3RybC0+aWQ7CisJaWYgKGlkID49IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSkKKwkJcWMtPmlkID0gaWQ7CisJZWxzZQorCQlxYy0+aWQgPSBjdHJsLT5pZDsKIAlzdHJsY3B5KHFjLT5uYW1lLCBjdHJsLT5uYW1lLCBzaXplb2YocWMtPm5hbWUpKTsKIAlxYy0+bWluaW11bSA9IGN0cmwtPm1pbmltdW07CiAJcWMtPm1heGltdW0gPSBjdHJsLT5tYXhpbXVtOwogCXFjLT5kZWZhdWx0X3ZhbHVlID0gY3RybC0+ZGVmYXVsdF92YWx1ZTsKLQlpZiAocWMtPnR5cGUgPT0gVjRMMl9DVFJMX1RZUEVfTUVOVSkKKwlpZiAoY3RybC0+dHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9NRU5VKQogCQlxYy0+c3RlcCA9IDE7CiAJZWxzZQogCQlxYy0+c3RlcCA9IGN0cmwtPnN0ZXA7CkBAIC0xNjQ1LDcgKzE2NTIsNyBAQAogCQlpZiAoY3RybCA9PSBOVUxMKQogCQkJY29udGludWU7CiAKLQkJaWYgKGN0cmwtPmhhc19uZXcpIHsKKwkJaWYgKGN0cmwtPmlzX25ldykgewogCQkJLyogRG91YmxlIGNoZWNrIHRoaXM6IGl0IG1heSBoYXZlIGNoYW5nZWQgc2luY2UgdGhlCiAJCQkgICBsYXN0IGNoZWNrIGluIHRyeV9vcl9zZXRfZXh0X2N0cmxzKCkuICovCiAJCQlpZiAoc2V0ICYmIChjdHJsLT5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX0dSQUJCRUQpKQpAQCAtMTcxOSwxMyArMTcyNiwxMyBAQAogCiAJCXY0bDJfY3RybF9sb2NrKGN0cmwpOwogCi0JCS8qIFJlc2V0IHRoZSAnaGFzX25ldycgZmxhZ3Mgb2YgdGhlIGNsdXN0ZXIgKi8KKwkJLyogUmVzZXQgdGhlICdpc19uZXcnIGZsYWdzIG9mIHRoZSBjbHVzdGVyICovCiAJCWZvciAoaiA9IDA7IGogPCBtYXN0ZXItPm5jb250cm9sczsgaisrKQogCQkJaWYgKG1hc3Rlci0+Y2x1c3RlcltqXSkKLQkJCQltYXN0ZXItPmNsdXN0ZXJbal0tPmhhc19uZXcgPSAwOworCQkJCW1hc3Rlci0+Y2x1c3RlcltqXS0+aXNfbmV3ID0gMDsKIAogCQkvKiBDb3B5IHRoZSBuZXcgY2FsbGVyLXN1cHBsaWVkIGNvbnRyb2wgdmFsdWVzLgotCQkgICB1c2VyX3RvX25ldygpIHNldHMgJ2hhc19uZXcnIHRvIDEuICovCisJCSAgIHVzZXJfdG9fbmV3KCkgc2V0cyAnaXNfbmV3JyB0byAxLiAqLwogCQlyZXQgPSBjbHVzdGVyX3dhbGsoaSwgY3MsIGhlbHBlcnMsIHVzZXJfdG9fbmV3KTsKIAogCQlpZiAoIXJldCkKQEAgLTE4MjAsMTUgKzE4MjcsMTggQEAKIAlpbnQgcmV0OwogCWludCBpOwogCisJaWYgKGN0cmwtPmZsYWdzICYgVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZKQorCQlyZXR1cm4gLUVBQ0NFUzsKKwogCXY0bDJfY3RybF9sb2NrKGN0cmwpOwogCi0JLyogUmVzZXQgdGhlICdoYXNfbmV3JyBmbGFncyBvZiB0aGUgY2x1c3RlciAqLworCS8qIFJlc2V0IHRoZSAnaXNfbmV3JyBmbGFncyBvZiB0aGUgY2x1c3RlciAqLwogCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm5jb250cm9sczsgaSsrKQogCQlpZiAobWFzdGVyLT5jbHVzdGVyW2ldKQotCQkJbWFzdGVyLT5jbHVzdGVyW2ldLT5oYXNfbmV3ID0gMDsKKwkJCW1hc3Rlci0+Y2x1c3RlcltpXS0+aXNfbmV3ID0gMDsKIAogCWN0cmwtPnZhbCA9ICp2YWw7Ci0JY3RybC0+aGFzX25ldyA9IDE7CisJY3RybC0+aXNfbmV3ID0gMTsKIAlyZXQgPSB0cnlfb3Jfc2V0X2NvbnRyb2xfY2x1c3RlcihtYXN0ZXIsIGZhbHNlKTsKIAlpZiAoIXJldCkKIAkJcmV0ID0gdHJ5X29yX3NldF9jb250cm9sX2NsdXN0ZXIobWFzdGVyLCB0cnVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYwppbmRleCAzNTllMjMyLi4zNDE3NjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jCkBAIC00MTksNiArNDE5LDEwIEBACiAgKglUaGUgcmVnaXN0cmF0aW9uIGNvZGUgYXNzaWducyBtaW5vciBudW1iZXJzIGFuZCBkZXZpY2Ugbm9kZSBudW1iZXJzCiAgKgliYXNlZCBvbiB0aGUgcmVxdWVzdGVkIHR5cGUgYW5kIHJlZ2lzdGVycyB0aGUgbmV3IGRldmljZSBub2RlIHdpdGgKICAqCXRoZSBrZXJuZWwuCisgKgorICoJVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgc3RydWN0IHZpZGVvX2RldmljZSB3YXMgemVyb2VkIHdoZW4gaXQKKyAqCXdhcyBhbGxvY2F0ZWQgYW5kIGRvZXMgbm90IGNvbnRhaW4gYW55IHN0YWxlIGRhdGUuCisgKgogICoJQW4gZXJyb3IgaXMgcmV0dXJuZWQgaWYgbm8gZnJlZSBtaW5vciBvciBkZXZpY2Ugbm9kZSBudW1iZXIgY291bGQgYmUKICAqCWZvdW5kLCBvciBpZiB0aGUgcmVnaXN0cmF0aW9uIG9mIHRoZSBkZXZpY2Ugbm9kZSBmYWlsZWQuCiAgKgpAQCAtNDQwLDcgKzQ0NCw2IEBACiAJaW50IG1pbm9yX29mZnNldCA9IDA7CiAJaW50IG1pbm9yX2NudCA9IFZJREVPX05VTV9ERVZJQ0VTOwogCWNvbnN0IGNoYXIgKm5hbWVfYmFzZTsKLQl2b2lkICpwcml2ID0gdmRldi0+ZGV2LnA7CiAKIAkvKiBBIG1pbm9yIHZhbHVlIG9mIC0xIG1hcmtzIHRoaXMgdmlkZW8gZGV2aWNlIGFzIG5ldmVyCiAJICAgaGF2aW5nIGJlZW4gcmVnaXN0ZXJlZCAqLwpAQCAtNTU5LDEwICs1NjIsNiBAQAogCX0KIAogCS8qIFBhcnQgNDogcmVnaXN0ZXIgdGhlIGRldmljZSB3aXRoIHN5c2ZzICovCi0JbWVtc2V0KCZ2ZGV2LT5kZXYsIDAsIHNpemVvZih2ZGV2LT5kZXYpKTsKLQkvKiBUaGUgbWVtc2V0IGFib3ZlIGNsZWFyZWQgdGhlIGRldmljZSdzIGRldmljZV9wcml2YXRlLCBzbwotCSAgIHB1dCBiYWNrIHRoZSBjb3B5IHdlIG1hZGUgZWFybGllci4gKi8KLQl2ZGV2LT5kZXYucCA9IHByaXY7CiAJdmRldi0+ZGV2LmNsYXNzID0gJnZpZGVvX2NsYXNzOwogCXZkZXYtPmRldi5kZXZ0ID0gTUtERVYoVklERU9fTUFKT1IsIHZkZXYtPm1pbm9yKTsKIAlpZiAodmRldi0+cGFyZW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jCmluZGV4IDdmZTZmOTIuLmNlNjRmZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMKQEAgLTEwMCw2ICsxMDAsNyBAQAogCQkJICAgaXMgYSBwbGF0Zm9ybSBidXMsIHRoZW4gaXQgaXMgbmV2ZXIgZGVsZXRlZC4gKi8KIAkJCWlmIChjbGllbnQpCiAJCQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudCk7CisJCQljb250aW51ZTsKIAkJfQogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfU1BJKQpAQCAtMTA4LDYgKzEwOSw3IEBACiAKIAkJCWlmIChzcGkpCiAJCQkJc3BpX3VucmVnaXN0ZXJfZGV2aWNlKHNwaSk7CisJCQljb250aW51ZTsKIAkJfQogI2VuZGlmCiAJfQpAQCAtMTI2LDExICsxMjgsMTkgQEAKIAlXQVJOX09OKHNkLT52NGwyX2RldiAhPSBOVUxMKTsKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KHNkLT5vd25lcikpCiAJCXJldHVybiAtRU5PREVWOworCXNkLT52NGwyX2RldiA9IHY0bDJfZGV2OworCWlmIChzZC0+aW50ZXJuYWxfb3BzICYmIHNkLT5pbnRlcm5hbF9vcHMtPnJlZ2lzdGVyZWQpIHsKKwkJZXJyID0gc2QtPmludGVybmFsX29wcy0+cmVnaXN0ZXJlZChzZCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KIAkvKiBUaGlzIGp1c3QgcmV0dXJucyAwIGlmIGVpdGhlciBvZiB0aGUgdHdvIGFyZ3MgaXMgTlVMTCAqLwogCWVyciA9IHY0bDJfY3RybF9hZGRfaGFuZGxlcih2NGwyX2Rldi0+Y3RybF9oYW5kbGVyLCBzZC0+Y3RybF9oYW5kbGVyKTsKLQlpZiAoZXJyKQorCWlmIChlcnIpIHsKKwkJaWYgKHNkLT5pbnRlcm5hbF9vcHMgJiYgc2QtPmludGVybmFsX29wcy0+dW5yZWdpc3RlcmVkKQorCQkJc2QtPmludGVybmFsX29wcy0+dW5yZWdpc3RlcmVkKHNkKTsKIAkJcmV0dXJuIGVycjsKLQlzZC0+djRsMl9kZXYgPSB2NGwyX2RldjsKKwl9CiAJc3Bpbl9sb2NrKCZ2NGwyX2Rldi0+bG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmc2QtPmxpc3QsICZ2NGwyX2Rldi0+c3ViZGV2cyk7CiAJc3Bpbl91bmxvY2soJnY0bDJfZGV2LT5sb2NrKTsKQEAgLTE0Niw2ICsxNTYsOCBAQAogCXNwaW5fbG9jaygmc2QtPnY0bDJfZGV2LT5sb2NrKTsKIAlsaXN0X2RlbCgmc2QtPmxpc3QpOwogCXNwaW5fdW5sb2NrKCZzZC0+djRsMl9kZXYtPmxvY2spOworCWlmIChzZC0+aW50ZXJuYWxfb3BzICYmIHNkLT5pbnRlcm5hbF9vcHMtPnVucmVnaXN0ZXJlZCkKKwkJc2QtPmludGVybmFsX29wcy0+dW5yZWdpc3RlcmVkKHNkKTsKIAlzZC0+djRsMl9kZXYgPSBOVUxMOwogCW1vZHVsZV9wdXQoc2QtPm93bmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKaW5kZXggN2U0N2YxNS4uZjUxMzI3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKQEAgLTE2NTksMjAgKzE2NTksMjQgQEAKIAl7CiAJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcCA9IGFyZzsKIAotCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCQlyZXQgPSAtRVBFUk07Ci0JCWVsc2UgaWYgKG9wcy0+dmlkaW9jX2dfcmVnaXN0ZXIpCi0JCQlyZXQgPSBvcHMtPnZpZGlvY19nX3JlZ2lzdGVyKGZpbGUsIGZoLCBwKTsKKwkJaWYgKG9wcy0+dmlkaW9jX2dfcmVnaXN0ZXIpIHsKKwkJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCQlyZXQgPSAtRVBFUk07CisJCQllbHNlCisJCQkJcmV0ID0gb3BzLT52aWRpb2NfZ19yZWdpc3RlcihmaWxlLCBmaCwgcCk7CisJCX0KIAkJYnJlYWs7CiAJfQogCWNhc2UgVklESU9DX0RCR19TX1JFR0lTVEVSOgogCXsKIAkJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpwID0gYXJnOwogCi0JCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldCA9IC1FUEVSTTsKLQkJZWxzZSBpZiAob3BzLT52aWRpb2Nfc19yZWdpc3RlcikKLQkJCXJldCA9IG9wcy0+dmlkaW9jX3NfcmVnaXN0ZXIoZmlsZSwgZmgsIHApOworCQlpZiAob3BzLT52aWRpb2Nfc19yZWdpc3RlcikgeworCQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJCXJldCA9IC1FUEVSTTsKKwkJCWVsc2UKKwkJCQlyZXQgPSBvcHMtPnZpZGlvY19zX3JlZ2lzdGVyKGZpbGUsIGZoLCBwKTsKKwkJfQogCQlicmVhazsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjYuYwppbmRleCAwMTllZTIwLi5mYTM1NjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2Ni5jCkBAIC05MzcsNiArOTM3LDcgQEAKIAkJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShjYW0tPnBkZXYpOwogCQl3OTk2Nl9zZXRfc3RhdGUoY2FtLCBXOTk2Nl9TVEFURV9QREVWLCAwKTsKIAl9CisJbWVtc2V0KGNhbSwgMCwgc2l6ZW9mKCpjYW0pKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5jCmluZGV4IDljZGMzYmIuLjlmMmJhYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5jCkBAIC0xMDQxLDcgKzEwNDEsNyBAQAogCS8qIGFsbG9jYXRlIG1lbW9yeSAqYmVmb3JlKiBkb2luZyBhbnl0aGluZyB0byB0aGUgaGFyZHdhcmUKIAkgKiBpbiBjYXNlIGFsbG9jYXRpb24gZmFpbHMgKi8KIAl6ci0+c3RhdF9jb20gPSBremFsbG9jKEJVWl9OVU1fU1RBVF9DT00gKiA0LCBHRlBfS0VSTkVMKTsKLQl6ci0+dmlkZW9fZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZpZGVvX2RldmljZSksIEdGUF9LRVJORUwpOworCXpyLT52aWRlb19kZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKIAlpZiAoIXpyLT5zdGF0X2NvbSB8fCAhenItPnZpZGVvX2RldikgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZW1zdGljay9jb3JlL21lbXN0aWNrLmMgYi9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbWVtc3RpY2suYwppbmRleCBlOWEzZWFiLi44YzFkODVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbWVtc3RpY2suYworKysgYi9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbWVtc3RpY2suYwpAQCAtNjIxLDcgKzYyMSw3IEBACiB7CiAJaW50IHJjOwogCi0Jd29ya3F1ZXVlID0gY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKCJrbWVtc3RpY2siKTsKKwl3b3JrcXVldWUgPSBjcmVhdGVfZnJlZXphYmxlX3dvcmtxdWV1ZSgia21lbXN0aWNrIik7CiAJaWYgKCF3b3JrcXVldWUpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCmluZGV4IGY3MWYyMjkuLjE3MzVjODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCkBAIC03Niw4ICs3Niw4IEBACiAjZGVmaW5lIENPUFlSSUdIVAkiQ29weXJpZ2h0IChjKSAxOTk5LTIwMDggIiBNT0RVTEVBVVRIT1IKICNlbmRpZgogCi0jZGVmaW5lIE1QVF9MSU5VWF9WRVJTSU9OX0NPTU1PTgkiMy4wNC4xNyIKLSNkZWZpbmUgTVBUX0xJTlVYX1BBQ0tBR0VfTkFNRQkJIkAoIyltcHRsaW51eC0zLjA0LjE3IgorI2RlZmluZSBNUFRfTElOVVhfVkVSU0lPTl9DT01NT04JIjMuMDQuMTgiCisjZGVmaW5lIE1QVF9MSU5VWF9QQUNLQUdFX05BTUUJCSJAKCMpbXB0bGludXgtMy4wNC4xOCIKICNkZWZpbmUgV0hBVF9NQUdJQ19TVFJJTkcJCSJAIiAiKCIgIiMiICIpIgogCiAjZGVmaW5lIHNob3dfbXB0bW9kX3ZlcihzLHZlcikgIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jCmluZGV4IGEzODU2ZWQuLmU4ZGViOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYwpAQCAtNTk3LDYgKzU5NywxMyBAQAogfQogCiBzdGF0aWMgaW50CittcHRjdGxfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCit7CisJZmFzeW5jX2hlbHBlcigtMSwgZmlsZXAsIDAsICZhc3luY19xdWV1ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIG1wdGN0bF9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBtb2RlKQogewogCU1QVF9BREFQVEVSCSppb2M7CkBAIC0yODE1LDYgKzI4MjIsNyBAQAogCS5sbHNlZWsgPQlub19sbHNlZWssCiAJLmZhc3luYyA9IAltcHRjdGxfZmFzeW5jLAogCS51bmxvY2tlZF9pb2N0bCA9IG1wdGN0bF9pb2N0bCwKKwkucmVsZWFzZSA9CW1wdGN0bF9yZWxlYXNlLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsID0gY29tcGF0X21wY3RsX2lvY3RsLAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKaW5kZXggNTliOGY1My4uMGQ5YjgyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwpAQCAtMTg3Myw4ICsxODczLDkgQEAKIAl9CiAKICBvdXQ6Ci0JcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgInRhc2sgYWJvcnQ6ICVzIChzYz0lcClcbiIsCi0JICAgIGlvYy0+bmFtZSwgKChyZXR2YWwgPT0gU1VDQ0VTUykgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIiksIFNDcG50KTsKKwlwcmludGsoTVlJT0Nfc19JTkZPX0ZNVCAidGFzayBhYm9ydDogJXMgKHJ2PSUwNHgpIChzYz0lcCkgKHNuPSVsZClcbiIsCisJICAgIGlvYy0+bmFtZSwgKChyZXR2YWwgPT0gU1VDQ0VTUykgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIiksIHJldHZhbCwKKwkgICAgU0NwbnQsIFNDcG50LT5zZXJpYWxfbnVtYmVyKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC0xOTExLDcgKzE5MTIsNyBAQAogCiAJdmRldmljZSA9IFNDcG50LT5kZXZpY2UtPmhvc3RkYXRhOwogCWlmICghdmRldmljZSB8fCAhdmRldmljZS0+dnRhcmdldCkgewotCQlyZXR2YWwgPSBTVUNDRVNTOworCQlyZXR2YWwgPSAwOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy90aWZtX2NvcmUuYyBiL2RyaXZlcnMvbWlzYy90aWZtX2NvcmUuYwppbmRleCA1ZjY4NTJkLi40NGQ0NDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvdGlmbV9jb3JlLmMKKysrIGIvZHJpdmVycy9taXNjL3RpZm1fY29yZS5jCkBAIC0zMjksNyArMzI5LDcgQEAKIHsKIAlpbnQgcmM7CiAKLQl3b3JrcXVldWUgPSBjcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUoInRpZm0iKTsKKwl3b3JrcXVldWUgPSBjcmVhdGVfZnJlZXphYmxlX3dvcmtxdWV1ZSgidGlmbSIpOwogCWlmICghd29ya3F1ZXVlKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3Ztd19iYWxsb29uLmMgYi9kcml2ZXJzL21pc2Mvdm13X2JhbGxvb24uYwppbmRleCA0ZDJlYThlLi42ZGY1YTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvdm13X2JhbGxvb24uYworKysgYi9kcml2ZXJzL21pc2Mvdm13X2JhbGxvb24uYwpAQCAtNzg1LDcgKzc4NSw3IEBACiAJaWYgKHg4Nl9oeXBlciAhPSAmeDg2X2h5cGVyX3Ztd2FyZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQl2bWJhbGxvb25fd3EgPSBjcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUoInZtbWVtY3RsIik7CisJdm1iYWxsb29uX3dxID0gY3JlYXRlX2ZyZWV6YWJsZV93b3JrcXVldWUoInZtbWVtY3RsIik7CiAJaWYgKCF2bWJhbGxvb25fd3EpIHsKIAkJcHJfZXJyKCJmYWlsZWQgdG8gY3JlYXRlIHdvcmtxdWV1ZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9iZmluX3NkaC5jIGIvZHJpdmVycy9tbWMvaG9zdC9iZmluX3NkaC5jCmluZGV4IGJhYzdkNjIuLjAzNzFiZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYmZpbl9zZGguYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2JmaW5fc2RoLmMKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQltbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2YoKm1tYyksICZwZGV2LT5kZXYpOworCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3Qgc2RoX2hvc3QpLCAmcGRldi0+ZGV2KTsKIAlpZiAoIW1tYykgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMKaW5kZXggYjNhMGFiMC4uNzQyMThhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMKQEAgLTE0LDYgKzE0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtODI3LDggKzgyOCw4IEBACiAJfQogCiAJaG9zdC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibW1jIik7Ci0JaWYgKCFob3N0LT5jbGspIHsKLQkJcmV0ID0gLUVOT0VOVDsKKwlpZiAoSVNfRVJSKGhvc3QtPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihob3N0LT5jbGspOwogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IG1tYyBjbG9ja1xuIik7CiAJCWdvdG8gZXJyX2ZyZWVfaG9zdDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCmluZGV4IDU2MzAyMjguLjJkNmRlM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CkBAIC00NiwxMCArNDcsNiBAQAogICoJICAgICAgaXMgYXNzZXJ0ZWQgKGxpa2V3aXNlIGZvciBSWCkKICAqIEBmaWZvaGFsZnNpemU6IG51bWJlciBvZiBieXRlcyB0aGF0IGNhbiBiZSB3cml0dGVuIHdoZW4gTUNJX1RYRklGT0hBTEZFTVBUWQogICoJCSAgaXMgYXNzZXJ0ZWQgKGxpa2V3aXNlIGZvciBSWCkKLSAqIEBicm9rZW5fYmxvY2tlbmQ6IHRoZSBNQ0lfREFUQUJMT0NLRU5EIGlzIGJyb2tlbiBvbiB0aGUgaGFyZHdhcmUKLSAqCQlhbmQgd2lsbCBub3Qgd29yayBhdCBhbGwuCi0gKiBAYnJva2VuX2Jsb2NrZW5kX2RtYTogdGhlIE1DSV9EQVRBQkxPQ0tFTkQgaXMgYnJva2VuIG9uIHRoZSBoYXJkd2FyZSB3aGVuCi0gKgkJdXNpbmcgRE1BLgogICogQHNkaW86IHZhcmlhbnQgc3VwcG9ydHMgU0RJTwogICogQHN0X2Nsa2RpdjogdHJ1ZSBpZiB1c2luZyBhIFNULXNwZWNpZmljIGNsb2NrIGRpdmlkZXIgYWxnb3JpdGhtCiAgKi8KQEAgLTU5LDggKzU2LDYgQEAKIAl1bnNpZ25lZCBpbnQJCWRhdGFsZW5ndGhfYml0czsKIAl1bnNpZ25lZCBpbnQJCWZpZm9zaXplOwogCXVuc2lnbmVkIGludAkJZmlmb2hhbGZzaXplOwotCWJvb2wJCQlicm9rZW5fYmxvY2tlbmQ7Ci0JYm9vbAkJCWJyb2tlbl9ibG9ja2VuZF9kbWE7CiAJYm9vbAkJCXNkaW87CiAJYm9vbAkJCXN0X2Nsa2RpdjsKIH07CkBAIC03Niw3ICs3MSw2IEBACiAJLmZpZm9oYWxmc2l6ZQkJPSA4ICogNCwKIAkuY2xrcmVnX2VuYWJsZQkJPSAxIDw8IDEzLCAvKiBIV0ZDRU4gKi8KIAkuZGF0YWxlbmd0aF9iaXRzCT0gMTYsCi0JLmJyb2tlbl9ibG9ja2VuZF9kbWEJPSB0cnVlLAogCS5zZGlvCQkJPSB0cnVlLAogfTsKIApAQCAtODYsNyArODAsNiBAQAogCS5jbGtyZWcJCQk9IE1DSV9DTEtfRU5BQkxFLAogCS5jbGtyZWdfZW5hYmxlCQk9IDEgPDwgMTQsIC8qIEhXRkNFTiAqLwogCS5kYXRhbGVuZ3RoX2JpdHMJPSAyNCwKLQkuYnJva2VuX2Jsb2NrZW5kCT0gdHJ1ZSwKIAkuc2RpbwkJCT0gdHJ1ZSwKIAkuc3RfY2xrZGl2CQk9IHRydWUsCiB9OwpAQCAtMjEwLDggKzIwMyw2IEBACiAJaG9zdC0+ZGF0YSA9IGRhdGE7CiAJaG9zdC0+c2l6ZSA9IGRhdGEtPmJsa3N6ICogZGF0YS0+YmxvY2tzOwogCWhvc3QtPmRhdGFfeGZlcmVkID0gMDsKLQlob3N0LT5ibG9ja2VuZCA9IGZhbHNlOwotCWhvc3QtPmRhdGFlbmQgPSBmYWxzZTsKIAogCW1tY2lfaW5pdF9zZyhob3N0LCBkYXRhKTsKIApAQCAtMjg4LDIxICsyNzksMjYgQEAKIG1tY2lfZGF0YV9pcnEoc3RydWN0IG1tY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhLAogCSAgICAgIHVuc2lnbmVkIGludCBzdGF0dXMpCiB7Ci0Jc3RydWN0IHZhcmlhbnRfZGF0YSAqdmFyaWFudCA9IGhvc3QtPnZhcmlhbnQ7Ci0KIAkvKiBGaXJzdCBjaGVjayBmb3IgZXJyb3JzICovCiAJaWYgKHN0YXR1cyAmIChNQ0lfREFUQUNSQ0ZBSUx8TUNJX0RBVEFUSU1FT1VUfE1DSV9UWFVOREVSUlVOfE1DSV9SWE9WRVJSVU4pKSB7Ci0JCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiTUNJIEVSUk9SIElSUSAoc3RhdHVzICUwOHgpXG4iLCBzdGF0dXMpOwotCQlpZiAoc3RhdHVzICYgTUNJX0RBVEFDUkNGQUlMKQotCQkJZGF0YS0+ZXJyb3IgPSAtRUlMU0VROwotCQllbHNlIGlmIChzdGF0dXMgJiBNQ0lfREFUQVRJTUVPVVQpCi0JCQlkYXRhLT5lcnJvciA9IC1FVElNRURPVVQ7Ci0JCWVsc2UgaWYgKHN0YXR1cyAmIChNQ0lfVFhVTkRFUlJVTnxNQ0lfUlhPVkVSUlVOKSkKLQkJCWRhdGEtPmVycm9yID0gLUVJTzsKKwkJdTMyIHJlbWFpbiwgc3VjY2VzczsKIAotCQkvKiBGb3JjZS1jb21wbGV0ZSB0aGUgdHJhbnNhY3Rpb24gKi8KLQkJaG9zdC0+YmxvY2tlbmQgPSB0cnVlOwotCQlob3N0LT5kYXRhZW5kID0gdHJ1ZTsKKwkJLyogQ2FsY3VsYXRlIGhvdyBmYXIgd2UgYXJlIGludG8gdGhlIHRyYW5zZmVyICovCisJCXJlbWFpbiA9IHJlYWRsKGhvc3QtPmJhc2UgKyBNTUNJREFUQUNOVCk7CisJCXN1Y2Nlc3MgPSBkYXRhLT5ibGtzeiAqIGRhdGEtPmJsb2NrcyAtIHJlbWFpbjsKKworCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIk1DSSBFUlJPUiBJUlEgKHN0YXR1cyAlMDh4KVxuIiwgc3RhdHVzKTsKKwkJaWYgKHN0YXR1cyAmIE1DSV9EQVRBQ1JDRkFJTCkgeworCQkJLyogTGFzdCBibG9jayB3YXMgbm90IHN1Y2Nlc3NmdWwgKi8KKwkJCWhvc3QtPmRhdGFfeGZlcmVkID0gcm91bmRfZG93bihzdWNjZXNzIC0gMSwgZGF0YS0+Ymxrc3opOworCQkJZGF0YS0+ZXJyb3IgPSAtRUlMU0VROworCQl9IGVsc2UgaWYgKHN0YXR1cyAmIE1DSV9EQVRBVElNRU9VVCkgeworCQkJaG9zdC0+ZGF0YV94ZmVyZWQgPSByb3VuZF9kb3duKHN1Y2Nlc3MsIGRhdGEtPmJsa3N6KTsKKwkJCWRhdGEtPmVycm9yID0gLUVUSU1FRE9VVDsKKwkJfSBlbHNlIGlmIChzdGF0dXMgJiAoTUNJX1RYVU5ERVJSVU58TUNJX1JYT1ZFUlJVTikpIHsKKwkJCWhvc3QtPmRhdGFfeGZlcmVkID0gcm91bmRfZG93bihzdWNjZXNzLCBkYXRhLT5ibGtzeik7CisJCQlkYXRhLT5lcnJvciA9IC1FSU87CisJCX0KIAogCQkvKgogCQkgKiBXZSBoaXQgYW4gZXJyb3IgY29uZGl0aW9uLiAgRW5zdXJlIHRoYXQgYW55IGRhdGEKQEAgLTMyMSw2MSArMzE3LDE0IEBACiAJCX0KIAl9CiAKLQkvKgotCSAqIE9uIEFSTSB2YXJpYW50cyBpbiBQSU8gbW9kZSwgTUNJX0RBVEFCTE9DS0VORAotCSAqIGlzIGFsd2F5cyBzZW50IGZpcnN0LCBhbmQgd2UgaW5jcmVhc2UgdGhlCi0JICogdHJhbnNmZXJlZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHRoYXQgSVJRLiBUaGVuCi0JICogTUNJX0RBVEFFTkQgZm9sbG93cyBhbmQgd2UgY29uY2x1ZGUgdGhlIHRyYW5zYWN0aW9uLgotCSAqCi0JICogT24gdGhlIFV4NTAwIHNpbmdsZS1JUlEgdmFyaWFudCBNQ0lfREFUQUJMT0NLRU5ECi0JICogZG9lc24ndCBzZWVtIHRvIGltbWVkaWF0ZWx5IGNsZWFyIGZyb20gdGhlIHN0YXR1cywKLQkgKiBzbyB3ZSBjYW4ndCB1c2UgaXQga2VlcCBjb3VudCB3aGVuIG9ubHkgb25lIGlycSBpcwotCSAqIHVzZWQgYmVjYXVzZSB0aGUgaXJxIHdpbGwgaGl0IGZvciBvdGhlciByZWFzb25zLCBhbmQKLQkgKiB0aGVuIHRoZSBmbGFnIGlzIHN0aWxsIHVwLiBTbyB3ZSB1c2UgdGhlIE1DSV9EQVRBRU5ECi0JICogSVJRIGF0IHRoZSBlbmQgb2YgdGhlIGVudGlyZSB0cmFuc2ZlciBiZWNhdXNlCi0JICogTUNJX0RBVEFCTE9DS0VORCBpcyBicm9rZW4uCi0JICoKLQkgKiBJbiB0aGUgVTMwMCwgdGhlIElSUXMgY2FuIGFycml2ZSBvdXQtb2Ytb3JkZXIsCi0JICogZS5nLiBNQ0lfREFUQUJMT0NLRU5EIHNvbWV0aW1lcyBhcnJpdmVzIGFmdGVyIE1DSV9EQVRBRU5ELAotCSAqIHNvIGZvciB0aGlzIGNhc2Ugd2UgdXNlIHRoZSBmbGFncyAiYmxvY2tlbmQiIGFuZAotCSAqICJkYXRhZW5kIiB0byBtYWtlIHN1cmUgYm90aCBJUlFzIGhhdmUgYXJyaXZlZCBiZWZvcmUKLQkgKiBjb25jbHVkaW5nIHRoZSB0cmFuc2FjdGlvbi4gKFRoaXMgZG9lcyBub3QgYXBwbHkKLQkgKiB0byB0aGUgVXg1MDAgd2hpY2ggZG9lc24ndCBmaXJlIE1DSV9EQVRBQkxPQ0tFTkQKLQkgKiBhdCBhbGwuKSBJbiBETUEgbW9kZSBpdCBzdWZmZXJzIGZyb20gdGhlIHNhbWUgcHJvYmxlbQotCSAqIGFzIHRoZSBVeDUwMC4KLQkgKi8KLQlpZiAoc3RhdHVzICYgTUNJX0RBVEFCTE9DS0VORCkgewotCQkvKgotCQkgKiBKdXN0IGJlaW5nIGEgbGl0dGxlIG92ZXItY2F1dGlvdXMsIHdlIGRvIG5vdAotCQkgKiB1c2UgdGhpcyBwcm9ncmVzc2l2ZSB1cGRhdGUgaWYgdGhlIGhhcmR3YXJlIGJsb2NrZW5kCi0JCSAqIGZsYWcgaXMgdW5yZWxpYWJsZTogc2luY2UgaXQgY2FuIHN0YXkgaGlnaCBiZXR3ZWVuCi0JCSAqIElSUXMgaXQgd2lsbCBjb3JydXB0IHRoZSB0cmFuc2ZlciBjb3VudGVyLgotCQkgKi8KLQkJaWYgKCF2YXJpYW50LT5icm9rZW5fYmxvY2tlbmQpCi0JCQlob3N0LT5kYXRhX3hmZXJlZCArPSBkYXRhLT5ibGtzejsKLQkJaG9zdC0+YmxvY2tlbmQgPSB0cnVlOwotCX0KKwlpZiAoc3RhdHVzICYgTUNJX0RBVEFCTE9DS0VORCkKKwkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksICJzdHJheSBNQ0lfREFUQUJMT0NLRU5EIGludGVycnVwdFxuIik7CiAKLQlpZiAoc3RhdHVzICYgTUNJX0RBVEFFTkQpCi0JCWhvc3QtPmRhdGFlbmQgPSB0cnVlOwotCi0JLyoKLQkgKiBPbiB2YXJpYW50cyB3aXRoIGJyb2tlbiBibG9ja2VuZCB3ZSBzaGFsbCBvbmx5IHdhaXQgZm9yIGRhdGFlbmQsCi0JICogb24gb3RoZXJzIHdlIG11c3Qgc3luYyB3aXRoIHRoZSBibG9ja2VuZCBzaWduYWwgc2luY2UgdGhleSBjYW4KLQkgKiBhcHBlYXIgb3V0LW9mLW9yZGVyLgotCSAqLwotCWlmIChob3N0LT5kYXRhZW5kICYmIChob3N0LT5ibG9ja2VuZCB8fCB2YXJpYW50LT5icm9rZW5fYmxvY2tlbmQpKSB7CisJaWYgKHN0YXR1cyAmIE1DSV9EQVRBRU5EIHx8IGRhdGEtPmVycm9yKSB7CiAJCW1tY2lfc3RvcF9kYXRhKGhvc3QpOwogCi0JCS8qIFJlc2V0IHRoZXNlIGZsYWdzICovCi0JCWhvc3QtPmJsb2NrZW5kID0gZmFsc2U7Ci0JCWhvc3QtPmRhdGFlbmQgPSBmYWxzZTsKLQotCQkvKgotCQkgKiBWYXJpYW50cyB3aXRoIGJyb2tlbiBibG9ja2VuZCBmbGFncyBuZWVkIHRvIGhhbmRsZSB0aGUKLQkJICogZW5kIG9mIHRoZSBlbnRpcmUgdHJhbnNmZXIgaGVyZS4KLQkJICovCi0JCWlmICh2YXJpYW50LT5icm9rZW5fYmxvY2tlbmQgJiYgIWRhdGEtPmVycm9yKQorCQlpZiAoIWRhdGEtPmVycm9yKQorCQkJLyogVGhlIGVycm9yIGNsYXVzZSBpcyBoYW5kbGVkIGFib3ZlLCBzdWNjZXNzISAqLwogCQkJaG9zdC0+ZGF0YV94ZmVyZWQgKz0gZGF0YS0+Ymxrc3ogKiBkYXRhLT5ibG9ja3M7CiAKIAkJaWYgKCFkYXRhLT5zdG9wKSB7CkBAIC0zOTQsMTUgKzM0MywxNSBAQAogCiAJaG9zdC0+Y21kID0gTlVMTDsKIAotCWNtZC0+cmVzcFswXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UwKTsKLQljbWQtPnJlc3BbMV0gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMSk7Ci0JY21kLT5yZXNwWzJdID0gcmVhZGwoYmFzZSArIE1NQ0lSRVNQT05TRTIpOwotCWNtZC0+cmVzcFszXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UzKTsKLQogCWlmIChzdGF0dXMgJiBNQ0lfQ01EVElNRU9VVCkgewogCQljbWQtPmVycm9yID0gLUVUSU1FRE9VVDsKIAl9IGVsc2UgaWYgKHN0YXR1cyAmIE1DSV9DTURDUkNGQUlMICYmIGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX0NSQykgewogCQljbWQtPmVycm9yID0gLUVJTFNFUTsKKwl9IGVsc2UgeworCQljbWQtPnJlc3BbMF0gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMCk7CisJCWNtZC0+cmVzcFsxXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UxKTsKKwkJY21kLT5yZXNwWzJdID0gcmVhZGwoYmFzZSArIE1NQ0lSRVNQT05TRTIpOworCQljbWQtPnJlc3BbM10gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMyk7CiAJfQogCiAJaWYgKCFjbWQtPmRhdGEgfHwgY21kLT5lcnJvcikgewpAQCAtNzcwLDcgKzcxOSw2IEBACiAJc3RydWN0IHZhcmlhbnRfZGF0YSAqdmFyaWFudCA9IGlkLT5kYXRhOwogCXN0cnVjdCBtbWNpX2hvc3QgKmhvc3Q7CiAJc3RydWN0IG1tY19ob3N0ICptbWM7Ci0JdW5zaWduZWQgaW50IG1hc2s7CiAJaW50IHJldDsKIAogCS8qIG11c3QgaGF2ZSBwbGF0Zm9ybSBkYXRhICovCkBAIC05NTEsMTIgKzg5OSw3IEBACiAJCQlnb3RvIGlycTBfZnJlZTsKIAl9CiAKLQltYXNrID0gTUNJX0lSUUVOQUJMRTsKLQkvKiBEb24ndCB1c2UgdGhlIGRhdGFibG9ja2VuZCBmbGFnIGlmIGl0J3MgYnJva2VuICovCi0JaWYgKHZhcmlhbnQtPmJyb2tlbl9ibG9ja2VuZCkKLQkJbWFzayAmPSB+TUNJX0RBVEFCTE9DS0VORDsKLQotCXdyaXRlbChtYXNrLCBob3N0LT5iYXNlICsgTU1DSU1BU0swKTsKKwl3cml0ZWwoTUNJX0lSUUVOQUJMRSwgaG9zdC0+YmFzZSArIE1NQ0lNQVNLMCk7CiAKIAlhbWJhX3NldF9kcnZkYXRhKGRldiwgbW1jKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmggYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuaAppbmRleCBkZjA2ZjAxLi5jMWRmN2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuaAorKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuaApAQCAtMTM3LDcgKzEzNyw3IEBACiAjZGVmaW5lIE1DSV9JUlFFTkFCTEUJXAogCShNQ0lfQ01EQ1JDRkFJTE1BU0t8TUNJX0RBVEFDUkNGQUlMTUFTS3xNQ0lfQ01EVElNRU9VVE1BU0t8CVwKIAlNQ0lfREFUQVRJTUVPVVRNQVNLfE1DSV9UWFVOREVSUlVOTUFTS3xNQ0lfUlhPVkVSUlVOTUFTS3wJXAotCU1DSV9DTURSRVNQRU5ETUFTS3xNQ0lfQ01EU0VOVE1BU0t8TUNJX0RBVEFCTE9DS0VORE1BU0spCisJTUNJX0NNRFJFU1BFTkRNQVNLfE1DSV9DTURTRU5UTUFTSykKIAogLyogVGhlc2UgaW50ZXJydXB0cyBhcmUgZGlyZWN0ZWQgdG8gSVJRMSB3aGVuIHR3byBJUlEgbGluZXMgYXJlIGF2YWlsYWJsZSAqLwogI2RlZmluZSBNQ0lfSVJRMU1BU0sgXApAQCAtMTc3LDkgKzE3Nyw2IEBACiAJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CiAJdW5zaWduZWQgaW50CQlvbGRzdGF0OwogCi0JYm9vbAkJCWJsb2NrZW5kOwotCWJvb2wJCQlkYXRhZW5kOwotCiAJLyogcGlvIHN0dWZmICovCiAJc3RydWN0IHNnX21hcHBpbmdfaXRlcglzZ19taXRlcjsKIAl1bnNpZ25lZCBpbnQJCXNpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMgYi9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMKaW5kZXggNWRlY2ZkMC4uMTUzYWI5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYwpAQCAtMzgzLDE0ICszODMsMzAgQEAKIAlob3N0LT5jdXJyLnVzZXJfcGFnZXMgPSAwOwogCiAJYm94ID0gJm5jLT5jbWRbMF07Ci0JZm9yIChpID0gMDsgaSA8IGhvc3QtPmRtYS5udW1fZW50czsgaSsrKSB7CisKKwkvKiBsb2NhdGlvbiBvZiBjb21tYW5kIGJsb2NrIG11c3QgYmUgNjQgYml0IGFsaWduZWQgKi8KKwlCVUdfT04oaG9zdC0+ZG1hLmNtZF9idXNhZGRyICYgMHgwNyk7CisKKwluYy0+Y21kcHRyID0gKGhvc3QtPmRtYS5jbWRfYnVzYWRkciA+PiAzKSB8IENNRF9QVFJfTFA7CisJaG9zdC0+ZG1hLmhkci5jbWRwdHIgPSBETU9WX0NNRF9QVFJfTElTVCB8CisJCQkgICAgICAgRE1PVl9DTURfQUREUihob3N0LT5kbWEuY21kcHRyX2J1c2FkZHIpOworCWhvc3QtPmRtYS5oZHIuY29tcGxldGVfZnVuYyA9IG1zbXNkY2NfZG1hX2NvbXBsZXRlX2Z1bmM7CisKKwluID0gZG1hX21hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGhvc3QtPmRtYS5zZywKKwkJCWhvc3QtPmRtYS5udW1fZW50cywgaG9zdC0+ZG1hLmRpcik7CisJaWYgKG4gPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmFibGUgdG8gbWFwIGluIGFsbCBzZyBlbGVtZW50c1xuIiwKKwkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKKwkJaG9zdC0+ZG1hLnNnID0gTlVMTDsKKwkJaG9zdC0+ZG1hLm51bV9lbnRzID0gMDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZm9yX2VhY2hfc2coaG9zdC0+ZG1hLnNnLCBzZywgbiwgaSkgeworCiAJCWJveC0+Y21kID0gQ01EX01PREVfQk9YOwogCi0JLyogSW5pdGlhbGl6ZSBzZyBkbWEgYWRkcmVzcyAqLwotCXNnLT5kbWFfYWRkcmVzcyA9IHBhZ2VfdG9fZG1hKG1tY19kZXYoaG9zdC0+bW1jKSwgc2dfcGFnZShzZykpCi0JCQkJKyBzZy0+b2Zmc2V0OwotCi0JaWYgKGkgPT0gKGhvc3QtPmRtYS5udW1fZW50cyAtIDEpKQorCQlpZiAoaSA9PSBuIC0gMSkKIAkJCWJveC0+Y21kIHw9IENNRF9MQzsKIAkJcm93cyA9IChzZ19kbWFfbGVuKHNnKSAlIE1DSV9GSUZPU0laRSkgPwogCQkJKHNnX2RtYV9sZW4oc2cpIC8gTUNJX0ZJRk9TSVpFKSArIDEgOgpAQCAtNDE4LDI3ICs0MzQsNiBAQAogCQkJYm94LT5jbWQgfD0gQ01EX0RTVF9DUkNJKGNyY2kpOwogCQl9CiAJCWJveCsrOwotCQlzZysrOwotCX0KLQotCS8qIGxvY2F0aW9uIG9mIGNvbW1hbmQgYmxvY2sgbXVzdCBiZSA2NCBiaXQgYWxpZ25lZCAqLwotCUJVR19PTihob3N0LT5kbWEuY21kX2J1c2FkZHIgJiAweDA3KTsKLQotCW5jLT5jbWRwdHIgPSAoaG9zdC0+ZG1hLmNtZF9idXNhZGRyID4+IDMpIHwgQ01EX1BUUl9MUDsKLQlob3N0LT5kbWEuaGRyLmNtZHB0ciA9IERNT1ZfQ01EX1BUUl9MSVNUIHwKLQkJCSAgICAgICBETU9WX0NNRF9BRERSKGhvc3QtPmRtYS5jbWRwdHJfYnVzYWRkcik7Ci0JaG9zdC0+ZG1hLmhkci5jb21wbGV0ZV9mdW5jID0gbXNtc2RjY19kbWFfY29tcGxldGVfZnVuYzsKLQotCW4gPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgaG9zdC0+ZG1hLnNnLAotCQkJaG9zdC0+ZG1hLm51bV9lbnRzLCBob3N0LT5kbWEuZGlyKTsKLS8qIGRzYiBpbnNpZGUgZG1hX21hcF9zZyB3aWxsIHdyaXRlIG5jIG91dCB0byBtZW0gYXMgd2VsbCAqLwotCi0JaWYgKG4gIT0gaG9zdC0+ZG1hLm51bV9lbnRzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuYWJsZSB0byBtYXAgaW4gYWxsIHNnIGVsZW1lbnRzXG4iLAotCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOwotCQlob3N0LT5kbWEuc2cgPSBOVUxMOwotCQlob3N0LT5kbWEubnVtX2VudHMgPSAwOwotCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTEzMzEsOSArMTMyNiw2IEBACiAJaWYgKGhvc3QtPnRpbWVyLmZ1bmN0aW9uKQogCQlwcl9pbmZvKCIlczogUG9sbGluZyBzdGF0dXMgbW9kZSBlbmFibGVkXG4iLCBtbWNfaG9zdG5hbWUobW1jKSk7CiAKLSNpZiBCVVNDTEtfUFdSU0FWRQotCW1zbXNkY2NfZGlzYWJsZV9jbG9ja3MoaG9zdCwgMSk7Ci0jZW5kaWYKIAlyZXR1cm4gMDsKICBjbWRfaXJxX2ZyZWU6CiAJZnJlZV9pcnEoY21kX2lycXJlcy0+c3RhcnQsIGhvc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMKaW5kZXggMTcyMDM1OC4uNTMwOWFiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jCkBAIC0yNzcsMTAgKzI3Nyw0MyBAQAogCWhvc3QtPmNsb2NrID0gY2xvY2s7CiB9CiAKKy8qKgorICogc2RoY2lfczNjX3BsYXRmb3JtXzhiaXRfd2lkdGggLSBzdXBwb3J0IDhiaXQgYnVzd2lkdGgKKyAqIEBob3N0OiBUaGUgU0RIQ0kgaG9zdCBiZWluZyBxdWVyaWVkCisgKiBAd2lkdGg6IE1NQ19CVVNfV0lEVEhfIG1hY3JvIGZvciB0aGUgYnVzIHdpZHRoIGJlaW5nIHJlcXVlc3RlZAorICoKKyAqIFdlIGhhdmUgOC1iaXQgd2lkdGggc3VwcG9ydCBidXQgaXMgbm90IGEgdjMgY29udHJvbGxlci4KKyAqIFNvIHdlIGFkZCBwbGF0Zm9ybV84Yml0X3dpZHRoKCkgYW5kIHN1cHBvcnQgOGJpdCB3aWR0aC4KKyAqLworc3RhdGljIGludCBzZGhjaV9zM2NfcGxhdGZvcm1fOGJpdF93aWR0aChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHdpZHRoKQoreworCXU4IGN0cmw7CisKKwljdHJsID0gc2RoY2lfcmVhZGIoaG9zdCwgU0RIQ0lfSE9TVF9DT05UUk9MKTsKKworCXN3aXRjaCAod2lkdGgpIHsKKwljYXNlIE1NQ19CVVNfV0lEVEhfODoKKwkJY3RybCB8PSBTREhDSV9DVFJMXzhCSVRCVVM7CisJCWN0cmwgJj0gflNESENJX0NUUkxfNEJJVEJVUzsKKwkJYnJlYWs7CisJY2FzZSBNTUNfQlVTX1dJRFRIXzQ6CisJCWN0cmwgfD0gU0RIQ0lfQ1RSTF80QklUQlVTOworCQljdHJsICY9IH5TREhDSV9DVFJMXzhCSVRCVVM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXNkaGNpX3dyaXRlYihob3N0LCBjdHJsLCBTREhDSV9IT1NUX0NPTlRST0wpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2RoY2lfb3BzIHNkaGNpX3MzY19vcHMgPSB7CiAJLmdldF9tYXhfY2xvY2sJCT0gc2RoY2lfczNjX2dldF9tYXhfY2xrLAogCS5zZXRfY2xvY2sJCT0gc2RoY2lfczNjX3NldF9jbG9jaywKIAkuZ2V0X21pbl9jbG9jawkJPSBzZGhjaV9zM2NfZ2V0X21pbl9jbG9jaywKKwkucGxhdGZvcm1fOGJpdF93aWR0aAk9IHNkaGNpX3MzY19wbGF0Zm9ybV84Yml0X3dpZHRoLAogfTsKIAogc3RhdGljIHZvaWQgc2RoY2lfczNjX25vdGlmeV9jaGFuZ2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBpbnQgc3RhdGUpCkBAIC00NzMsNiArNTA2LDkgQEAKIAlpZiAocGRhdGEtPmNkX3R5cGUgPT0gUzNDX1NESENJX0NEX1BFUk1BTkVOVCkKIAkJaG9zdC0+bW1jLT5jYXBzID0gTU1DX0NBUF9OT05SRU1PVkFCTEU7CiAKKwlpZiAocGRhdGEtPmhvc3RfY2FwcykKKwkJaG9zdC0+bW1jLT5jYXBzIHw9IHBkYXRhLT5ob3N0X2NhcHM7CisKIAlob3N0LT5xdWlya3MgfD0gKFNESENJX1FVSVJLXzMyQklUX0RNQV9BRERSIHwKIAkJCSBTREhDSV9RVUlSS18zMkJJVF9ETUFfU0laRSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvdXNoYy5jIGIvZHJpdmVycy9tbWMvaG9zdC91c2hjLmMKaW5kZXggZjhmNjVkZi4uZjA4Zjk0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC91c2hjLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC91c2hjLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9yODUyLmMgYi9kcml2ZXJzL210ZC9uYW5kL3I4NTIuYwppbmRleCBkOWQ3ZWZiLi42MzIyZDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3I4NTIuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3I4NTIuYwpAQCAtOTMwLDcgKzkzMCw3IEBACiAKIAlpbml0X2NvbXBsZXRpb24oJmRldi0+ZG1hX2RvbmUpOwogCi0JZGV2LT5jYXJkX3dvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZShEUlZfTkFNRSk7CisJZGV2LT5jYXJkX3dvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKERSVl9OQU1FKTsKIAogCWlmICghZGV2LT5jYXJkX3dvcmtxdWV1ZSkKIAkJZ290byBlcnJvcjk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9zbV9mdGwuYyBiL2RyaXZlcnMvbXRkL3NtX2Z0bC5jCmluZGV4IDY3ODIyY2YuLmFjMGQ2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3NtX2Z0bC5jCisrKyBiL2RyaXZlcnMvbXRkL3NtX2Z0bC5jCkBAIC0xMjU4LDcgKzEyNTgsNyBAQAogc3RhdGljIF9faW5pdCBpbnQgc21fbW9kdWxlX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyb3IgPSAwOwotCWNhY2hlX2ZsdXNoX3dvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZSgic21mbHVzaCIpOworCWNhY2hlX2ZsdXNoX3dvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKCJzbWZsdXNoIik7CiAKIAlpZiAoSVNfRVJSKGNhY2hlX2ZsdXNoX3dvcmtxdWV1ZSkpCiAJCXJldHVybiBQVFJfRVJSKGNhY2hlX2ZsdXNoX3dvcmtxdWV1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvYnVpbGQuYyBiL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCmluZGV4IGY0OWU0OWQuLjVlYmUyODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCkBAIC02NzIsMzMgKzY3Miw3IEBACiAJCXViaS0+bm9yX2ZsYXNoID0gMTsKIAl9CiAKLQkvKgotCSAqIFNldCBVQkkgbWluLiBJL08gc2l6ZSAoQHViaS0+bWluX2lvX3NpemUpLiBXZSB1c2UgQG10ZC0+d3JpdGVidWZzaXplCi0JICogZm9yIHRoZXNlIHB1cnBvc2VzLCBub3QgQG10ZC0+d3JpdGVzaXplLiBBdCB0aGUgbW9tZW50IHRoaXMgZG9lcyBub3QKLQkgKiBtYXR0ZXIgZm9yIE5BTkQsIGJlY2F1c2UgY3VycmVudGx5IEBtdGQtPndyaXRlYnVmc2l6ZSBpcyBlcXVpdmFsZW50IHRvCi0JICogQG10ZC0+d3JpdGVzaXplIGZvciBhbGwgTkFORHMuIEhvd2V2ZXIsIHNvbWUgQ0ZJIE5PUiBmbGFzaGVzIG1heQotCSAqIGhhdmUgQG10ZC0+d3JpdGVidWZzaXplIHdoaWNoIGlzIG11bHRpcGxlIG9mIEBtdGQtPndyaXRlc2l6ZS4KLQkgKgotCSAqIFRoZSByZWFzb24gd2UgdXNlIEBtdGQtPndyaXRlYnVmc2l6ZSBmb3IgQHViaS0+bWluX2lvX3NpemUgaXMgdGhhdAotCSAqIFVCSSBhbmQgVUJJRlMgcmVjb3ZlcnkgYWxnb3JpdGhtcyByZWx5IG9uIHRoZSBmYWN0IHRoYXQgaWYgdGhlcmUgd2FzCi0JICogYW4gdW5jbGVhbiBwb3dlciBjdXQsIHRoZW4gd2UgY2FuIGZpbmQgb2Zmc2V0IG9mIHRoZSBsYXN0IGNvcnJ1cHRlZAotCSAqIG5vZGUsIGFsaWduIHRoZSBvZmZzZXQgdG8gQHViaS0+bWluX2lvX3NpemUsIHJlYWQgdGhlIHJlc3Qgb2YgdGhlCi0JICogZXJhc2VibG9jayBzdGFydGluZyBmcm9tIHRoaXMgb2Zmc2V0LCBhbmQgY2hlY2sgd2hldGhlciB0aGVyZSBhcmUKLQkgKiBvbmx5IDB4RkYgYnl0ZXMuIElmIHllcywgdGhlbiB3ZSBhcmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIGEKLQkgKiBjb3JydXB0aW9uIGNhdXNlZCBieSBhIHBvd2VyIGN1dCwgaWYgbm90LCB0aGVuIHRoaXMgaXMgcHJvYmFibHkgc29tZQotCSAqIHNldmVyZSBjb3JydXB0aW9uLgotCSAqCi0JICogVGh1cywgd2UgaGF2ZSB0byB1c2UgdGhlIG1heGltdW0gd3JpdGUgdW5pdCBzaXplIG9mIHRoZSBmbGFzaCwgd2hpY2gKLQkgKiBpcyBAbXRkLT53cml0ZWJ1ZnNpemUsIGJlY2F1c2UgQG10ZC0+d3JpdGVzaXplIGlzIHRoZSBtaW5pbXVtIHdyaXRlCi0JICogc2l6ZSwgbm90IHRoZSBtYXhpbXVtLgotCSAqLwotCWlmICh1YmktPm10ZC0+dHlwZSA9PSBNVERfTkFOREZMQVNIKQotCQl1YmlfYXNzZXJ0KHViaS0+bXRkLT53cml0ZWJ1ZnNpemUgPT0gdWJpLT5tdGQtPndyaXRlc2l6ZSk7Ci0JZWxzZSBpZiAodWJpLT5tdGQtPnR5cGUgPT0gTVREX05PUkZMQVNIKQotCQl1YmlfYXNzZXJ0KHViaS0+bXRkLT53cml0ZWJ1ZnNpemUgJSB1YmktPm10ZC0+d3JpdGVzaXplID09IDApOwotCi0JdWJpLT5taW5faW9fc2l6ZSA9IHViaS0+bXRkLT53cml0ZWJ1ZnNpemU7Ci0KKwl1YmktPm1pbl9pb19zaXplID0gdWJpLT5tdGQtPndyaXRlc2l6ZTsKIAl1YmktPmhkcnNfbWluX2lvX3NpemUgPSB1YmktPm10ZC0+d3JpdGVzaXplID4+IHViaS0+bXRkLT5zdWJwYWdlX3NmdDsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCAxNmZlNGY5Li4wMzgyMzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTI4NjQsNyArMjg2NCw3IEBACiAJZGVmYXVsdCBuCiAKIGNvbmZpZyBNTFg0X0RFQlVHCi0JYm9vbCAiVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0IiBpZiAoTUxYNF9DT1JFICYmIEVNQkVEREVEKQorCWJvb2wgIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dCIgaWYgKE1MWDRfQ09SRSAmJiBFWFBFUlQpCiAJZGVwZW5kcyBvbiBNTFg0X0NPUkUKIAlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMgYi9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKaW5kZXggNjJkNmY4OC4uYWEwNzY1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYwpAQCAtMTY0NCw3ICsxNjQ0LDcgQEAKIG1vZHVsZV9pbml0KGtzODY5NV9pbml0KTsKIG1vZHVsZV9leGl0KGtzODY5NV9jbGVhbnVwKTsKIAotTU9EVUxFX0FVVEhPUigiU2ltdGVjIEVsZWN0cm9uaWNzIikKK01PRFVMRV9BVVRIT1IoIlNpbXRlYyBFbGVjdHJvbmljcyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNaWNyZWwgS1M4Njk1IChDZW50YXVyKSBFdGhlcm5ldCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06IiBNT0RVTEVOQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYwppbmRleCBhNjk5YmJmLi4zODI0MzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCkBAIC00OCw2ICs0OCw3IEBACiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVEhFUk9TX0wyQ19CKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVEhFUk9TX0wyQ19CMil9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRUQU5TSUMsIFBDSV9ERVZJQ0VfSURfQVRIRVJPU19MMUQpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUVEFOU0lDLCBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDFEXzJfMCl9LAogCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KIAl7IDAgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwppbmRleCAwYzc4MTFmLi5hMTc5Y2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCkBAIC0xNzg2LDYgKzE3ODYsMTAgQEAKIAlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKIAogCXdyYiA9IHdyYl9mcm9tX21jY3EoYWRhcHRlcik7CisJaWYgKCF3cmIpIHsKKwkJc3RhdHVzID0gLUVCVVNZOworCQlnb3RvIGVycjsKKwl9CiAJcmVxID0gbm9uZW1iX2NtZC0+dmE7CiAJc2dlID0gbm9uZW1iZWRkZWRfc2dsKHdyYik7CiAKQEAgLTE4MDEsNiArMTgwNSw3IEBACiAKIAlzdGF0dXMgPSBiZV9tY2Nfbm90aWZ5X3dhaXQoYWRhcHRlcik7CiAKK2VycjoKIAlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKaW5kZXggZGU0MGQzYi4uMjhhMzJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYwpAQCAtMzEyLDExICszMTIsOSBAQAogCWlmIChhZGFwdGVyLT5saW5rX3VwICE9IGxpbmtfdXApIHsKIAkJYWRhcHRlci0+bGlua19zcGVlZCA9IC0xOwogCQlpZiAobGlua191cCkgewotCQkJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKIAkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBMaW5rIHVwXG4iLCBuZXRkZXYtPm5hbWUpOwogCQl9IGVsc2UgewotCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBMaW5rIGRvd25cbiIsIG5ldGRldi0+bmFtZSk7CiAJCX0KQEAgLTI2MjgsOCArMjYyNiw2IEBACiAKIAluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZhZGFwdGVyLT50eF9lcS5uYXBpLCBiZV9wb2xsX3R4X21jYywKIAkJQkVfTkFQSV9XRUlHSFQpOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBiZV91bm1hcF9wY2lfYmFycyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuYyBiL2RyaXZlcnMvbmV0L2JueDIuYwppbmRleCBkZjk5ZWRmLi4wYmE1OWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmMKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5jCkBAIC03NTUzLDYgKzc1NTMsMTAgQEAKIAkgICAgIShkYXRhICYgRVRIX0ZMQUdfUlhWTEFOKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBUU08gd2l0aCBWTEFOIHRhZyB3b24ndCB3b3JrIHdpdGggY3VycmVudCBmaXJtd2FyZSAqLworCWlmICghKGRhdGEgJiBFVEhfRkxBR19UWFZMQU4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXJjID0gZXRodG9vbF9vcF9zZXRfZmxhZ3MoZGV2LCBkYXRhLCBFVEhfRkxBR19SWEhBU0ggfCBFVEhfRkxBR19SWFZMQU4gfAogCQkJCSAgRVRIX0ZMQUdfVFhWTEFOKTsKIAlpZiAocmMpCkBAIC03OTYyLDExICs3OTY2LDggQEAKIAogCQkvKiBBRVIgKEFkdmFuY2VkIEVycm9yIFJlcG9ydGluZykgaG9va3MgKi8KIAkJZXJyID0gcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhwZGV2KTsKLQkJaWYgKGVycikgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAicGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyAiCi0JCQkJCSAgICAiZmFpbGVkIDB4JXhcbiIsIGVycik7Ci0JCQkvKiBub24tZmF0YWwsIGNvbnRpbnVlICovCi0JCX0KKwkJaWYgKCFlcnIpCisJCQlicC0+ZmxhZ3MgfD0gQk5YMl9GTEFHX0FFUl9FTkFCTEVEOwogCiAJfSBlbHNlIHsKIAkJYnAtPnBjaXhfY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1BDSVgpOwpAQCAtODIyOSw4ICs4MjMwLDEwIEBACiAJcmV0dXJuIDA7CiAKIGVycl9vdXRfdW5tYXA6Ci0JaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19QQ0lFKQorCWlmIChicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfQUVSX0VOQUJMRUQpIHsKIAkJcGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcocGRldik7CisJCWJwLT5mbGFncyAmPSB+Qk5YMl9GTEFHX0FFUl9FTkFCTEVEOworCX0KIAogCWlmIChicC0+cmVndmlldykgewogCQlpb3VubWFwKGJwLT5yZWd2aWV3KTsKQEAgLTg0MTgsOCArODQyMSwxMCBAQAogCiAJa2ZyZWUoYnAtPnRlbXBfc3RhdHNfYmxrKTsKIAotCWlmIChicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfUENJRSkKKwlpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX0FFUl9FTkFCTEVEKSB7CiAJCXBjaV9kaXNhYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHBkZXYpOworCQlicC0+ZmxhZ3MgJj0gfkJOWDJfRkxBR19BRVJfRU5BQkxFRDsKKwl9CiAKIAlmcmVlX25ldGRldihkZXYpOwogCkBAIC04NTM1LDcgKzg1NDAsNyBAQAogCX0KIAlydG5sX3VubG9jaygpOwogCi0JaWYgKCEoYnAtPmZsYWdzICYgQk5YMl9GTEFHX1BDSUUpKQorCWlmICghKGJwLT5mbGFncyAmIEJOWDJfRkxBR19BRVJfRU5BQkxFRCkpCiAJCXJldHVybiByZXN1bHQ7CiAKIAllcnIgPSBwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyhwZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuaCBiL2RyaXZlcnMvbmV0L2JueDIuaAppbmRleCA1NDg4YTJlLi5mNDU5ZmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmgKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5oCkBAIC02NzQxLDYgKzY3NDEsNyBAQAogI2RlZmluZSBCTlgyX0ZMQUdfSlVNQk9fQlJPS0VOCQkweDAwMDAwODAwCiAjZGVmaW5lIEJOWDJfRkxBR19DQU5fS0VFUF9WTEFOCQkweDAwMDAxMDAwCiAjZGVmaW5lIEJOWDJfRkxBR19CUk9LRU5fU1RBVFMJCTB4MDAwMDIwMDAKKyNkZWZpbmUgQk5YMl9GTEFHX0FFUl9FTkFCTEVECQkweDAwMDA0MDAwCiAKIAlzdHJ1Y3QgYm54Ml9uYXBpCWJueDJfbmFwaVtCTlgyX01BWF9NU0lYX1ZFQ107CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmggYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeC5oCmluZGV4IGE2Y2QzMzUuLjY1M2M2MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnguaApAQCAtMjIsOCArMjIsOCBAQAogICogKHlvdSB3aWxsIG5lZWQgdG8gcmVib290IGFmdGVyd2FyZHMpICovCiAvKiAjZGVmaW5lIEJOWDJYX1NUT1BfT05fRVJST1IgKi8KIAotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04gICAgICAiMS42Mi4wMC0zIgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUgICAgICAiMjAxMC8xMi8yMSIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OICAgICAgIjEuNjIuMDAtNSIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFICAgICAgIjIwMTEvMDEvMzAiCiAjZGVmaW5lIEJOWDJYX0JDX1ZFUiAgICAgICAgICAgIDB4MDQwMjAwCiAKICNkZWZpbmUgQk5YMlhfTVVMVElfUVVFVUUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2hzaS5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaHNpLmgKaW5kZXggNjIzOGQ0Zi4uNTQ4ZjU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaHNpLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaHNpLmgKQEAgLTM1Miw2ICszNTIsMTAgQEAKICNkZWZpbmUgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR18zMTIwMzEyMAkgICAgMHgwMDAwZDhkOAogCS8qIGZvcmNlZCBvbmx5ICovCiAjZGVmaW5lIFBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfMzIxMDMyMTAJICAgIDB4MDAwMGU0ZTQKKyAgICAvKglJbmRpY2F0ZSB3aGV0aGVyIHRvIHN3YXAgdGhlIGV4dGVybmFsIHBoeSBwb2xhcml0eSAqLworI2RlZmluZSBQT1JUX0hXX0NGR19TV0FQX1BIWV9QT0xBUklUWV9NQVNLCSAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIFBPUlRfSFdfQ0ZHX1NXQVBfUEhZX1BPTEFSSVRZX0RJU0FCTEVECSAgICAweDAwMDAwMDAwCisjZGVmaW5lIFBPUlRfSFdfQ0ZHX1NXQVBfUEhZX1BPTEFSSVRZX0VOQUJMRUQJICAgIDB4MDAwMTAwMDAKIAogCXUzMiBleHRlcm5hbF9waHlfY29uZmlnOwogI2RlZmluZSBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX01BU0sJICAgIDB4ZmYwMDAwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYwppbmRleCA0M2IwZGUyLi5kZDEyMTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5jCkBAIC0xNTczLDcgKzE1NzMsNyBAQAogCiAJb2Zmc2V0ID0gcGh5LT5hZGRyICsgc2VyX2xhbmU7CiAJaWYgKENISVBfSVNfRTIoYnApKQotCQlhZXJfdmFsID0gMHgyODAwICsgb2Zmc2V0IC0gMTsKKwkJYWVyX3ZhbCA9IDB4MzgwMCArIG9mZnNldCAtIDE7CiAJZWxzZQogCQlhZXJfdmFsID0gMHgzODAwICsgb2Zmc2V0OwogCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwaHksCkBAIC0zMTY2LDcgKzMxNjYsMjMgQEAKIAkJaWYgKCF2YXJzLT5saW5rX3VwKQogCQkJYnJlYWs7CiAJY2FzZSBMRURfTU9ERV9PTjoKLQkJaWYgKFNJTkdMRV9NRURJQV9ESVJFQ1QocGFyYW1zKSkgeworCQlpZiAocGFyYW1zLT5waHlbRVhUX1BIWTFdLnR5cGUgPT0KKwkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcgJiYKKwkJICAgIENISVBfSVNfRTIoYnApICYmIHBhcmFtcy0+bnVtX3BoeXMgPT0gMikgeworCQkJLyoqCisJCQkqIFRoaXMgaXMgYSB3b3JrLWFyb3VuZCBmb3IgRTIrODcyNyBDb25maWd1cmF0aW9ucworCQkJKi8KKwkJCWlmIChtb2RlID09IExFRF9NT0RFX09OIHx8CisJCQkJc3BlZWQgPT0gU1BFRURfMTAwMDApeworCQkJCVJFR19XUihicCwgTklHX1JFR19MRURfTU9ERV9QMCArIHBvcnQqNCwgMCk7CisJCQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xFRF8xMEdfUDAgKyBwb3J0KjQsIDEpOworCisJCQkJdG1wID0gRU1BQ19SRChicCwgRU1BQ19SRUdfRU1BQ19MRUQpOworCQkJCUVNQUNfV1IoYnAsIEVNQUNfUkVHX0VNQUNfTEVELAorCQkJCQkodG1wIHwgRU1BQ19MRURfT1ZFUlJJREUpKTsKKwkJCQlyZXR1cm4gcmM7CisJCQl9CisJCX0gZWxzZSBpZiAoU0lOR0xFX01FRElBX0RJUkVDVChwYXJhbXMpKSB7CiAJCQkvKioKIAkJCSogVGhpcyBpcyBhIHdvcmstYXJvdW5kIGZvciBIVyBpc3N1ZSBmb3VuZCB3aGVuIGxpbmsKIAkJCSogaXMgdXAgaW4gQ0w3MwpAQCAtMzg1NCwxMSArMzg3MCwxNCBAQAogCQkJICAgcGF1c2VfcmVzdWx0KTsKIAl9CiB9Ci0KLXN0YXRpYyB2b2lkIGJueDJ4XzgwNzNfODcyN19leHRlcm5hbF9yb21fYm9vdChzdHJ1Y3QgYm54MnggKmJwLAorc3RhdGljIHU4IGJueDJ4XzgwNzNfODcyN19leHRlcm5hbF9yb21fYm9vdChzdHJ1Y3QgYm54MnggKmJwLAogCQkJCQkgICAgICBzdHJ1Y3QgYm54MnhfcGh5ICpwaHksCiAJCQkJCSAgICAgIHU4IHBvcnQpCiB7CisJdTMyIGNvdW50ID0gMDsKKwl1MTYgZndfdmVyMSwgZndfbXNnb3V0OworCXU4IHJjID0gMDsKKwogCS8qIEJvb3QgcG9ydCBmcm9tIGV4dGVybmFsIFJPTSAgKi8KIAkvKiBFREMgZ3JzdCAqLwogCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwKQEAgLTM4ODgsNTYgKzM5MDcsNDUgQEAKIAkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwKIAkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTF9ST01fUkVTRVRfSU5URVJOQUxfTVApOwogCi0JLyogd2FpdCBmb3IgMTIwbXMgZm9yIGNvZGUgZG93bmxvYWQgdmlhIFNQSSBwb3J0ICovCi0JbXNsZWVwKDEyMCk7CisJLyogRGVsYXkgMTAwbXMgcGVyIHRoZSBQSFkgc3BlY2lmaWNhdGlvbnMgKi8KKwltc2xlZXAoMTAwKTsKKworCS8qIDgwNzMgc29tZXRpbWVzIHRha2luZyBsb25nZXIgdG8gZG93bmxvYWQgKi8KKwlkbyB7CisJCWNvdW50Kys7CisJCWlmIChjb3VudCA+IDMwMCkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJICJibngyeF84MDczXzg3MjdfZXh0ZXJuYWxfcm9tX2Jvb3QgcG9ydCAleDoiCisJCQkJICJEb3dubG9hZCBmYWlsZWQuIGZ3IHZlcnNpb24gPSAweCV4XG4iLAorCQkJCSBwb3J0LCBmd192ZXIxKTsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwaHksCisJCQkJTURJT19QTUFfREVWQUQsCisJCQkJTURJT19QTUFfUkVHX1JPTV9WRVIxLCAmZndfdmVyMSk7CisJCWJueDJ4X2NsNDVfcmVhZChicCwgcGh5LAorCQkJCU1ESU9fUE1BX0RFVkFELAorCQkJCU1ESU9fUE1BX1JFR19NODA1MV9NU0dPVVRfUkVHLCAmZndfbXNnb3V0KTsKKworCQltc2xlZXAoMSk7CisJfSB3aGlsZSAoZndfdmVyMSA9PSAwIHx8IGZ3X3ZlcjEgPT0gMHg0MzIxIHx8CisJCQkoKGZ3X21zZ291dCAmIDB4ZmYpICE9IDB4MDMgJiYgKHBoeS0+dHlwZSA9PQorCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MykpKTsKIAogCS8qIENsZWFyIHNlcl9ib290X2N0bCBiaXQgKi8KIAlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksCiAJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKIAkJICAgICAgIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwxLCAweDAwMDApOwogCWJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoYnAsIHBoeSwgcG9ydCk7Ci19CiAKLXN0YXRpYyB2b2lkIGJueDJ4XzgwNzNfc2V0X3hhdWlfbG93X3Bvd2VyX21vZGUoc3RydWN0IGJueDJ4ICpicCwKLQkJCQkJICAgICAgIHN0cnVjdCBibngyeF9waHkgKnBoeSkKLXsKLQl1MTYgdmFsOwotCWJueDJ4X2NsNDVfcmVhZChicCwgcGh5LAotCQkJTURJT19QTUFfREVWQUQsIE1ESU9fUE1BX1JFR184MDczX0NISVBfUkVWLCAmdmFsKTsKKwlEUChORVRJRl9NU0dfTElOSywKKwkJICJibngyeF84MDczXzg3MjdfZXh0ZXJuYWxfcm9tX2Jvb3QgcG9ydCAleDoiCisJCSAiRG93bmxvYWQgY29tcGxldGUuIGZ3IHZlcnNpb24gPSAweCV4XG4iLAorCQkgcG9ydCwgZndfdmVyMSk7CiAKLQlpZiAodmFsID09IDApIHsKLQkJLyogTXVzdG4ndCBzZXQgbG93IHBvd2VyIG1vZGUgaW4gODA3MyBBMCAqLwotCQlyZXR1cm47Ci0JfQotCi0JLyogRGlzYWJsZSBQTEwgc2VxdWVuY2VyICh1c2UgcmVhZC1tb2RpZnktd3JpdGUgdG8gY2xlYXIgYml0IDEzKSAqLwotCWJueDJ4X2NsNDVfcmVhZChicCwgcGh5LAotCQkJTURJT19YU19ERVZBRCwgTURJT19YU19QTExfU0VRVUVOQ0VSLCAmdmFsKTsKLQl2YWwgJj0gfigxPDwxMyk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LAotCQkgICAgICAgTURJT19YU19ERVZBRCwgTURJT19YU19QTExfU0VRVUVOQ0VSLCB2YWwpOwotCi0JLyogUExMIGNvbnRyb2xzICovCi0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwNUUsIDB4MTA3Nyk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwNUQsIDB4MDAwMCk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwNUMsIDB4MDMwQik7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwNUIsIDB4MTI0MCk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwNUEsIDB4MjQ5MCk7Ci0KLQkvKiBUeCBDb250cm9scyAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MEE3LCAweDBDNzQpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MEE2LCAweDkwNDEpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MEE1LCAweDQ2NDApOwotCi0JLyogUnggQ29udHJvbHMgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODBGRSwgMHgwMUM0KTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODBGRCwgMHg5MjQ5KTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODBGQywgMHgyMDE1KTsKLQotCS8qIEVuYWJsZSBQTEwgc2VxdWVuY2VyICAodXNlIHJlYWQtbW9kaWZ5LXdyaXRlIHRvIHNldCBiaXQgMTMpICovCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIE1ESU9fWFNfUExMX1NFUVVFTkNFUiwgJnZhbCk7Ci0JdmFsIHw9ICgxPDwxMyk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCBNRElPX1hTX1BMTF9TRVFVRU5DRVIsIHZhbCk7CisJcmV0dXJuIHJjOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDA5OCw4ICs0MTA2LDYgQEAKIAogCWJueDJ4XzgwNzNfc2V0X3BhdXNlX2NsMzcocGFyYW1zLCBwaHksIHZhcnMpOwogCi0JYm54MnhfODA3M19zZXRfeGF1aV9sb3dfcG93ZXJfbW9kZShicCwgcGh5KTsKLQogCWJueDJ4X2NsNDVfcmVhZChicCwgcGh5LAogCQkJTURJT19QTUFfREVWQUQsIE1ESU9fUE1BX1JFR19NODA1MV9NU0dPVVRfUkVHLCAmdG1wMSk7CiAKQEAgLTQxMDgsNiArNDExNCwyNSBAQAogCiAJRFAoTkVUSUZfTVNHX0xJTkssICJCZWZvcmUgcm9tIFJYX0FMQVJNKHBvcnQxKTogMHgleFxuIiwgdG1wMSk7CiAKKwkvKioKKwkgKiBJZiB0aGlzIGlzIGZvcmNlZCBzcGVlZCwgc2V0IHRvIEtSIG9yIEtYIChhbGwgb3RoZXIgYXJlIG5vdAorCSAqIHN1cHBvcnRlZCkKKwkgKi8KKwkvKiBTd2FwIHBvbGFyaXR5IGlmIHJlcXVpcmVkIC0gTXVzdCBiZSBkb25lIG9ubHkgaW4gbm9uLTFHIG1vZGUgKi8KKwlpZiAocGFyYW1zLT5sYW5lX2NvbmZpZyAmIFBPUlRfSFdfQ0ZHX1NXQVBfUEhZX1BPTEFSSVRZX0VOQUJMRUQpIHsKKwkJLyogQ29uZmlndXJlIHRoZSA4MDczIHRvIHN3YXAgX1AgYW5kIF9OIG9mIHRoZSBLUiBsaW5lcyAqLworCQlEUChORVRJRl9NU0dfTElOSywgIlN3YXBwaW5nIHBvbGFyaXR5IGZvciB0aGUgODA3M1xuIik7CisJCS8qIDEwRyBSeC9UeCBhbmQgMUcgVHggc2lnbmFsIHBvbGFyaXR5IHN3YXAgKi8KKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwaHksCisJCQkJTURJT19QTUFfREVWQUQsCisJCQkJTURJT19QTUFfUkVHXzgwNzNfT1BUX0RJR0lUQUxfQ1RSTCwgJnZhbCk7CisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwKKwkJCQkgTURJT19QTUFfREVWQUQsCisJCQkJIE1ESU9fUE1BX1JFR184MDczX09QVF9ESUdJVEFMX0NUUkwsCisJCQkJICh2YWwgfCAoMzw8OSkpKTsKKwl9CisKKwogCS8qIEVuYWJsZSBDTDM3IEJBTSAqLwogCWlmIChSRUdfUkQoYnAsIHBhcmFtcy0+c2htZW1fYmFzZSArCiAJCQkgb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwgZGV2X2luZm8uCkBAIC00MzE0LDggKzQzMzksMzIgQEAKIAl9CiAKIAlpZiAobGlua191cCkgeworCQkvKiBTd2FwIHBvbGFyaXR5IGlmIHJlcXVpcmVkICovCisJCWlmIChwYXJhbXMtPmxhbmVfY29uZmlnICYKKwkJICAgIFBPUlRfSFdfQ0ZHX1NXQVBfUEhZX1BPTEFSSVRZX0VOQUJMRUQpIHsKKwkJCS8qIENvbmZpZ3VyZSB0aGUgODA3MyB0byBzd2FwIFAgYW5kIE4gb2YgdGhlIEtSIGxpbmVzICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBoeSwKKwkJCQkJTURJT19YU19ERVZBRCwKKwkJCQkJTURJT19YU19SRUdfODA3M19SWF9DVFJMX1BDSUUsICZ2YWwxKTsKKwkJCS8qKgorCQkJKiBTZXQgYml0IDMgdG8gaW52ZXJ0IFJ4IGluIDFHIG1vZGUgYW5kIGNsZWFyIHRoaXMgYml0CisJCQkqIHdoZW4gaXRgcyBpbiAxMEcgbW9kZS4KKwkJCSovCisJCQlpZiAodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xMDAwKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTd2FwcGluZyAxRyBwb2xhcml0eSBmb3IiCisJCQkJCSAgICAgICJ0aGUgODA3M1xuIik7CisJCQkJdmFsMSB8PSAoMTw8Myk7CisJCQl9IGVsc2UKKwkJCQl2YWwxICY9IH4oMTw8Myk7CisKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwKKwkJCQkJIE1ESU9fWFNfREVWQUQsCisJCQkJCSBNRElPX1hTX1JFR184MDczX1JYX0NUUkxfUENJRSwKKwkJCQkJIHZhbDEpOworCQl9CiAJCWJueDJ4X2V4dF9waHlfMTBHX2FuX3Jlc29sdmUoYnAsIHBoeSwgdmFycyk7CiAJCWJueDJ4XzgwNzNfcmVzb2x2ZV9mYyhwaHksIHBhcmFtcywgdmFycyk7CisJCXZhcnMtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCX0KIAlyZXR1cm4gbGlua191cDsKIH0KQEAgLTUwNjIsNiArNTExMSw3IEBACiAJCWVsc2UKIAkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKIAkJYm54MnhfZXh0X3BoeV9yZXNvbHZlX2ZjKHBoeSwgcGFyYW1zLCB2YXJzKTsKKwkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJfQogCXJldHVybiBsaW5rX3VwOwogfQpAQCAtNTc1OCw4ICs1ODA4LDExIEBACiAJCURQKE5FVElGX01TR19MSU5LLCAicG9ydCAleDogRXh0ZXJuYWwgbGluayBpcyBkb3duXG4iLAogCQkJICAgcGFyYW1zLT5wb3J0KTsKIAl9Ci0JaWYgKGxpbmtfdXApCisJaWYgKGxpbmtfdXApIHsKIAkJYm54MnhfZXh0X3BoeV9yZXNvbHZlX2ZjKHBoeSwgcGFyYW1zLCB2YXJzKTsKKwkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCURQKE5FVElGX01TR19MSU5LLCAiZHVwbGV4ID0gMHgleFxuIiwgdmFycy0+ZHVwbGV4KTsKKwl9CiAKIAlpZiAoKERVQUxfTUVESUEocGFyYW1zKSkgJiYKIAkgICAgKHBoeS0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfMTAwMCkpIHsKQEAgLTU4NzUsMTAgKzU5MjgsMjYgQEAKIAkJCSBNRElPX1BNQV9SRUdfODQ4MV9MRUQyX01BU0ssCiAJCQkgMHgxOCk7CiAKKwkvKiBTZWxlY3QgYWN0aXZpdHkgc291cmNlIGJ5IFR4IGFuZCBSeCwgYXMgc3VnZ2VzdGVkIGJ5IFBIWSBBRSAqLwogCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwKIAkJCSBNRElPX1BNQV9ERVZBRCwKIAkJCSBNRElPX1BNQV9SRUdfODQ4MV9MRUQzX01BU0ssCi0JCQkgMHgwMDQwKTsKKwkJCSAweDAwMDYpOworCisJLyogU2VsZWN0IHRoZSBjbG9zZXN0IGFjdGl2aXR5IGJsaW5rIHJhdGUgdG8gdGhhdCBpbiAxMC8xMDAvMTAwMCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwKKwkJCU1ESU9fUE1BX0RFVkFELAorCQkJTURJT19QTUFfUkVHXzg0ODFfTEVEM19CTElOSywKKwkJCTApOworCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwaHksCisJCQlNRElPX1BNQV9ERVZBRCwKKwkJCU1ESU9fUE1BX1JFR184NDgyM19DVExfTEVEX0NUTF8xLCAmdmFsKTsKKwl2YWwgfD0gTURJT19QTUFfUkVHXzg0ODIzX0xFRDNfU1RSRVRDSF9FTjsgLyogc3RyZXRjaF9lbiBmb3IgTEVEMyovCisKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksCisJCQkgTURJT19QTUFfREVWQUQsCisJCQkgTURJT19QTUFfUkVHXzg0ODIzX0NUTF9MRURfQ1RMXzEsIHZhbCk7CiAKIAkvKiAnSW50ZXJydXB0IE1hc2snICovCiAJYm54MnhfY2w0NV93cml0ZShicCwgcGh5LApAQCAtNjEyNiw2ICs2MTk1LDcgQEAKIAkvKiBDaGVjayBsaW5rIDEwRyAqLwogCWlmICh2YWwyICYgKDE8PDExKSkgewogCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CisJCXZhcnMtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCQlsaW5rX3VwID0gMTsKIAkJYm54MnhfZXh0X3BoeV8xMEdfYW5fcmVzb2x2ZShicCwgcGh5LCB2YXJzKTsKIAl9IGVsc2UgeyAvKiBDaGVjayBMZWdhY3kgc3BlZWQgbGluayAqLwpAQCAtNjQwNSw2ICs2NDc1LDE4IEBACiAJCQkJCSBNRElPX1BNQV9ERVZBRCwKIAkJCQkJIE1ESU9fUE1BX1JFR184NDgxX0xFRDFfTUFTSywKIAkJCQkJIDB4ODApOworCisJCQkvKiBUZWxsIExFRDMgdG8gYmxpbmsgb24gc291cmNlICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBoeSwKKwkJCQkJTURJT19QTUFfREVWQUQsCisJCQkJCU1ESU9fUE1BX1JFR184NDgxX0xJTktfU0lHTkFMLAorCQkJCQkmdmFsKTsKKwkJCXZhbCAmPSB+KDc8PDYpOworCQkJdmFsIHw9ICgxPDw2KTsgLyogQTgzQls4OjZdPSAxICovCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksCisJCQkJCSBNRElPX1BNQV9ERVZBRCwKKwkJCQkJIE1ESU9fUE1BX1JFR184NDgxX0xJTktfU0lHTkFMLAorCQkJCQkgdmFsKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC02NDg5LDYgKzY1NzEsNyBAQAogCQkJCU1ESU9fQU5fREVWQUQsIE1ESU9fQU5fUkVHX01BU1RFUl9TVEFUVVMsCiAJCQkJJnZhbDIpOwogCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CisJCXZhcnMtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCQlEUChORVRJRl9NU0dfTElOSywgIlNGWDcxMDEgQU4gc3RhdHVzIDB4JXgtPk1hc3Rlcj0leFxuIiwKIAkJCSAgIHZhbDIsICh2YWwyICYgKDE8PDE0KSkpOwogCQlibngyeF9leHRfcGh5XzEwR19hbl9yZXNvbHZlKGJwLCBwaHksIHZhcnMpOwpAQCAtNzYwNSwxMCArNzY4OCwxMyBAQAogCXN0cnVjdCBibngyeF9waHkgcGh5W1BPUlRfTUFYXTsKIAlzdHJ1Y3QgYm54MnhfcGh5ICpwaHlfYmxrW1BPUlRfTUFYXTsKIAl1MTYgdmFsOwotCXM4IHBvcnQ7CisJczggcG9ydCA9IDA7CiAJczggcG9ydF9vZl9wYXRoID0gMDsKLQotCWJueDJ4X2V4dF9waHlfaHdfcmVzZXQoYnAsIDApOworCXUzMiBzd2FwX3ZhbCwgc3dhcF9vdmVycmlkZTsKKwlzd2FwX3ZhbCA9IFJFR19SRChicCwgIE5JR19SRUdfUE9SVF9TV0FQKTsKKwlzd2FwX292ZXJyaWRlID0gUkVHX1JEKGJwLCAgTklHX1JFR19TVFJBUF9PVkVSUklERSk7CisJcG9ydCBePSAoc3dhcF92YWwgJiYgc3dhcF9vdmVycmlkZSk7CisJYm54MnhfZXh0X3BoeV9od19yZXNldChicCwgcG9ydCk7CiAJLyogUEFSVDEgLSBSZXNldCBib3RoIHBoeXMgKi8KIAlmb3IgKHBvcnQgPSBQT1JUX01BWCAtIDE7IHBvcnQgPj0gUE9SVF8wOyBwb3J0LS0pIHsKIAkJdTMyIHNobWVtX2Jhc2UsIHNobWVtMl9iYXNlOwpAQCAtNzY2Myw3ICs3NzQ5LDYgQEAKIAogCS8qIFBBUlQyIC0gRG93bmxvYWQgZmlybXdhcmUgdG8gYm90aCBwaHlzICovCiAJZm9yIChwb3J0ID0gUE9SVF9NQVggLSAxOyBwb3J0ID49IFBPUlRfMDsgcG9ydC0tKSB7Ci0JCXUxNiBmd192ZXIxOwogCQlpZiAoQ0hJUF9JU19FMihicCkpCiAJCQlwb3J0X29mX3BhdGggPSAwOwogCQllbHNlCkBAIC03NjcxLDE5ICs3NzU2LDkgQEAKIAogCQlEUChORVRJRl9NU0dfTElOSywgIkxvYWRpbmcgc3Bpcm9tIGZvciBwaHkgYWRkcmVzcyAweCV4XG4iLAogCQkJICAgcGh5X2Jsa1twb3J0XS0+YWRkcik7Ci0JCWJueDJ4XzgwNzNfODcyN19leHRlcm5hbF9yb21fYm9vdChicCwgcGh5X2Jsa1twb3J0XSwKLQkJCQkJCSAgcG9ydF9vZl9wYXRoKTsKLQotCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBoeV9ibGtbcG9ydF0sCi0JCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMSwgJmZ3X3ZlcjEpOwotCQlpZiAoZndfdmVyMSA9PSAwIHx8IGZ3X3ZlcjEgPT0gMHg0MzIxKSB7Ci0JCQlEUChORVRJRl9NU0dfTElOSywKLQkJCQkgImJueDJ4XzgwNzNfY29tbW9uX2luaXRfcGh5IHBvcnQgJXg6IgotCQkJCSAiRG93bmxvYWQgZmFpbGVkLiBmdyB2ZXJzaW9uID0gMHgleFxuIiwKLQkJCQkgcG9ydCwgZndfdmVyMSk7CisJCWlmIChibngyeF84MDczXzg3MjdfZXh0ZXJuYWxfcm9tX2Jvb3QoYnAsIHBoeV9ibGtbcG9ydF0sCisJCQkJCQkgICAgICBwb3J0X29mX3BhdGgpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KIAogCQkvKiBPbmx5IHNldCBiaXQgMTAgPSAxIChUeCBwb3dlciBkb3duKSAqLwogCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBoeV9ibGtbcG9ydF0sCkBAIC03ODQ4LDI3ICs3OTIzLDE3IEBACiAJfQogCS8qIFBBUlQyIC0gRG93bmxvYWQgZmlybXdhcmUgdG8gYm90aCBwaHlzICovCiAJZm9yIChwb3J0ID0gUE9SVF9NQVggLSAxOyBwb3J0ID49IFBPUlRfMDsgcG9ydC0tKSB7Ci0JCXUxNiBmd192ZXIxOwogCQkgaWYgKENISVBfSVNfRTIoYnApKQogCQkJcG9ydF9vZl9wYXRoID0gMDsKIAkJZWxzZQogCQkJcG9ydF9vZl9wYXRoID0gcG9ydDsKIAkJRFAoTkVUSUZfTVNHX0xJTkssICJMb2FkaW5nIHNwaXJvbSBmb3IgcGh5IGFkZHJlc3MgMHgleFxuIiwKIAkJCSAgIHBoeV9ibGtbcG9ydF0tPmFkZHIpOwotCQlibngyeF84MDczXzg3MjdfZXh0ZXJuYWxfcm9tX2Jvb3QoYnAsIHBoeV9ibGtbcG9ydF0sCi0JCQkJCQkgIHBvcnRfb2ZfcGF0aCk7Ci0JCWJueDJ4X2NsNDVfcmVhZChicCwgcGh5X2Jsa1twb3J0XSwKLQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIxLCAmZndfdmVyMSk7Ci0JCWlmIChmd192ZXIxID09IDAgfHwgZndfdmVyMSA9PSAweDQzMjEpIHsKLQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCSAiYm54MnhfODcyN19jb21tb25faW5pdF9waHkgcG9ydCAleDoiCi0JCQkJICJEb3dubG9hZCBmYWlsZWQuIGZ3IHZlcnNpb24gPSAweCV4XG4iLAotCQkJCSBwb3J0LCBmd192ZXIxKTsKKwkJaWYgKGJueDJ4XzgwNzNfODcyN19leHRlcm5hbF9yb21fYm9vdChicCwgcGh5X2Jsa1twb3J0XSwKKwkJCQkJCSAgICAgIHBvcnRfb2ZfcGF0aCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KIAorCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNzkxNiw2ICs3OTgxLDcgQEAKIAkJCSB1MzIgc2htZW0yX2Jhc2VfcGF0aFtdLCB1MzIgY2hpcF9pZCkKIHsKIAl1OCByYyA9IDA7CisJdTMyIHBoeV92ZXI7CiAJdTggcGh5X2luZGV4OwogCXUzMiBleHRfcGh5X3R5cGUsIGV4dF9waHlfY29uZmlnOwogCURQKE5FVElGX01TR19MSU5LLCAiQmVnaW4gY29tbW9uIHBoeSBpbml0XG4iKTsKQEAgLTc5MjMsNiArNzk4OSwxNiBAQAogCWlmIChDSElQX1JFVl9JU19FTVVMKGJwKSkKIAkJcmV0dXJuIDA7CiAKKwkvKiBDaGVjayBpZiBjb21tb24gaW5pdCB3YXMgYWxyZWFkeSBkb25lICovCisJcGh5X3ZlciA9IFJFR19SRChicCwgc2htZW1fYmFzZV9wYXRoWzBdICsKKwkJCSBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLAorCQkJCSAgcG9ydF9tYltQT1JUXzBdLmV4dF9waHlfZndfdmVyc2lvbikpOworCWlmIChwaHlfdmVyKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiTm90IGRvaW5nIGNvbW1vbiBpbml0OyBwaHkgdmVyIGlzIDB4JXhcbiIsCisJCQkgICAgICAgcGh5X3Zlcik7CisJCXJldHVybiAwOworCX0KKwogCS8qIFJlYWQgdGhlIGV4dF9waHlfdHlwZSBmb3IgYXJiaXRyYXJ5IHBvcnQoMCkgKi8KIAlmb3IgKHBoeV9pbmRleCA9IEVYVF9QSFkxOyBwaHlfaW5kZXggPCBNQVhfUEhZUzsKIAkgICAgICBwaHlfaW5kZXgrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jCmluZGV4IDhjZGNmNWIuLmQ1ODRkMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X21haW4uYworKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9tYWluLmMKQEAgLTIzMDEsMTUgKzIzMDEsMTAgQEAKIAkJLyogYWNjZXB0IG1hdGNoZWQgdWNhc3QgKi8KIAkJZHJvcF9hbGxfdWNhc3QgPSAwOwogCX0KLQlpZiAoZmlsdGVycyAmIEJOWDJYX0FDQ0VQVF9NVUxUSUNBU1QpIHsKKwlpZiAoZmlsdGVycyAmIEJOWDJYX0FDQ0VQVF9NVUxUSUNBU1QpCiAJCS8qIGFjY2VwdCBtYXRjaGVkIG1jYXN0ICovCiAJCWRyb3BfYWxsX21jYXN0ID0gMDsKLQkJaWYgKElTX01GX1NJKGJwKSkKLQkJCS8qIHNpbmNlIG1jYXN0IGFkZHJlc3NlcyB3b24ndCBhcnJpdmUgd2l0aCBvdmxhbiwKLQkJCSAqIGZ3IG5lZWRzIHRvIGFjY2VwdCBhbGwgb2YgdGhlbSBpbgotCQkJICogc3dpdGNoLWluZGVwZW5kZW50IG1vZGUgKi8KLQkJCWFjY3BfYWxsX21jYXN0ID0gMTsKLQl9CisKIAlpZiAoZmlsdGVycyAmIEJOWDJYX0FDQ0VQVF9BTExfVU5JQ0FTVCkgewogCQkvKiBhY2NlcHQgYWxsIG1jYXN0ICovCiAJCWRyb3BfYWxsX3VjYXN0ID0gMDsKQEAgLTQyODEsOSArNDI3NiwxMiBAQAogCQlkZWZfcV9maWx0ZXJzIHw9IEJOWDJYX0FDQ0VQVF9VTklDQVNUIHwgQk5YMlhfQUNDRVBUX0JST0FEQ0FTVCB8CiAJCQkJQk5YMlhfQUNDRVBUX01VTFRJQ0FTVDsKICNpZmRlZiBCQ01fQ05JQwotCQljbF9pZCA9IGJueDJ4X2Zjb2UoYnAsIGNsX2lkKTsKLQkJYm54MnhfcnhxX3NldF9tYWNfZmlsdGVycyhicCwgY2xfaWQsIEJOWDJYX0FDQ0VQVF9VTklDQVNUIHwKLQkJCQkJICBCTlgyWF9BQ0NFUFRfTVVMVElDQVNUKTsKKwkJaWYgKCFOT19GQ09FKGJwKSkgeworCQkJY2xfaWQgPSBibngyeF9mY29lKGJwLCBjbF9pZCk7CisJCQlibngyeF9yeHFfc2V0X21hY19maWx0ZXJzKGJwLCBjbF9pZCwKKwkJCQkJCSAgQk5YMlhfQUNDRVBUX1VOSUNBU1QgfAorCQkJCQkJICBCTlgyWF9BQ0NFUFRfTVVMVElDQVNUKTsKKwkJfQogI2VuZGlmCiAJCWJyZWFrOwogCkBAIC00MjkxLDE4ICs0Mjg5LDI5IEBACiAJCWRlZl9xX2ZpbHRlcnMgfD0gQk5YMlhfQUNDRVBUX1VOSUNBU1QgfCBCTlgyWF9BQ0NFUFRfQlJPQURDQVNUIHwKIAkJCQlCTlgyWF9BQ0NFUFRfQUxMX01VTFRJQ0FTVDsKICNpZmRlZiBCQ01fQ05JQwotCQljbF9pZCA9IGJueDJ4X2Zjb2UoYnAsIGNsX2lkKTsKLQkJYm54MnhfcnhxX3NldF9tYWNfZmlsdGVycyhicCwgY2xfaWQsIEJOWDJYX0FDQ0VQVF9VTklDQVNUIHwKLQkJCQkJICBCTlgyWF9BQ0NFUFRfTVVMVElDQVNUKTsKKwkJLyoKKwkJICogIFByZXZlbnQgZHVwbGljYXRpb24gb2YgbXVsdGljYXN0IHBhY2tldHMgYnkgY29uZmlndXJpbmcgRkNvRQorCQkgKiAgTDIgQ2xpZW50IHRvIHJlY2VpdmUgb25seSBtYXRjaGVkIHVuaWNhc3QgZnJhbWVzLgorCQkgKi8KKwkJaWYgKCFOT19GQ09FKGJwKSkgeworCQkJY2xfaWQgPSBibngyeF9mY29lKGJwLCBjbF9pZCk7CisJCQlibngyeF9yeHFfc2V0X21hY19maWx0ZXJzKGJwLCBjbF9pZCwKKwkJCQkJCSAgQk5YMlhfQUNDRVBUX1VOSUNBU1QpOworCQl9CiAjZW5kaWYKIAkJYnJlYWs7CiAKIAljYXNlIEJOWDJYX1JYX01PREVfUFJPTUlTQzoKIAkJZGVmX3FfZmlsdGVycyB8PSBCTlgyWF9QUk9NSVNDVU9VU19NT0RFOwogI2lmZGVmIEJDTV9DTklDCi0JCWNsX2lkID0gYm54MnhfZmNvZShicCwgY2xfaWQpOwotCQlibngyeF9yeHFfc2V0X21hY19maWx0ZXJzKGJwLCBjbF9pZCwgQk5YMlhfQUNDRVBUX1VOSUNBU1QgfAotCQkJCQkgIEJOWDJYX0FDQ0VQVF9NVUxUSUNBU1QpOworCQkvKgorCQkgKiAgUHJldmVudCBwYWNrZXRzIGR1cGxpY2F0aW9uIGJ5IGNvbmZpZ3VyaW5nIERST1BfQUxMIGZvciBGQ29FCisJCSAqICBMMiBDbGllbnQuCisJCSAqLworCQlpZiAoIU5PX0ZDT0UoYnApKSB7CisJCQljbF9pZCA9IGJueDJ4X2Zjb2UoYnAsIGNsX2lkKTsKKwkJCWJueDJ4X3J4cV9zZXRfbWFjX2ZpbHRlcnMoYnAsIGNsX2lkLCBCTlgyWF9BQ0NFUFRfTk9ORSk7CisJCX0KICNlbmRpZgogCQkvKiBwYXNzIG1hbmFnZW1lbnQgdW5pY2FzdCBwYWNrZXRzIGFzIHdlbGwgKi8KIAkJbGxoX21hc2sgfD0gTklHX0xMSDBfQlJCMV9EUlZfTUFTS19SRUdfTExIMF9CUkIxX0RSVl9NQVNLX1VOQ1NUOwpAQCAtNTI5NiwxMCArNTMwNSw2IEBACiAJCX0KIAl9CiAKLQlicC0+cG9ydC5uZWVkX2h3X2xvY2sgPSBibngyeF9od19sb2NrX3JlcXVpcmVkKGJwLAotCQkJCQkJICAgICAgIGJwLT5jb21tb24uc2htZW1fYmFzZSwKLQkJCQkJCSAgICAgICBicC0+Y29tbW9uLnNobWVtMl9iYXNlKTsKLQogCWJueDJ4X3NldHVwX2Zhbl9mYWlsdXJlX2RldGVjdGlvbihicCk7CiAKIAkvKiBjbGVhciBQWFAyIGF0dGVudGlvbnMgKi8KQEAgLTU1MDMsOSArNTUwOCw2IEBACiAKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBNQ1BfQkxPQ0ssIGluaXRfc3RhZ2UpOwogCWJueDJ4X2luaXRfYmxvY2soYnAsIERNQUVfQkxPQ0ssIGluaXRfc3RhZ2UpOwotCWJwLT5wb3J0Lm5lZWRfaHdfbG9jayA9IGJueDJ4X2h3X2xvY2tfcmVxdWlyZWQoYnAsCi0JCQkJCQkgICAgICAgYnAtPmNvbW1vbi5zaG1lbV9iYXNlLAotCQkJCQkJICAgICAgIGJwLT5jb21tb24uc2htZW0yX2Jhc2UpOwogCWlmIChibngyeF9mYW5fZmFpbHVyZV9kZXRfcmVxKGJwLCBicC0+Y29tbW9uLnNobWVtX2Jhc2UsCiAJCQkJICAgICAgYnAtPmNvbW1vbi5zaG1lbTJfYmFzZSwgcG9ydCkpIHsKIAkJdTMyIHJlZ19hZGRyID0gKHBvcnQgPyBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzAgOgpAQCAtODM3OSw2ICs4MzgxLDE3IEBACiAJCSAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX05PVF9DT05OKSkKIAkJYnAtPm1kaW8ucHJ0YWQgPQogCQkJWEdYU19FWFRfUEhZX0FERFIoZXh0X3BoeV9jb25maWcpOworCisJLyoKKwkgKiBDaGVjayBpZiBodyBsb2NrIGlzIHJlcXVpcmVkIHRvIGFjY2VzcyBNREMvTURJTyBidXMgdG8gdGhlIFBIWShzKQorCSAqIEluIE1GIG1vZGUsIGl0IGlzIHNldCB0byBjb3ZlciBzZWxmIHRlc3QgY2FzZXMKKwkgKi8KKwlpZiAoSVNfTUYoYnApKQorCQlicC0+cG9ydC5uZWVkX2h3X2xvY2sgPSAxOworCWVsc2UKKwkJYnAtPnBvcnQubmVlZF9od19sb2NrID0gYm54MnhfaHdfbG9ja19yZXF1aXJlZChicCwKKwkJCQkJCQlicC0+Y29tbW9uLnNobWVtX2Jhc2UsCisJCQkJCQkJYnAtPmNvbW1vbi5zaG1lbTJfYmFzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBibngyeF9nZXRfbWFjX2h3aW5mbyhzdHJ1Y3QgYm54MnggKmJwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfcmVnLmggYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9yZWcuaAppbmRleCBjOTM5NjgzLi5lMDEzMzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9yZWcuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9yZWcuaApAQCAtNjE5NCw3ICs2MTk0LDExIEBACiAjZGVmaW5lIE1ESU9fQ1RMX1JFR184NDgyM19NRURJQV9QUklPUklUWV9DT1BQRVIJMHgwMDAwCiAjZGVmaW5lIE1ESU9fQ1RMX1JFR184NDgyM19NRURJQV9QUklPUklUWV9GSUJFUgkJMHgwMTAwCiAjZGVmaW5lIE1ESU9fQ1RMX1JFR184NDgyM19NRURJQV9GSUJFUl8xRwkJCTB4MTAwMAorI2RlZmluZSBNRElPX0NUTF9SRUdfODQ4MjNfVVNFUl9DVFJMX1JFRwkJMHg0MDA1CisjZGVmaW5lIE1ESU9fQ1RMX1JFR184NDgyM19VU0VSX0NUUkxfQ01TCQkweDAwODAKIAorI2RlZmluZSBNRElPX1BNQV9SRUdfODQ4MjNfQ1RMX0xFRF9DVExfMQkJMHhhOGUzCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NDgyM19MRUQzX1NUUkVUQ0hfRU4JCTB4MDA4MAogCiAjZGVmaW5lIElHVV9GVU5DX0JBU0UJCQkweDA0MDAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCmluZGV4IDE3MTc4MmUuLjEwMjRhZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKQEAgLTI0NzAsNiArMjQ3MCwxMCBAQAogCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfTUFTVEVSKSkKIAkJZ290byBvdXQ7CiAKKwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJZ290byBvdXQ7CisKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGxhY3BkdSkpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCmluZGV4IGY0ZTYzOGMuLjVjNmZiYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKQEAgLTMyNiw2ICszMjYsMTAgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCWdvdG8gb3V0OworCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgYXJwX2hkcl9sZW4oYm9uZF9kZXYpKSkKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IGIxMDI1YjguLjE2M2UwYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMjczMyw2ICsyNzMzLDEwIEBACiAJaWYgKCFzbGF2ZSB8fCAhc2xhdmVfZG9fYXJwX3ZhbGlkYXRlKGJvbmQsIHNsYXZlKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCisJc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCWdvdG8gb3V0X3VubG9jazsKKwogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGFycF9oZHJfbGVuKGRldikpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnIGIvZHJpdmVycy9uZXQvY2FuL0tjb25maWcKaW5kZXggZDVhOWRiNi4uNWRlYzQ1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvY2FuL0tjb25maWcKQEAgLTIzLDcgKzIzLDcgQEAKIAogCSAgQXMgb25seSB0aGUgc2VuZGluZyBhbmQgcmVjZWl2aW5nIG9mIENBTiBmcmFtZXMgaXMgaW1wbGVtZW50ZWQsIHRoaXMKIAkgIGRyaXZlciBzaG91bGQgd29yayB3aXRoIHRoZSAoc2VyaWFsL1VTQikgQ0FOIGhhcmR3YXJlIGZyb206Ci0JICB3d3cuY2FudXNiLmNvbSAvIHd3dy5jYW4yMzIuY29tIC8gd3d3Lm1pY3Ryb25pYy5jb20gLyB3d3cuY2FuaGFjay5kZQorCSAgd3d3LmNhbnVzYi5jb20gLyB3d3cuY2FuMjMyLmNvbSAvIHd3dy5taWN0cm9uaWNzLmRlIC8gd3d3LmNhbmhhY2suZGUKIAogCSAgVXNlcnNwYWNlIHRvb2xzIHRvIGF0dGFjaCB0aGUgU0xDQU4gbGluZSBkaXNjaXBsaW5lIChzbGNhbl9hdHRhY2gsCiAJICBzbGNhbmQpIGNhbiBiZSBmb3VuZCBpbiB0aGUgY2FuLXV0aWxzIGF0IHRoZSBTb2NrZXRDQU4gU1ZOLCBzZWUKQEAgLTExNyw2ICsxMTcsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL25ldC9jYW4vc29mdGluZy9LY29uZmlnIgorCiBjb25maWcgQ0FOX0RFQlVHX0RFVklDRVMKIAlib29sICJDQU4gZGV2aWNlcyBkZWJ1Z2dpbmcgbWVzc2FnZXMiCiAJZGVwZW5kcyBvbiBDQU4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2Nhbi9NYWtlZmlsZQppbmRleCAwN2NhMTU5Li41M2M4MmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvY2FuL01ha2VmaWxlCkBAIC05LDYgKzksNyBAQAogY2FuLWRldi15CQkJOj0gZGV2Lm8KIAogb2JqLXkJCQkJKz0gdXNiLworb2JqLXkJCQkJKz0gc29mdGluZy8KIAogb2JqLSQoQ09ORklHX0NBTl9TSkExMDAwKQkrPSBzamExMDAwLwogb2JqLSQoQ09ORklHX0NBTl9NU0NBTikJCSs9IG1zY2FuLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2F0OTFfY2FuLmMgYi9kcml2ZXJzL25ldC9jYW4vYXQ5MV9jYW4uYwppbmRleCA3ZWY4M2QwLi41N2QyZmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vYXQ5MV9jYW4uYworKysgYi9kcml2ZXJzL25ldC9jYW4vYXQ5MV9jYW4uYwpAQCAtMiw3ICsyLDcgQEAKICAqIGF0OTFfY2FuLmMgLSBDQU4gbmV0d29yayBkcml2ZXIgZm9yIEFUOTEgU29DIENBTiBjb250cm9sbGVyCiAgKgogICogKEMpIDIwMDcgYnkgSGFucyBKLiBLb2NoIDxoamtAaGFuc2prb2NoLmRlPgotICogKEMpIDIwMDgsIDIwMDksIDIwMTAgYnkgTWFyYyBLbGVpbmUtQnVkZGUgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqIChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIGJ5IE1hcmMgS2xlaW5lLUJ1ZGRlIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CiAgKgogICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAogICogUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgZGlzdHJpYnV0ZWQgaW4gdGhlICdDT1BZSU5HJwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC00MCwyMiArNDEsMjMgQEAKIAogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KIAotI2RlZmluZSBBVDkxX05BUElfV0VJR0hUCTEyCisjZGVmaW5lIEFUOTFfTkFQSV9XRUlHSFQJMTEKIAogLyoKICAqIFJYL1RYIE1haWxib3ggc3BsaXQKICAqIGRvbid0IGRhcmUgdG8gdG91Y2gKICAqLwotI2RlZmluZSBBVDkxX01CX1JYX05VTQkJMTIKKyNkZWZpbmUgQVQ5MV9NQl9SWF9OVU0JCTExCiAjZGVmaW5lIEFUOTFfTUJfVFhfU0hJRlQJMgogCi0jZGVmaW5lIEFUOTFfTUJfUlhfRklSU1QJMAorI2RlZmluZSBBVDkxX01CX1JYX0ZJUlNUCTEKICNkZWZpbmUgQVQ5MV9NQl9SWF9MQVNUCQkoQVQ5MV9NQl9SWF9GSVJTVCArIEFUOTFfTUJfUlhfTlVNIC0gMSkKIAogI2RlZmluZSBBVDkxX01CX1JYX01BU0soaSkJKCgxIDw8IChpKSkgLSAxKQogI2RlZmluZSBBVDkxX01CX1JYX1NQTElUCTgKICNkZWZpbmUgQVQ5MV9NQl9SWF9MT1dfTEFTVAkoQVQ5MV9NQl9SWF9TUExJVCAtIDEpCi0jZGVmaW5lIEFUOTFfTUJfUlhfTE9XX01BU0sJKEFUOTFfTUJfUlhfTUFTSyhBVDkxX01CX1JYX1NQTElUKSkKKyNkZWZpbmUgQVQ5MV9NQl9SWF9MT1dfTUFTSwkoQVQ5MV9NQl9SWF9NQVNLKEFUOTFfTUJfUlhfU1BMSVQpICYgXAorCQkJCSB+QVQ5MV9NQl9SWF9NQVNLKEFUOTFfTUJfUlhfRklSU1QpKQogCiAjZGVmaW5lIEFUOTFfTUJfVFhfTlVNCQkoMSA8PCBBVDkxX01CX1RYX1NISUZUKQogI2RlZmluZSBBVDkxX01CX1RYX0ZJUlNUCShBVDkxX01CX1JYX0xBU1QgKyAxKQpAQCAtMTY4LDYgKzE3MCw4IEBACiAKIAlzdHJ1Y3QgY2xrCQkqY2xrOwogCXN0cnVjdCBhdDkxX2Nhbl9kYXRhCSpwZGF0YTsKKworCWNhbmlkX3QJCQltYjBfaWQ7CiB9OwogCiBzdGF0aWMgc3RydWN0IGNhbl9iaXR0aW1pbmdfY29uc3QgYXQ5MV9iaXR0aW1pbmdfY29uc3QgPSB7CkBAIC0yMjAsNiArMjI0LDE4IEBACiAJc2V0X21iX21vZGVfcHJpbyhwcml2LCBtYiwgbW9kZSwgMCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTMyIGF0OTFfY2FuX2lkX3RvX3JlZ19taWQoY2FuaWRfdCBjYW5faWQpCit7CisJdTMyIHJlZ19taWQ7CisKKwlpZiAoY2FuX2lkICYgQ0FOX0VGRl9GTEFHKQorCQlyZWdfbWlkID0gKGNhbl9pZCAmIENBTl9FRkZfTUFTSykgfCBBVDkxX01JRF9NSURFOworCWVsc2UKKwkJcmVnX21pZCA9IChjYW5faWQgJiBDQU5fU0ZGX01BU0spIDw8IDE4OworCisJcmV0dXJuIHJlZ19taWQ7Cit9CisKIC8qCiAgKiBTd3RpY2ggdHJhbnNjZWl2ZXIgb24gb3Igb2ZmCiAgKi8KQEAgLTIzMywxMiArMjQ5LDIyIEBACiB7CiAJc3RydWN0IGF0OTFfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IGk7CisJdTMyIHJlZ19taWQ7CiAKIAkvKgotCSAqIFRoZSBmaXJzdCAxMiBtYWlsYm94ZXMgYXJlIHVzZWQgYXMgYSByZWNlcHRpb24gRklGTy4gVGhlCi0JICogbGFzdCBtYWlsYm94IGlzIGNvbmZpZ3VyZWQgd2l0aCBvdmVyd3JpdGUgb3B0aW9uLiBUaGUKLQkgKiBvdmVyd3JpdGUgZmxhZyBpbmRpY2F0ZXMgYSBGSUZPIG92ZXJmbG93LgorCSAqIER1ZSB0byBhIGNoaXAgYnVnIChlcnJhdGEgNTAuMi42LjMgJiA1MC4zLjUuMykgdGhlIGZpcnN0CisJICogbWFpbGJveCBpcyBkaXNhYmxlZC4gVGhlIG5leHQgMTEgbWFpbGJveGVzIGFyZSB1c2VkIGFzIGEKKwkgKiByZWNlcHRpb24gRklGTy4gVGhlIGxhc3QgbWFpbGJveCBpcyBjb25maWd1cmVkIHdpdGgKKwkgKiBvdmVyd3JpdGUgb3B0aW9uLiBUaGUgb3ZlcndyaXRlIGZsYWcgaW5kaWNhdGVzIGEgRklGTworCSAqIG92ZXJmbG93LgogCSAqLworCXJlZ19taWQgPSBhdDkxX2Nhbl9pZF90b19yZWdfbWlkKHByaXYtPm1iMF9pZCk7CisJZm9yIChpID0gMDsgaSA8IEFUOTFfTUJfUlhfRklSU1Q7IGkrKykgeworCQlzZXRfbWJfbW9kZShwcml2LCBpLCBBVDkxX01CX01PREVfRElTQUJMRUQpOworCQlhdDkxX3dyaXRlKHByaXYsIEFUOTFfTUlEKGkpLCByZWdfbWlkKTsKKwkJYXQ5MV93cml0ZShwcml2LCBBVDkxX01DUihpKSwgMHgwKTsJLyogY2xlYXIgZGxjICovCisJfQorCiAJZm9yIChpID0gQVQ5MV9NQl9SWF9GSVJTVDsgaSA8IEFUOTFfTUJfUlhfTEFTVDsgaSsrKQogCQlzZXRfbWJfbW9kZShwcml2LCBpLCBBVDkxX01CX01PREVfUlgpOwogCXNldF9tYl9tb2RlKHByaXYsIEFUOTFfTUJfUlhfTEFTVCwgQVQ5MV9NQl9NT0RFX1JYX09WUldSKTsKQEAgLTI1NCw3ICsyODAsOCBAQAogCQlzZXRfbWJfbW9kZV9wcmlvKHByaXYsIGksIEFUOTFfTUJfTU9ERV9UWCwgMCk7CiAKIAkvKiBSZXNldCB0eCBhbmQgcnggaGVscGVyIHBvaW50ZXJzICovCi0JcHJpdi0+dHhfbmV4dCA9IHByaXYtPnR4X2VjaG8gPSBwcml2LT5yeF9uZXh0ID0gMDsKKwlwcml2LT50eF9uZXh0ID0gcHJpdi0+dHhfZWNobyA9IDA7CisJcHJpdi0+cnhfbmV4dCA9IEFUOTFfTUJfUlhfRklSU1Q7CiB9CiAKIHN0YXRpYyBpbnQgYXQ5MV9zZXRfYml0dGltaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zNzIsMTIgKzM5OSw3IEBACiAJCW5ldGRldl9lcnIoZGV2LCAiQlVHISBUWCBidWZmZXIgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIik7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9Ci0KLQlpZiAoY2YtPmNhbl9pZCAmIENBTl9FRkZfRkxBRykKLQkJcmVnX21pZCA9IChjZi0+Y2FuX2lkICYgQ0FOX0VGRl9NQVNLKSB8IEFUOTFfTUlEX01JREU7Ci0JZWxzZQotCQlyZWdfbWlkID0gKGNmLT5jYW5faWQgJiBDQU5fU0ZGX01BU0spIDw8IDE4OwotCisJcmVnX21pZCA9IGF0OTFfY2FuX2lkX3RvX3JlZ19taWQoY2YtPmNhbl9pZCk7CiAJcmVnX21jciA9ICgoY2YtPmNhbl9pZCAmIENBTl9SVFJfRkxBRykgPyBBVDkxX01DUl9NUlRSIDogMCkgfAogCQkoY2YtPmNhbl9kbGMgPDwgMTYpIHwgQVQ5MV9NQ1JfTVRDUjsKIApAQCAtNTM5LDI3ICs1NjEsMzEgQEAKICAqCiAgKiBUaGVvcnkgb2YgT3BlcmF0aW9uOgogICoKLSAqIDEyIG9mIHRoZSAxNiBtYWlsYm94ZXMgb24gdGhlIGNoaXAgYXJlIHJlc2VydmVkIGZvciBSWC4gd2Ugc3BsaXQKLSAqIHRoZW0gaW50byAyIGdyb3Vwcy4gVGhlIGxvd2VyIGdyb3VwIGhvbGRzIDggYW5kIHVwcGVyIDQgbWFpbGJveGVzLgorICogMTEgb2YgdGhlIDE2IG1haWxib3hlcyBvbiB0aGUgY2hpcCBhcmUgcmVzZXJ2ZWQgZm9yIFJYLiB3ZSBzcGxpdAorICogdGhlbSBpbnRvIDIgZ3JvdXBzLiBUaGUgbG93ZXIgZ3JvdXAgaG9sZHMgNyBhbmQgdXBwZXIgNCBtYWlsYm94ZXMuCiAgKgogICogTGlrZSBpdCBvciBub3QsIGJ1dCB0aGUgY2hpcCBhbHdheXMgc2F2ZXMgYSByZWNlaXZlZCBDQU4gbWVzc2FnZQogICogaW50byB0aGUgZmlyc3QgZnJlZSBtYWlsYm94IGl0IGZpbmRzIChzdGFydGluZyB3aXRoIHRoZQogICogbG93ZXN0KS4gVGhpcyBtYWtlcyBpdCB2ZXJ5IGRpZmZpY3VsdCB0byByZWFkIHRoZSBtZXNzYWdlcyBpbiB0aGUKICAqIHJpZ2h0IG9yZGVyIGZyb20gdGhlIGNoaXAuIFRoaXMgaXMgaG93IHdlIHdvcmsgYXJvdW5kIHRoYXQgcHJvYmxlbToKICAqCi0gKiBUaGUgZmlyc3QgbWVzc2FnZSBnb2VzIGludG8gbWIgbnIuIDAgYW5kIGlzc3VlcyBhbiBpbnRlcnJ1cHQuIEFsbAorICogVGhlIGZpcnN0IG1lc3NhZ2UgZ29lcyBpbnRvIG1iIG5yLiAxIGFuZCBpc3N1ZXMgYW4gaW50ZXJydXB0LiBBbGwKICAqIHJ4IGludHMgYXJlIGRpc2FibGVkIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgYSBuYXBpIHBvbGwgaXMKICAqIHNjaGVkdWxlZC4gV2UgcmVhZCB0aGUgbWFpbGJveCwgYnV0IGRvIF9ub3RfIHJlZW5hYmxlIHRoZSBtYiAodG8KICAqIHJlY2VpdmUgYW5vdGhlciBtZXNzYWdlKS4KICAqCiAgKiAgICBsb3dlciBtYnhzICAgICAgdXBwZXIKLSAqICAgX19fX19fXl9fX19fXyAgICBfX15fXwotICogIC8gICAgICAgICAgICAgXCAgLyAgICAgXAorICogICAgIF9fX19eX19fX19fICAgIF9fXl9fCisgKiAgICAvICAgICAgICAgICBcICAvICAgICBcCiAgKiArLSstKy0rLSstKy0rLSstKystKy0rLSstKwotICogfHh8eHx4fHh8eHx4fHh8eHx8IHwgfCB8IHwKKyAqIHwgfHh8eHx4fHh8eHx4fHh8fCB8IHwgfCB8CiAgKiArLSstKy0rLSstKy0rLSstKystKy0rLSstKwogICogIDAgMCAwIDAgMCAwICAwIDAgMCAwIDEgMSAgXCBtYWlsCiAgKiAgMCAxIDIgMyA0IDUgIDYgNyA4IDkgMCAxICAvIGJveAorICogIF4KKyAqICB8CisgKiAgIFwKKyAqICAgICB1bnVzZWQsIGR1ZSB0byBjaGlwIGJ1ZwogICoKICAqIFRoZSB2YXJpYWJsZSBwcml2LT5yeF9uZXh0IHBvaW50cyB0byB0aGUgbmV4dCBtYWlsYm94IHRvIHJlYWQgYQogICogbWVzc2FnZSBmcm9tLiBBcyBsb25nIHdlJ3JlIGluIHRoZSBsb3dlciBtYWlsYm94ZXMgd2UganVzdCByZWFkIHRoZQpAQCAtNTkwLDEwICs2MTYsMTAgQEAKIAkJCSJvcmRlciBvZiBpbmNvbWluZyBmcmFtZXMgY2Fubm90IGJlIGd1YXJhbnRlZWRcbiIpOwogCiAgYWdhaW46Ci0JZm9yIChtYiA9IGZpbmRfbmV4dF9iaXQoYWRkciwgQVQ5MV9NQl9SWF9OVU0sIHByaXYtPnJ4X25leHQpOwotCSAgICAgbWIgPCBBVDkxX01CX1JYX05VTSAmJiBxdW90YSA+IDA7CisJZm9yIChtYiA9IGZpbmRfbmV4dF9iaXQoYWRkciwgQVQ5MV9NQl9SWF9MQVNUICsgMSwgcHJpdi0+cnhfbmV4dCk7CisJICAgICBtYiA8IEFUOTFfTUJfUlhfTEFTVCArIDEgJiYgcXVvdGEgPiAwOwogCSAgICAgcmVnX3NyID0gYXQ5MV9yZWFkKHByaXYsIEFUOTFfU1IpLAotCSAgICAgbWIgPSBmaW5kX25leHRfYml0KGFkZHIsIEFUOTFfTUJfUlhfTlVNLCArK3ByaXYtPnJ4X25leHQpKSB7CisJICAgICBtYiA9IGZpbmRfbmV4dF9iaXQoYWRkciwgQVQ5MV9NQl9SWF9MQVNUICsgMSwgKytwcml2LT5yeF9uZXh0KSkgewogCQlhdDkxX3JlYWRfbXNnKGRldiwgbWIpOwogCiAJCS8qIHJlYWN0aXZhdGUgbWFpbGJveGVzICovCkBAIC02MTAsOCArNjM2LDggQEAKIAogCS8qIHVwcGVyIGdyb3VwIGNvbXBsZXRlZCwgbG9vayBhZ2FpbiBpbiBsb3dlciAqLwogCWlmIChwcml2LT5yeF9uZXh0ID4gQVQ5MV9NQl9SWF9MT1dfTEFTVCAmJgotCSAgICBxdW90YSA+IDAgJiYgbWIgPj0gQVQ5MV9NQl9SWF9OVU0pIHsKLQkJcHJpdi0+cnhfbmV4dCA9IDA7CisJICAgIHF1b3RhID4gMCAmJiBtYiA+IEFUOTFfTUJfUlhfTEFTVCkgeworCQlwcml2LT5yeF9uZXh0ID0gQVQ5MV9NQl9SWF9GSVJTVDsKIAkJZ290byBhZ2FpbjsKIAl9CiAKQEAgLTEwMzcsNiArMTA2Myw2NCBAQAogCS5uZG9fc3RhcnRfeG1pdAk9IGF0OTFfc3RhcnRfeG1pdCwKIH07CiAKK3N0YXRpYyBzc2l6ZV90IGF0OTFfc3lzZnNfc2hvd19tYjBfaWQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhdDkxX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdih0b19uZXRfZGV2KGRldikpOworCisJaWYgKHByaXYtPm1iMF9pZCAmIENBTl9FRkZfRkxBRykKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglMDh4XG4iLCBwcml2LT5tYjBfaWQpOworCWVsc2UKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglMDN4XG4iLCBwcml2LT5tYjBfaWQpOworfQorCitzdGF0aWMgc3NpemVfdCBhdDkxX3N5c2ZzX3NldF9tYjBfaWQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGRldik7CisJc3RydWN0IGF0OTFfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCXVuc2lnbmVkIGxvbmcgY2FuX2lkOworCXNzaXplX3QgcmV0OworCWludCBlcnI7CisKKwlydG5sX2xvY2soKTsKKworCWlmIChuZGV2LT5mbGFncyAmIElGRl9VUCkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJmNhbl9pZCk7CisJaWYgKGVycikgeworCQlyZXQgPSBlcnI7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjYW5faWQgJiBDQU5fRUZGX0ZMQUcpCisJCWNhbl9pZCAmPSBDQU5fRUZGX01BU0sgfCBDQU5fRUZGX0ZMQUc7CisJZWxzZQorCQljYW5faWQgJj0gQ0FOX1NGRl9NQVNLOworCisJcHJpdi0+bWIwX2lkID0gY2FuX2lkOworCXJldCA9IGNvdW50OworCisgb3V0OgorCXJ0bmxfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG1iMF9pZCwgU19JV1VTUiB8IFNfSVJVR08sCisJYXQ5MV9zeXNmc19zaG93X21iMF9pZCwgYXQ5MV9zeXNmc19zZXRfbWIwX2lkKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmF0OTFfc3lzZnNfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfbWIwX2lkLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGF0OTFfc3lzZnNfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBhdDkxX3N5c2ZzX2F0dHJzLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgYXQ5MV9jYW5fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtMTA4Miw2ICsxMTY2LDcgQEAKIAlkZXYtPm5ldGRldl9vcHMJPSAmYXQ5MV9uZXRkZXZfb3BzOwogCWRldi0+aXJxID0gaXJxOwogCWRldi0+ZmxhZ3MgfD0gSUZGX0VDSE87CisJZGV2LT5zeXNmc19ncm91cHNbMF0gPSAmYXQ5MV9zeXNmc19hdHRyX2dyb3VwOwogCiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJcHJpdi0+Y2FuLmNsb2NrLmZyZXEgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKQEAgLTEwOTMsNiArMTE3OCw3IEBACiAJcHJpdi0+ZGV2ID0gZGV2OwogCXByaXYtPmNsayA9IGNsazsKIAlwcml2LT5wZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXByaXYtPm1iMF9pZCA9IDB4N2ZmOwogCiAJbmV0aWZfbmFwaV9hZGQoZGV2LCAmcHJpdi0+bmFwaSwgYXQ5MV9wb2xsLCBBVDkxX05BUElfV0VJR0hUKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2phbnotaWNhbjMuYyBiL2RyaXZlcnMvbmV0L2Nhbi9qYW56LWljYW4zLmMKaW5kZXggYjlhNmQ3YS4uMzY2ZjVjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2phbnotaWNhbjMuYworKysgYi9kcml2ZXJzL25ldC9jYW4vamFuei1pY2FuMy5jCkBAIC0xNjE4LDcgKzE2MTgsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKHRlcm1pbmF0aW9uLCBTX0lXVUdPIHwgU19JUlVHTywgaWNhbjNfc3lzZnNfc2hvd190ZXJtLAorc3RhdGljIERFVklDRV9BVFRSKHRlcm1pbmF0aW9uLCBTX0lXVVNSIHwgU19JUlVHTywgaWNhbjNfc3lzZnNfc2hvd190ZXJtLAogCQkJCQkJICAgaWNhbjNfc3lzZnNfc2V0X3Rlcm0pOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaWNhbjNfc3lzZnNfYXR0cnNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9tY3AyNTF4LmMgYi9kcml2ZXJzL25ldC9jYW4vbWNwMjUxeC5jCmluZGV4IDdhYjUzNGEuLjc1MTNjNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9tY3AyNTF4LmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL21jcDI1MXguYwpAQCAtOTQwLDcgKzk0MCw3IEBACiAJCWdvdG8gb3Blbl91bmxvY2s7CiAJfQogCi0JcHJpdi0+d3EgPSBjcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUoIm1jcDI1MXhfd3EiKTsKKwlwcml2LT53cSA9IGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKCJtY3AyNTF4X3dxIik7CiAJSU5JVF9XT1JLKCZwcml2LT50eF93b3JrLCBtY3AyNTF4X3R4X3dvcmtfaGFuZGxlcik7CiAJSU5JVF9XT1JLKCZwcml2LT5yZXN0YXJ0X3dvcmssIG1jcDI1MXhfcmVzdGFydF93b3JrX2hhbmRsZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vbXNjYW4vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9LY29uZmlnCmluZGV4IDI3ZDFkMzkuLmQzODcwNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9LY29uZmlnCkBAIC0xLDUgKzEsNSBAQAogY29uZmlnIENBTl9NU0NBTgotCWRlcGVuZHMgb24gQ0FOX0RFViAmJiAoUFBDIHx8IE02OEsgfHwgTTY4S05PTU1VKQorCWRlcGVuZHMgb24gQ0FOX0RFViAmJiAoUFBDIHx8IE02OEspCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIEZyZWVzY2FsZSBNU0NBTiBiYXNlZCBjaGlwcyIKIAktLS1oZWxwLS0tCiAJICBUaGUgTW90b3JvbGEgU2NhbGFibGUgQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgKE1TQ0FOKSBkZWZpbml0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcGNoX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL3BjaF9jYW4uYwppbmRleCBjNDJlOTcyLi5lNTQ3MTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vcGNoX2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9wY2hfY2FuLmMKQEAgLTE4NSw3ICsxODUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNhbl9iaXR0aW1pbmdfY29uc3QgcGNoX2Nhbl9iaXR0aW1pbmdfY29uc3QgPSB7CiAJLm5hbWUgPSBLQlVJTERfTU9ETkFNRSwKLQkudHNlZzFfbWluID0gMSwKKwkudHNlZzFfbWluID0gMiwKIAkudHNlZzFfbWF4ID0gMTYsCiAJLnRzZWcyX21pbiA9IDEsCiAJLnRzZWcyX21heCA9IDgsCkBAIC05NTksMTMgKzk1OSwxMyBAQAogCXN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAogCXVucmVnaXN0ZXJfY2FuZGV2KHByaXYtPm5kZXYpOwotCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPnJlZ3MpOwogCWlmIChwcml2LT51c2VfbXNpKQogCQlwY2lfZGlzYWJsZV9tc2kocHJpdi0+ZGV2KTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJcGNoX2Nhbl9yZXNldChwcml2KTsKKwlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5yZWdzKTsKIAlmcmVlX2NhbmRldihwcml2LT5uZGV2KTsKIH0KIApAQCAtMTIzOCw2ICsxMjM4LDcgQEAKIAkJcHJpdi0+dXNlX21zaSA9IDA7CiAJfSBlbHNlIHsKIAkJbmV0ZGV2X2VycihuZGV2LCAiUENIIENBTiBvcGVuZWQgd2l0aCBNU0lcbiIpOworCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAkJcHJpdi0+dXNlX21zaSA9IDE7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9LY29uZmlnIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGU0NmE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvS2NvbmZpZwpAQCAtMCwwICsxLDMwIEBACitjb25maWcgQ0FOX1NPRlRJTkcKKwl0cmlzdGF0ZSAiU29mdGluZyBHbWJoIENBTiBnZW5lcmljIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBDQU5fREVWICYmIEhBU19JT01FTQorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIENBTiBjYXJkcyBmcm9tIFNvZnRpbmcgR21iaCAmIHNvbWUgY2FyZHMKKwkgIGZyb20gVmVjdG9yIEdtYmguCisJICBTb2Z0aW5nIEdtYmggQ0FOIGNhcmRzIGNvbWUgd2l0aCAxIG9yIDIgcGh5c2ljYWwgYnVzc2VzLgorCSAgVGhvc2UgY2FyZHMgdHlwaWNhbGx5IHVzZSBEdWFsIFBvcnQgUkFNIHRvIGNvbW11bmljYXRlCisJICB3aXRoIHRoZSBob3N0IENQVS4gVGhlIGludGVyZmFjZSBpcyB0aGVuIGlkZW50aWNhbCBmb3IgUENJCisJICBhbmQgUENNQ0lBIGNhcmRzLiBUaGlzIGRyaXZlciBvcGVyYXRlcyBvbiBhIHBsYXRmb3JtIGRldmljZSwKKwkgIHdoaWNoIGhhcyBiZWVuIGNyZWF0ZWQgYnkgc29mdGluZ19jcyBvciBzb2Z0aW5nX3BjaSBkcml2ZXIuCisJICBXYXJuaW5nOgorCSAgVGhlIEFQSSBvZiB0aGUgY2FyZCBkb2VzIG5vdCBhbGxvdyBmaW5lIGNvbnRyb2wgcGVyIGJ1cywgYnV0CisJICBjb250cm9scyB0aGUgMiBidXNzZXMgb24gdGhlIGNhcmQgdG9nZXRoZXIuCisJICBBcyBzdWNoLCBzb21lIGFjdGlvbnMgKHN0YXJ0L3N0b3AvYnVzb2ZmIHJlY292ZXJ5KSBvbiAxIGJ1cworCSAgbXVzdCBicmluZyBkb3duIHRoZSBvdGhlciBidXMgdG9vIHRlbXBvcmFyaWx5LgorCitjb25maWcgQ0FOX1NPRlRJTkdfQ1MKKwl0cmlzdGF0ZSAiU29mdGluZyBHbWJoIENBTiBwY21jaWEgY2FyZHMiCisJZGVwZW5kcyBvbiBQQ01DSUEKKwlkZXBlbmRzIG9uIENBTl9TT0ZUSU5HCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgUENNQ0lBIGNhcmRzIGZyb20gU29mdGluZyBHbWJoICYgc29tZSBjYXJkcworCSAgZnJvbSBWZWN0b3IgR21iaC4KKwkgIFlvdSBuZWVkIGZpcm13YXJlIGZvciB0aGVzZSwgd2hpY2ggeW91IGNhbiBnZXQgYXQKKwkgIGh0dHA6Ly9kZXZlbG9wZXIuYmVybGlvcy5kZS9wcm9qZWN0cy9zb2NrZXRjYW4vCisJICBUaGlzIHZlcnNpb24gb2YgdGhlIGRyaXZlciBpcyB3cml0dGVuIGFnYWluc3QKKwkgIGZpcm13YXJlIHZlcnNpb24gNC42IChzb2Z0aW5nLWZ3LTQuNi1iaW5hcmllcy50YXIuZ3opCisJICBJbiBvcmRlciB0byB1c2UgdGhlIGNhcmQgYXMgQ0FOIGRldmljZSwgeW91IG5lZWQgdGhlIFNvZnRpbmcgZ2VuZXJpYworCSAgc3VwcG9ydCB0b28uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZTUwMTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKKworc29mdGluZy15IDo9IHNvZnRpbmdfbWFpbi5vIHNvZnRpbmdfZncubworb2JqLSQoQ09ORklHX0NBTl9TT0ZUSU5HKSArPSBzb2Z0aW5nLm8KK29iai0kKENPTkZJR19DQU5fU09GVElOR19DUykgKz0gc29mdGluZ19jcy5vCisKK2NjZmxhZ3MtJChDT05GSUdfQ0FOX0RFQlVHX0RFVklDRVMpIDo9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmcuaCBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWM5ZjRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZy5oCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogc29mdGluZyBjb21tb24gaW50ZXJmYWNlcworICoKKyAqIGJ5IEt1cnQgVmFuIERpamNrLCAyMDA4LTIwMTAKKyAqLworCisjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY2FuLmg+CisjaW5jbHVkZSA8bGludXgvY2FuL2Rldi5oPgorCisjaW5jbHVkZSAic29mdGluZ19wbGF0Zm9ybS5oIgorCitzdHJ1Y3Qgc29mdGluZzsKKworc3RydWN0IHNvZnRpbmdfcHJpdiB7CisJc3RydWN0IGNhbl9wcml2IGNhbjsgLyogbXVzdCBiZSB0aGUgZmlyc3QgbWVtYmVyISAqLworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IHNvZnRpbmcgKmNhcmQ7CisJc3RydWN0IHsKKwkJaW50IHBlbmRpbmc7CisJCS8qIHZhcmlhYmxlcyB3aWNoIGhvbGQgdGhlIGNpcmN1bGFyIGJ1ZmZlciAqLworCQlpbnQgZWNob19wdXQ7CisJCWludCBlY2hvX2dldDsKKwl9IHR4OworCXN0cnVjdCBjYW5fYml0dGltaW5nX2NvbnN0IGJ0cl9jb25zdDsKKwlpbnQgaW5kZXg7CisJdWludDhfdCBvdXRwdXQ7CisJdWludDE2X3QgY2hpcDsKK307CisjZGVmaW5lIG5ldGRldjJzb2Z0aW5nKG5ldGRldikJKChzdHJ1Y3Qgc29mdGluZ19wcml2ICopbmV0ZGV2X3ByaXYobmV0ZGV2KSkKKworc3RydWN0IHNvZnRpbmcgeworCWNvbnN0IHN0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEgKnBkYXQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0WzJdOworCXNwaW5sb2NrX3Qgc3BpbjsgLyogcHJvdGVjdCB0aGlzIHN0cnVjdHVyZSAmIERQUkFNIGFjY2VzcyAqLworCWt0aW1lX3QgdHNfcmVmOworCWt0aW1lX3QgdHNfb3ZlcmZsb3c7IC8qIHRpbWVzdGFtcCBvdmVyZmxvdyB2YWx1ZSwgaW4ga3RpbWUgKi8KKworCXN0cnVjdCB7CisJCS8qIGluZGljYXRpb24gb2YgZmlybXdhcmUgc3RhdHVzICovCisJCWludCB1cDsKKwkJLyogcHJvdGVjdGlvbiBvZiB0aGUgJ3VwJyB2YXJpYWJsZSAqLworCQlzdHJ1Y3QgbXV0ZXggbG9jazsKKwl9IGZ3OworCXN0cnVjdCB7CisJCWludCBucjsKKwkJaW50IHJlcXVlc3RlZDsKKwkJaW50IHN2Y19jb3VudDsKKwkJdW5zaWduZWQgaW50IGRwcmFtX3Bvc2l0aW9uOworCX0gaXJxOworCXN0cnVjdCB7CisJCWludCBwZW5kaW5nOworCQlpbnQgbGFzdF9idXM7CisJCS8qCisJCSAqIGtlZXAgdGhlIGJ1cyB0aGF0IGxhc3QgdHgnZCBhIG1lc3NhZ2UsCisJCSAqIGluIG9yZGVyIHRvIGxldCBldmVyeSBuZXRkZXYgcXVldWUgcmVzdW1lCisJCSAqLworCX0gdHg7CisJX19pb21lbSB1aW50OF90ICpkcHJhbTsKKwl1bnNpZ25lZCBsb25nIGRwcmFtX3BoeXM7CisJdW5zaWduZWQgbG9uZyBkcHJhbV9zaXplOworCXN0cnVjdCB7CisJCXVpbnQxNl90IGZ3X3ZlcnNpb24sIGh3X3ZlcnNpb24sIGxpY2Vuc2UsIHNlcmlhbDsKKwkJdWludDE2X3QgY2hpcFsyXTsKKwkJdW5zaWduZWQgaW50IGZyZXE7IC8qIHJlbW90ZSBjcHUncyBvcGVyYXRpbmcgZnJlcXVlbmN5ICovCisJfSBpZDsKK307CisKK2V4dGVybiBpbnQgc29mdGluZ19kZWZhdWx0X291dHB1dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKKworZXh0ZXJuIGt0aW1lX3Qgc29mdGluZ19yYXcya3RpbWUoc3RydWN0IHNvZnRpbmcgKmNhcmQsIHUzMiByYXcpOworCitleHRlcm4gaW50IHNvZnRpbmdfY2hpcF9wb3dlcm9uKHN0cnVjdCBzb2Z0aW5nICpjYXJkKTsKKworZXh0ZXJuIGludCBzb2Z0aW5nX2Jvb3Rsb2FkZXJfY29tbWFuZChzdHJ1Y3Qgc29mdGluZyAqY2FyZCwgaW50MTZfdCBjbWQsCisJCWNvbnN0IGNoYXIgKm1zZyk7CisKKy8qIExvYWQgZmlybXdhcmUgYWZ0ZXIgcmVzZXQgKi8KK2V4dGVybiBpbnQgc29mdGluZ19sb2FkX2Z3KGNvbnN0IGNoYXIgKmZpbGUsIHN0cnVjdCBzb2Z0aW5nICpjYXJkLAorCQkJX19pb21lbSB1aW50OF90ICp2aXJ0LCB1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IG9mZnNldCk7CisKKy8qIExvYWQgZmluYWwgYXBwbGljYXRpb24gZmlybXdhcmUgYWZ0ZXIgYm9vdGxvYWRlciAqLworZXh0ZXJuIGludCBzb2Z0aW5nX2xvYWRfYXBwX2Z3KGNvbnN0IGNoYXIgKmZpbGUsIHN0cnVjdCBzb2Z0aW5nICpjYXJkKTsKKworLyoKKyAqIGVuYWJsZSBvciBkaXNhYmxlIGlycQorICogb25seSBjYWxsZWQgd2l0aCBmdy5sb2NrIGxvY2tlZAorICovCitleHRlcm4gaW50IHNvZnRpbmdfZW5hYmxlX2lycShzdHJ1Y3Qgc29mdGluZyAqY2FyZCwgaW50IGVuYWJsZSk7CisKKy8qIHN0YXJ0L3N0b3AgMSBidXMgb24gY2FyZCAqLworZXh0ZXJuIGludCBzb2Z0aW5nX3N0YXJ0c3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdXApOworCisvKiBuZXRpZl9yeCgpICovCitleHRlcm4gaW50IHNvZnRpbmdfbmV0ZGV2X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCWNvbnN0IHN0cnVjdCBjYW5fZnJhbWUgKm1zZywga3RpbWVfdCBrdGltZSk7CisKKy8qIFNPRlRJTkcgRFBSQU0gbWFwcGluZ3MgKi8KKyNkZWZpbmUgRFBSQU1fUlgJCTB4MDAwMAorCSNkZWZpbmUgRFBSQU1fUlhfU0laRQkzMgorCSNkZWZpbmUgRFBSQU1fUlhfQ05UCTE2CisjZGVmaW5lIERQUkFNX1JYX1JECQkweDAyMDEJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9SWF9XUgkJMHgwMjA1CS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUgRFBSQU1fUlhfTE9TVAkJMHgwMjA3CS8qIHVpbnQ4X3QgKi8KKworI2RlZmluZSBEUFJBTV9GQ1RfUEFSQU0JCTB4MDMwMAkvKiBpbnQxNl90IFsyMF0gKi8KKyNkZWZpbmUgRFBSQU1fRkNUX1JFU1VMVAkweDAzMjgJLyogaW50MTZfdCAqLworI2RlZmluZSBEUFJBTV9GQ1RfSE9TVAkJMHgwMzJiCS8qIHVpbnQxNl90ICovCisKKyNkZWZpbmUgRFBSQU1fSU5GT19CVVNTVEFURQkweDAzMzEJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fSU5GT19CVVNTVEFURTIJMHgwMzM1CS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX0lORk9fRVJSU1RBVEUJMHgwMzM5CS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX0lORk9fRVJSU1RBVEUyCTB4MDMzZAkvKiB1aW50MTZfdCAqLworI2RlZmluZSBEUFJBTV9SRVNFVAkJMHgwMzQxCS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX0NMUl9SRUNWX0ZJRk8JMHgwMzQ1CS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX1JFU0VUX1RJTUUJMHgwMzRkCS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX1RJTUUJCTB4MDM1MAkvKiB1aW50NjRfdCAqLworI2RlZmluZSBEUFJBTV9XUl9TVEFSVAkJMHgwMzU4CS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUgRFBSQU1fV1JfRU5ECQkweDAzNTkJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9SRVNFVF9SWF9GSUZPCTB4MDM2MQkvKiB1aW50MTZfdCAqLworI2RlZmluZSBEUFJBTV9SRVNFVF9UWF9GSUZPCTB4MDM2NAkvKiB1aW50OF90ICovCisjZGVmaW5lIERQUkFNX1JFQURfRklGT19MRVZFTAkweDAzNjUJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9SWF9GSUZPX0xFVkVMCTB4MDM2NgkvKiB1aW50MTZfdCAqLworI2RlZmluZSBEUFJBTV9UWF9GSUZPX0xFVkVMCTB4MDM2NgkvKiB1aW50MTZfdCAqLworCisjZGVmaW5lIERQUkFNX1RYCQkweDA0MDAJLyogdWludDE2X3QgKi8KKwkjZGVmaW5lIERQUkFNX1RYX1NJWkUJMTYKKwkjZGVmaW5lIERQUkFNX1RYX0NOVAkzMgorI2RlZmluZSBEUFJBTV9UWF9SRAkJMHgwNjAxCS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUgRFBSQU1fVFhfV1IJCTB4MDYwNQkvKiB1aW50OF90ICovCisKKyNkZWZpbmUgRFBSQU1fQ09NTUFORAkJMHgwN2UwCS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX1JFQ0VJUFQJCTB4MDdmMAkvKiB1aW50MTZfdCAqLworI2RlZmluZSBEUFJBTV9JUlFfVE9IT1NUCTB4MDdmZQkvKiB1aW50OF90ICovCisjZGVmaW5lIERQUkFNX0lSUV9UT0NBUkQJMHgwN2ZmCS8qIHVpbnQ4X3QgKi8KKworI2RlZmluZSBEUFJBTV9WMl9SRVNFVAkJMHgwZTAwCS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUgRFBSQU1fVjJfSVJRX1RPSE9TVAkweDBlMDIJLyogdWludDhfdCAqLworCisjZGVmaW5lIFRYTUFYCShEUFJBTV9UWF9DTlQgLSAxKQorCisvKiBEUFJBTSByZXR1cm4gY29kZXMgKi8KKyNkZWZpbmUgUkVTX05PTkUJMAorI2RlZmluZSBSRVNfT0sJCTEKKyNkZWZpbmUgUkVTX05PSwkJMgorI2RlZmluZSBSRVNfVU5LTk9XTgkzCisvKiBEUFJBTSBmbGFncyAqLworI2RlZmluZSBDTURfVFgJCTB4MDEKKyNkZWZpbmUgQ01EX0FDSwkJMHgwMgorI2RlZmluZSBDTURfWFRECQkweDA0CisjZGVmaW5lIENNRF9SVFIJCTB4MDgKKyNkZWZpbmUgQ01EX0VSUgkJMHgxMAorI2RlZmluZSBDTURfQlVTMgkweDgwCisKKy8qIHJldHVybmVkIGZpZm8gZW50cnkgYnVzIHN0YXRlIG1hc2tzICovCisjZGVmaW5lIFNGX01BU0tfQlVTT0ZGCQkweDgwCisjZGVmaW5lIFNGX01BU0tfRVBBU1NJVkUJMHg2MAorCisvKiBidXMgc3RhdGVzICovCisjZGVmaW5lIFNUQVRFX0JVU09GRgkyCisjZGVmaW5lIFNUQVRFX0VQQVNTSVZFCTEKKyNkZWZpbmUgU1RBVEVfRUFDVElWRQkwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX2NzLmMgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX2NzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExYmI0ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfY3MuYwpAQCAtMCwwICsxLDM2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwCisgKgorICogLSBLdXJ0IFZhbiBEaWpjaywgRUlBIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CisjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisKKyNpbmNsdWRlICJzb2Z0aW5nX3BsYXRmb3JtLmgiCisKK3N0YXRpYyBpbnQgc29mdGluZ2NzX2luZGV4Oworc3RhdGljIHNwaW5sb2NrX3Qgc29mdGluZ2NzX2luZGV4X2xvY2s7CisKK3N0YXRpYyBpbnQgc29mdGluZ2NzX3Jlc2V0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCB2KTsKK3N0YXRpYyBpbnQgc29mdGluZ2NzX2VuYWJsZV9pcnEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IHYpOworCisvKgorICogcGxhdGZvcm1fZGF0YSBkZXNjcmlwdGlvbnMKKyAqLworI2RlZmluZSBNSFogKDEwMDAqMTAwMCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29mdGluZ19wbGF0Zm9ybV9kYXRhIHNvZnRpbmdjc19wbGF0Zm9ybV9kYXRhW10gPSB7Cit7CisJLm5hbWUgPSAiQ0FOY2FyZCIsCisJLm1hbmYgPSAweDAxNjgsIC5wcm9kID0gMHgwMDEsCisJLmdlbmVyYXRpb24gPSAxLAorCS5uYnVzID0gMiwKKwkuZnJlcSA9IDE2ICogTUhaLCAubWF4X2JycCA9IDMyLCAubWF4X3NqdyA9IDQsCisJLmRwcmFtX3NpemUgPSAweDA4MDAsCisJLmJvb3QgPSB7MHgwMDAwLCAweDAwMDAwMCwgZndfZGlyICJiY2FyZC5iaW4iLH0sCisJLmxvYWQgPSB7MHgwMTIwLCAweDAwZjYwMCwgZndfZGlyICJsZGNhcmQuYmluIix9LAorCS5hcHAgPSB7MHgwMDEwLCAweDBkMDAwMCwgZndfZGlyICJjYW5jYXJkLmJpbiIsfSwKKwkucmVzZXQgPSBzb2Z0aW5nY3NfcmVzZXQsCisJLmVuYWJsZV9pcnEgPSBzb2Z0aW5nY3NfZW5hYmxlX2lycSwKK30sIHsKKwkubmFtZSA9ICJDQU5jYXJkLU5FQyIsCisJLm1hbmYgPSAweDAxNjgsIC5wcm9kID0gMHgwMDIsCisJLmdlbmVyYXRpb24gPSAxLAorCS5uYnVzID0gMiwKKwkuZnJlcSA9IDE2ICogTUhaLCAubWF4X2JycCA9IDMyLCAubWF4X3NqdyA9IDQsCisJLmRwcmFtX3NpemUgPSAweDA4MDAsCisJLmJvb3QgPSB7MHgwMDAwLCAweDAwMDAwMCwgZndfZGlyICJiY2FyZC5iaW4iLH0sCisJLmxvYWQgPSB7MHgwMTIwLCAweDAwZjYwMCwgZndfZGlyICJsZGNhcmQuYmluIix9LAorCS5hcHAgPSB7MHgwMDEwLCAweDBkMDAwMCwgZndfZGlyICJjYW5jYXJkLmJpbiIsfSwKKwkucmVzZXQgPSBzb2Z0aW5nY3NfcmVzZXQsCisJLmVuYWJsZV9pcnEgPSBzb2Z0aW5nY3NfZW5hYmxlX2lycSwKK30sIHsKKwkubmFtZSA9ICJDQU5jYXJkLVNKQSIsCisJLm1hbmYgPSAweDAxNjgsIC5wcm9kID0gMHgwMDQsCisJLmdlbmVyYXRpb24gPSAxLAorCS5uYnVzID0gMiwKKwkuZnJlcSA9IDIwICogTUhaLCAubWF4X2JycCA9IDMyLCAubWF4X3NqdyA9IDQsCisJLmRwcmFtX3NpemUgPSAweDA4MDAsCisJLmJvb3QgPSB7MHgwMDAwLCAweDAwMDAwMCwgZndfZGlyICJiY2FyZC5iaW4iLH0sCisJLmxvYWQgPSB7MHgwMTIwLCAweDAwZjYwMCwgZndfZGlyICJsZGNhcmQuYmluIix9LAorCS5hcHAgPSB7MHgwMDEwLCAweDBkMDAwMCwgZndfZGlyICJjYW5zamEuYmluIix9LAorCS5yZXNldCA9IHNvZnRpbmdjc19yZXNldCwKKwkuZW5hYmxlX2lycSA9IHNvZnRpbmdjc19lbmFibGVfaXJxLAorfSwgeworCS5uYW1lID0gIkNBTmNhcmQtMiIsCisJLm1hbmYgPSAweDAxNjgsIC5wcm9kID0gMHgwMDUsCisJLmdlbmVyYXRpb24gPSAyLAorCS5uYnVzID0gMiwKKwkuZnJlcSA9IDI0ICogTUhaLCAubWF4X2JycCA9IDY0LCAubWF4X3NqdyA9IDQsCisJLmRwcmFtX3NpemUgPSAweDEwMDAsCisJLmJvb3QgPSB7MHgwMDAwLCAweDAwMDAwMCwgZndfZGlyICJiY2FyZDIuYmluIix9LAorCS5sb2FkID0gezB4MDEyMCwgMHgwMGY2MDAsIGZ3X2RpciAibGRjYXJkMi5iaW4iLH0sCisJLmFwcCA9IHsweDAwMTAsIDB4MGQwMDAwLCBmd19kaXIgImNhbmNyZDIuYmluIix9LAorCS5yZXNldCA9IHNvZnRpbmdjc19yZXNldCwKKwkuZW5hYmxlX2lycSA9IE5VTEwsCit9LCB7CisJLm5hbWUgPSAiVmVjdG9yLUNBTmNhcmQiLAorCS5tYW5mID0gMHgwMTY4LCAucHJvZCA9IDB4MDgxLAorCS5nZW5lcmF0aW9uID0gMSwKKwkubmJ1cyA9IDIsCisJLmZyZXEgPSAxNiAqIE1IWiwgLm1heF9icnAgPSA2NCwgLm1heF9zancgPSA0LAorCS5kcHJhbV9zaXplID0gMHgwODAwLAorCS5ib290ID0gezB4MDAwMCwgMHgwMDAwMDAsIGZ3X2RpciAiYmNhcmQuYmluIix9LAorCS5sb2FkID0gezB4MDEyMCwgMHgwMGY2MDAsIGZ3X2RpciAibGRjYXJkLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2FuY2FyZC5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gc29mdGluZ2NzX2VuYWJsZV9pcnEsCit9LCB7CisJLm5hbWUgPSAiVmVjdG9yLUNBTmNhcmQtU0pBIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDA4NCwKKwkuZ2VuZXJhdGlvbiA9IDEsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMjAgKiBNSFosIC5tYXhfYnJwID0gMzIsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MDgwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkLmJpbiIsfSwKKwkubG9hZCA9IHsweDAxMjAsIDB4MDBmNjAwLCBmd19kaXIgImxkY2FyZC5iaW4iLH0sCisJLmFwcCA9IHsweDAwMTAsIDB4MGQwMDAwLCBmd19kaXIgImNhbnNqYS5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gc29mdGluZ2NzX2VuYWJsZV9pcnEsCit9LCB7CisJLm5hbWUgPSAiVmVjdG9yLUNBTmNhcmQtMiIsCisJLm1hbmYgPSAweDAxNjgsIC5wcm9kID0gMHgwODUsCisJLmdlbmVyYXRpb24gPSAyLAorCS5uYnVzID0gMiwKKwkuZnJlcSA9IDI0ICogTUhaLCAubWF4X2JycCA9IDY0LCAubWF4X3NqdyA9IDQsCisJLmRwcmFtX3NpemUgPSAweDEwMDAsCisJLmJvb3QgPSB7MHgwMDAwLCAweDAwMDAwMCwgZndfZGlyICJiY2FyZDIuYmluIix9LAorCS5sb2FkID0gezB4MDEyMCwgMHgwMGY2MDAsIGZ3X2RpciAibGRjYXJkMi5iaW4iLH0sCisJLmFwcCA9IHsweDAwMTAsIDB4MGQwMDAwLCBmd19kaXIgImNhbmNyZDIuYmluIix9LAorCS5yZXNldCA9IHNvZnRpbmdjc19yZXNldCwKKwkuZW5hYmxlX2lycSA9IE5VTEwsCit9LCB7CisJLm5hbWUgPSAiRURJQ2NhcmQtTkVDIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDEwMiwKKwkuZ2VuZXJhdGlvbiA9IDEsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMTYgKiBNSFosIC5tYXhfYnJwID0gNjQsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MDgwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkLmJpbiIsfSwKKwkubG9hZCA9IHsweDAxMjAsIDB4MDBmNjAwLCBmd19kaXIgImxkY2FyZC5iaW4iLH0sCisJLmFwcCA9IHsweDAwMTAsIDB4MGQwMDAwLCBmd19kaXIgImNhbmNhcmQuYmluIix9LAorCS5yZXNldCA9IHNvZnRpbmdjc19yZXNldCwKKwkuZW5hYmxlX2lycSA9IHNvZnRpbmdjc19lbmFibGVfaXJxLAorfSwgeworCS5uYW1lID0gIkVESUNjYXJkLTIiLAorCS5tYW5mID0gMHgwMTY4LCAucHJvZCA9IDB4MTA1LAorCS5nZW5lcmF0aW9uID0gMiwKKwkubmJ1cyA9IDIsCisJLmZyZXEgPSAyNCAqIE1IWiwgLm1heF9icnAgPSA2NCwgLm1heF9zancgPSA0LAorCS5kcHJhbV9zaXplID0gMHgxMDAwLAorCS5ib290ID0gezB4MDAwMCwgMHgwMDAwMDAsIGZ3X2RpciAiYmNhcmQyLmJpbiIsfSwKKwkubG9hZCA9IHsweDAxMjAsIDB4MDBmNjAwLCBmd19kaXIgImxkY2FyZDIuYmluIix9LAorCS5hcHAgPSB7MHgwMDEwLCAweDBkMDAwMCwgZndfZGlyICJjYW5jcmQyLmJpbiIsfSwKKwkucmVzZXQgPSBzb2Z0aW5nY3NfcmVzZXQsCisJLmVuYWJsZV9pcnEgPSBOVUxMLAorfSwgeworCTAsIDAsCit9LAorfTsKKworTU9EVUxFX0ZJUk1XQVJFKGZ3X2RpciAiYmNhcmQuYmluIik7CitNT0RVTEVfRklSTVdBUkUoZndfZGlyICJsZGNhcmQuYmluIik7CitNT0RVTEVfRklSTVdBUkUoZndfZGlyICJjYW5jYXJkLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKGZ3X2RpciAiY2Fuc2phLmJpbiIpOworCitNT0RVTEVfRklSTVdBUkUoZndfZGlyICJiY2FyZDIuYmluIik7CitNT0RVTEVfRklSTVdBUkUoZndfZGlyICJsZGNhcmQyLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKGZ3X2RpciAiY2FuY3JkMi5iaW4iKTsKKworc3RhdGljIF9fZGV2aW5pdCBjb25zdCBzdHJ1Y3Qgc29mdGluZ19wbGF0Zm9ybV9kYXRhCisqc29mdGluZ2NzX2ZpbmRfcGxhdGZvcm1fZGF0YSh1bnNpZ25lZCBpbnQgbWFuZiwgdW5zaWduZWQgaW50IHByb2QpCit7CisJY29uc3Qgc3RydWN0IHNvZnRpbmdfcGxhdGZvcm1fZGF0YSAqbHA7CisKKwlmb3IgKGxwID0gc29mdGluZ2NzX3BsYXRmb3JtX2RhdGE7IGxwLT5tYW5mOyArK2xwKSB7CisJCWlmICgobHAtPm1hbmYgPT0gbWFuZikgJiYgKGxwLT5wcm9kID09IHByb2QpKQorCQkJcmV0dXJuIGxwOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIHBsYXRmb3JtZGF0YSBjYWxsYmFja3MKKyAqLworc3RhdGljIGludCBzb2Z0aW5nY3NfcmVzZXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IHYpCit7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYSA9IHRvX3BjbWNpYV9kZXYocGRldi0+ZGV2LnBhcmVudCk7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJwY21jaWEgY29uZmlnIFsyXSAlMDJ4XG4iLCB2ID8gMCA6IDB4MjApOworCXJldHVybiBwY21jaWFfd3JpdGVfY29uZmlnX2J5dGUocGNtY2lhLCAyLCB2ID8gMCA6IDB4MjApOworfQorCitzdGF0aWMgaW50IHNvZnRpbmdjc19lbmFibGVfaXJxKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCB2KQoreworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWEgPSB0b19wY21jaWFfZGV2KHBkZXYtPmRldi5wYXJlbnQpOworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAicGNtY2lhIGNvbmZpZyBbMF0gJTAyeFxuIiwgdiA/IDB4NjAgOiAwKTsKKwlyZXR1cm4gcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKHBjbWNpYSwgMCwgdiA/IDB4NjAgOiAwKTsKK30KKworLyoKKyAqIHBjbWNpYSBjaGVjaworICovCitzdGF0aWMgX19kZXZpbml0IGludCBzb2Z0aW5nY3NfcHJvYmVfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWEsCisJCXZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3Qgc29mdGluZ19wbGF0Zm9ybV9kYXRhICpwZGF0ID0gcHJpdl9kYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcHJlczsKKwlpbnQgbWVtc3BlZWQgPSAwOworCisJV0FSTl9PTighcGRhdCk7CisJcHJlcyA9IHBjbWNpYS0+cmVzb3VyY2VbUENNQ0lBX0lPTUVNXzBdOworCWlmIChyZXNvdXJjZV9zaXplKHByZXMpIDwgMHgxMDAwKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCXByZXMtPmZsYWdzIHw9IFdJTl9NRU1PUllfVFlQRV9DTSB8IFdJTl9FTkFCTEU7CisJaWYgKHBkYXQtPmdlbmVyYXRpb24gPCAyKSB7CisJCXByZXMtPmZsYWdzIHw9IFdJTl9VU0VfV0FJVCB8IFdJTl9EQVRBX1dJRFRIXzg7CisJCW1lbXNwZWVkID0gMzsKKwl9IGVsc2UgeworCQlwcmVzLT5mbGFncyB8PSBXSU5fREFUQV9XSURUSF8xNjsKKwl9CisJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhwY21jaWEsIHByZXMsIG1lbXNwZWVkKTsKK30KKworc3RhdGljIF9fZGV2ZXhpdCB2b2lkIHNvZnRpbmdjc19yZW1vdmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcGNtY2lhLT5wcml2OworCisJLyogZnJlZSBiaXRzICovCisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CisJLyogcmVsZWFzZSBwY21jaWEgc3R1ZmYgKi8KKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UocGNtY2lhKTsKK30KKworLyoKKyAqIHBsYXRmb3JtX2RldmljZSB3cmFwcGVyCisgKiBwZGV2LT5yZXNvdXJjZSBoYXMgMiBlbnRyaWVzOiBpbyAmIGlycQorICovCitzdGF0aWMgdm9pZCBzb2Z0aW5nY3NfcGRldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJa2ZyZWUocGRldik7Cit9CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHNvZnRpbmdjc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhKQoreworCWludCByZXQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwljb25zdCBzdHJ1Y3Qgc29mdGluZ19wbGF0Zm9ybV9kYXRhICpwZGF0OworCXN0cnVjdCByZXNvdXJjZSAqcHJlczsKKwlzdHJ1Y3QgZGV2IHsKKwkJc3RydWN0IHBsYXRmb3JtX2RldmljZSBwZGV2OworCQlzdHJ1Y3QgcmVzb3VyY2UgcmVzWzJdOworCX0gKmRldjsKKworCS8qIGZpbmQgbWF0Y2hpbmcgcGxhdGZvcm1fZGF0YSAqLworCXBkYXQgPSBzb2Z0aW5nY3NfZmluZF9wbGF0Zm9ybV9kYXRhKHBjbWNpYS0+bWFuZl9pZCwgcGNtY2lhLT5jYXJkX2lkKTsKKwlpZiAoIXBkYXQpCisJCXJldHVybiAtRU5PVFRZOworCisJLyogc2V0dXAgcGNtY2lhIGRldmljZSAqLworCXBjbWNpYS0+Y29uZmlnX2ZsYWdzIHw9IENPTkZfRU5BQkxFX0lSUSB8IENPTkZfQVVUT19TRVRfSU9NRU0gfAorCQlDT05GX0FVVE9fU0VUX1ZQUCB8IENPTkZfQVVUT19DSEVDS19WQ0M7CisJcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKHBjbWNpYSwgc29mdGluZ2NzX3Byb2JlX2NvbmZpZywgKHZvaWQgKilwZGF0KTsKKwlpZiAocmV0KQorCQlnb3RvIHBjbWNpYV9mYWlsZWQ7CisKKwlyZXQgPSBwY21jaWFfZW5hYmxlX2RldmljZShwY21jaWEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHBjbWNpYV9mYWlsZWQ7CisKKwlwcmVzID0gcGNtY2lhLT5yZXNvdXJjZVtQQ01DSUFfSU9NRU1fMF07CisJaWYgKCFwcmVzKSB7CisJCXJldCA9IC1FQkFERjsKKwkJZ290byBwY21jaWFfYmFkOworCX0KKworCS8qIGNyZWF0ZSBzb2Z0aW5nIHBsYXRmb3JtIGRldmljZSAqLworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG1lbV9mYWlsZWQ7CisJfQorCWRldi0+cGRldi5yZXNvdXJjZSA9IGRldi0+cmVzOworCWRldi0+cGRldi5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShkZXYtPnJlcyk7CisJZGV2LT5wZGV2LmRldi5yZWxlYXNlID0gc29mdGluZ2NzX3BkZXZfcmVsZWFzZTsKKworCXBkZXYgPSAmZGV2LT5wZGV2OworCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gKHZvaWQgKilwZGF0OworCXBkZXYtPmRldi5wYXJlbnQgPSAmcGNtY2lhLT5kZXY7CisJcGNtY2lhLT5wcml2ID0gcGRldjsKKworCS8qIHBsYXRmb3JtIGRldmljZSByZXNvdXJjZXMgKi8KKwlwZGV2LT5yZXNvdXJjZVswXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCXBkZXYtPnJlc291cmNlWzBdLnN0YXJ0ID0gcHJlcy0+c3RhcnQ7CisJcGRldi0+cmVzb3VyY2VbMF0uZW5kID0gcHJlcy0+ZW5kOworCisJcGRldi0+cmVzb3VyY2VbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX0lSUTsKKwlwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCA9IHBjbWNpYS0+aXJxOworCXBkZXYtPnJlc291cmNlWzFdLmVuZCA9IHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0OworCisJLyogcGxhdGZvcm0gZGV2aWNlIHNldHVwICovCisJc3Bpbl9sb2NrKCZzb2Z0aW5nY3NfaW5kZXhfbG9jayk7CisJcGRldi0+aWQgPSBzb2Z0aW5nY3NfaW5kZXgrKzsKKwlzcGluX3VubG9jaygmc29mdGluZ2NzX2luZGV4X2xvY2spOworCXBkZXYtPm5hbWUgPSAic29mdGluZyI7CisJZGV2X3NldF9uYW1lKCZwZGV2LT5kZXYsICJzb2Z0aW5nY3MuJWkiLCBwZGV2LT5pZCk7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHBsYXRmb3JtX2ZhaWxlZDsKKworCWRldl9pbmZvKCZwY21jaWEtPmRldiwgImNyZWF0ZWQgJXNcbiIsIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwlyZXR1cm4gMDsKKworcGxhdGZvcm1fZmFpbGVkOgorCWtmcmVlKGRldik7CittZW1fZmFpbGVkOgorcGNtY2lhX2JhZDoKK3BjbWNpYV9mYWlsZWQ6CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKHBjbWNpYSk7CisJcGNtY2lhLT5wcml2ID0gTlVMTDsKKwlyZXR1cm4gcmV0ID86IC1FTk9ERVY7Cit9CisKK3N0YXRpYyAvKmNvbnN0Ki8gc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgc29mdGluZ2NzX2lkc1tdID0geworCS8qIHNvZnRpbmcgKi8KKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNjgsIDB4MDAwMSksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAwMDIpLAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMDA0KSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNjgsIDB4MDAwNSksCisJLyogdmVjdG9yLCBtYW51ZmFjdHVyZXI/ICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAwODEpLAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMDg0KSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNjgsIDB4MDA4NSksCisJLyogRURJQyAqLworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMTAyKSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNjgsIDB4MDEwNSksCisJUENNQ0lBX0RFVklDRV9OVUxMLAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY21jaWEsIHNvZnRpbmdjc19pZHMpOworCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kcml2ZXIgc29mdGluZ2NzX2RyaXZlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gInNvZnRpbmdjcyIsCisJLmlkX3RhYmxlCT0gc29mdGluZ2NzX2lkcywKKwkucHJvYmUJCT0gc29mdGluZ2NzX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc29mdGluZ2NzX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzb2Z0aW5nY3Nfc3RhcnQodm9pZCkKK3sKKwlzcGluX2xvY2tfaW5pdCgmc29mdGluZ2NzX2luZGV4X2xvY2spOworCXJldHVybiBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZzb2Z0aW5nY3NfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNvZnRpbmdjc19zdG9wKHZvaWQpCit7CisJcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZzb2Z0aW5nY3NfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc29mdGluZ2NzX3N0YXJ0KTsKK21vZHVsZV9leGl0KHNvZnRpbmdjc19zdG9wKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJzb2Z0aW5nIENBTmNhcmQgZHJpdmVyIgorCQkiLCBsaW5rcyBQQ01DSUEgY2FyZCB0byBzb2Z0aW5nIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19mdy5jIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19mdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MjA3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX2Z3LmMKQEAgLTAsMCArMSw2OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMAorICoKKyAqIC0gS3VydCBWYW4gRGlqY2ssIEVJQSBFbGVjdHJvbmljcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisjaW5jbHVkZSAic29mdGluZy5oIgorCisvKgorICogbG93IGxldmVsIERQUkFNIGNvbW1hbmQuCisgKiBNYWtlIHN1cmUgdGhhdCBjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfSE9TVF0gaXMgcHJlc2V0CisgKi8KK3N0YXRpYyBpbnQgX3NvZnRpbmdfZmN0X2NtZChzdHJ1Y3Qgc29mdGluZyAqY2FyZCwgaW50MTZfdCBjbWQsIHVpbnQxNl90IHZlY3RvciwKKwkJY29uc3QgY2hhciAqbXNnKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBzdGFtcDsKKworCWlvd3JpdGUxNihjbWQsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU1dKTsKKwlpb3dyaXRlOCh2ZWN0b3IgPj4gOCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9IT1NUICsgMV0pOworCWlvd3JpdGU4KHZlY3RvciwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9IT1NUXSk7CisJLyogYmUgc3VyZSB0byBmbHVzaCB0aGlzIHRvIHRoZSBjYXJkICovCisJd21iKCk7CisJc3RhbXAgPSBqaWZmaWVzICsgMSAqIEhaOworCS8qIHdhaXQgZm9yIGNhcmQgKi8KKwlkbyB7CisJCS8qIERQUkFNX0ZDVF9IT1NUIGlzIF9ub3RfIGFsaWduZWQgKi8KKwkJcmV0ID0gaW9yZWFkOCgmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX0hPU1RdKSArCisJCQkoaW9yZWFkOCgmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX0hPU1QgKyAxXSkgPDwgOCk7CisJCS8qIGRvbid0IGhhdmUgYW55IGNhY2hlZCB2YXJpYWJsZXMgKi8KKwkJcm1iKCk7CisJCWlmIChyZXQgPT0gUkVTX09LKQorCQkJLyogcmVhZCByZXR1cm4tdmFsdWUgbm93ICovCisJCQlyZXR1cm4gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9SRVNVTFRdKTsKKworCQlpZiAoKHJldCAhPSB2ZWN0b3IpIHx8IHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhbXApKQorCQkJYnJlYWs7CisJCS8qIHByb2Nlc3MgY29udGV4dCA9PiByZWxheCAqLworCQl1c2xlZXBfcmFuZ2UoNTAwLCAxMDAwMCk7CisJfSB3aGlsZSAoMSk7CisKKwlyZXQgPSAocmV0ID09IFJFU19OT05FKSA/IC1FVElNRURPVVQgOiAtRUNBTkNFTEVEOworCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiZmlybXdhcmUgJXMgZmFpbGVkICglaSlcbiIsIG1zZywgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNvZnRpbmdfZmN0X2NtZChzdHJ1Y3Qgc29mdGluZyAqY2FyZCwgaW50MTZfdCBjbWQsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gX3NvZnRpbmdfZmN0X2NtZChjYXJkLCBjbWQsIDAsIG1zZyk7CisJaWYgKHJldCA+IDApIHsKKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICIlcyByZXR1cm5lZCAldVxuIiwgbXNnLCByZXQpOworCQlyZXQgPSAtRUlPOworCX0KKwlyZXR1cm4gcmV0OworfQorCitpbnQgc29mdGluZ19ib290bG9hZGVyX2NvbW1hbmQoc3RydWN0IHNvZnRpbmcgKmNhcmQsIGludDE2X3QgY21kLAorCQljb25zdCBjaGFyICptc2cpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIHN0YW1wOworCisJaW93cml0ZTE2KFJFU19OT05FLCAmY2FyZC0+ZHByYW1bRFBSQU1fUkVDRUlQVF0pOworCWlvd3JpdGUxNihjbWQsICZjYXJkLT5kcHJhbVtEUFJBTV9DT01NQU5EXSk7CisJLyogYmUgc3VyZSB0byBmbHVzaCB0aGlzIHRvIHRoZSBjYXJkICovCisJd21iKCk7CisJc3RhbXAgPSBqaWZmaWVzICsgMyAqIEhaOworCS8qIHdhaXQgZm9yIGNhcmQgKi8KKwlkbyB7CisJCXJldCA9IGlvcmVhZDE2KCZjYXJkLT5kcHJhbVtEUFJBTV9SRUNFSVBUXSk7CisJCS8qIGRvbid0IGhhdmUgYW55IGNhY2hlZCB2YXJpYWJsZXMgKi8KKwkJcm1iKCk7CisJCWlmIChyZXQgPT0gUkVTX09LKQorCQkJcmV0dXJuIDA7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHN0YW1wKSkKKwkJCWJyZWFrOworCQkvKiBwcm9jZXNzIGNvbnRleHQgPT4gcmVsYXggKi8KKwkJdXNsZWVwX3JhbmdlKDUwMCwgMTAwMDApOworCX0gd2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSk7CisKKwlyZXQgPSAocmV0ID09IFJFU19OT05FKSA/IC1FVElNRURPVVQgOiAtRUNBTkNFTEVEOworCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiYm9vdGxvYWRlciAlcyBmYWlsZWQgKCVpKVxuIiwgbXNnLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZndfcGFyc2UoY29uc3QgdWludDhfdCAqKnBtZW0sIHVpbnQxNl90ICpwdHlwZSwgdWludDMyX3QgKnBhZGRyLAorCQl1aW50MTZfdCAqcGxlbiwgY29uc3QgdWludDhfdCAqKnBkYXQpCit7CisJdWludDE2X3QgY2hlY2tzdW1bMl07CisJY29uc3QgdWludDhfdCAqbWVtOworCWNvbnN0IHVpbnQ4X3QgKmVuZDsKKworCS8qCisJICogZmlybXdhcmUgcmVjb3JkcyBhcmUgYSBiaW5hcnksIHVuYWxpZ25lZCBzdHJlYW0gY29tcG9zZWQgb2Y6CisJICogdWludDE2X3QgdHlwZTsKKwkgKiB1aW50MzJfdCBhZGRyOworCSAqIHVpbnQxNl90IGxlbjsKKwkgKiB1aW50OF90IGRhdFtsZW5dOworCSAqIHVpbnQxNl90IGNoZWNrc3VtOworCSAqIGFsbCB2YWx1ZXMgaW4gbGl0dGxlIGVuZGlhbi4KKwkgKiBXZSBjb3VsZCBkZWZpbmUgYSBzdHJ1Y3QgZm9yIHRoaXMsIHdpdGggX19hdHRyaWJ1dGVfXygocGFja2VkKSksCisJICogYnV0IHdvdWxkIHRoYXQgc29sdmUgdGhlIGFsaWdubWVudCBpbiBfYWxsXyBjYXNlcyAoY2ZyLiB0aGUKKwkgKiBzdHJ1Y3QgaXRzZWxmIG1heSBiZSBhbiBvZGQgYWRkcmVzcyk/CisJICoKKwkgKiBJIGNob3NlIHRvIHVzZSBsZVhYX3RvX2NwdXAoKSBzaW5jZSB0aGlzIHNvbHZlcyBib3RoCisJICogZW5kaWFubmVzcyAmIGFsaWdubWVudC4KKwkgKi8KKwltZW0gPSAqcG1lbTsKKwkqcHR5cGUgPSBsZTE2X3RvX2NwdXAoKHZvaWQgKikmbWVtWzBdKTsKKwkqcGFkZHIgPSBsZTMyX3RvX2NwdXAoKHZvaWQgKikmbWVtWzJdKTsKKwkqcGxlbiA9IGxlMTZfdG9fY3B1cCgodm9pZCAqKSZtZW1bNl0pOworCSpwZGF0ID0gJm1lbVs4XTsKKwkvKiB2ZXJpZnkgY2hlY2tzdW0gKi8KKwllbmQgPSAmbWVtWzggKyAqcGxlbl07CisJY2hlY2tzdW1bMF0gPSBsZTE2X3RvX2NwdXAoKHZvaWQgKillbmQpOworCWZvciAoY2hlY2tzdW1bMV0gPSAwOyBtZW0gPCBlbmQ7ICsrbWVtKQorCQljaGVja3N1bVsxXSArPSAqbWVtOworCWlmIChjaGVja3N1bVswXSAhPSBjaGVja3N1bVsxXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJLyogaW5jcmVtZW50ICovCisJKnBtZW0gKz0gMTAgKyAqcGxlbjsKKwlyZXR1cm4gMDsKK30KKworaW50IHNvZnRpbmdfbG9hZF9mdyhjb25zdCBjaGFyICpmaWxlLCBzdHJ1Y3Qgc29mdGluZyAqY2FyZCwKKwkJX19pb21lbSB1aW50OF90ICpkcHJhbSwgdW5zaWduZWQgaW50IHNpemUsIGludCBvZmZzZXQpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlpbnQgcmV0OworCWNvbnN0IHVpbnQ4X3QgKm1lbSwgKmVuZCwgKmRhdDsKKwl1aW50MTZfdCB0eXBlLCBsZW47CisJdWludDMyX3QgYWRkcjsKKwl1aW50OF90ICpidWYgPSBOVUxMOworCWludCBidWZsZW4gPSAwOworCWludDhfdCB0eXBlX2VuZCA9IDA7CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZmlsZSwgJmNhcmQtPnBkZXYtPmRldik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZGV2X2RiZygmY2FyZC0+cGRldi0+ZGV2LCAiJXMsIGZpcm13YXJlKCVzKSBnb3QgJXUgYnl0ZXMiCisJCSIsIG9mZnNldCAlYzB4JTA0eFxuIiwKKwkJY2FyZC0+cGRhdC0+bmFtZSwgZmlsZSwgKHVuc2lnbmVkIGludClmdy0+c2l6ZSwKKwkJKG9mZnNldCA+PSAwKSA/ICcrJyA6ICctJywgKHVuc2lnbmVkIGludClhYnMob2Zmc2V0KSk7CisJLyogcGFyc2UgdGhlIGZpcm13YXJlICovCisJbWVtID0gZnctPmRhdGE7CisJZW5kID0gJm1lbVtmdy0+c2l6ZV07CisJLyogbG9vayBmb3IgaGVhZGVyIHJlY29yZCAqLworCXJldCA9IGZ3X3BhcnNlKCZtZW0sICZ0eXBlLCAmYWRkciwgJmxlbiwgJmRhdCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCWlmICh0eXBlICE9IDB4ZmZmZikKKwkJZ290byBmYWlsZWQ7CisJaWYgKHN0cm5jbXAoIlN0cnVjdHVyZWQgQmluYXJ5IEZvcm1hdCwgU29mdGluZyBHbWJIIiAsIGRhdCwgbGVuKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGZhaWxlZDsKKwl9CisJLyogb2ssIHdlIGhhZCBhIGhlYWRlciAqLworCXdoaWxlIChtZW0gPCBlbmQpIHsKKwkJcmV0ID0gZndfcGFyc2UoJm1lbSwgJnR5cGUsICZhZGRyLCAmbGVuLCAmZGF0KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwkJaWYgKHR5cGUgPT0gMykgeworCQkJLyogc3RhcnQgYWRkcmVzcywgbm90IHVzZWQgaGVyZSAqLworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAodHlwZSA9PSAxKSB7CisJCQkvKiBlb2YgKi8KKwkJCXR5cGVfZW5kID0gMTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKHR5cGUgIT0gMCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJaWYgKChhZGRyICsgbGVuICsgb2Zmc2V0KSA+IHNpemUpCisJCQlnb3RvIGZhaWxlZDsKKwkJbWVtY3B5X3RvaW8oJmRwcmFtW2FkZHIgKyBvZmZzZXRdLCBkYXQsIGxlbik7CisJCS8qIGJlIHN1cmUgdG8gZmx1c2ggY2FjaGVzIGZyb20gSU8gc3BhY2UgKi8KKwkJbWIoKTsKKwkJaWYgKGxlbiA+IGJ1ZmxlbikgeworCQkJLyogYWxpZ24gYnVmbGVuICovCisJCQlidWZsZW4gPSAobGVuICsgKDEwMjQtMSkpICYgfigxMDI0LTEpOworCQkJYnVmID0ga3JlYWxsb2MoYnVmLCBidWZsZW4sIEdGUF9LRVJORUwpOworCQkJaWYgKCFidWYpIHsKKwkJCQlyZXQgPSAtRU5PTUVNOworCQkJCWdvdG8gZmFpbGVkOworCQkJfQorCQl9CisJCS8qIHZlcmlmeSByZWNvcmQgZGF0YSAqLworCQltZW1jcHlfZnJvbWlvKGJ1ZiwgJmRwcmFtW2FkZHIgKyBvZmZzZXRdLCBsZW4pOworCQlpZiAobWVtY21wKGJ1ZiwgZGF0LCBsZW4pKSB7CisJCQkvKiBpcyBub3Qgb2sgKi8KKwkJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiRFBSQU0gcmVhZGJhY2sgZmFpbGVkXG4iKTsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCX0KKwlpZiAoIXR5cGVfZW5kKQorCQkvKiBubyBlbmQgcmVjb3JkIHNlZW4gKi8KKwkJZ290byBmYWlsZWQ7CisJcmV0ID0gMDsKK2ZhaWxlZDoKKwlrZnJlZShidWYpOworCXJlbGVhc2VfZmlybXdhcmUoZncpOworCWlmIChyZXQgPCAwKQorCQlkZXZfaW5mbygmY2FyZC0+cGRldi0+ZGV2LCAiZmlybXdhcmUgJXMgZmFpbGVkXG4iLCBmaWxlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc29mdGluZ19sb2FkX2FwcF9mdyhjb25zdCBjaGFyICpmaWxlLCBzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWNvbnN0IHVpbnQ4X3QgKm1lbSwgKmVuZCwgKmRhdDsKKwlpbnQgcmV0LCBqOworCXVpbnQxNl90IHR5cGUsIGxlbjsKKwl1aW50MzJfdCBhZGRyLCBzdGFydF9hZGRyID0gMDsKKwl1bnNpZ25lZCBpbnQgc3VtLCByeF9zdW07CisJaW50OF90IHR5cGVfZW5kID0gMCwgdHlwZV9lbnRyeXBvaW50ID0gMDsKKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmaWxlLCAmY2FyZC0+cGRldi0+ZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAicmVxdWVzdF9maXJtd2FyZSglcykgZ290ICVpXG4iLAorCQkJZmlsZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZGV2X2RiZygmY2FyZC0+cGRldi0+ZGV2LCAiZmlybXdhcmUoJXMpIGdvdCAlbHUgYnl0ZXNcbiIsCisJCWZpbGUsICh1bnNpZ25lZCBsb25nKWZ3LT5zaXplKTsKKwkvKiBwYXJzZSB0aGUgZmlybXdhcmUgKi8KKwltZW0gPSBmdy0+ZGF0YTsKKwllbmQgPSAmbWVtW2Z3LT5zaXplXTsKKwkvKiBsb29rIGZvciBoZWFkZXIgcmVjb3JkICovCisJcmV0ID0gZndfcGFyc2UoJm1lbSwgJnR5cGUsICZhZGRyLCAmbGVuLCAmZGF0KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKKwlyZXQgPSAtRUlOVkFMOworCWlmICh0eXBlICE9IDB4ZmZmZikgeworCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgImZpcm13YXJlIHN0YXJ0cyB3aXRoIHR5cGUgMHgleFxuIiwKKwkJCXR5cGUpOworCQlnb3RvIGZhaWxlZDsKKwl9CisJaWYgKHN0cm5jbXAoIlN0cnVjdHVyZWQgQmluYXJ5IEZvcm1hdCwgU29mdGluZyBHbWJIIiwgZGF0LCBsZW4pKSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiZmlybXdhcmUgc3RyaW5nICclLipzJyBmYXVsdFxuIiwKKwkJCQlsZW4sIGRhdCk7CisJCWdvdG8gZmFpbGVkOworCX0KKwkvKiBvaywgd2UgaGFkIGEgaGVhZGVyICovCisJd2hpbGUgKG1lbSA8IGVuZCkgeworCQlyZXQgPSBmd19wYXJzZSgmbWVtLCAmdHlwZSwgJmFkZHIsICZsZW4sICZkYXQpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CisKKwkJaWYgKHR5cGUgPT0gMykgeworCQkJLyogc3RhcnQgYWRkcmVzcyAqLworCQkJc3RhcnRfYWRkciA9IGFkZHI7CisJCQl0eXBlX2VudHJ5cG9pbnQgPSAxOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAodHlwZSA9PSAxKSB7CisJCQkvKiBlb2YgKi8KKwkJCXR5cGVfZW5kID0gMTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKHR5cGUgIT0gMCkgeworCQkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsCisJCQkJCSJ1bmtub3duIHJlY29yZCB0eXBlIDB4JTA0eFxuIiwgdHlwZSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiByZWd1YWxhciBkYXRhICovCisJCWZvciAoc3VtID0gMCwgaiA9IDA7IGogPCBsZW47ICsraikKKwkJCXN1bSArPSBkYXRbal07CisJCS8qIHdvcmsgaW4gMTZiaXQgKHRhcmdldCkgKi8KKwkJc3VtICY9IDB4ZmZmZjsKKworCQltZW1jcHlfdG9pbygmY2FyZC0+ZHByYW1bY2FyZC0+cGRhdC0+YXBwLm9mZnNdLCBkYXQsIGxlbik7CisJCWlvd3JpdGUzMihjYXJkLT5wZGF0LT5hcHAub2ZmcyArIGNhcmQtPnBkYXQtPmFwcC5hZGRyLAorCQkJCSZjYXJkLT5kcHJhbVtEUFJBTV9DT01NQU5EICsgMl0pOworCQlpb3dyaXRlMzIoYWRkciwgJmNhcmQtPmRwcmFtW0RQUkFNX0NPTU1BTkQgKyA2XSk7CisJCWlvd3JpdGUxNihsZW4sICZjYXJkLT5kcHJhbVtEUFJBTV9DT01NQU5EICsgMTBdKTsKKwkJaW93cml0ZTgoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0NPTU1BTkQgKyAxMl0pOworCQlyZXQgPSBzb2Z0aW5nX2Jvb3Rsb2FkZXJfY29tbWFuZChjYXJkLCAxLCAibG9hZGluZyBhcHAuIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJCS8qIHZlcmlmeSBjaGVja3N1bSAqLworCQlyeF9zdW0gPSBpb3JlYWQxNigmY2FyZC0+ZHByYW1bRFBSQU1fUkVDRUlQVCArIDJdKTsKKwkJaWYgKHJ4X3N1bSAhPSBzdW0pIHsKKwkJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiU1JBTSBzZWVtcyB0byBiZSBkYW1hZ2VkIgorCQkJCSIsIHdhbnRlZCAweCUwNHgsIGdvdCAweCUwNHhcbiIsIHN1bSwgcnhfc3VtKTsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCX0KKwlpZiAoIXR5cGVfZW5kIHx8ICF0eXBlX2VudHJ5cG9pbnQpCisJCWdvdG8gZmFpbGVkOworCS8qIHN0YXJ0IGFwcGxpY2F0aW9uIGluIGNhcmQgKi8KKwlpb3dyaXRlMzIoc3RhcnRfYWRkciwgJmNhcmQtPmRwcmFtW0RQUkFNX0NPTU1BTkQgKyAyXSk7CisJaW93cml0ZTgoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0NPTU1BTkQgKyA2XSk7CisJcmV0ID0gc29mdGluZ19ib290bG9hZGVyX2NvbW1hbmQoY2FyZCwgMywgInN0YXJ0IGFwcC4iKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJcmV0ID0gMDsKK2ZhaWxlZDoKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2luZm8oJmNhcmQtPnBkZXYtPmRldiwgImZpcm13YXJlICVzIGZhaWxlZFxuIiwgZmlsZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzb2Z0aW5nX3Jlc2V0X2NoaXAoc3RydWN0IHNvZnRpbmcgKmNhcmQpCit7CisJaW50IHJldDsKKworCWRvIHsKKwkJLyogcmVzZXQgY2hpcCAqLworCQlpb3dyaXRlOCgwLCAmY2FyZC0+ZHByYW1bRFBSQU1fUkVTRVRfUlhfRklGT10pOworCQlpb3dyaXRlOCgwLCAmY2FyZC0+ZHByYW1bRFBSQU1fUkVTRVRfUlhfRklGTysxXSk7CisJCWlvd3JpdGU4KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9SRVNFVF0pOworCQlpb3dyaXRlOCgwLCAmY2FyZC0+ZHByYW1bRFBSQU1fUkVTRVQrMV0pOworCisJCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCAwLCAicmVzZXRfY2FuIik7CisJCWlmICghcmV0KQorCQkJYnJlYWs7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCS8qIGRvbid0IHdhaXQgYW55IGxvbmdlciAqLworCQkJYnJlYWs7CisJfSB3aGlsZSAoMSk7CisJY2FyZC0+dHgucGVuZGluZyA9IDA7CisJcmV0dXJuIHJldDsKK30KKworaW50IHNvZnRpbmdfY2hpcF9wb3dlcm9uKHN0cnVjdCBzb2Z0aW5nICpjYXJkKQoreworCWludCByZXQ7CisJLyogc3luYyAqLworCXJldCA9IF9zb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgOTksIDB4NTUsICJzeW5jLWEiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisKKwlyZXQgPSBfc29mdGluZ19mY3RfY21kKGNhcmQsIDk5LCAweGFhLCAic3luYy1iIik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCisJcmV0ID0gc29mdGluZ19yZXNldF9jaGlwKGNhcmQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwkvKiBnZXRfc2VyaWFsICovCisJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDQzLCAiZ2V0X3NlcmlhbF9udW1iZXIiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJY2FyZC0+aWQuc2VyaWFsID0gaW9yZWFkMzIoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTV0pOworCS8qIGdldF92ZXJzaW9uICovCisJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDEyLCAiZ2V0X3ZlcnNpb24iKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJY2FyZC0+aWQuZndfdmVyc2lvbiA9IGlvcmVhZDE2KCZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAyXSk7CisJY2FyZC0+aWQuaHdfdmVyc2lvbiA9IGlvcmVhZDE2KCZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA0XSk7CisJY2FyZC0+aWQubGljZW5zZSA9IGlvcmVhZDE2KCZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA2XSk7CisJY2FyZC0+aWQuY2hpcFswXSA9IGlvcmVhZDE2KCZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA4XSk7CisJY2FyZC0+aWQuY2hpcFsxXSA9IGlvcmVhZDE2KCZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMF0pOworCXJldHVybiAwOworZmFpbGVkOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNvZnRpbmdfaW5pdGlhbGl6ZV90aW1lc3RhbXAoc3RydWN0IHNvZnRpbmcgKmNhcmQpCit7CisJdWludDY0X3Qgb3ZmOworCisJY2FyZC0+dHNfcmVmID0ga3RpbWVfZ2V0KCk7CisKKwkvKiAxNk1IeiBpcyB0aGUgcmVmZXJlbmNlICovCisJb3ZmID0gMHgxMDAwMDAwMDBVTEwgKiAxNjsKKwlkb19kaXYob3ZmLCBjYXJkLT5wZGF0LT5mcmVxID86IDE2KTsKKworCWNhcmQtPnRzX292ZXJmbG93ID0ga3RpbWVfYWRkX3VzKGt0aW1lX3NldCgwLCAwKSwgb3ZmKTsKK30KKwora3RpbWVfdCBzb2Z0aW5nX3JhdzJrdGltZShzdHJ1Y3Qgc29mdGluZyAqY2FyZCwgdTMyIHJhdykKK3sKKwl1aW50NjRfdCByYXdsOworCWt0aW1lX3Qgbm93LCByZWFsX29mZnNldDsKKwlrdGltZV90IHRhcmdldDsKKwlrdGltZV90IHRtcDsKKworCW5vdyA9IGt0aW1lX2dldCgpOworCXJlYWxfb2Zmc2V0ID0ga3RpbWVfc3ViKGt0aW1lX2dldF9yZWFsKCksIG5vdyk7CisKKwkvKiBmaW5kIG5zZWMgZnJvbSBjYXJkICovCisJcmF3bCA9IHJhdyAqIDE2OworCWRvX2RpdihyYXdsLCBjYXJkLT5wZGF0LT5mcmVxID86IDE2KTsKKwl0YXJnZXQgPSBrdGltZV9hZGRfdXMoY2FyZC0+dHNfcmVmLCByYXdsKTsKKwkvKiB0ZXN0IGZvciBvdmVyZmxvd3MgKi8KKwl0bXAgPSBrdGltZV9hZGQodGFyZ2V0LCBjYXJkLT50c19vdmVyZmxvdyk7CisJd2hpbGUgKHVubGlrZWx5KGt0aW1lX3RvX25zKHRtcCkgPiBrdGltZV90b19ucyhub3cpKSkgeworCQljYXJkLT50c19yZWYgPSBrdGltZV9hZGQoY2FyZC0+dHNfcmVmLCBjYXJkLT50c19vdmVyZmxvdyk7CisJCXRhcmdldCA9IHRtcDsKKwkJdG1wID0ga3RpbWVfYWRkKHRhcmdldCwgY2FyZC0+dHNfb3ZlcmZsb3cpOworCX0KKwlyZXR1cm4ga3RpbWVfYWRkKHRhcmdldCwgcmVhbF9vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzb2Z0aW5nX2Vycm9yX3JlcG9ydGluZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJcmV0dXJuIChwcml2LT5jYW4uY3RybG1vZGUgJiBDQU5fQ1RSTE1PREVfQkVSUl9SRVBPUlRJTkcpCisJCT8gMSA6IDA7Cit9CisKK2ludCBzb2Z0aW5nX3N0YXJ0c3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgdXApCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZDsKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJaW50IGJ1c19iaXRtYXNrX3N0YXJ0OworCWludCBqLCBlcnJvcl9yZXBvcnRpbmc7CisJc3RydWN0IGNhbl9mcmFtZSBtc2c7CisJY29uc3Qgc3RydWN0IGNhbl9iaXR0aW1pbmcgKmJ0OworCisJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJY2FyZCA9IHByaXYtPmNhcmQ7CisKKwlpZiAoIWNhcmQtPmZ3LnVwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FyZC0+ZncubG9jayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWJ1c19iaXRtYXNrX3N0YXJ0ID0gMDsKKwlpZiAoZGV2ICYmIHVwKQorCQkvKiBwcmVwYXJlIHRvIHN0YXJ0IHRoaXMgYnVzIGFzIHdlbGwgKi8KKwkJYnVzX2JpdG1hc2tfc3RhcnQgfD0gKDEgPDwgcHJpdi0+aW5kZXgpOworCS8qIGJyaW5nIG5ldGRldnMgZG93biAqLworCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGNhcmQtPm5ldCk7ICsraikgeworCQluZXRkZXYgPSBjYXJkLT5uZXRbal07CisJCWlmICghbmV0ZGV2KQorCQkJY29udGludWU7CisJCXByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJCWlmIChkZXYgIT0gbmV0ZGV2KQorCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCisJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJCWlmIChkZXYgIT0gbmV0ZGV2KQorCQkJCWJ1c19iaXRtYXNrX3N0YXJ0IHw9ICgxIDw8IGopOworCQkJcHJpdi0+dHgucGVuZGluZyA9IDA7CisJCQlwcml2LT50eC5lY2hvX3B1dCA9IDA7CisJCQlwcml2LT50eC5lY2hvX2dldCA9IDA7CisJCQkvKgorCQkJICogdGhpcyBidXMnIG1heSBqdXN0IGhhdmUgY2FsbGVkIG9wZW5fY2FuZGV2KCkKKwkJCSAqIHdoaWNoIGlzIHJhdGhlciBzdHVwaWQgdG8gY2FsbCBjbG9zZV9jYW5kZXYoKQorCQkJICogYWxyZWFkeQorCQkJICogYnV0IHdlIG1heSBjb21lIGhlcmUgZnJvbSBidXNvZmYgcmVjb3ZlcnkgdG9vCisJCQkgKiBpbiB3aGljaCBjYXNlIHRoZSBlY2hvX3NrYiBfbmVlZHNfIGZsdXNoaW5nIHRvby4KKwkJCSAqIGp1c3QgYmUgc3VyZSB0byBjYWxsIG9wZW5fY2FuZGV2KCkgYWdhaW4KKwkJCSAqLworCQkJY2xvc2VfY2FuZGV2KG5ldGRldik7CisJCX0KKwkJcHJpdi0+Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX1NUT1BQRUQ7CisJfQorCWNhcmQtPnR4LnBlbmRpbmcgPSAwOworCisJc29mdGluZ19lbmFibGVfaXJxKGNhcmQsIDApOworCXJldCA9IHNvZnRpbmdfcmVzZXRfY2hpcChjYXJkKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKKwlpZiAoIWJ1c19iaXRtYXNrX3N0YXJ0KQorCQkvKiBubyBidXNzZXMgdG8gYmUgYnJvdWdodCB1cCAqLworCQlnb3RvIGNhcmRfZG9uZTsKKworCWlmICgoYnVzX2JpdG1hc2tfc3RhcnQgJiAxKSAmJiAoYnVzX2JpdG1hc2tfc3RhcnQgJiAyKQorCQkJJiYgKHNvZnRpbmdfZXJyb3JfcmVwb3J0aW5nKGNhcmQtPm5ldFswXSkKKwkJCQkhPSBzb2Z0aW5nX2Vycm9yX3JlcG9ydGluZyhjYXJkLT5uZXRbMV0pKSkgeworCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwKKwkJCQkiZXJyX3JlcG9ydGluZyBmbGFnIGRpZmZlcnMgZm9yIGJ1c3Nlc1xuIik7CisJCWdvdG8gaW52YWxpZDsKKwl9CisJZXJyb3JfcmVwb3J0aW5nID0gMDsKKwlpZiAoYnVzX2JpdG1hc2tfc3RhcnQgJiAxKSB7CisJCW5ldGRldiA9IGNhcmQtPm5ldFswXTsKKwkJcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJCWVycm9yX3JlcG9ydGluZyArPSBzb2Z0aW5nX2Vycm9yX3JlcG9ydGluZyhuZXRkZXYpOworCQkvKiBpbml0IGNoaXAgMSAqLworCQlidCA9ICZwcml2LT5jYW4uYml0dGltaW5nOworCQlpb3dyaXRlMTYoYnQtPmJycCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwkJaW93cml0ZTE2KGJ0LT5zancsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA0XSk7CisJCWlvd3JpdGUxNihidC0+cGhhc2Vfc2VnMSArIGJ0LT5wcm9wX3NlZywKKwkJCQkmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNl0pOworCQlpb3dyaXRlMTYoYnQtPnBoYXNlX3NlZzIsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA4XSk7CisJCWlvd3JpdGUxNigocHJpdi0+Y2FuLmN0cmxtb2RlICYgQ0FOX0NUUkxNT0RFXzNfU0FNUExFUykgPyAxIDogMCwKKwkJCQkmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTBdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDEsICJpbml0aWFsaXplX2NoaXBbMF0iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwkJLyogc2V0IG1vZGUgKi8KKwkJaW93cml0ZTE2KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAyXSk7CisJCWlvd3JpdGUxNigwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNF0pOworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMywgInNldF9tb2RlWzBdIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJCS8qIHNldCBmaWx0ZXIgKi8KKwkJLyogMTFiaXQgaWQgJiBtYXNrICovCisJCWlvd3JpdGUxNigweDAwMDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAyXSk7CisJCWlvd3JpdGUxNigweDA3ZmYsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA0XSk7CisJCS8qIDI5Yml0IGlkLmxvICYgbWFzay5sbyAmIGlkLmhpICYgbWFzay5oaSAqLworCQlpb3dyaXRlMTYoMHgwMDAwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNl0pOworCQlpb3dyaXRlMTYoMHhmZmZmLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgOF0pOworCQlpb3dyaXRlMTYoMHgwMDAwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTBdKTsKKwkJaW93cml0ZTE2KDB4MWZmZiwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDEyXSk7CisJCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCA3LCAic2V0X2ZpbHRlclswXSIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCQkvKiBzZXQgb3V0cHV0IGNvbnRyb2wgKi8KKwkJaW93cml0ZTE2KHByaXYtPm91dHB1dCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDUsICJzZXRfb3V0cHV0WzBdIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJfQorCWlmIChidXNfYml0bWFza19zdGFydCAmIDIpIHsKKwkJbmV0ZGV2ID0gY2FyZC0+bmV0WzFdOworCQlwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwkJZXJyb3JfcmVwb3J0aW5nICs9IHNvZnRpbmdfZXJyb3JfcmVwb3J0aW5nKG5ldGRldik7CisJCS8qIGluaXQgY2hpcDIgKi8KKwkJYnQgPSAmcHJpdi0+Y2FuLmJpdHRpbWluZzsKKwkJaW93cml0ZTE2KGJ0LT5icnAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAyXSk7CisJCWlvd3JpdGUxNihidC0+c2p3LCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNF0pOworCQlpb3dyaXRlMTYoYnQtPnBoYXNlX3NlZzEgKyBidC0+cHJvcF9zZWcsCisJCQkJJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDZdKTsKKwkJaW93cml0ZTE2KGJ0LT5waGFzZV9zZWcyLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgOF0pOworCQlpb3dyaXRlMTYoKHByaXYtPmNhbi5jdHJsbW9kZSAmIENBTl9DVFJMTU9ERV8zX1NBTVBMRVMpID8gMSA6IDAsCisJCQkJJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDEwXSk7CisJCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCAyLCAiaW5pdGlhbGl6ZV9jaGlwWzFdIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJCS8qIHNldCBtb2RlMiAqLworCQlpb3dyaXRlMTYoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwkJaW93cml0ZTE2KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA0XSk7CisJCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCA0LCAic2V0X21vZGVbMV0iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwkJLyogc2V0IGZpbHRlcjIgKi8KKwkJLyogMTFiaXQgaWQgJiBtYXNrICovCisJCWlvd3JpdGUxNigweDAwMDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAyXSk7CisJCWlvd3JpdGUxNigweDA3ZmYsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA0XSk7CisJCS8qIDI5Yml0IGlkLmxvICYgbWFzay5sbyAmIGlkLmhpICYgbWFzay5oaSAqLworCQlpb3dyaXRlMTYoMHgwMDAwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNl0pOworCQlpb3dyaXRlMTYoMHhmZmZmLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgOF0pOworCQlpb3dyaXRlMTYoMHgwMDAwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTBdKTsKKwkJaW93cml0ZTE2KDB4MWZmZiwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDEyXSk7CisJCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCA4LCAic2V0X2ZpbHRlclsxXSIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCQkvKiBzZXQgb3V0cHV0IGNvbnRyb2wyICovCisJCWlvd3JpdGUxNihwcml2LT5vdXRwdXQsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAyXSk7CisJCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCA2LCAic2V0X291dHB1dFsxXSIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCX0KKwkvKiBlbmFibGVfZXJyb3JfZnJhbWUgKi8KKwkvKgorCSAqIEVycm9yIHJlcG9ydGluZyBpcyBzd2l0Y2hlZCBvZmYgYXQgdGhlIG1vbWVudCBzaW5jZQorCSAqIHRoZSByZWNlaXZpbmcgb2YgdGhlbSBpcyBub3QgeWV0IDEwMCUgdmVyaWZpZWQKKwkgKiBUaGlzIHNob3VsZCBiZSBlbmFibGVkIHNvb25lciBvciBsYXRlcgorCSAqCisJaWYgKGVycm9yX3JlcG9ydGluZykgeworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgNTEsICJlbmFibGVfZXJyb3JfZnJhbWUiKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwl9CisJKi8KKwkvKiBpbml0aWFsaXplIGludGVyZmFjZSAqLworCWlvd3JpdGUxNigxLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCWlvd3JpdGUxNigxLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNF0pOworCWlvd3JpdGUxNigxLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNl0pOworCWlvd3JpdGUxNigxLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgOF0pOworCWlvd3JpdGUxNigxLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTBdKTsKKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDEyXSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxNF0pOworCWlvd3JpdGUxNigxLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTZdKTsKKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDE4XSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAyMF0pOworCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCAxNywgImluaXRpYWxpemVfaW50ZXJmYWNlIik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCS8qIGVuYWJsZV9maWZvICovCisJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDM2LCAiZW5hYmxlX2ZpZm8iKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJLyogZW5hYmxlIGZpZm8gdHggYWNrICovCisJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDEzLCAiZmlmb190eF9hY2tbMF0iKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJLyogZW5hYmxlIGZpZm8gdHggYWNrMiAqLworCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCAxNCwgImZpZm9fdHhfYWNrWzFdIik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCS8qIHN0YXJ0X2NoaXAgKi8KKwlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMTEsICJzdGFydF9jaGlwIik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCWlvd3JpdGU4KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9JTkZPX0JVU1NUQVRFXSk7CisJaW93cml0ZTgoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0lORk9fQlVTU1RBVEUyXSk7CisJaWYgKGNhcmQtPnBkYXQtPmdlbmVyYXRpb24gPCAyKSB7CisJCWlvd3JpdGU4KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9WMl9JUlFfVE9IT1NUXSk7CisJCS8qIGZsdXNoIHRoZSBEUFJBTSBjYWNoZXMgKi8KKwkJd21iKCk7CisJfQorCisJc29mdGluZ19pbml0aWFsaXplX3RpbWVzdGFtcChjYXJkKTsKKworCS8qCisJICogZG8gc29ja2V0Y2FuIG5vdGlmaWNhdGlvbnMvc3RhdHVzIGNoYW5nZXMKKwkgKiBmcm9tIGhlcmUsIG5vIGVycm9ycyBzaG91bGQgb2NjdXIsIG9yIHRoZSBmYWlsZWQ6IHBhcnQKKwkgKiBtdXN0IGJlIHJldmlld2VkCisJICovCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwltc2cuY2FuX2lkID0gQ0FOX0VSUl9GTEFHIHwgQ0FOX0VSUl9SRVNUQVJURUQ7CisJbXNnLmNhbl9kbGMgPSBDQU5fRVJSX0RMQzsKKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJaWYgKCEoYnVzX2JpdG1hc2tfc3RhcnQgJiAoMSA8PCBqKSkpCisJCQljb250aW51ZTsKKwkJbmV0ZGV2ID0gY2FyZC0+bmV0W2pdOworCQlpZiAoIW5ldGRldikKKwkJCWNvbnRpbnVlOworCQlwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwkJcHJpdi0+Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX0VSUk9SX0FDVElWRTsKKwkJb3Blbl9jYW5kZXYobmV0ZGV2KTsKKwkJaWYgKGRldiAhPSBuZXRkZXYpIHsKKwkJCS8qIG5vdGlmeSBvdGhlciBidXNzZXMgb24gdGhlIHJlc3RhcnQgKi8KKwkJCXNvZnRpbmdfbmV0ZGV2X3J4KG5ldGRldiwgJm1zZywga3RpbWVfc2V0KDAsIDApKTsKKwkJCSsrcHJpdi0+Y2FuLmNhbl9zdGF0cy5yZXN0YXJ0czsKKwkJfQorCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJfQorCisJLyogZW5hYmxlIGludGVycnVwdHMgKi8KKwlyZXQgPSBzb2Z0aW5nX2VuYWJsZV9pcnEoY2FyZCwgMSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CitjYXJkX2RvbmU6CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5mdy5sb2NrKTsKKwlyZXR1cm4gMDsKK2ludmFsaWQ6CisJcmV0ID0gLUVJTlZBTDsKK2ZhaWxlZDoKKwlzb2Z0aW5nX2VuYWJsZV9pcnEoY2FyZCwgMCk7CisJc29mdGluZ19yZXNldF9jaGlwKGNhcmQpOworCW11dGV4X3VubG9jaygmY2FyZC0+ZncubG9jayk7CisJLyogYnJpbmcgYWxsIG90aGVyIGludGVyZmFjZXMgZG93biAqLworCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGNhcmQtPm5ldCk7ICsraikgeworCQluZXRkZXYgPSBjYXJkLT5uZXRbal07CisJCWlmICghbmV0ZGV2KQorCQkJY29udGludWU7CisJCWRldl9jbG9zZShuZXRkZXYpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitpbnQgc29mdGluZ19kZWZhdWx0X291dHB1dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBzb2Z0aW5nICpjYXJkID0gcHJpdi0+Y2FyZDsKKworCXN3aXRjaCAocHJpdi0+Y2hpcCkgeworCWNhc2UgMTAwMDoKKwkJcmV0dXJuIChjYXJkLT5wZGF0LT5nZW5lcmF0aW9uIDwgMikgPyAweGZiIDogMHhmYTsKKwljYXNlIDU6CisJCXJldHVybiAweDYwOworCWRlZmF1bHQ6CisJCXJldHVybiAweDQwOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfbWFpbi5jIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE1N2UxNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfbWFpbi5jCkBAIC0wLDAgKzEsODkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAKKyAqCisgKiAtIEt1cnQgVmFuIERpamNrLCBFSUEgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlICJzb2Z0aW5nLmgiCisKKyNkZWZpbmUgVFhfRUNIT19TS0JfTUFYICgoKFRYTUFYKzEpLzIpLTEpCisKKy8qCisgKiB0ZXN0IGlzIGEgc3BlY2lmaWMgQ0FOIG5ldGRldgorICogaXMgb25saW5lIChpZS4gdXAgJ24gcnVubmluZywgbm90IHNsZWVwaW5nLCBub3QgYnVzb2ZmCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNhbmlmX2lzX2FjdGl2ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBjYW5fcHJpdiAqY2FuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmICghbmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gKGNhbi0+c3RhdGUgPD0gQ0FOX1NUQVRFX0VSUk9SX1BBU1NJVkUpOworfQorCisvKiByZXNldCBEUFJBTSAqLworc3RhdGljIGlubGluZSB2b2lkIHNvZnRpbmdfc2V0X3Jlc2V0X2RwcmFtKHN0cnVjdCBzb2Z0aW5nICpjYXJkKQoreworCWlmIChjYXJkLT5wZGF0LT5nZW5lcmF0aW9uID49IDIpIHsKKwkJc3Bpbl9sb2NrX2JoKCZjYXJkLT5zcGluKTsKKwkJaW93cml0ZTgoaW9yZWFkOCgmY2FyZC0+ZHByYW1bRFBSQU1fVjJfUkVTRVRdKSAmIH4xLAorCQkJCSZjYXJkLT5kcHJhbVtEUFJBTV9WMl9SRVNFVF0pOworCQlzcGluX3VubG9ja19iaCgmY2FyZC0+c3Bpbik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc29mdGluZ19jbHJfcmVzZXRfZHByYW0oc3RydWN0IHNvZnRpbmcgKmNhcmQpCit7CisJaWYgKGNhcmQtPnBkYXQtPmdlbmVyYXRpb24gPj0gMikgeworCQlzcGluX2xvY2tfYmgoJmNhcmQtPnNwaW4pOworCQlpb3dyaXRlOChpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9WMl9SRVNFVF0pIHwgMSwKKwkJCQkmY2FyZC0+ZHByYW1bRFBSQU1fVjJfUkVTRVRdKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmNhcmQtPnNwaW4pOworCX0KK30KKworLyogdHJpZ2dlciB0aGUgdHggcXVldWUtaW5nICovCitzdGF0aWMgbmV0ZGV2X3R4X3Qgc29mdGluZ19uZXRkZXZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzb2Z0aW5nICpjYXJkID0gcHJpdi0+Y2FyZDsKKwlpbnQgcmV0OworCXVpbnQ4X3QgKnB0cjsKKwl1aW50OF90IGZpZm9fd3IsIGZpZm9fcmQ7CisJc3RydWN0IGNhbl9mcmFtZSAqY2YgPSAoc3RydWN0IGNhbl9mcmFtZSAqKXNrYi0+ZGF0YTsKKwl1aW50OF90IGJ1ZltEUFJBTV9UWF9TSVpFXTsKKworCWlmIChjYW5fZHJvcHBlZF9pbnZhbGlkX3NrYihkZXYsIHNrYikpCisJCXJldHVybiBORVRERVZfVFhfT0s7CisKKwlzcGluX2xvY2soJmNhcmQtPnNwaW4pOworCisJcmV0ID0gTkVUREVWX1RYX0JVU1k7CisJaWYgKCFjYXJkLT5mdy51cCB8fAorCQkJKGNhcmQtPnR4LnBlbmRpbmcgPj0gVFhNQVgpIHx8CisJCQkocHJpdi0+dHgucGVuZGluZyA+PSBUWF9FQ0hPX1NLQl9NQVgpKQorCQlnb3RvIHhtaXRfZG9uZTsKKwlmaWZvX3dyID0gaW9yZWFkOCgmY2FyZC0+ZHByYW1bRFBSQU1fVFhfV1JdKTsKKwlmaWZvX3JkID0gaW9yZWFkOCgmY2FyZC0+ZHByYW1bRFBSQU1fVFhfUkRdKTsKKwlpZiAoZmlmb193ciA9PSBmaWZvX3JkKQorCQkvKiBmaWZvIGZ1bGwgKi8KKwkJZ290byB4bWl0X2RvbmU7CisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCXB0ciA9IGJ1ZjsKKwkqcHRyID0gQ01EX1RYOworCWlmIChjZi0+Y2FuX2lkICYgQ0FOX1JUUl9GTEFHKQorCQkqcHRyIHw9IENNRF9SVFI7CisJaWYgKGNmLT5jYW5faWQgJiBDQU5fRUZGX0ZMQUcpCisJCSpwdHIgfD0gQ01EX1hURDsKKwlpZiAocHJpdi0+aW5kZXgpCisJCSpwdHIgfD0gQ01EX0JVUzI7CisJKytwdHI7CisJKnB0cisrID0gY2YtPmNhbl9kbGM7CisJKnB0cisrID0gKGNmLT5jYW5faWQgPj4gMCk7CisJKnB0cisrID0gKGNmLT5jYW5faWQgPj4gOCk7CisJaWYgKGNmLT5jYW5faWQgJiBDQU5fRUZGX0ZMQUcpIHsKKwkJKnB0cisrID0gKGNmLT5jYW5faWQgPj4gMTYpOworCQkqcHRyKysgPSAoY2YtPmNhbl9pZCA+PiAyNCk7CisJfSBlbHNlIHsKKwkJLyogaW5jcmVtZW50IDEsIG5vdCAyIGFzIHlvdSBtaWdodCB0aGluayAqLworCQlwdHIgKz0gMTsKKwl9CisJaWYgKCEoY2YtPmNhbl9pZCAmIENBTl9SVFJfRkxBRykpCisJCW1lbWNweShwdHIsICZjZi0+ZGF0YVswXSwgY2YtPmNhbl9kbGMpOworCW1lbWNweV90b2lvKCZjYXJkLT5kcHJhbVtEUFJBTV9UWCArIERQUkFNX1RYX1NJWkUgKiBmaWZvX3dyXSwKKwkJCWJ1ZiwgRFBSQU1fVFhfU0laRSk7CisJaWYgKCsrZmlmb193ciA+PSBEUFJBTV9UWF9DTlQpCisJCWZpZm9fd3IgPSAwOworCWlvd3JpdGU4KGZpZm9fd3IsICZjYXJkLT5kcHJhbVtEUFJBTV9UWF9XUl0pOworCWNhcmQtPnR4Lmxhc3RfYnVzID0gcHJpdi0+aW5kZXg7CisJKytjYXJkLT50eC5wZW5kaW5nOworCSsrcHJpdi0+dHgucGVuZGluZzsKKwljYW5fcHV0X2VjaG9fc2tiKHNrYiwgZGV2LCBwcml2LT50eC5lY2hvX3B1dCk7CisJKytwcml2LT50eC5lY2hvX3B1dDsKKwlpZiAocHJpdi0+dHguZWNob19wdXQgPj0gVFhfRUNIT19TS0JfTUFYKQorCQlwcml2LT50eC5lY2hvX3B1dCA9IDA7CisJLyogY2FuX3B1dF9lY2hvX3NrYigpIHNhdmVzIHRoZSBza2IsIHNhZmUgdG8gcmV0dXJuIFRYX09LICovCisJcmV0ID0gTkVUREVWX1RYX09LOworeG1pdF9kb25lOgorCXNwaW5fdW5sb2NrKCZjYXJkLT5zcGluKTsKKwlpZiAoY2FyZC0+dHgucGVuZGluZyA+PSBUWE1BWCkgeworCQlpbnQgajsKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCQlpZiAoY2FyZC0+bmV0W2pdKQorCQkJCW5ldGlmX3N0b3BfcXVldWUoY2FyZC0+bmV0W2pdKTsKKwkJfQorCX0KKwlpZiAocmV0ICE9IE5FVERFVl9UWF9PSykKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHNob3J0Y3V0IGZvciBza2IgZGVsaXZlcnkKKyAqLworaW50IHNvZnRpbmdfbmV0ZGV2X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHN0cnVjdCBjYW5fZnJhbWUgKm1zZywKKwkJa3RpbWVfdCBrdGltZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBjYW5fZnJhbWUgKmNmOworCisJc2tiID0gYWxsb2NfY2FuX3NrYihuZXRkZXYsICZjZik7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShjZiwgbXNnLCBzaXplb2YoKm1zZykpOworCXNrYi0+dHN0YW1wID0ga3RpbWU7CisJcmV0dXJuIG5ldGlmX3J4KHNrYik7Cit9CisKKy8qCisgKiBzb2Z0aW5nX2hhbmRsZV8xCisgKiBwb3AgMSBlbnRyeSBmcm9tIHRoZSBEUFJBTSBxdWV1ZSwgYW5kIHByb2Nlc3MKKyAqLworc3RhdGljIGludCBzb2Z0aW5nX2hhbmRsZV8xKHN0cnVjdCBzb2Z0aW5nICpjYXJkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdjsKKwlrdGltZV90IGt0aW1lOworCXN0cnVjdCBjYW5fZnJhbWUgbXNnOworCWludCBjbnQgPSAwLCBsb3N0X21zZzsKKwl1aW50OF90IGZpZm9fcmQsIGZpZm9fd3IsIGNtZDsKKwl1aW50OF90ICpwdHI7CisJdWludDMyX3QgdG1wX3UzMjsKKwl1aW50OF90IGJ1ZltEUFJBTV9SWF9TSVpFXTsKKworCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7CisJLyogdGVzdCBmb3IgbG9zdCBtc2dzICovCisJbG9zdF9tc2cgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9SWF9MT1NUXSk7CisJaWYgKGxvc3RfbXNnKSB7CisJCWludCBqOworCQkvKiByZXNldCBjb25kaXRpb24gKi8KKwkJaW93cml0ZTgoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX1JYX0xPU1RdKTsKKwkJLyogcHJlcGFyZSBtc2cgKi8KKwkJbXNnLmNhbl9pZCA9IENBTl9FUlJfRkxBRyB8IENBTl9FUlJfQ1JUTDsKKwkJbXNnLmNhbl9kbGMgPSBDQU5fRVJSX0RMQzsKKwkJbXNnLmRhdGFbMV0gPSBDQU5fRVJSX0NSVExfUlhfT1ZFUkZMT1c7CisJCS8qCisJCSAqIHNlcnZpY2UgdG8gYWxsIGJ1c3Nlcywgd2UgZG9uJ3Qga25vdyB3aGljaCBpdCB3YXMgYXBwbGljYWJsZQorCQkgKiBidXQgb25seSBzZXJ2aWNlIGJ1c3NlcyB0aGF0IGFyZSBvbmxpbmUKKwkJICovCisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGNhcmQtPm5ldCk7ICsraikgeworCQkJbmV0ZGV2ID0gY2FyZC0+bmV0W2pdOworCQkJaWYgKCFuZXRkZXYpCisJCQkJY29udGludWU7CisJCQlpZiAoIWNhbmlmX2lzX2FjdGl2ZShuZXRkZXYpKQorCQkJCS8qIGEgZGVhZCBidXMgaGFzIG5vIG92ZXJmbG93cyAqLworCQkJCWNvbnRpbnVlOworCQkJKytuZXRkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzOworCQkJc29mdGluZ19uZXRkZXZfcngobmV0ZGV2LCAmbXNnLCBrdGltZV9zZXQoMCwgMCkpOworCQl9CisJCS8qIHByZXBhcmUgZm9yIG90aGVyIHVzZSAqLworCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworCQkrK2NudDsKKwl9CisKKwlmaWZvX3JkID0gaW9yZWFkOCgmY2FyZC0+ZHByYW1bRFBSQU1fUlhfUkRdKTsKKwlmaWZvX3dyID0gaW9yZWFkOCgmY2FyZC0+ZHByYW1bRFBSQU1fUlhfV1JdKTsKKworCWlmICgrK2ZpZm9fcmQgPj0gRFBSQU1fUlhfQ05UKQorCQlmaWZvX3JkID0gMDsKKwlpZiAoZmlmb193ciA9PSBmaWZvX3JkKQorCQlyZXR1cm4gY250OworCisJbWVtY3B5X2Zyb21pbyhidWYsICZjYXJkLT5kcHJhbVtEUFJBTV9SWCArIERQUkFNX1JYX1NJWkUqZmlmb19yZF0sCisJCQlEUFJBTV9SWF9TSVpFKTsKKwltYigpOworCS8qIHRyaWdnZXIgZHVhbCBwb3J0IFJBTSAqLworCWlvd3JpdGU4KGZpZm9fcmQsICZjYXJkLT5kcHJhbVtEUFJBTV9SWF9SRF0pOworCisJcHRyID0gYnVmOworCWNtZCA9ICpwdHIrKzsKKwlpZiAoY21kID09IDB4ZmYpCisJCS8qIG5vdCBxdWl0ZSB1c2VmdWxsLCBwcm9iYWJseSB0aGUgY2FyZCBoYXMgZ290IG91dCAqLworCQlyZXR1cm4gMDsKKwluZXRkZXYgPSBjYXJkLT5uZXRbMF07CisJaWYgKGNtZCAmIENNRF9CVVMyKQorCQluZXRkZXYgPSBjYXJkLT5uZXRbMV07CisJcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAoY21kICYgQ01EX0VSUikgeworCQl1aW50OF90IGNhbl9zdGF0ZSwgc3RhdGU7CisKKwkJc3RhdGUgPSAqcHRyKys7CisKKwkJbXNnLmNhbl9pZCA9IENBTl9FUlJfRkxBRzsKKwkJbXNnLmNhbl9kbGMgPSBDQU5fRVJSX0RMQzsKKworCQlpZiAoc3RhdGUgJiBTRl9NQVNLX0JVU09GRikgeworCQkJY2FuX3N0YXRlID0gQ0FOX1NUQVRFX0JVU19PRkY7CisJCQltc2cuY2FuX2lkIHw9IENBTl9FUlJfQlVTT0ZGOworCQkJc3RhdGUgPSBTVEFURV9CVVNPRkY7CisJCX0gZWxzZSBpZiAoc3RhdGUgJiBTRl9NQVNLX0VQQVNTSVZFKSB7CisJCQljYW5fc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfUEFTU0lWRTsKKwkJCW1zZy5jYW5faWQgfD0gQ0FOX0VSUl9DUlRMOworCQkJbXNnLmRhdGFbMV0gPSBDQU5fRVJSX0NSVExfVFhfUEFTU0lWRTsKKwkJCXN0YXRlID0gU1RBVEVfRVBBU1NJVkU7CisJCX0gZWxzZSB7CisJCQljYW5fc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfQUNUSVZFOworCQkJbXNnLmNhbl9pZCB8PSBDQU5fRVJSX0NSVEw7CisJCQlzdGF0ZSA9IFNUQVRFX0VBQ1RJVkU7CisJCX0KKwkJLyogdXBkYXRlIERQUkFNICovCisJCWlvd3JpdGU4KHN0YXRlLCAmY2FyZC0+ZHByYW1bcHJpdi0+aW5kZXggPworCQkJCURQUkFNX0lORk9fQlVTU1RBVEUyIDogRFBSQU1fSU5GT19CVVNTVEFURV0pOworCQkvKiB0aW1lc3RhbXAgKi8KKwkJdG1wX3UzMiA9IGxlMzJfdG9fY3B1cCgodm9pZCAqKXB0cik7CisJCXB0ciArPSA0OworCQlrdGltZSA9IHNvZnRpbmdfcmF3Mmt0aW1lKGNhcmQsIHRtcF91MzIpOworCisJCSsrbmV0ZGV2LT5zdGF0cy5yeF9lcnJvcnM7CisJCS8qIHVwZGF0ZSBpbnRlcm5hbCBzdGF0dXMgKi8KKwkJaWYgKGNhbl9zdGF0ZSAhPSBwcml2LT5jYW4uc3RhdGUpIHsKKwkJCXByaXYtPmNhbi5zdGF0ZSA9IGNhbl9zdGF0ZTsKKwkJCWlmIChjYW5fc3RhdGUgPT0gQ0FOX1NUQVRFX0VSUk9SX1BBU1NJVkUpCisJCQkJKytwcml2LT5jYW4uY2FuX3N0YXRzLmVycm9yX3Bhc3NpdmU7CisJCQllbHNlIGlmIChjYW5fc3RhdGUgPT0gQ0FOX1NUQVRFX0JVU19PRkYpIHsKKwkJCQkvKiB0aGlzIGNhbGxzIGNhbl9jbG9zZV9jbGVhbnVwKCkgKi8KKwkJCQljYW5fYnVzX29mZihuZXRkZXYpOworCQkJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwkJCX0KKwkJCS8qIHRyaWdnZXIgc29ja2V0Y2FuICovCisJCQlzb2Z0aW5nX25ldGRldl9yeChuZXRkZXYsICZtc2csIGt0aW1lKTsKKwkJfQorCisJfSBlbHNlIHsKKwkJaWYgKGNtZCAmIENNRF9SVFIpCisJCQltc2cuY2FuX2lkIHw9IENBTl9SVFJfRkxBRzsKKwkJbXNnLmNhbl9kbGMgPSBnZXRfY2FuX2RsYygqcHRyKyspOworCQlpZiAoY21kICYgQ01EX1hURCkgeworCQkJbXNnLmNhbl9pZCB8PSBDQU5fRUZGX0ZMQUc7CisJCQltc2cuY2FuX2lkIHw9IGxlMzJfdG9fY3B1cCgodm9pZCAqKXB0cik7CisJCQlwdHIgKz0gNDsKKwkJfSBlbHNlIHsKKwkJCW1zZy5jYW5faWQgfD0gbGUxNl90b19jcHVwKCh2b2lkICopcHRyKTsKKwkJCXB0ciArPSAyOworCQl9CisJCS8qIHRpbWVzdGFtcCAqLworCQl0bXBfdTMyID0gbGUzMl90b19jcHVwKCh2b2lkICopcHRyKTsKKwkJcHRyICs9IDQ7CisJCWt0aW1lID0gc29mdGluZ19yYXcya3RpbWUoY2FyZCwgdG1wX3UzMik7CisJCWlmICghKG1zZy5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpKQorCQkJbWVtY3B5KCZtc2cuZGF0YVswXSwgcHRyLCA4KTsKKwkJcHRyICs9IDg7CisJCS8qIHVwZGF0ZSBzb2NrZXQgKi8KKwkJaWYgKGNtZCAmIENNRF9BQ0spIHsKKwkJCS8qIGFja25vd2xlZGdlLCB3YXMgdHggbXNnICovCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQkJc2tiID0gcHJpdi0+Y2FuLmVjaG9fc2tiW3ByaXYtPnR4LmVjaG9fZ2V0XTsKKwkJCWlmIChza2IpCisJCQkJc2tiLT50c3RhbXAgPSBrdGltZTsKKwkJCWNhbl9nZXRfZWNob19za2IobmV0ZGV2LCBwcml2LT50eC5lY2hvX2dldCk7CisJCQkrK3ByaXYtPnR4LmVjaG9fZ2V0OworCQkJaWYgKHByaXYtPnR4LmVjaG9fZ2V0ID49IFRYX0VDSE9fU0tCX01BWCkKKwkJCQlwcml2LT50eC5lY2hvX2dldCA9IDA7CisJCQlpZiAocHJpdi0+dHgucGVuZGluZykKKwkJCQktLXByaXYtPnR4LnBlbmRpbmc7CisJCQlpZiAoY2FyZC0+dHgucGVuZGluZykKKwkJCQktLWNhcmQtPnR4LnBlbmRpbmc7CisJCQkrK25ldGRldi0+c3RhdHMudHhfcGFja2V0czsKKwkJCWlmICghKG1zZy5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpKQorCQkJCW5ldGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbXNnLmNhbl9kbGM7CisJCX0gZWxzZSB7CisJCQlpbnQgcmV0OworCisJCQlyZXQgPSBzb2Z0aW5nX25ldGRldl9yeChuZXRkZXYsICZtc2csIGt0aW1lKTsKKwkJCWlmIChyZXQgPT0gTkVUX1JYX1NVQ0NFU1MpIHsKKwkJCQkrK25ldGRldi0+c3RhdHMucnhfcGFja2V0czsKKwkJCQlpZiAoIShtc2cuY2FuX2lkICYgQ0FOX1JUUl9GTEFHKSkKKwkJCQkJbmV0ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBtc2cuY2FuX2RsYzsKKwkJCX0gZWxzZSB7CisJCQkJKytuZXRkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQ7CisJCQl9CisJCX0KKwl9CisJKytjbnQ7CisJcmV0dXJuIGNudDsKK30KKworLyoKKyAqIHJlYWwgaW50ZXJydXB0IGhhbmRsZXIKKyAqLworc3RhdGljIGlycXJldHVybl90IHNvZnRpbmdfaXJxX3RocmVhZChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNvZnRpbmcgKmNhcmQgPSAoc3RydWN0IHNvZnRpbmcgKilkZXZfaWQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2OworCWludCBqLCBvZmZzZXQsIHdvcmtfZG9uZTsKKworCXdvcmtfZG9uZSA9IDA7CisJc3Bpbl9sb2NrX2JoKCZjYXJkLT5zcGluKTsKKwl3aGlsZSAoc29mdGluZ19oYW5kbGVfMShjYXJkKSA+IDApIHsKKwkJKytjYXJkLT5pcnEuc3ZjX2NvdW50OworCQkrK3dvcmtfZG9uZTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmNhcmQtPnNwaW4pOworCS8qIHJlc3VtZSB0eCBxdWV1ZSdzICovCisJb2Zmc2V0ID0gY2FyZC0+dHgubGFzdF9idXM7CisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCWlmIChjYXJkLT50eC5wZW5kaW5nID49IFRYTUFYKQorCQkJYnJlYWs7CisJCW5ldGRldiA9IGNhcmQtPm5ldFsoaiArIG9mZnNldCArIDEpICUgY2FyZC0+cGRhdC0+bmJ1c107CisJCWlmICghbmV0ZGV2KQorCQkJY29udGludWU7CisJCXByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCQlpZiAoIWNhbmlmX2lzX2FjdGl2ZShuZXRkZXYpKQorCQkJLyogaXQgbWFrZXMgbm8gc2Vuc2UgdG8gd2FrZSBkZWFkIGJ1c3NlcyAqLworCQkJY29udGludWU7CisJCWlmIChwcml2LT50eC5wZW5kaW5nID49IFRYX0VDSE9fU0tCX01BWCkKKwkJCWNvbnRpbnVlOworCQkrK3dvcmtfZG9uZTsKKwkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOworCX0KKwlyZXR1cm4gd29ya19kb25lID8gSVJRX0hBTkRMRUQgOiBJUlFfTk9ORTsKK30KKworLyoKKyAqIGludGVycnVwdCByb3V0aW5lczoKKyAqIHNjaGVkdWxlIHRoZSAncmVhbCBpbnRlcnJ1cHQgaGFuZGxlcicKKyAqLworc3RhdGljIGlycXJldHVybl90IHNvZnRpbmdfaXJxX3YyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IChzdHJ1Y3Qgc29mdGluZyAqKWRldl9pZDsKKwl1aW50OF90IGlyOworCisJaXIgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9WMl9JUlFfVE9IT1NUXSk7CisJaW93cml0ZTgoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX1YyX0lSUV9UT0hPU1RdKTsKKwlyZXR1cm4gKDEgPT0gaXIpID8gSVJRX1dBS0VfVEhSRUFEIDogSVJRX05PTkU7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzb2Z0aW5nX2lycV92MShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNvZnRpbmcgKmNhcmQgPSAoc3RydWN0IHNvZnRpbmcgKilkZXZfaWQ7CisJdWludDhfdCBpcjsKKworCWlyID0gaW9yZWFkOCgmY2FyZC0+ZHByYW1bRFBSQU1fSVJRX1RPSE9TVF0pOworCWlvd3JpdGU4KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9JUlFfVE9IT1NUXSk7CisJcmV0dXJuIGlyID8gSVJRX1dBS0VfVEhSRUFEIDogSVJRX05PTkU7Cit9CisKKy8qCisgKiBuZXRkZXYvY2FuZGV2IGludGVyLW9wZXJhYmlsaXR5CisgKi8KK3N0YXRpYyBpbnQgc29mdGluZ19uZXRkZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlpbnQgcmV0OworCisJLyogY2hlY2sgb3IgZGV0ZXJtaW5lIGFuZCBzZXQgYml0dGltZSAqLworCXJldCA9IG9wZW5fY2FuZGV2KG5kZXYpOworCWlmICghcmV0KQorCQlyZXQgPSBzb2Z0aW5nX3N0YXJ0c3RvcChuZGV2LCAxKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNvZnRpbmdfbmV0ZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJaW50IHJldDsKKworCW5ldGlmX3N0b3BfcXVldWUobmRldik7CisKKwkvKiBzb2Z0aW5nIGN5Y2xlIGRvZXMgY2xvc2VfY2FuZGV2KCkgKi8KKwlyZXQgPSBzb2Z0aW5nX3N0YXJ0c3RvcChuZGV2LCAwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNvZnRpbmdfY2FuZGV2X3NldF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIGNhbl9tb2RlIG1vZGUpCit7CisJaW50IHJldDsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0FOX01PREVfU1RBUlQ6CisJCS8qIHNvZnRpbmdfc3RhcnRzdG9wIGRvZXMgY2xvc2VfY2FuZGV2KCkgKi8KKwkJcmV0ID0gc29mdGluZ19zdGFydHN0b3AobmRldiwgMSk7CisJCXJldHVybiByZXQ7CisJY2FzZSBDQU5fTU9ERV9TVE9QOgorCWNhc2UgQ0FOX01PREVfU0xFRVA6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTb2Z0aW5nIGRldmljZSBtYW5hZ2VtZW50IGhlbHBlcnMKKyAqLworaW50IHNvZnRpbmdfZW5hYmxlX2lycShzdHJ1Y3Qgc29mdGluZyAqY2FyZCwgaW50IGVuYWJsZSkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFjYXJkLT5pcnEubnIpIHsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChjYXJkLT5pcnEucmVxdWVzdGVkICYmICFlbmFibGUpIHsKKwkJZnJlZV9pcnEoY2FyZC0+aXJxLm5yLCBjYXJkKTsKKwkJY2FyZC0+aXJxLnJlcXVlc3RlZCA9IDA7CisJfSBlbHNlIGlmICghY2FyZC0+aXJxLnJlcXVlc3RlZCAmJiBlbmFibGUpIHsKKwkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoY2FyZC0+aXJxLm5yLAorCQkJCShjYXJkLT5wZGF0LT5nZW5lcmF0aW9uID49IDIpID8KKwkJCQkJc29mdGluZ19pcnFfdjIgOiBzb2Z0aW5nX2lycV92MSwKKwkJCQlzb2Z0aW5nX2lycV90aHJlYWQsIElSUUZfU0hBUkVELAorCQkJCWRldl9uYW1lKCZjYXJkLT5wZGV2LT5kZXYpLCBjYXJkKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsCisJCQkJCSJyZXF1ZXN0X3RocmVhZGVkX2lycSgldSkgZmFpbGVkXG4iLAorCQkJCQljYXJkLT5pcnEubnIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQljYXJkLT5pcnEucmVxdWVzdGVkID0gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNvZnRpbmdfY2FyZF9zaHV0ZG93bihzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwlpbnQgZndfdXAgPSAwOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FyZC0+ZncubG9jaykpCisJCS8qIHJldHVybiAtRVJFU1RBUlRTWVMgKi87CisJZndfdXAgPSBjYXJkLT5mdy51cDsKKwljYXJkLT5mdy51cCA9IDA7CisKKwlpZiAoY2FyZC0+aXJxLnJlcXVlc3RlZCAmJiBjYXJkLT5pcnEubnIpIHsKKwkJZnJlZV9pcnEoY2FyZC0+aXJxLm5yLCBjYXJkKTsKKwkJY2FyZC0+aXJxLnJlcXVlc3RlZCA9IDA7CisJfQorCWlmIChmd191cCkgeworCQlpZiAoY2FyZC0+cGRhdC0+ZW5hYmxlX2lycSkKKwkJCWNhcmQtPnBkYXQtPmVuYWJsZV9pcnEoY2FyZC0+cGRldiwgMCk7CisJCXNvZnRpbmdfc2V0X3Jlc2V0X2RwcmFtKGNhcmQpOworCQlpZiAoY2FyZC0+cGRhdC0+cmVzZXQpCisJCQljYXJkLT5wZGF0LT5yZXNldChjYXJkLT5wZGV2LCAxKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5mdy5sb2NrKTsKK30KKworc3RhdGljIF9fZGV2aW5pdCBpbnQgc29mdGluZ19jYXJkX2Jvb3Qoc3RydWN0IHNvZnRpbmcgKmNhcmQpCit7CisJaW50IHJldCwgajsKKwlzdGF0aWMgY29uc3QgdWludDhfdCBzdHJlYW1bXSA9IHsKKwkJMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgfTsKKwl1bnNpZ25lZCBjaGFyIGJhY2tbc2l6ZW9mKHN0cmVhbSldOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FyZC0+ZncubG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJaWYgKGNhcmQtPmZ3LnVwKSB7CisJCW11dGV4X3VubG9jaygmY2FyZC0+ZncubG9jayk7CisJCXJldHVybiAwOworCX0KKwkvKiByZXNldCBib2FyZCAqLworCWlmIChjYXJkLT5wZGF0LT5lbmFibGVfaXJxKQorCQljYXJkLT5wZGF0LT5lbmFibGVfaXJxKGNhcmQtPnBkZXYsIDEpOworCS8qIGJvb3QgY2FyZCAqLworCXNvZnRpbmdfc2V0X3Jlc2V0X2RwcmFtKGNhcmQpOworCWlmIChjYXJkLT5wZGF0LT5yZXNldCkKKwkJY2FyZC0+cGRhdC0+cmVzZXQoY2FyZC0+cGRldiwgMSk7CisJZm9yIChqID0gMDsgKGogKyBzaXplb2Yoc3RyZWFtKSkgPCBjYXJkLT5kcHJhbV9zaXplOworCQkJaiArPSBzaXplb2Yoc3RyZWFtKSkgeworCisJCW1lbWNweV90b2lvKCZjYXJkLT5kcHJhbVtqXSwgc3RyZWFtLCBzaXplb2Yoc3RyZWFtKSk7CisJCS8qIGZsdXNoIElPIGNhY2hlICovCisJCW1iKCk7CisJCW1lbWNweV9mcm9taW8oYmFjaywgJmNhcmQtPmRwcmFtW2pdLCBzaXplb2Yoc3RyZWFtKSk7CisKKwkJaWYgKCFtZW1jbXAoYmFjaywgc3RyZWFtLCBzaXplb2Yoc3RyZWFtKSkpCisJCQljb250aW51ZTsKKwkJLyogbWVtb3J5IGlzIG5vdCBlcXVhbCAqLworCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgImRwcmFtIGZhaWxlZCBhdCAweCUwNHhcbiIsIGopOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKwl9CisJd21iKCk7CisJLyogbG9hZCBib290IGZpcm13YXJlICovCisJcmV0ID0gc29mdGluZ19sb2FkX2Z3KGNhcmQtPnBkYXQtPmJvb3QuZncsIGNhcmQsIGNhcmQtPmRwcmFtLAorCQkJCWNhcmQtPmRwcmFtX3NpemUsCisJCQkJY2FyZC0+cGRhdC0+Ym9vdC5vZmZzIC0gY2FyZC0+cGRhdC0+Ym9vdC5hZGRyKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJLyogbG9hZCBsb2FkZXIgZmlybXdhcmUgKi8KKwlyZXQgPSBzb2Z0aW5nX2xvYWRfZncoY2FyZC0+cGRhdC0+bG9hZC5mdywgY2FyZCwgY2FyZC0+ZHByYW0sCisJCQkJY2FyZC0+ZHByYW1fc2l6ZSwKKwkJCQljYXJkLT5wZGF0LT5sb2FkLm9mZnMgLSBjYXJkLT5wZGF0LT5sb2FkLmFkZHIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworCWlmIChjYXJkLT5wZGF0LT5yZXNldCkKKwkJY2FyZC0+cGRhdC0+cmVzZXQoY2FyZC0+cGRldiwgMCk7CisJc29mdGluZ19jbHJfcmVzZXRfZHByYW0oY2FyZCk7CisJcmV0ID0gc29mdGluZ19ib290bG9hZGVyX2NvbW1hbmQoY2FyZCwgMCwgImNhcmQgYm9vdCIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwlyZXQgPSBzb2Z0aW5nX2xvYWRfYXBwX2Z3KGNhcmQtPnBkYXQtPmFwcC5mdywgY2FyZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCisJcmV0ID0gc29mdGluZ19jaGlwX3Bvd2Vyb24oY2FyZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCisJY2FyZC0+ZncudXAgPSAxOworCW11dGV4X3VubG9jaygmY2FyZC0+ZncubG9jayk7CisJcmV0dXJuIDA7CitmYWlsZWQ6CisJY2FyZC0+ZncudXAgPSAwOworCWlmIChjYXJkLT5wZGF0LT5lbmFibGVfaXJxKQorCQljYXJkLT5wZGF0LT5lbmFibGVfaXJxKGNhcmQtPnBkZXYsIDApOworCXNvZnRpbmdfc2V0X3Jlc2V0X2RwcmFtKGNhcmQpOworCWlmIChjYXJkLT5wZGF0LT5yZXNldCkKKwkJY2FyZC0+cGRhdC0+cmVzZXQoY2FyZC0+cGRldiwgMSk7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5mdy5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogbmV0ZGV2IHN5c2ZzCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfY2hhbm5lbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGRldik7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdiA9IG5ldGRldjJzb2Z0aW5nKG5kZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIHByaXYtPmluZGV4KTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19jaGlwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHRvX25ldF9kZXYoZGV2KTsKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2ID0gbmV0ZGV2MnNvZnRpbmcobmRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgcHJpdi0+Y2hpcCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfb3V0cHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHRvX25ldF9kZXYoZGV2KTsKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2ID0gbmV0ZGV2MnNvZnRpbmcobmRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwMnhcbiIsIHByaXYtPm91dHB1dCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX291dHB1dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHRvX25ldF9kZXYoZGV2KTsKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2ID0gbmV0ZGV2MnNvZnRpbmcobmRldik7CisJc3RydWN0IHNvZnRpbmcgKmNhcmQgPSBwcml2LT5jYXJkOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXZhbCAmPSAweEZGOworCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYXJkLT5mdy5sb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CisJCW11dGV4X3VubG9jaygmY2FyZC0+ZncubG9jayk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXByaXYtPm91dHB1dCA9IHZhbDsKKwltdXRleF91bmxvY2soJmNhcmQtPmZ3LmxvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IERFVklDRV9BVFRSKGNoYW5uZWwsIFNfSVJVR08sIHNob3dfY2hhbm5lbCwgTlVMTCk7CitzdGF0aWMgY29uc3QgREVWSUNFX0FUVFIoY2hpcCwgU19JUlVHTywgc2hvd19jaGlwLCBOVUxMKTsKK3N0YXRpYyBjb25zdCBERVZJQ0VfQVRUUihvdXRwdXQsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X291dHB1dCwgc3RvcmVfb3V0cHV0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmNvbnN0IG5ldGRldl9zeXNmc19hdHRyc1tdID0geworCSZkZXZfYXR0cl9jaGFubmVsLmF0dHIsCisJJmRldl9hdHRyX2NoaXAuYXR0ciwKKwkmZGV2X2F0dHJfb3V0cHV0LmF0dHIsCisJTlVMTCwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBuZXRkZXZfc3lzZnNfZ3JvdXAgPSB7CisJLm5hbWUgPSBOVUxMLAorCS5hdHRycyA9IChzdHJ1Y3QgYXR0cmlidXRlICoqKW5ldGRldl9zeXNmc19hdHRycywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc29mdGluZ19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IHNvZnRpbmdfbmV0ZGV2X29wZW4sCisJLm5kb19zdG9wID0gc29mdGluZ19uZXRkZXZfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJPSBzb2Z0aW5nX25ldGRldl9zdGFydF94bWl0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjYW5fYml0dGltaW5nX2NvbnN0IHNvZnRpbmdfYnRyX2NvbnN0ID0geworCS50c2VnMV9taW4gPSAxLAorCS50c2VnMV9tYXggPSAxNiwKKwkudHNlZzJfbWluID0gMSwKKwkudHNlZzJfbWF4ID0gOCwKKwkuc2p3X21heCA9IDQsIC8qIG92ZXJydWxlZCAqLworCS5icnBfbWluID0gMSwKKwkuYnJwX21heCA9IDMyLCAvKiBvdmVycnVsZWQgKi8KKwkuYnJwX2luYyA9IDEsCit9OworCisKK3N0YXRpYyBfX2RldmluaXQgc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRpbmdfbmV0ZGV2X2NyZWF0ZShzdHJ1Y3Qgc29mdGluZyAqY2FyZCwKKwkJdWludDE2X3QgY2hpcF9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXY7CisKKwluZXRkZXYgPSBhbGxvY19jYW5kZXYoc2l6ZW9mKCpwcml2KSwgVFhfRUNIT19TS0JfTUFYKTsKKwlpZiAoIW5ldGRldikgeworCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgImFsbG9jX2NhbmRldiBmYWlsZWRcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJcHJpdi0+bmV0ZGV2ID0gbmV0ZGV2OworCXByaXYtPmNhcmQgPSBjYXJkOworCW1lbWNweSgmcHJpdi0+YnRyX2NvbnN0LCAmc29mdGluZ19idHJfY29uc3QsIHNpemVvZihwcml2LT5idHJfY29uc3QpKTsKKwlwcml2LT5idHJfY29uc3QuYnJwX21heCA9IGNhcmQtPnBkYXQtPm1heF9icnA7CisJcHJpdi0+YnRyX2NvbnN0LnNqd19tYXggPSBjYXJkLT5wZGF0LT5tYXhfc2p3OworCXByaXYtPmNhbi5iaXR0aW1pbmdfY29uc3QgPSAmcHJpdi0+YnRyX2NvbnN0OworCXByaXYtPmNhbi5jbG9jay5mcmVxID0gODAwMDAwMDsKKwlwcml2LT5jaGlwID0gY2hpcF9pZDsKKwlwcml2LT5vdXRwdXQgPSBzb2Z0aW5nX2RlZmF1bHRfb3V0cHV0KG5ldGRldik7CisJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmY2FyZC0+cGRldi0+ZGV2KTsKKworCW5ldGRldi0+ZmxhZ3MgfD0gSUZGX0VDSE87CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJnNvZnRpbmdfbmV0ZGV2X29wczsKKwlwcml2LT5jYW4uZG9fc2V0X21vZGUgPSBzb2Z0aW5nX2NhbmRldl9zZXRfbW9kZTsKKwlwcml2LT5jYW4uY3RybG1vZGVfc3VwcG9ydGVkID0gQ0FOX0NUUkxNT0RFXzNfU0FNUExFUzsKKworCXJldHVybiBuZXRkZXY7Cit9CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHNvZnRpbmdfbmV0ZGV2X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50IHJldDsKKworCW5ldGRldi0+c3lzZnNfZ3JvdXBzWzBdID0gJm5ldGRldl9zeXNmc19ncm91cDsKKwlyZXQgPSByZWdpc3Rlcl9jYW5kZXYobmV0ZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9hbGVydCgmbmV0ZGV2LT5kZXYsICJyZWdpc3RlciBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc29mdGluZ19uZXRkZXZfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXVucmVnaXN0ZXJfY2FuZGV2KG5ldGRldik7CisJZnJlZV9jYW5kZXYobmV0ZGV2KTsKK30KKworLyoKKyAqIHN5c2ZzIGZvciBQbGF0Zm9ybSBkZXZpY2UKKyAqLworI2RlZmluZSBERVZfQVRUUl9STyhuYW1lLCBtZW1iZXIpIFwKK3N0YXRpYyBzc2l6ZV90IHNob3dfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgXAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKSBcCit7IFwKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsgXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBjYXJkLT5tZW1iZXIpOyBcCit9IFwKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCAwNDQ0LCBzaG93XyMjbmFtZSwgTlVMTCkKKworI2RlZmluZSBERVZfQVRUUl9ST19TVFIobmFtZSwgbWVtYmVyKSBcCitzdGF0aWMgc3NpemVfdCBzaG93XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIFwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXAoreyBcCisJc3RydWN0IHNvZnRpbmcgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7IFwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgY2FyZC0+bWVtYmVyKTsgXAorfSBcCitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgMDQ0NCwgc2hvd18jI25hbWUsIE5VTEwpCisKK0RFVl9BVFRSX1JPKHNlcmlhbCwgaWQuc2VyaWFsKTsKK0RFVl9BVFRSX1JPX1NUUihmaXJtd2FyZSwgcGRhdC0+YXBwLmZ3KTsKK0RFVl9BVFRSX1JPKGZpcm13YXJlX3ZlcnNpb24sIGlkLmZ3X3ZlcnNpb24pOworREVWX0FUVFJfUk9fU1RSKGhhcmR3YXJlLCBwZGF0LT5uYW1lKTsKK0RFVl9BVFRSX1JPKGhhcmR3YXJlX3ZlcnNpb24sIGlkLmh3X3ZlcnNpb24pOworREVWX0FUVFJfUk8obGljZW5zZSwgaWQubGljZW5zZSk7CitERVZfQVRUUl9STyhmcmVxdWVuY3ksIGlkLmZyZXEpOworREVWX0FUVFJfUk8odHhwZW5kaW5nLCB0eC5wZW5kaW5nKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNvZnRpbmdfcGRldl9hdHRyc1tdID0geworCSZkZXZfYXR0cl9zZXJpYWwuYXR0ciwKKwkmZGV2X2F0dHJfZmlybXdhcmUuYXR0ciwKKwkmZGV2X2F0dHJfZmlybXdhcmVfdmVyc2lvbi5hdHRyLAorCSZkZXZfYXR0cl9oYXJkd2FyZS5hdHRyLAorCSZkZXZfYXR0cl9oYXJkd2FyZV92ZXJzaW9uLmF0dHIsCisJJmRldl9hdHRyX2xpY2Vuc2UuYXR0ciwKKwkmZGV2X2F0dHJfZnJlcXVlbmN5LmF0dHIsCisJJmRldl9hdHRyX3R4cGVuZGluZy5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzb2Z0aW5nX3BkZXZfZ3JvdXAgPSB7CisJLm5hbWUgPSBOVUxMLAorCS5hdHRycyA9IHNvZnRpbmdfcGRldl9hdHRycywKK307CisKKy8qCisgKiBwbGF0Zm9ybSBkcml2ZXIKKyAqLworc3RhdGljIF9fZGV2ZXhpdCBpbnQgc29mdGluZ19wZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzb2Z0aW5nICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGo7CisKKwkvKiBmaXJzdCwgZGlzYWJsZSBjYXJkKi8KKwlzb2Z0aW5nX2NhcmRfc2h1dGRvd24oY2FyZCk7CisKKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJaWYgKCFjYXJkLT5uZXRbal0pCisJCQljb250aW51ZTsKKwkJc29mdGluZ19uZXRkZXZfY2xlYW51cChjYXJkLT5uZXRbal0pOworCQljYXJkLT5uZXRbal0gPSBOVUxMOworCX0KKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmc29mdGluZ19wZGV2X2dyb3VwKTsKKworCWlvdW5tYXAoY2FyZC0+ZHByYW0pOworCWtmcmVlKGNhcmQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgX19kZXZpbml0IGludCBzb2Z0aW5nX3BkZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb25zdCBzdHJ1Y3Qgc29mdGluZ19wbGF0Zm9ybV9kYXRhICpwZGF0ID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHNvZnRpbmcgKmNhcmQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2OworCXN0cnVjdCByZXNvdXJjZSAqcHJlczsKKwlpbnQgcmV0OworCWludCBqOworCisJaWYgKCFwZGF0KSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChwZGF0LT5uYnVzID4gQVJSQVlfU0laRShjYXJkLT5uZXQpKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICIldSBuZXRzPz9cbiIsIHBkYXQtPm5idXMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljYXJkID0ga3phbGxvYyhzaXplb2YoKmNhcmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRU5PTUVNOworCWNhcmQtPnBkYXQgPSBwZGF0OworCWNhcmQtPnBkZXYgPSBwZGV2OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCW11dGV4X2luaXQoJmNhcmQtPmZ3LmxvY2spOworCXNwaW5fbG9ja19pbml0KCZjYXJkLT5zcGluKTsKKworCXJldCA9IC1FSU5WQUw7CisJcHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFwcmVzKQorCQlnb3RvIHBsYXRmb3JtX3Jlc291cmNlX2ZhaWxlZDs7CisJY2FyZC0+ZHByYW1fcGh5cyA9IHByZXMtPnN0YXJ0OworCWNhcmQtPmRwcmFtX3NpemUgPSBwcmVzLT5lbmQgLSBwcmVzLT5zdGFydCArIDE7CisJY2FyZC0+ZHByYW0gPSBpb3JlbWFwX25vY2FjaGUoY2FyZC0+ZHByYW1fcGh5cywgY2FyZC0+ZHByYW1fc2l6ZSk7CisJaWYgKCFjYXJkLT5kcHJhbSkgeworCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgImRwcmFtIGlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJZ290byBpb3JlbWFwX2ZhaWxlZDsKKwl9CisKKwlwcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAocHJlcykKKwkJY2FyZC0+aXJxLm5yID0gcHJlcy0+c3RhcnQ7CisKKwkvKiByZXNldCBjYXJkICovCisJcmV0ID0gc29mdGluZ19jYXJkX2Jvb3QoY2FyZCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2FsZXJ0KCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYm9vdFxuIik7CisJCWdvdG8gYm9vdF9mYWlsZWQ7CisJfQorCisJLyogb25seSBub3csIHRoZSBjaGlwJ3MgYXJlIGtub3duICovCisJY2FyZC0+aWQuZnJlcSA9IGNhcmQtPnBkYXQtPmZyZXE7CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmc29mdGluZ19wZGV2X2dyb3VwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgInN5c2ZzIGZhaWxlZFxuIik7CisJCWdvdG8gc3lzZnNfZmFpbGVkOworCX0KKworCXJldCA9IC1FTk9NRU07CisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCWNhcmQtPm5ldFtqXSA9IG5ldGRldiA9CisJCQlzb2Z0aW5nX25ldGRldl9jcmVhdGUoY2FyZCwgY2FyZC0+aWQuY2hpcFtqXSk7CisJCWlmICghbmV0ZGV2KSB7CisJCQlkZXZfYWxlcnQoJnBkZXYtPmRldiwgImZhaWxlZCB0byBtYWtlIGNhblslaV0iLCBqKTsKKwkJCWdvdG8gbmV0ZGV2X2ZhaWxlZDsKKwkJfQorCQlwcml2ID0gbmV0ZGV2X3ByaXYoY2FyZC0+bmV0W2pdKTsKKwkJcHJpdi0+aW5kZXggPSBqOworCQlyZXQgPSBzb2Z0aW5nX25ldGRldl9yZWdpc3RlcihuZXRkZXYpOworCQlpZiAocmV0KSB7CisJCQlmcmVlX2NhbmRldihuZXRkZXYpOworCQkJY2FyZC0+bmV0W2pdID0gTlVMTDsKKwkJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LAorCQkJCQkiZmFpbGVkIHRvIHJlZ2lzdGVyIGNhblslaV1cbiIsIGopOworCQkJZ290byBuZXRkZXZfZmFpbGVkOworCQl9CisJfQorCWRldl9pbmZvKCZjYXJkLT5wZGV2LT5kZXYsICIlcyByZWFkeS5cbiIsIGNhcmQtPnBkYXQtPm5hbWUpOworCXJldHVybiAwOworCituZXRkZXZfZmFpbGVkOgorCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGNhcmQtPm5ldCk7ICsraikgeworCQlpZiAoIWNhcmQtPm5ldFtqXSkKKwkJCWNvbnRpbnVlOworCQlzb2Z0aW5nX25ldGRldl9jbGVhbnVwKGNhcmQtPm5ldFtqXSk7CisJfQorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZzb2Z0aW5nX3BkZXZfZ3JvdXApOworc3lzZnNfZmFpbGVkOgorCXNvZnRpbmdfY2FyZF9zaHV0ZG93bihjYXJkKTsKK2Jvb3RfZmFpbGVkOgorCWlvdW5tYXAoY2FyZC0+ZHByYW0pOworaW9yZW1hcF9mYWlsZWQ6CitwbGF0Zm9ybV9yZXNvdXJjZV9mYWlsZWQ6CisJa2ZyZWUoY2FyZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc29mdGluZ19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAic29mdGluZyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gc29mdGluZ19wZGV2X3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzb2Z0aW5nX3BkZXZfcmVtb3ZlKSwKK307CisKK01PRFVMRV9BTElBUygicGxhdGZvcm06c29mdGluZyIpOworCitzdGF0aWMgaW50IF9faW5pdCBzb2Z0aW5nX3N0YXJ0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc29mdGluZ19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc29mdGluZ19zdG9wKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNvZnRpbmdfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc29mdGluZ19zdGFydCk7Cittb2R1bGVfZXhpdChzb2Z0aW5nX3N0b3ApOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNvZnRpbmcgRFBSQU0gQ0FOIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiS3VydCBWYW4gRGlqY2sgPGt1cnQudmFuLmRpamNrQGVpYS5iZT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfcGxhdGZvcm0uaCBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfcGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmJmNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19wbGF0Zm9ybS5oCkBAIC0wLDAgKzEsNDAgQEAKKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaWZuZGVmIF9TT0ZUSU5HX0RFVklDRV9IXworI2RlZmluZSBfU09GVElOR19ERVZJQ0VfSF8KKworLyogc29mdGluZyBmaXJtd2FyZSBkaXJlY3RvcnkgcHJlZml4ICovCisjZGVmaW5lIGZ3X2RpciAic29mdGluZy00LjYvIgorCitzdHJ1Y3Qgc29mdGluZ19wbGF0Zm9ybV9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgbWFuZjsKKwl1bnNpZ25lZCBpbnQgcHJvZDsKKwkvKgorCSAqIGdlbmVyYXRpb24KKwkgKiAxc3Qgd2l0aCBORUMgb3IgU0pBMTAwMAorCSAqIDhiaXQsIGV4Y2x1c2l2ZSBpbnRlcnJ1cHQsIC4uLgorCSAqIDJuZCBvbmx5IFNKQTEwMDAKKwkgKiAxNmJpdCwgc2hhcmVkIGludGVycnVwdAorCSAqLworCWludCBnZW5lcmF0aW9uOworCWludCBuYnVzOyAvKiAjIGJ1c3NlcyBvbiBkZXZpY2UgKi8KKwl1bnNpZ25lZCBpbnQgZnJlcTsgLyogb3BlcmF0aW5nIGZyZXF1ZW5jeSBpbiBIeiAqLworCXVuc2lnbmVkIGludCBtYXhfYnJwOworCXVuc2lnbmVkIGludCBtYXhfc2p3OworCXVuc2lnbmVkIGxvbmcgZHByYW1fc2l6ZTsKKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgb2ZmczsKKwkJdW5zaWduZWQgbG9uZyBhZGRyOworCQljb25zdCBjaGFyICpmdzsKKwl9IGJvb3QsIGxvYWQsIGFwcDsKKwkvKgorCSAqIHJlc2V0KCkgZnVuY3Rpb24KKwkgKiBicmluZyBwZGV2IGluIG9yIG91dCBvZiByZXNldCwgZGVwZW5kaW5nIG9uIHZhbHVlCisJICovCisJaW50ICgqcmVzZXQpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCB2YWx1ZSk7CisJaW50ICgqZW5hYmxlX2lycSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IHZhbHVlKTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY25pYy5jIGIvZHJpdmVycy9uZXQvY25pYy5jCmluZGV4IDI2M2EyOTQuLjdmZjE3MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NuaWMuYworKysgYi9kcml2ZXJzL25ldC9jbmljLmMKQEAgLTY5OSwxMyArNjk5LDEzIEBACiBzdGF0aWMgdm9pZCBjbmljX3NldHVwX3BhZ2VfdGJsKHN0cnVjdCBjbmljX2RldiAqZGV2LCBzdHJ1Y3QgY25pY19kbWEgKmRtYSkKIHsKIAlpbnQgaTsKLQl1MzIgKnBhZ2VfdGFibGUgPSBkbWEtPnBndGJsOworCV9fbGUzMiAqcGFnZV90YWJsZSA9IChfX2xlMzIgKikgZG1hLT5wZ3RibDsKIAogCWZvciAoaSA9IDA7IGkgPCBkbWEtPm51bV9wYWdlczsgaSsrKSB7CiAJCS8qIEVhY2ggZW50cnkgbmVlZHMgdG8gYmUgaW4gYmlnIGVuZGlhbiBmb3JtYXQuICovCi0JCSpwYWdlX3RhYmxlID0gKHUzMikgKCh1NjQpIGRtYS0+cGdfbWFwX2FycltpXSA+PiAzMik7CisJCSpwYWdlX3RhYmxlID0gY3B1X3RvX2xlMzIoKHU2NCkgZG1hLT5wZ19tYXBfYXJyW2ldID4+IDMyKTsKIAkJcGFnZV90YWJsZSsrOwotCQkqcGFnZV90YWJsZSA9ICh1MzIpIGRtYS0+cGdfbWFwX2FycltpXTsKKwkJKnBhZ2VfdGFibGUgPSBjcHVfdG9fbGUzMihkbWEtPnBnX21hcF9hcnJbaV0gJiAweGZmZmZmZmZmKTsKIAkJcGFnZV90YWJsZSsrOwogCX0KIH0KQEAgLTcxMywxMyArNzEzLDEzIEBACiBzdGF0aWMgdm9pZCBjbmljX3NldHVwX3BhZ2VfdGJsX2xlKHN0cnVjdCBjbmljX2RldiAqZGV2LCBzdHJ1Y3QgY25pY19kbWEgKmRtYSkKIHsKIAlpbnQgaTsKLQl1MzIgKnBhZ2VfdGFibGUgPSBkbWEtPnBndGJsOworCV9fbGUzMiAqcGFnZV90YWJsZSA9IChfX2xlMzIgKikgZG1hLT5wZ3RibDsKIAogCWZvciAoaSA9IDA7IGkgPCBkbWEtPm51bV9wYWdlczsgaSsrKSB7CiAJCS8qIEVhY2ggZW50cnkgbmVlZHMgdG8gYmUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQuICovCi0JCSpwYWdlX3RhYmxlID0gZG1hLT5wZ19tYXBfYXJyW2ldICYgMHhmZmZmZmZmZjsKKwkJKnBhZ2VfdGFibGUgPSBjcHVfdG9fbGUzMihkbWEtPnBnX21hcF9hcnJbaV0gJiAweGZmZmZmZmZmKTsKIAkJcGFnZV90YWJsZSsrOwotCQkqcGFnZV90YWJsZSA9ICh1MzIpICgodTY0KSBkbWEtPnBnX21hcF9hcnJbaV0gPj4gMzIpOworCQkqcGFnZV90YWJsZSA9IGNwdV90b19sZTMyKCh1NjQpIGRtYS0+cGdfbWFwX2FycltpXSA+PiAzMik7CiAJCXBhZ2VfdGFibGUrKzsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNF9tYWluLmMgYi9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNF9tYWluLmMKaW5kZXggMDU5YzFlZS4uZWMzNWQ0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0L2N4Z2I0X21haW4uYwpAQCAtMjcxMCw2ICsyNzEwLDggQEAKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBwaS0+YWRhcHRlcjsKIAorCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKIAlpZiAoIShhZGFwdGVyLT5mbGFncyAmIEZVTExfSU5JVF9ET05FKSkgewogCQllcnIgPSBjeGdiX3VwKGFkYXB0ZXIpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTM2NjEsNyArMzY2Myw2IEBACiAJCXBpLT54YWN0X2FkZHJfZmlsdCA9IC0xOwogCQlwaS0+cnhfb2ZmbG9hZCA9IFJYX0NTTzsKIAkJcGktPnBvcnRfaWQgPSBpOwotCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCQluZXRkZXYtPmlycSA9IHBkZXYtPmlycTsKIAogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBUU09fRkxBR1M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi9jeGdiNHZmX21haW4uYwppbmRleCA1NjE2NmFlLi42YWFkNjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMKQEAgLTIwNDAsNyArMjA0MCw3IEBACiB7CiAJaW50IGk7CiAKLQlCVUdfT04oYWRhcHRlci0+ZGVidWdmc19yb290ID09IE5VTEwpOworCUJVR19PTihJU19FUlJfT1JfTlVMTChhZGFwdGVyLT5kZWJ1Z2ZzX3Jvb3QpKTsKIAogCS8qCiAJICogRGVidWdmcyBzdXBwb3J0IGlzIGJlc3QgZWZmb3J0LgpAQCAtMjA2MSw3ICsyMDYxLDcgQEAKICAqLwogc3RhdGljIHZvaWQgY2xlYW51cF9kZWJ1Z2ZzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewotCUJVR19PTihhZGFwdGVyLT5kZWJ1Z2ZzX3Jvb3QgPT0gTlVMTCk7CisJQlVHX09OKElTX0VSUl9PUl9OVUxMKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCkpOwogCiAJLyoKIAkgKiBVbmxpa2Ugb3VyIHNpc3RlciByb3V0aW5lIGNsZWFudXBfcHJvYygpLCB3ZSBkb24ndCBuZWVkIHRvIHJlbW92ZQpAQCAtMjQ4OSwxNyArMjQ4OSw2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAogCS8qCi0JICogVmV0IG91ciBtb2R1bGUgcGFyYW1ldGVycy4KLQkgKi8KLQlpZiAobXNpICE9IE1TSV9NU0lYICYmIG1zaSAhPSBNU0lfTVNJKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImJhZCBtb2R1bGUgcGFyYW1ldGVyIG1zaT0lZDsgbXVzdCBiZSAlZCIKLQkJCSIgKE1TSS1YIG9yIE1TSSkgb3IgJWQgKE1TSSlcbiIsIG1zaSwgTVNJX01TSVgsCi0JCQlNU0lfTVNJKTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBlcnJfb3V0OwotCX0KLQotCS8qCiAJICogUHJpbnQgb3VyIGRyaXZlciBiYW5uZXIgdGhlIGZpcnN0IHRpbWUgd2UncmUgY2FsbGVkIHRvIGluaXRpYWxpemUgYQogCSAqIGRldmljZS4KIAkgKi8KQEAgLTI3MTEsMTEgKzI3MDAsMTEgQEAKIAkvKgogCSAqIFNldCB1cCBvdXIgZGVidWdmcyBlbnRyaWVzLgogCSAqLwotCWlmIChjeGdiNHZmX2RlYnVnZnNfcm9vdCkgeworCWlmICghSVNfRVJSX09SX05VTEwoY3hnYjR2Zl9kZWJ1Z2ZzX3Jvb3QpKSB7CiAJCWFkYXB0ZXItPmRlYnVnZnNfcm9vdCA9CiAJCQlkZWJ1Z2ZzX2NyZWF0ZV9kaXIocGNpX25hbWUocGRldiksCiAJCQkJCSAgIGN4Z2I0dmZfZGVidWdmc19yb290KTsKLQkJaWYgKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCA9PSBOVUxMKQorCQlpZiAoSVNfRVJSX09SX05VTEwoYWRhcHRlci0+ZGVidWdmc19yb290KSkKIAkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMiCiAJCQkJICIgZGlyZWN0b3J5Iik7CiAJCWVsc2UKQEAgLTI3NzAsNyArMjc1OSw3IEBACiAJICovCiAKIGVycl9mcmVlX2RlYnVnZnM6Ci0JaWYgKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCkgeworCWlmICghSVNfRVJSX09SX05VTEwoYWRhcHRlci0+ZGVidWdmc19yb290KSkgewogCQljbGVhbnVwX2RlYnVnZnMoYWRhcHRlcik7CiAJCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShhZGFwdGVyLT5kZWJ1Z2ZzX3Jvb3QpOwogCX0KQEAgLTI4MDIsNyArMjc5MSw2IEBACiBlcnJfZGlzYWJsZV9kZXZpY2U6CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCi1lcnJfb3V0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI4NDAsNyArMjgyOCw3IEBACiAJCS8qCiAJCSAqIFRlYXIgZG93biBvdXIgZGVidWdmcyBlbnRyaWVzLgogCQkgKi8KLQkJaWYgKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCkgeworCQlpZiAoIUlTX0VSUl9PUl9OVUxMKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCkpIHsKIAkJCWNsZWFudXBfZGVidWdmcyhhZGFwdGVyKTsKIAkJCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShhZGFwdGVyLT5kZWJ1Z2ZzX3Jvb3QpOwogCQl9CkBAIC0yODc0LDYgKzI4NjIsNDYgQEAKIH0KIAogLyoKKyAqICJTaHV0ZG93biIgcXVpZXNjZSB0aGUgZGV2aWNlLCBzdG9wcGluZyBJbmdyZXNzIFBhY2tldCBhbmQgSW50ZXJydXB0CisgKiBkZWxpdmVyeS4KKyAqLworc3RhdGljIHZvaWQgX19kZXZleGl0IGN4Z2I0dmZfcGNpX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOworCWludCBwaWR4OworCisJYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAoIWFkYXB0ZXIpCisJCXJldHVybjsKKworCS8qCisJICogRGlzYWJsZSBhbGwgVmlydHVhbCBJbnRlcmZhY2VzLiAgVGhpcyB3aWxsIHNodXQgZG93biB0aGUKKwkgKiBkZWxpdmVyeSBvZiBhbGwgaW5ncmVzcyBwYWNrZXRzIGludG8gdGhlIGNoaXAgZm9yIHRoZXNlCisJICogVmlydHVhbCBJbnRlcmZhY2VzLgorCSAqLworCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgcGlkeCkgeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCQlzdHJ1Y3QgcG9ydF9pbmZvICpwaTsKKworCQlpZiAoIXRlc3RfYml0KHBpZHgsICZhZGFwdGVyLT5yZWdpc3RlcmVkX2RldmljZV9tYXApKQorCQkJY29udGludWU7CisKKwkJbmV0ZGV2ID0gYWRhcHRlci0+cG9ydFtwaWR4XTsKKwkJaWYgKCFuZXRkZXYpCisJCQljb250aW51ZTsKKworCQlwaSA9IG5ldGRldl9wcml2KG5ldGRldik7CisJCXQ0dmZfZW5hYmxlX3ZpKGFkYXB0ZXIsIHBpLT52aWlkLCBmYWxzZSwgZmFsc2UpOworCX0KKworCS8qCisJICogRnJlZSB1cCBhbGwgUXVldWVzIHdoaWNoIHdpbGwgcHJldmVudCBmdXJ0aGVyIERNQSBhbmQKKwkgKiBJbnRlcnJ1cHRzIGFsbG93aW5nIHZhcmlvdXMgaW50ZXJuYWwgcGF0aHdheXMgdG8gZHJhaW4uCisJICovCisJdDR2Zl9mcmVlX3NnZV9yZXNvdXJjZXMoYWRhcHRlcik7Cit9CisKKy8qCiAgKiBQQ0kgRGV2aWNlIHJlZ2lzdHJhdGlvbiBkYXRhIHN0cnVjdHVyZXMuCiAgKi8KICNkZWZpbmUgQ0hfREVWSUNFKGRldmlkLCBpZHgpIFwKQEAgLTI5MDYsNiArMjkzNCw3IEBACiAJLmlkX3RhYmxlCT0gY3hnYjR2Zl9wY2lfdGJsLAogCS5wcm9iZQkJPSBjeGdiNHZmX3BjaV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGN4Z2I0dmZfcGNpX3JlbW92ZSksCisJLnNodXRkb3duCT0gX19kZXZleGl0X3AoY3hnYjR2Zl9wY2lfc2h1dGRvd24pLAogfTsKIAogLyoKQEAgLTI5MTUsMTQgKzI5NDQsMjUgQEAKIHsKIAlpbnQgcmV0OwogCisJLyoKKwkgKiBWZXQgb3VyIG1vZHVsZSBwYXJhbWV0ZXJzLgorCSAqLworCWlmIChtc2kgIT0gTVNJX01TSVggJiYgbXNpICE9IE1TSV9NU0kpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogYmFkIG1vZHVsZSBwYXJhbWV0ZXIgbXNpPSVkOyBtdXN0IGJlICVkIgorCQkgICAgICAgIiAoTVNJLVggb3IgTVNJKSBvciAlZCAoTVNJKVxuIiwKKwkJICAgICAgIG1zaSwgTVNJX01TSVgsIE1TSV9NU0kpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAkvKiBEZWJ1Z2ZzIHN1cHBvcnQgaXMgb3B0aW9uYWwsIGp1c3Qgd2FybiBpZiB0aGlzIGZhaWxzICovCiAJY3hnYjR2Zl9kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoS0JVSUxEX01PRE5BTUUsIE5VTEwpOwotCWlmICghY3hnYjR2Zl9kZWJ1Z2ZzX3Jvb3QpCisJaWYgKElTX0VSUl9PUl9OVUxMKGN4Z2I0dmZfZGVidWdmc19yb290KSkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBLQlVJTERfTU9ETkFNRSAiOiBjb3VsZCBub3QgY3JlYXRlIgogCQkgICAgICAgIiBkZWJ1Z2ZzIGVudHJ5LCBjb250aW51aW5nXG4iKTsKIAogCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmN4Z2I0dmZfZHJpdmVyKTsKLQlpZiAocmV0IDwgMCkKKwlpZiAocmV0IDwgMCAmJiAhSVNfRVJSX09SX05VTEwoY3hnYjR2Zl9kZWJ1Z2ZzX3Jvb3QpKQogCQlkZWJ1Z2ZzX3JlbW92ZShjeGdiNHZmX2RlYnVnZnNfcm9vdCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0dmYvdDR2Zl9ody5jIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi90NHZmX2h3LmMKaW5kZXggMGY1MWM4MC4uMTkyZGIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjR2Zi90NHZmX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi90NHZmX2h3LmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCWRlbGF5X2lkeCA9IDA7CiAJbXMgPSBkZWxheVswXTsKIAotCWZvciAoaSA9IDA7IGkgPCA1MDA7IGkgKz0gbXMpIHsKKwlmb3IgKGkgPSAwOyBpIDwgRldfQ01EX01BWF9USU1FT1VUOyBpICs9IG1zKSB7CiAJCWlmIChzbGVlcF9vaykgewogCQkJbXMgPSBkZWxheVtkZWxheV9pZHhdOwogCQkJaWYgKGRlbGF5X2lkeCA8IEFSUkFZX1NJWkUoZGVsYXkpIC0gMSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlcGNhLmMgYi9kcml2ZXJzL25ldC9kZXBjYS5jCmluZGV4IDFiNDhiNjguLjhiMDA4NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlcGNhLmMKKysrIGIvZHJpdmVycy9uZXQvZGVwY2EuYwpAQCAtMTA5NCw3ICsxMDk0LDcgQEAKIAkJCQl9CiAJCQl9CiAJCQkvKiBDaGFuZ2UgYnVmZmVyIG93bmVyc2hpcCBmb3IgdGhpcyBsYXN0IGZyYW1lLCBiYWNrIHRvIHRoZSBhZGFwdGVyICovCi0JCQlmb3IgKDsgbHAtPnJ4X29sZCAhPSBlbnRyeTsgbHAtPnJ4X29sZCA9ICgrK2xwLT5yeF9vbGQpICYgbHAtPnJ4UmluZ01hc2spIHsKKwkJCWZvciAoOyBscC0+cnhfb2xkICE9IGVudHJ5OyBscC0+cnhfb2xkID0gKGxwLT5yeF9vbGQgKyAxKSAmIGxwLT5yeFJpbmdNYXNrKSB7CiAJCQkJd3JpdGVsKHJlYWRsKCZscC0+cnhfcmluZ1tscC0+cnhfb2xkXS5iYXNlKSB8IFJfT1dOLCAmbHAtPnJ4X3JpbmdbbHAtPnJ4X29sZF0uYmFzZSk7CiAJCQl9CiAJCQl3cml0ZWwocmVhZGwoJmxwLT5yeF9yaW5nW2VudHJ5XS5iYXNlKSB8IFJfT1dOLCAmbHAtPnJ4X3JpbmdbZW50cnldLmJhc2UpOwpAQCAtMTEwMyw3ICsxMTAzLDcgQEAKIAkJLyoKIAkJICAgKiogVXBkYXRlIGVudHJ5IGluZm9ybWF0aW9uCiAJCSAqLwotCQlscC0+cnhfbmV3ID0gKCsrbHAtPnJ4X25ldykgJiBscC0+cnhSaW5nTWFzazsKKwkJbHAtPnJ4X25ldyA9IChscC0+cnhfbmV3ICsgMSkgJiBscC0+cnhSaW5nTWFzazsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTExNDgsNyArMTE0OCw3IEBACiAJCX0KIAogCQkvKiBVcGRhdGUgYWxsIHRoZSBwb2ludGVycyAqLwotCQlscC0+dHhfb2xkID0gKCsrbHAtPnR4X29sZCkgJiBscC0+dHhSaW5nTWFzazsKKwkJbHAtPnR4X29sZCA9IChscC0+dHhfb2xkICsgMSkgJiBscC0+dHhSaW5nTWFzazsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RsMmsuYyBiL2RyaXZlcnMvbmV0L2RsMmsuYwppbmRleCBlMWE4MjE2Li5jMDVkYjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbDJrLmMKKysrIGIvZHJpdmVycy9uZXQvZGwyay5jCkBAIC0xNzUzLDggKzE3NTMsNiBAQAogCiAJLyogRnJlZSBhbGwgdGhlIHNrYnVmZnMgaW4gdGhlIHF1ZXVlLiAqLwogCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykgewotCQlucC0+cnhfcmluZ1tpXS5zdGF0dXMgPSAwOwotCQlucC0+cnhfcmluZ1tpXS5mcmFnaW5mbyA9IDA7CiAJCXNrYiA9IG5wLT5yeF9za2J1ZmZbaV07CiAJCWlmIChza2IpIHsKIAkJCXBjaV91bm1hcF9zaW5nbGUobnAtPnBkZXYsCkBAIC0xNzYzLDYgKzE3NjEsOCBAQAogCQkJZGV2X2tmcmVlX3NrYiAoc2tiKTsKIAkJCW5wLT5yeF9za2J1ZmZbaV0gPSBOVUxMOwogCQl9CisJCW5wLT5yeF9yaW5nW2ldLnN0YXR1cyA9IDA7CisJCW5wLT5yeF9yaW5nW2ldLmZyYWdpbmZvID0gMDsKIAl9CiAJZm9yIChpID0gMDsgaSA8IFRYX1JJTkdfU0laRTsgaSsrKSB7CiAJCXNrYiA9IG5wLT50eF9za2J1ZmZbaV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbTkwMDAuYyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCmluZGV4IDJkNGM0ZmMuLjQ2MWRkNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCkBAIC04MDIsMTAgKzgwMiw3IEBACiAJLyogQ2hlY2tzdW0gbW9kZSAqLwogCWRtOTAwMF9zZXRfcnhfY3N1bV91bmxvY2tlZChkZXYsIGRiLT5yeF9jc3VtKTsKIAotCS8qIEdQSU8wIG9uIHByZS1hY3RpdmF0ZSBQSFkgKi8KLQlpb3coZGIsIERNOTAwMF9HUFIsIDApOwkvKiBSRUdfMUYgYml0MCBhY3RpdmF0ZSBwaHl4Y2VyICovCiAJaW93KGRiLCBETTkwMDBfR1BDUiwgR1BDUl9HRVBfQ05UTCk7CS8qIExldCBHUElPMCBvdXRwdXQgKi8KLQlpb3coZGIsIERNOTAwMF9HUFIsIDApOwkvKiBFbmFibGUgUEhZICovCiAKIAluY3IgPSAoZGItPmZsYWdzICYgRE05MDAwX1BMQVRGX0VYVF9QSFkpID8gTkNSX0VYVF9QSFkgOiAwOwogCkBAIC04NTIsOCArODQ5LDggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogU2F2ZSBwcmV2aW91cyByZWdpc3RlciBhZGRyZXNzICovCi0JcmVnX3NhdmUgPSByZWFkYihkYi0+aW9fYWRkcik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRiLT5sb2NrLCBmbGFncyk7CisJcmVnX3NhdmUgPSByZWFkYihkYi0+aW9fYWRkcik7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJZG05MDAwX3Jlc2V0KGRiKTsKQEAgLTExOTQsNiArMTE5MSwxMCBAQAogCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgZG05MDAwX2ludGVycnVwdCwgaXJxZmxhZ3MsIGRldi0+bmFtZSwgZGV2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKKwkvKiBHUElPMCBvbiBwcmUtYWN0aXZhdGUgUEhZLCBSZWcgMUYgaXMgbm90IHNldCBieSByZXNldCAqLworCWlvdyhkYiwgRE05MDAwX0dQUiwgMCk7CS8qIFJFR18xRiBiaXQwIGFjdGl2YXRlIHBoeXhjZXIgKi8KKwltZGVsYXkoMSk7IC8qIGRlbGF5IG5lZWRzIGJ5IERNOTAwMEIgKi8KKwogCS8qIEluaXRpYWxpemUgRE05MDAwIGJvYXJkICovCiAJZG05MDAwX3Jlc2V0KGRiKTsKIAlkbTkwMDBfaW5pdF9kbTkwMDAoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCmluZGV4IGFlZDIyM2IuLjc1MDFkOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYwpAQCAtMTI0LDYgKzEyNCw3IEBACiAJY2FzZSBNODhFMTAwMF9JX1BIWV9JRDoKIAljYXNlIE04OEUxMDExX0lfUEhZX0lEOgogCWNhc2UgTTg4RTExMTFfSV9QSFlfSUQ6CisJY2FzZSBNODhFMTExOF9FX1BIWV9JRDoKIAkJaHctPnBoeV90eXBlID0gZTEwMDBfcGh5X204ODsKIAkJYnJlYWs7CiAJY2FzZSBJR1AwMUUxMDAwX0lfUEhZX0lEOgpAQCAtMzIyMiw3ICszMjIzLDggQEAKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF9jZTQxMDA6CiAJCWlmICgoaHctPnBoeV9pZCA9PSBSVEw4MjExQl9QSFlfSUQpIHx8Ci0JCSAgICAoaHctPnBoeV9pZCA9PSBSVEw4MjAxTl9QSFlfSUQpKQorCQkgICAgKGh3LT5waHlfaWQgPT0gUlRMODIwMU5fUEhZX0lEKSB8fAorCQkgICAgKGh3LT5waHlfaWQgPT0gTTg4RTExMThfRV9QSFlfSUQpKQogCQkJbWF0Y2ggPSB0cnVlOwogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTQxOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKaW5kZXggMTk2ZWVkYS4uYzcwYjIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCkBAIC0yOTE3LDYgKzI5MTcsNyBAQAogI2RlZmluZSBNODhFMTAwMF8xNF9QSFlfSUQgTTg4RTEwMDBfRV9QSFlfSUQKICNkZWZpbmUgTTg4RTEwMTFfSV9SRVZfNCAgIDB4MDQKICNkZWZpbmUgTTg4RTExMTFfSV9QSFlfSUQgIDB4MDE0MTBDQzAKKyNkZWZpbmUgTTg4RTExMThfRV9QSFlfSUQgIDB4MDE0MTBFNDAKICNkZWZpbmUgTDFMWFQ5NzFBX1BIWV9JRCAgIDB4MDAxMzc4RTAKIAogI2RlZmluZSBSVEw4MjExQl9QSFlfSUQgICAgMHgwMDFDQzkxMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IDFjMThmMjYuLjNmYTExMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTkzNyw2ICs5MzcsOSBAQAogCXUxNiBwaHlfc3RhdHVzLCBwaHlfMTAwMHRfc3RhdHVzLCBwaHlfZXh0X3N0YXR1czsKIAl1MTYgcGNpX3N0YXR1czsKIAorCWlmICh0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKwogCWUxZV9ycGh5KGh3LCBQSFlfU1RBVFVTLCAmcGh5X3N0YXR1cyk7CiAJZTFlX3JwaHkoaHcsIFBIWV8xMDAwVF9TVEFUVVMsICZwaHlfMTAwMHRfc3RhdHVzKTsKIAllMWVfcnBoeShodywgUEhZX0VYVF9TVEFUVVMsICZwaHlfZXh0X3N0YXR1cyk7CkBAIC0xNTA2LDYgKzE1MDksOSBAQAogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCiAJCQkJCXN0cnVjdCBlMTAwMF9hZGFwdGVyLCBkb3duc2hpZnRfdGFzayk7CiAKKwlpZiAodGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKIAllMTAwMGVfZ2lnX2Rvd25zaGlmdF93b3JrYXJvdW5kX2ljaDhsYW4oJmFkYXB0ZXItPmh3KTsKIH0KIApAQCAtMzMzOCw2ICszMzQ0LDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGUxMDAwZV9mbHVzaF9kZXNjcmlwdG9ycyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MyICYgRkxBRzJfRE1BX0JVUlNUKSkKKwkJcmV0dXJuOworCisJLyogZmx1c2ggcGVuZGluZyBkZXNjcmlwdG9yIHdyaXRlYmFja3MgdG8gbWVtb3J5ICovCisJZXczMihUSURWLCBhZGFwdGVyLT50eF9pbnRfZGVsYXkgfCBFMTAwMF9USURWX0ZQRCk7CisJZXczMihSRFRSLCBhZGFwdGVyLT5yeF9pbnRfZGVsYXkgfCBFMTAwMF9SRFRSX0ZQRCk7CisKKwkvKiBleGVjdXRlIHRoZSB3cml0ZXMgaW1tZWRpYXRlbHkgKi8KKwllMWVfZmx1c2goKTsKK30KKwogdm9pZCBlMTAwMGVfZG93bihzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwpAQCAtMzM3Nyw2ICszMzk4LDkgQEAKIAogCWlmICghcGNpX2NoYW5uZWxfb2ZmbGluZShhZGFwdGVyLT5wZGV2KSkKIAkJZTEwMDBlX3Jlc2V0KGFkYXB0ZXIpOworCisJZTEwMDBlX2ZsdXNoX2Rlc2NyaXB0b3JzKGFkYXB0ZXIpOworCiAJZTEwMDBfY2xlYW5fdHhfcmluZyhhZGFwdGVyKTsKIAllMTAwMF9jbGVhbl9yeF9yaW5nKGFkYXB0ZXIpOwogCkBAIC0zNzY1LDYgKzM3ODksMTAgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAogCQkJCQlzdHJ1Y3QgZTEwMDBfYWRhcHRlciwgdXBkYXRlX3BoeV90YXNrKTsKKworCWlmICh0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKwogCWUxMDAwX2dldF9waHlfaW5mbygmYWRhcHRlci0+aHcpOwogfQogCkBAIC0zNzc1LDYgKzM4MDMsMTAgQEAKIHN0YXRpYyB2b2lkIGUxMDAwX3VwZGF0ZV9waHlfaW5mbyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKikgZGF0YTsKKworCWlmICh0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKwogCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnVwZGF0ZV9waHlfdGFzayk7CiB9CiAKQEAgLTQxNDksNiArNDE4MSw5IEBACiAJdTMyIGxpbmssIHRjdGw7CiAJaW50IHR4X3BlbmRpbmcgPSAwOwogCisJaWYgKHRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuOworCiAJbGluayA9IGUxMDAwZV9oYXNfbGluayhhZGFwdGVyKTsKIAlpZiAoKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgJiYgbGluaykgewogCQkvKiBDYW5jZWwgc2NoZWR1bGVkIHN1c3BlbmQgcmVxdWVzdHMuICovCkBAIC00MzA5LDcgKzQzNDQsNiBAQAogCQkJICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguCiAJCQkgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLgogCQkJICovCi0JCQlhZGFwdGVyLT50eF90aW1lb3V0X2NvdW50Kys7CiAJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKIAkJCS8qIHJldHVybiBpbW1lZGlhdGVseSBzaW5jZSByZXNldCBpcyBpbW1pbmVudCAqLwogCQkJcmV0dXJuOwpAQCAtNDMzOCwxOSArNDM3MiwxMiBAQAogCWVsc2UKIAkJZXczMihJQ1MsIEUxMDAwX0lDU19SWERNVDApOwogCisJLyogZmx1c2ggcGVuZGluZyBkZXNjcmlwdG9ycyB0byBtZW1vcnkgYmVmb3JlIGRldGVjdGluZyBUeCBoYW5nICovCisJZTEwMDBlX2ZsdXNoX2Rlc2NyaXB0b3JzKGFkYXB0ZXIpOworCiAJLyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciBldmVyeSB3YXRjaGRvZyBwZXJpb2QgKi8KIAlhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZyA9IDE7CiAKLQkvKiBmbHVzaCBwYXJ0aWFsIGRlc2NyaXB0b3JzIHRvIG1lbW9yeSBiZWZvcmUgZGV0ZWN0aW5nIFR4IGhhbmcgKi8KLQlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgRkxBRzJfRE1BX0JVUlNUKSB7Ci0JCWV3MzIoVElEViwgYWRhcHRlci0+dHhfaW50X2RlbGF5IHwgRTEwMDBfVElEVl9GUEQpOwotCQlldzMyKFJEVFIsIGFkYXB0ZXItPnJ4X2ludF9kZWxheSB8IEUxMDAwX1JEVFJfRlBEKTsKLQkJLyoKLQkJICogbm8gbmVlZCB0byBmbHVzaCB0aGUgd3JpdGVzIGJlY2F1c2UgdGhlIHRpbWVvdXQgY29kZSBkb2VzCi0JCSAqIGFuIGVyMzIgZmlyc3QgdGhpbmcKLQkJICovCi0JfQotCiAJLyoKIAkgKiBXaXRoIDgyNTcxIGNvbnRyb2xsZXJzLCBMQUEgbWF5IGJlIG92ZXJ3cml0dGVuIGR1ZSB0byBjb250cm9sbGVyCiAJICogcmVzZXQgZnJvbSB0aGUgb3RoZXIgcG9ydC4gU2V0IHRoZSBhcHByb3ByaWF0ZSBMQUEgaW4gUkFSWzBdCkBAIC00ODg4LDYgKzQ5MTUsMTAgQEAKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcjsKIAlhZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlMTAwMF9hZGFwdGVyLCByZXNldF90YXNrKTsKIAorCS8qIGRvbid0IHJ1biB0aGUgdGFzayBpZiBhbHJlYWR5IGRvd24gKi8KKwlpZiAodGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKIAlpZiAoISgoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX1JYX05FRURTX1JFU1RBUlQpICYmCiAJICAgICAgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19SWF9SRVNUQVJUX05PVykpKSB7CiAJCWUxMDAwZV9kdW1wKGFkYXB0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5jMjhqNjAuYyBiL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMKaW5kZXggMTEyYzVhYS4uOTA3YjA1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5jMjhqNjAuYworKysgYi9kcml2ZXJzL25ldC9lbmMyOGo2MC5jCkBAIC04MTIsNyArODEyLDcgQEAKIAlpZiAobmV0aWZfbXNnX2h3KHByaXYpKQogCQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiOiByZWFkaW5nIFRTViBhdCBhZGRyOjB4JTA0eFxuIiwKIAkJCSBlbmRwdHIgKyAxKTsKLQllbmMyOGo2MF9tZW1fcmVhZChwcml2LCBlbmRwdHIgKyAxLCBzaXplb2YodHN2KSwgdHN2KTsKKwllbmMyOGo2MF9tZW1fcmVhZChwcml2LCBlbmRwdHIgKyAxLCBUU1ZfU0laRSwgdHN2KTsKIH0KIAogc3RhdGljIHZvaWQgZW5jMjhqNjBfZHVtcF90c3Yoc3RydWN0IGVuYzI4ajYwX25ldCAqcHJpdiwgY29uc3QgY2hhciAqbXNnLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwppbmRleCBhZjA5Mjk2Li45YzBiMWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYworKysgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwpAQCAtNTY0NSw2ICs1NjQ1LDggQEAKIAkJZ290byBvdXRfZXJyb3I7CiAJfQogCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwogCWRldl9pbmZvKCZwY2lfZGV2LT5kZXYsICJpZm5hbWUgJXMsIFBIWSBPVUkgMHgleCBAICVkLCBhZGRyICVwTVxuIiwKIAkJIGRldi0+bmFtZSwgbnAtPnBoeV9vdWksIG5wLT5waHlhZGRyLCBkZXYtPmRldl9hZGRyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCmluZGV4IDExOWFhMjAuLjVlZDhmOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTE5MjAsNyArMTkyMCw3IEBACiAJCWlmIChlcnIpIHsKIAkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCiAJCQkJZnJlZV9ncnBfaXJxcygmcHJpdi0+Z2ZhcmdycFtqXSk7Ci0JCQkJZ290byBpcnFfZmFpbDsKKwkJCWdvdG8gaXJxX2ZhaWw7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc2hfaXJkYS5jIGIvZHJpdmVycy9uZXQvaXJkYS9zaF9pcmRhLmMKaW5kZXggOWUzZjRmNS4uNDQ4OGJkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zaF9pcmRhLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zaF9pcmRhLmMKQEAgLTYzNSw3ICs2MzUsNyBAQAogCiAJcmV0ID0gc2hfaXJkYV9zZXRfYmF1ZHJhdGUoc2VsZiwgc3BlZWQpOwogCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCQlnb3RvIHNoX2lyZGFfaGFyZF94bWl0X2VuZDsKIAogCXNlbGYtPnR4X2J1ZmYubGVuID0gMDsKIAlpZiAoc2tiLT5sZW4pIHsKQEAgLTY1MiwxMSArNjUyLDIxIEBACiAKIAkJc2hfaXJkYV93cml0ZShzZWxmLCBJUlRGTFIsIHNlbGYtPnR4X2J1ZmYubGVuKTsKIAkJc2hfaXJkYV93cml0ZShzZWxmLCBJUlRDVFIsIEFSTU9EIHwgVEUpOwotCX0KKwl9IGVsc2UKKwkJZ290byBzaF9pcmRhX2hhcmRfeG1pdF9lbmQ7CiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKIAlyZXR1cm4gMDsKKworc2hfaXJkYV9oYXJkX3htaXRfZW5kOgorCXNoX2lyZGFfc2V0X2JhdWRyYXRlKHNlbGYsIDk2MDApOworCW5ldGlmX3dha2VfcXVldWUoc2VsZi0+bmRldik7CisJc2hfaXJkYV9yY3ZfY3RybChzZWxmLCAxKTsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gcmV0OworCiB9CiAKIHN0YXRpYyBpbnQgc2hfaXJkYV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGlmcmVxICppZnJlcSwgaW50IGNtZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKaW5kZXggZDVlZGUyZC4uZWJiZGE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKQEAgLTEzNzAsNiArMTM3MCw5IEBACiAJCWh3X2RiZyhodywgIiBOZXcgTUFDIEFkZHIgPSVwTVxuIiwgaHctPm1hYy5hZGRyKTsKIAogCQlody0+bWFjLm9wcy5zZXRfcmFyKGh3LCAwLCBody0+bWFjLmFkZHIsIDAsIElYR0JFX1JBSF9BVik7CisKKwkJLyogIGNsZWFyIFZNRHEgcG9vbC9xdWV1ZSBzZWxlY3Rpb24gZm9yIFJBUiAwICovCisJCWh3LT5tYWMub3BzLmNsZWFyX3ZtZHEoaHcsIDAsIElYR0JFX0NMRUFSX1ZNRFFfQUxMKTsKIAl9CiAJaHctPmFkZHJfY3RybC5vdmVyZmxvd19wcm9taXNjID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5jCmluZGV4IDYzNDJkNDguLmM1NGE4ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMKQEAgLTE1OSwxMyArMTU5LDEzIEBACiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAl1bnNpZ25lZCBpbnQgaSwgaiwgZG1hY291bnQ7CiAJdW5zaWduZWQgaW50IGxlbjsKLQlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGJ1ZmZsZW4gPSA0MDk2OworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnVmZmxlbiA9IElYR0JFX0ZDQlVGRl9NSU47CiAJdW5zaWduZWQgaW50IGZpcnN0b2ZmID0gMDsKIAl1bnNpZ25lZCBpbnQgbGFzdHNpemU7CiAJdW5zaWduZWQgaW50IHRoaXNvZmYgPSAwOwogCXVuc2lnbmVkIGludCB0aGlzbGVuID0gMDsKIAl1MzIgZmNidWZmLCBmY2RtYXJ3LCBmY2ZsdHJ3OwotCWRtYV9hZGRyX3QgYWRkcjsKKwlkbWFfYWRkcl90IGFkZHIgPSAwOwogCiAJaWYgKCFuZXRkZXYgfHwgIXNnbCkKIAkJcmV0dXJuIDA7CkBAIC0yNTQsNiArMjU0LDI0IEBACiAJLyogb25seSB0aGUgbGFzdCBidWZmZXIgbWF5IGhhdmUgbm9uLWZ1bGwgYnVmZmxlbiAqLwogCWxhc3RzaXplID0gdGhpc29mZiArIHRoaXNsZW47CiAKKwkvKgorCSAqIGxhc3RzaXplIGNhbiBub3QgYmUgYnVmZmVyIGxlbi4KKwkgKiBJZiBpdCBpcyB0aGVuIGFkZGluZyBhbm90aGVyIGJ1ZmZlciB3aXRoIGxhc3RzaXplID0gMS4KKwkgKi8KKwlpZiAobGFzdHNpemUgPT0gYnVmZmxlbikgeworCQlpZiAoaiA+PSBJWEdCRV9CVUZGQ05UX01BWCkgeworCQkJZV9lcnIoZHJ2LCAieGlkPSV4OiVkLCVkLCVkOmFkZHI9JWxseCAiCisJCQkJIm5vdCBlbm91Z2ggdXNlciBidWZmZXJzLiBXZSBuZWVkIGFuIGV4dHJhICIKKwkJCQkiYnVmZmVyIGJlY2F1c2UgbGFzdHNpemUgaXMgYnVmZmxlbi5cbiIsCisJCQkJeGlkLCBpLCBqLCBkbWFjb3VudCwgKHU2NClhZGRyKTsKKwkJCWdvdG8gb3V0X25vZGRwX2ZyZWU7CisJCX0KKworCQlkZHAtPnVkbFtqXSA9ICh1NjQpKGZjb2UtPmV4dHJhX2RkcF9idWZmZXJfZG1hKTsKKwkJaisrOworCQlsYXN0c2l6ZSA9IDE7CisJfQorCiAJZmNidWZmID0gKElYR0JFX0ZDQlVGRl80S0IgPDwgSVhHQkVfRkNCVUZGX0JVRkZTSVpFX1NISUZUKTsKIAlmY2J1ZmYgfD0gKChqICYgMHhmZikgPDwgSVhHQkVfRkNCVUZGX0JVRkZDTlRfU0hJRlQpOwogCWZjYnVmZiB8PSAoZmlyc3RvZmYgPDwgSVhHQkVfRkNCVUZGX09GRlNFVF9TSElGVCk7CkBAIC01MzIsNiArNTUwLDI0IEBACiAJCQllX2VycihkcnYsICJmYWlsZWQgdG8gYWxsb2NhdGVkIEZDb0UgRERQIHBvb2xcbiIpOwogCiAJCXNwaW5fbG9ja19pbml0KCZmY29lLT5sb2NrKTsKKworCQkvKiBFeHRyYSBidWZmZXIgdG8gYmUgc2hhcmVkIGJ5IGFsbCBERFBzIGZvciBIVyB3b3JrIGFyb3VuZCAqLworCQlmY29lLT5leHRyYV9kZHBfYnVmZmVyID0ga21hbGxvYyhJWEdCRV9GQ0JVRkZfTUlOLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGZjb2UtPmV4dHJhX2RkcF9idWZmZXIgPT0gTlVMTCkgeworCQkJZV9lcnIoZHJ2LCAiZmFpbGVkIHRvIGFsbG9jYXRlZCBleHRyYSBERFAgYnVmZmVyXG4iKTsKKwkJCWdvdG8gb3V0X2V4dHJhX2RkcF9idWZmZXJfYWxsb2M7CisJCX0KKworCQlmY29lLT5leHRyYV9kZHBfYnVmZmVyX2RtYSA9CisJCQlkbWFfbWFwX3NpbmdsZSgmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCSAgICAgICBmY29lLT5leHRyYV9kZHBfYnVmZmVyLAorCQkJCSAgICAgICBJWEdCRV9GQ0JVRkZfTUlOLAorCQkJCSAgICAgICBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkgICAgICBmY29lLT5leHRyYV9kZHBfYnVmZmVyX2RtYSkpIHsKKwkJCWVfZXJyKGRydiwgImZhaWxlZCB0byBtYXAgZXh0cmEgRERQIGJ1ZmZlclxuIik7CisJCQlnb3RvIG91dF9leHRyYV9kZHBfYnVmZmVyX2RtYTsKKwkJfQogCX0KIAogCS8qIEVuYWJsZSBMMiBldGggdHlwZSBmaWx0ZXIgZm9yIEZDb0UgKi8KQEAgLTU4MSw2ICs2MTcsMTQgQEAKIAkJfQogCX0KICNlbmRpZgorCisJcmV0dXJuOworCitvdXRfZXh0cmFfZGRwX2J1ZmZlcl9kbWE6CisJa2ZyZWUoZmNvZS0+ZXh0cmFfZGRwX2J1ZmZlcik7CitvdXRfZXh0cmFfZGRwX2J1ZmZlcl9hbGxvYzoKKwlwY2lfcG9vbF9kZXN0cm95KGZjb2UtPnBvb2wpOworCWZjb2UtPnBvb2wgPSBOVUxMOwogfQogCiAvKioKQEAgLTYwMCw2ICs2NDQsMTEgQEAKIAlpZiAoZmNvZS0+cG9vbCkgewogCQlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfRkNPRV9ERFBfTUFYOyBpKyspCiAJCQlpeGdiZV9mY29lX2RkcF9wdXQoYWRhcHRlci0+bmV0ZGV2LCBpKTsKKwkJZG1hX3VubWFwX3NpbmdsZSgmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCSBmY29lLT5leHRyYV9kZHBfYnVmZmVyX2RtYSwKKwkJCQkgSVhHQkVfRkNCVUZGX01JTiwKKwkJCQkgRE1BX0ZST01fREVWSUNFKTsKKwkJa2ZyZWUoZmNvZS0+ZXh0cmFfZGRwX2J1ZmZlcik7CiAJCXBjaV9wb29sX2Rlc3Ryb3koZmNvZS0+cG9vbCk7CiAJCWZjb2UtPnBvb2wgPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuaAppbmRleCA0YmMyYzU1Li42NWNjOGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5oCkBAIC03MCw2ICs3MCw4IEBACiAJc3BpbmxvY2tfdCBsb2NrOwogCXN0cnVjdCBwY2lfcG9vbCAqcG9vbDsKIAlzdHJ1Y3QgaXhnYmVfZmNvZV9kZHAgZGRwW0lYR0JFX0ZDT0VfRERQX01BWF07CisJdW5zaWduZWQgY2hhciAqZXh0cmFfZGRwX2J1ZmZlcjsKKwlkbWFfYWRkcl90IGV4dHJhX2RkcF9idWZmZXJfZG1hOwogfTsKIAogI2VuZGlmIC8qIF9JWEdCRV9GQ09FX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwppbmRleCA2MDIwNzhiLi4zMGY5Y2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCkBAIC01Miw3ICs1Miw3IEBACiBzdGF0aWMgY29uc3QgY2hhciBpeGdiZV9kcml2ZXJfc3RyaW5nW10gPQogCQkJICAgICAgIkludGVsKFIpIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTmV0d29yayBEcml2ZXIiOwogCi0jZGVmaW5lIERSVl9WRVJTSU9OICIzLjAuMTItazIiCisjZGVmaW5lIERSVl9WRVJTSU9OICIzLjIuOS1rMiIKIGNvbnN0IGNoYXIgaXhnYmVfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwogc3RhdGljIGNoYXIgaXhnYmVfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAxOTk5LTIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIjsKIApAQCAtMzE3Niw5ICszMTc2LDE2IEBACiAJdTMyIG1oYWRkLCBobHJlZzA7CiAKIAkvKiBEZWNpZGUgd2hldGhlciB0byB1c2UgcGFja2V0IHNwbGl0IG1vZGUgb3Igbm90ICovCisJLyogT24gYnkgZGVmYXVsdCAqLworCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRDsKKwogCS8qIERvIG5vdCB1c2UgcGFja2V0IHNwbGl0IGlmIHdlJ3JlIGluIFNSLUlPViBNb2RlICovCi0JaWYgKCFhZGFwdGVyLT5udW1fdmZzKQotCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQ7CisJaWYgKGFkYXB0ZXItPm51bV92ZnMpCisJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQ7CisKKwkvKiBEaXNhYmxlIHBhY2tldCBzcGxpdCBkdWUgdG8gODI1OTkgZXJyYXR1bSAjNDUgKi8KKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19SWF9QU19FTkFCTEVEOwogCiAJLyogU2V0IHRoZSBSWCBidWZmZXIgbGVuZ3RoIGFjY29yZGluZyB0byB0aGUgbW9kZSAqLwogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRCkgewpAQCAtMzcyMSw3ICszNzI4LDggQEAKIAkJCSAqIFdlIG5lZWQgdG8gdHJ5IGFuZCBmb3JjZSBhbiBhdXRvbmVnb3RpYXRpb24KIAkJCSAqIHNlc3Npb24sIHRoZW4gYnJpbmcgdXAgbGluay4KIAkJCSAqLwotCQkJaHctPm1hYy5vcHMuc2V0dXBfc2ZwKGh3KTsKKwkJCWlmIChody0+bWFjLm9wcy5zZXR1cF9zZnApCisJCQkJaHctPm1hYy5vcHMuc2V0dXBfc2ZwKGh3KTsKIAkJCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19JTl9TRlBfTElOS19UQVNLKSkKIAkJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOwogCQl9IGVsc2UgewpAQCAtNDg2MywxNiArNDg3MSwxMyBAQAogewogCWludCBxX2lkeCwgbnVtX3FfdmVjdG9yczsKIAlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yOwotCWludCBuYXBpX3ZlY3RvcnM7CiAJaW50ICgqcG9sbCkoc3RydWN0IG5hcGlfc3RydWN0ICosIGludCk7CiAKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkgewogCQludW1fcV92ZWN0b3JzID0gYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlM7Ci0JCW5hcGlfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7CiAJCXBvbGwgPSAmaXhnYmVfY2xlYW5fcnh0eF9tYW55OwogCX0gZWxzZSB7CiAJCW51bV9xX3ZlY3RvcnMgPSAxOwotCQluYXBpX3ZlY3RvcnMgPSAxOwogCQlwb2xsID0gJml4Z2JlX3BvbGw7CiAJfQogCkBAIC01OTY0LDcgKzU5NjksOCBAQAogCQl1bnJlZ2lzdGVyX25ldGRldihhZGFwdGVyLT5uZXRkZXYpOwogCQlyZXR1cm47CiAJfQotCWh3LT5tYWMub3BzLnNldHVwX3NmcChodyk7CisJaWYgKGh3LT5tYWMub3BzLnNldHVwX3NmcCkKKwkJaHctPm1hYy5vcHMuc2V0dXBfc2ZwKGh3KTsKIAogCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19JTl9TRlBfTElOS19UQVNLKSkKIAkJLyogVGhpcyB3aWxsIGFsc28gd29yayBmb3IgREEgVHdpbmF4IGNvbm5lY3Rpb25zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuYwppbmRleCA0N2IxNTczLi4xODdiM2ExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3NyaW92LmMKQEAgLTExMCwxMiArMTEwLDEwIEBACiAJcmV0dXJuIGFkYXB0ZXItPmh3Lm1hYy5vcHMuc2V0X3ZmdGEoJmFkYXB0ZXItPmh3LCB2aWQsIHZmLCAoYm9vbClhZGQpOwogfQogCi0KIHN0YXRpYyB2b2lkIGl4Z2JlX3NldF92bW9scihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgdmYsIGJvb2wgYXVwZSkKIHsKIAl1MzIgdm1vbHIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVk1PTFIodmYpKTsKIAl2bW9sciB8PSAoSVhHQkVfVk1PTFJfUk9NUEUgfAotCQkgIElYR0JFX1ZNT0xSX1JPUEUgfAogCQkgIElYR0JFX1ZNT0xSX0JBTSk7CiAJaWYgKGF1cGUpCiAJCXZtb2xyIHw9IElYR0JFX1ZNT0xSX0FVUEU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV94NTQwLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV94NTQwLmMKaW5kZXggM2E4OTIzOS4uZjI1MThiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfeDU0MC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3g1NDAuYwpAQCAtMTMzLDE3ICsxMzMsMTcgQEAKIAl9CiAKIAljdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NUUkwpOwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ1RSTCwgKGN0cmwgfCBJWEdCRV9DVFJMX1JTVCkpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ1RSTCwgKGN0cmwgfCByZXNldF9iaXQpKTsKIAlJWEdCRV9XUklURV9GTFVTSChodyk7CiAKIAkvKiBQb2xsIGZvciByZXNldCBiaXQgdG8gc2VsZi1jbGVhciBpbmRpY2F0aW5nIHJlc2V0IGlzIGNvbXBsZXRlICovCiAJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKIAkJdWRlbGF5KDEpOwogCQljdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NUUkwpOwotCQlpZiAoIShjdHJsICYgSVhHQkVfQ1RSTF9SU1QpKQorCQlpZiAoIShjdHJsICYgcmVzZXRfYml0KSkKIAkJCWJyZWFrOwogCX0KLQlpZiAoY3RybCAmIElYR0JFX0NUUkxfUlNUKSB7CisJaWYgKGN0cmwgJiByZXNldF9iaXQpIHsKIAkJc3RhdHVzID0gSVhHQkVfRVJSX1JFU0VUX0ZBSUxFRDsKIAkJaHdfZGJnKGh3LCAiUmVzZXQgcG9sbGluZyBmYWlsZWQgdG8gY29tcGxldGUuXG4iKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCmluZGV4IDRmZmRjMTguLjI3NjVhM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCkBAIC0xMjg2LDYgKzEyODYsMjEgQEAKIAl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDY3NjQpIH0sIC8qIE1UMjY0NjggQ29ubmVjdFggRU4gMTBHaWdFIFBDSWUgZ2VuMiovCiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzQ2KSB9LCAvKiBNVDI2NDM4IENvbm5lY3RYIEVOIDQwR2lnRSBQQ0llIGdlbjIgNUdUL3MgKi8KIAl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDY3NmUpIH0sIC8qIE1UMjY0NzggQ29ubmVjdFgyIDQwR2lnRSBQQ0llIGdlbjIgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMDIpIH0sIC8qIE1UMjU0MDAgRmFtaWx5IFtDb25uZWN0WC0yIFZpcnR1YWwgRnVuY3Rpb25dICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDAzKSB9LCAvKiBNVDI3NTAwIEZhbWlseSBbQ29ubmVjdFgtM10gKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMDQpIH0sIC8qIE1UMjc1MDAgRmFtaWx5IFtDb25uZWN0WC0zIFZpcnR1YWwgRnVuY3Rpb25dICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDA1KSB9LCAvKiBNVDI3NTEwIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwNikgfSwgLyogTVQyNzUxMSBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMDcpIH0sIC8qIE1UMjc1MjAgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDA4KSB9LCAvKiBNVDI3NTIxIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwOSkgfSwgLyogTVQyNzUzMCBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMGEpIH0sIC8qIE1UMjc1MzEgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDBiKSB9LCAvKiBNVDI3NTQwIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwYykgfSwgLyogTVQyNzU0MSBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMGQpIH0sIC8qIE1UMjc1NTAgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDBlKSB9LCAvKiBNVDI3NTUxIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwZikgfSwgLyogTVQyNzU2MCBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMTApIH0sIC8qIE1UMjc1NjEgRmFtaWx5ICovCiAJeyAwLCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaXUuYyBiL2RyaXZlcnMvbmV0L25pdS5jCmluZGV4IDI1NDEzMjEuLjlmYjU5ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pdS5jCisrKyBiL2RyaXZlcnMvbmV0L25pdS5jCkBAIC00NDg5LDYgKzQ0ODksOSBAQAogewogCXN0cnVjdCBuaXVfcGFyZW50ICpwYXJlbnQgPSBucC0+cGFyZW50OwogCWludCBmaXJzdF9yeF9jaGFubmVsLCBmaXJzdF90eF9jaGFubmVsOworCWludCBudW1fcnhfcmluZ3MsIG51bV90eF9yaW5nczsKKwlzdHJ1Y3QgcnhfcmluZ19pbmZvICpyeF9yaW5nczsKKwlzdHJ1Y3QgdHhfcmluZ19pbmZvICp0eF9yaW5nczsKIAlpbnQgaSwgcG9ydCwgZXJyOwogCiAJcG9ydCA9IG5wLT5wb3J0OwpAQCAtNDQ5OCwxOCArNDUwMSwyMSBAQAogCQlmaXJzdF90eF9jaGFubmVsICs9IHBhcmVudC0+dHhjaGFuX3Blcl9wb3J0W2ldOwogCX0KIAotCW5wLT5udW1fcnhfcmluZ3MgPSBwYXJlbnQtPnJ4Y2hhbl9wZXJfcG9ydFtwb3J0XTsKLQlucC0+bnVtX3R4X3JpbmdzID0gcGFyZW50LT50eGNoYW5fcGVyX3BvcnRbcG9ydF07CisJbnVtX3J4X3JpbmdzID0gcGFyZW50LT5yeGNoYW5fcGVyX3BvcnRbcG9ydF07CisJbnVtX3R4X3JpbmdzID0gcGFyZW50LT50eGNoYW5fcGVyX3BvcnRbcG9ydF07CiAKLQluZXRpZl9zZXRfcmVhbF9udW1fcnhfcXVldWVzKG5wLT5kZXYsIG5wLT5udW1fcnhfcmluZ3MpOwotCW5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMobnAtPmRldiwgbnAtPm51bV90eF9yaW5ncyk7Ci0KLQlucC0+cnhfcmluZ3MgPSBrY2FsbG9jKG5wLT5udW1fcnhfcmluZ3MsIHNpemVvZihzdHJ1Y3QgcnhfcmluZ19pbmZvKSwKLQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlyeF9yaW5ncyA9IGtjYWxsb2MobnVtX3J4X3JpbmdzLCBzaXplb2Yoc3RydWN0IHJ4X3JpbmdfaW5mbyksCisJCQkgICBHRlBfS0VSTkVMKTsKIAllcnIgPSAtRU5PTUVNOwotCWlmICghbnAtPnJ4X3JpbmdzKQorCWlmICghcnhfcmluZ3MpCiAJCWdvdG8gb3V0X2VycjsKIAorCW5wLT5udW1fcnhfcmluZ3MgPSBudW1fcnhfcmluZ3M7CisJc21wX3dtYigpOworCW5wLT5yeF9yaW5ncyA9IHJ4X3JpbmdzOworCisJbmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhucC0+ZGV2LCBudW1fcnhfcmluZ3MpOworCiAJZm9yIChpID0gMDsgaSA8IG5wLT5udW1fcnhfcmluZ3M7IGkrKykgewogCQlzdHJ1Y3QgcnhfcmluZ19pbmZvICpycCA9ICZucC0+cnhfcmluZ3NbaV07CiAKQEAgLTQ1MzgsMTIgKzQ1NDQsMTggQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JbnAtPnR4X3JpbmdzID0ga2NhbGxvYyhucC0+bnVtX3R4X3JpbmdzLCBzaXplb2Yoc3RydWN0IHR4X3JpbmdfaW5mbyksCi0JCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJdHhfcmluZ3MgPSBrY2FsbG9jKG51bV90eF9yaW5ncywgc2l6ZW9mKHN0cnVjdCB0eF9yaW5nX2luZm8pLAorCQkJICAgR0ZQX0tFUk5FTCk7CiAJZXJyID0gLUVOT01FTTsKLQlpZiAoIW5wLT50eF9yaW5ncykKKwlpZiAoIXR4X3JpbmdzKQogCQlnb3RvIG91dF9lcnI7CiAKKwlucC0+bnVtX3R4X3JpbmdzID0gbnVtX3R4X3JpbmdzOworCXNtcF93bWIoKTsKKwlucC0+dHhfcmluZ3MgPSB0eF9yaW5nczsKKworCW5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMobnAtPmRldiwgbnVtX3R4X3JpbmdzKTsKKwogCWZvciAoaSA9IDA7IGkgPCBucC0+bnVtX3R4X3JpbmdzOyBpKyspIHsKIAkJc3RydWN0IHR4X3JpbmdfaW5mbyAqcnAgPSAmbnAtPnR4X3JpbmdzW2ldOwogCkBAIC02MjQ2LDExICs2MjU4LDE3IEBACiBzdGF0aWMgdm9pZCBuaXVfZ2V0X3J4X3N0YXRzKHN0cnVjdCBuaXUgKm5wKQogewogCXVuc2lnbmVkIGxvbmcgcGt0cywgZHJvcHBlZCwgZXJyb3JzLCBieXRlczsKKwlzdHJ1Y3QgcnhfcmluZ19pbmZvICpyeF9yaW5nczsKIAlpbnQgaTsKIAogCXBrdHMgPSBkcm9wcGVkID0gZXJyb3JzID0gYnl0ZXMgPSAwOworCisJcnhfcmluZ3MgPSBBQ0NFU1NfT05DRShucC0+cnhfcmluZ3MpOworCWlmICghcnhfcmluZ3MpCisJCWdvdG8gbm9fcmluZ3M7CisKIAlmb3IgKGkgPSAwOyBpIDwgbnAtPm51bV9yeF9yaW5nczsgaSsrKSB7Ci0JCXN0cnVjdCByeF9yaW5nX2luZm8gKnJwID0gJm5wLT5yeF9yaW5nc1tpXTsKKwkJc3RydWN0IHJ4X3JpbmdfaW5mbyAqcnAgPSAmcnhfcmluZ3NbaV07CiAKIAkJbml1X3N5bmNfcnhfZGlzY2FyZF9zdGF0cyhucCwgcnAsIDApOwogCkBAIC02MjU5LDYgKzYyNzcsOCBAQAogCQlkcm9wcGVkICs9IHJwLT5yeF9kcm9wcGVkOwogCQllcnJvcnMgKz0gcnAtPnJ4X2Vycm9yczsKIAl9CisKK25vX3JpbmdzOgogCW5wLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMgPSBwa3RzOwogCW5wLT5kZXYtPnN0YXRzLnJ4X2J5dGVzID0gYnl0ZXM7CiAJbnAtPmRldi0+c3RhdHMucnhfZHJvcHBlZCA9IGRyb3BwZWQ7CkBAIC02MjY4LDE2ICs2Mjg4LDI0IEBACiBzdGF0aWMgdm9pZCBuaXVfZ2V0X3R4X3N0YXRzKHN0cnVjdCBuaXUgKm5wKQogewogCXVuc2lnbmVkIGxvbmcgcGt0cywgZXJyb3JzLCBieXRlczsKKwlzdHJ1Y3QgdHhfcmluZ19pbmZvICp0eF9yaW5nczsKIAlpbnQgaTsKIAogCXBrdHMgPSBlcnJvcnMgPSBieXRlcyA9IDA7CisKKwl0eF9yaW5ncyA9IEFDQ0VTU19PTkNFKG5wLT50eF9yaW5ncyk7CisJaWYgKCF0eF9yaW5ncykKKwkJZ290byBub19yaW5nczsKKwogCWZvciAoaSA9IDA7IGkgPCBucC0+bnVtX3R4X3JpbmdzOyBpKyspIHsKLQkJc3RydWN0IHR4X3JpbmdfaW5mbyAqcnAgPSAmbnAtPnR4X3JpbmdzW2ldOworCQlzdHJ1Y3QgdHhfcmluZ19pbmZvICpycCA9ICZ0eF9yaW5nc1tpXTsKIAogCQlwa3RzICs9IHJwLT50eF9wYWNrZXRzOwogCQlieXRlcyArPSBycC0+dHhfYnl0ZXM7CiAJCWVycm9ycyArPSBycC0+dHhfZXJyb3JzOwogCX0KKworbm9fcmluZ3M6CiAJbnAtPmRldi0+c3RhdHMudHhfcGFja2V0cyA9IHBrdHM7CiAJbnAtPmRldi0+c3RhdHMudHhfYnl0ZXMgPSBieXRlczsKIAlucC0+ZGV2LT5zdGF0cy50eF9lcnJvcnMgPSBlcnJvcnM7CkBAIC02Mjg3LDkgKzYzMTUsMTAgQEAKIHsKIAlzdHJ1Y3Qgbml1ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAKLQluaXVfZ2V0X3J4X3N0YXRzKG5wKTsKLQluaXVfZ2V0X3R4X3N0YXRzKG5wKTsKLQorCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJbml1X2dldF9yeF9zdGF0cyhucCk7CisJCW5pdV9nZXRfdHhfc3RhdHMobnApOworCX0KIAlyZXR1cm4gJmRldi0+c3RhdHM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25zODM4MjAuYyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwppbmRleCA4NDEzNGM3Li5hNDFiMmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uczgzODIwLmMKKysrIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCkBAIC0xOTg4LDEyICsxOTg4LDExIEBACiAJfQogCiAJbmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgbnM4MzgyMCkpOwotCWRldiA9IFBSSVYobmRldik7Ci0KIAllcnIgPSAtRU5PTUVNOwotCWlmICghZGV2KQorCWlmICghbmRldikKIAkJZ290byBvdXQ7CiAKKwlkZXYgPSBQUklWKG5kZXYpOwogCWRldi0+bmRldiA9IG5kZXY7CiAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5yeF9pbmZvLmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlLmggYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmUuaAppbmRleCBhMGMyNmE5Li5lMWUzM2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmUuaAorKysgYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmUuaApAQCAtNzMsNyArNzMsNyBAQAogCXN0cnVjdCBwY2hfZ2JlX3JlZ3NfbWFjX2FkciBtYWNfYWRyWzE2XTsKIAl1MzIgQUREUl9NQVNLOwogCXUzMiBNSUlNOwotCXUzMiByZXNlcnZlMjsKKwl1MzIgTUFDX0FERFJfTE9BRDsKIAl1MzIgUkdNSUlfU1Q7CiAJdTMyIFJHTUlJX0NUUkw7CiAJdTMyIHJlc2VydmUzWzNdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9tYWluLmMKaW5kZXggZDczNTUzMC4uYjk5ZTkwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIFBDSF9HQkVfU0hPUlRfUEtUCQk2NAogI2RlZmluZSBEU0NfSU5JVDE2CQkJMHhDMDAwCiAjZGVmaW5lIFBDSF9HQkVfRE1BX0FMSUdOCQkwCisjZGVmaW5lIFBDSF9HQkVfRE1BX1BBRERJTkcJCTIKICNkZWZpbmUgUENIX0dCRV9XQVRDSERPR19QRVJJT0QJCSgxICogSFopCS8qIHdhdGNoZG9nIHRpbWUgKi8KICNkZWZpbmUgUENIX0dCRV9DT1BZQlJFQUtfREVGQVVMVAkyNTYKICNkZWZpbmUgUENIX0dCRV9QQ0lfQkFSCQkJMQpAQCAtODgsNiArODksMTIgQEAKIHN0YXRpYyBpbnQgcGNoX2diZV9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGFkZHIsIGludCByZWcpOwogc3RhdGljIHZvaWQgcGNoX2diZV9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBhZGRyLCBpbnQgcmVnLAogCQkJICAgICAgIGludCBkYXRhKTsKKworaW5saW5lIHZvaWQgcGNoX2diZV9tYWNfbG9hZF9tYWNfYWRkcihzdHJ1Y3QgcGNoX2diZV9odyAqaHcpCit7CisJaW93cml0ZTMyKDB4MDEsICZody0+cmVnLT5NQUNfQUREUl9MT0FEKTsKK30KKwogLyoqCiAgKiBwY2hfZ2JlX21hY19yZWFkX21hY19hZGRyIC0gUmVhZCBNQUMgYWRkcmVzcwogICogQGh3OgkgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKQEAgLTUxOSw3ICs1MjYsOSBAQAogCXN0cnVjdCBwY2hfZ2JlX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGNoX2diZV9hZGFwdGVyLCByZXNldF90YXNrKTsKIAorCXJ0bmxfbG9jaygpOwogCXBjaF9nYmVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTsKKwlydG5sX3VubG9jaygpOwogfQogCiAvKioKQEAgLTUyOCwxNCArNTM3LDggQEAKICAqLwogdm9pZCBwY2hfZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHBjaF9nYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCi0JcnRubF9sb2NrKCk7Ci0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQlwY2hfZ2JlX2Rvd24oYWRhcHRlcik7Ci0JCXBjaF9nYmVfdXAoYWRhcHRlcik7Ci0JfQotCXJ0bmxfdW5sb2NrKCk7CisJcGNoX2diZV9kb3duKGFkYXB0ZXIpOworCXBjaF9nYmVfdXAoYWRhcHRlcik7CiB9CiAKIC8qKgpAQCAtMTM2OSwxNiArMTM3MiwxMyBAQAogCXN0cnVjdCBwY2hfZ2JlX2J1ZmZlciAqYnVmZmVyX2luZm87CiAJc3RydWN0IHBjaF9nYmVfcnhfZGVzYyAqcnhfZGVzYzsKIAl1MzIgbGVuZ3RoOwotCXVuc2lnbmVkIGNoYXIgdG1wX3BhY2tldFtFVEhfSExFTl07CiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgaW50IGNsZWFuZWRfY291bnQgPSAwOwogCWJvb2wgY2xlYW5lZCA9IGZhbHNlOwotCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5ld19za2I7CiAJdTggZG1hX3N0YXR1czsKIAl1MTYgZ2JlY19zdGF0dXM7CiAJdTMyIHRjcF9pcF9zdGF0dXM7Ci0JdTggc2tiX2NvcHlfZmxhZyA9IDA7Ci0JdTggc2tiX3BhZGRpbmdfZmxhZyA9IDA7CiAKIAlpID0gcnhfcmluZy0+bmV4dF90b19jbGVhbjsKIApAQCAtMTQyMiw1NSArMTQyMiw3MCBAQAogCQkJcHJfZXJyKCJSZWNlaXZlIENSQyBFcnJvclxuIik7CiAJCX0gZWxzZSB7CiAJCQkvKiBnZXQgcmVjZWl2ZSBsZW5ndGggKi8KLQkJCS8qIGxlbmd0aCBjb252ZXJ0Wy0zXSwgcGFkZGluZ1stMl0gKi8KLQkJCWxlbmd0aCA9IChyeF9kZXNjLT5yeF93b3Jkc19lb2IpIC0gMyAtIDI7CisJCQkvKiBsZW5ndGggY29udmVydFstM10gKi8KKwkJCWxlbmd0aCA9IChyeF9kZXNjLT5yeF93b3Jkc19lb2IpIC0gMzsKIAogCQkJLyogRGVjaWRlIHRoZSBkYXRhIGNvbnZlcnNpb24gbWV0aG9kICovCiAJCQlpZiAoIWFkYXB0ZXItPnJ4X2NzdW0pIHsKIAkJCQkvKiBbSGVhZGVyOjE0XVtwYXlsb2FkXSAqLwotCQkJCXNrYl9wYWRkaW5nX2ZsYWcgPSAwOwotCQkJCXNrYl9jb3B5X2ZsYWcgPSAxOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBbSGVhZGVyOjE0XVtwYWRkaW5nOjJdW3BheWxvYWRdICovCi0JCQkJc2tiX3BhZGRpbmdfZmxhZyA9IDE7Ci0JCQkJaWYgKGxlbmd0aCA8IGNvcHlicmVhaykKLQkJCQkJc2tiX2NvcHlfZmxhZyA9IDE7Ci0JCQkJZWxzZQotCQkJCQlza2JfY29weV9mbGFnID0gMDsKLQkJCX0KLQotCQkJLyogRGF0YSBjb252ZXJzaW9uICovCi0JCQlpZiAoc2tiX2NvcHlfZmxhZykgewkvKiByZWN5Y2xlICBza2IgKi8KLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKLQkJCQluZXdfc2tiID0KLQkJCQkgICAgbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsCi0JCQkJCQkgICAgIGxlbmd0aCArIE5FVF9JUF9BTElHTik7Ci0JCQkJaWYgKG5ld19za2IpIHsKLQkJCQkJaWYgKCFza2JfcGFkZGluZ19mbGFnKSB7Ci0JCQkJCQlza2JfcmVzZXJ2ZShuZXdfc2tiLAotCQkJCQkJCQlORVRfSVBfQUxJR04pOworCQkJCWlmIChORVRfSVBfQUxJR04pIHsKKwkJCQkJLyogQmVjYXVzZSBhbGlnbm1lbnQgZGlmZmVycywKKwkJCQkJICogdGhlIG5ld19za2IgaXMgbmV3bHkgYWxsb2NhdGVkLAorCQkJCQkgKiBhbmQgZGF0YSBpcyBjb3BpZWQgdG8gbmV3X3NrYi4qLworCQkJCQluZXdfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsCisJCQkJCQkJIGxlbmd0aCArIE5FVF9JUF9BTElHTik7CisJCQkJCWlmICghbmV3X3NrYikgeworCQkJCQkJLyogZG9ycm9wIGVycm9yICovCisJCQkJCQlwcl9lcnIoIk5ldyBza2IgYWxsb2NhdGlvbiAiCisJCQkJCQkJIkVycm9yXG4iKTsKKwkJCQkJCWdvdG8gZG9ycm9wOwogCQkJCQl9CisJCQkJCXNrYl9yZXNlcnZlKG5ld19za2IsIE5FVF9JUF9BTElHTik7CiAJCQkJCW1lbWNweShuZXdfc2tiLT5kYXRhLCBza2ItPmRhdGEsCi0JCQkJCQlsZW5ndGgpOwotCQkJCQkvKiBzYXZlIHRoZSBza2IKLQkJCQkJICogaW4gYnVmZmVyX2luZm8gYXMgZ29vZCAqLworCQkJCQkgICAgICAgbGVuZ3RoKTsKIAkJCQkJc2tiID0gbmV3X3NrYjsKLQkJCQl9IGVsc2UgaWYgKCFza2JfcGFkZGluZ19mbGFnKSB7Ci0JCQkJCS8qIGRvcnJvcCBlcnJvciAqLwotCQkJCQlwcl9lcnIoIk5ldyBza2IgYWxsb2NhdGlvbiBFcnJvclxuIik7Ci0JCQkJCWdvdG8gZG9ycm9wOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIERNQSBidWZmZXIgaXMgdXNlZCBhcyBTS0IgYXMgaXQgaXMuKi8KKwkJCQkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CiAJCQkJfQogCQkJfSBlbHNlIHsKLQkJCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKKwkJCQkvKiBbSGVhZGVyOjE0XVtwYWRkaW5nOjJdW3BheWxvYWRdICovCisJCQkJLyogVGhlIGxlbmd0aCBpbmNsdWRlcyBwYWRkaW5nIGxlbmd0aCAqLworCQkJCWxlbmd0aCA9IGxlbmd0aCAtIFBDSF9HQkVfRE1BX1BBRERJTkc7CisJCQkJaWYgKChsZW5ndGggPCBjb3B5YnJlYWspIHx8CisJCQkJICAgIChORVRfSVBfQUxJR04gIT0gUENIX0dCRV9ETUFfUEFERElORykpIHsKKwkJCQkJLyogQmVjYXVzZSBhbGlnbm1lbnQgZGlmZmVycywKKwkJCQkJICogdGhlIG5ld19za2IgaXMgbmV3bHkgYWxsb2NhdGVkLAorCQkJCQkgKiBhbmQgZGF0YSBpcyBjb3BpZWQgdG8gbmV3X3NrYi4KKwkJCQkJICogUGFkZGluZyBkYXRhIGlzIGRlbGV0ZWQKKwkJCQkJICogYXQgdGhlIHRpbWUgb2YgYSBjb3B5LiovCisJCQkJCW5ld19za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwKKwkJCQkJCQkgbGVuZ3RoICsgTkVUX0lQX0FMSUdOKTsKKwkJCQkJaWYgKCFuZXdfc2tiKSB7CisJCQkJCQkvKiBkb3Jyb3AgZXJyb3IgKi8KKwkJCQkJCXByX2VycigiTmV3IHNrYiBhbGxvY2F0aW9uICIKKwkJCQkJCQkiRXJyb3JcbiIpOworCQkJCQkJZ290byBkb3Jyb3A7CisJCQkJCX0KKwkJCQkJc2tiX3Jlc2VydmUobmV3X3NrYiwgTkVUX0lQX0FMSUdOKTsKKwkJCQkJbWVtY3B5KG5ld19za2ItPmRhdGEsIHNrYi0+ZGF0YSwKKwkJCQkJICAgICAgIEVUSF9ITEVOKTsKKwkJCQkJbWVtY3B5KCZuZXdfc2tiLT5kYXRhW0VUSF9ITEVOXSwKKwkJCQkJICAgICAgICZza2ItPmRhdGFbRVRIX0hMRU4gKworCQkJCQkgICAgICAgUENIX0dCRV9ETUFfUEFERElOR10sCisJCQkJCSAgICAgICBsZW5ndGggLSBFVEhfSExFTik7CisJCQkJCXNrYiA9IG5ld19za2I7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogUGFkZGluZyBkYXRhIGlzIGRlbGV0ZWQKKwkJCQkJICogYnkgbW92aW5nIGhlYWRlciBkYXRhLiovCisJCQkJCW1lbW1vdmUoJnNrYi0+ZGF0YVtQQ0hfR0JFX0RNQV9QQURESU5HXSwKKwkJCQkJCSZza2ItPmRhdGFbMF0sIEVUSF9ITEVOKTsKKwkJCQkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOworCQkJCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKKwkJCQl9CiAJCQl9Ci0JCQlpZiAoc2tiX3BhZGRpbmdfZmxhZykgewotCQkJCW1lbWNweSgmdG1wX3BhY2tldFswXSwgJnNrYi0+ZGF0YVswXSwgRVRIX0hMRU4pOwotCQkJCW1lbWNweSgmc2tiLT5kYXRhW05FVF9JUF9BTElHTl0sICZ0bXBfcGFja2V0WzBdLAotCQkJCQlFVEhfSExFTik7Ci0JCQkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOwotCi0JCQl9Ci0KKwkJCS8qIFRoZSBsZW5ndGggaW5jbHVkZXMgRkNTIGxlbmd0aCAqLworCQkJbGVuZ3RoID0gbGVuZ3RoIC0gRVRIX0ZDU19MRU47CiAJCQkvKiB1cGRhdGUgc3RhdHVzIG9mIGRyaXZlciAqLwogCQkJYWRhcHRlci0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoOwogCQkJYWRhcHRlci0+c3RhdHMucnhfcGFja2V0cysrOwpAQCAtMjI0Nyw3ICsyMjYyLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBwY2hfZ2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKIAl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCiAJcGNoX2diZV9oYWxfcGh5X2h3X3Jlc2V0KCZhZGFwdGVyLT5odyk7CkBAIC0yMzIyLDYgKzIzMzcsNyBAQAogCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfR1JPOwogCXBjaF9nYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAKKwlwY2hfZ2JlX21hY19sb2FkX21hY19hZGRyKCZhZGFwdGVyLT5odyk7CiAJcGNoX2diZV9tYWNfcmVzZXRfaHcoJmFkYXB0ZXItPmh3KTsKIAogCS8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwppbmRleCAxZjQyZjZhLi5kM2NiNzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwpAQCAtMTQ4OCwxMiArMTQ4OCwxMCBAQAogICAgIAogCS8qIAogCSAqIFdhaXQgYSBmdWxsIFR4IHRpbWUgKDEuMm1zKSArIHNvbWUgZ3VhcmQgdGltZSwgTlMgc2F5cyAxLjZtcyB0b3RhbC4KLQkgKiBFYXJseSBkYXRhc2hlZXRzIHNhaWQgdG8gcG9sbCB0aGUgcmVzZXQgYml0LCBidXQgbm93IHRoZXkgc2F5IHRoYXQKLQkgKiBpdCAiaXMgbm90IGEgcmVsaWFibGUgaW5kaWNhdG9yIGFuZCBzdWJzZXF1ZW50bHkgc2hvdWxkIGJlIGlnbm9yZWQuIgotCSAqIFdlIHdhaXQgYXQgbGVhc3QgMTBtcy4KKwkgKiBXZSB3YWl0IGF0IGxlYXN0IDJtcy4KIAkgKi8KIAotCW1kZWxheSgxMCk7CisJbWRlbGF5KDIpOwogCiAJLyoKIAkgKiBSZXNldCBSQkNSWzAxXSBiYWNrIHRvIHplcm8gYXMgcGVyIG1hZ2ljIGluY2FudGF0aW9uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggYmRlN2Q2MS4uZWYyMTMzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC02MTcsOCArNjE3LDkgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDgxNjhfb29iX25vdGlmeSh2b2lkIF9faW9tZW0gKmlvYWRkciwgdTggY21kKQorc3RhdGljIHZvaWQgcnRsODE2OF9vb2Jfbm90aWZ5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1OCBjbWQpCiB7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwogCWludCBpOwogCiAJUlRMX1c4KEVSSURSLCBjbWQpOwpAQCAtNjMwLDcgKzYzMSw3IEBACiAJCQlicmVhazsKIAl9CiAKLQlvY3Bfd3JpdGUoaW9hZGRyLCAweDEsIDB4MzAsIDB4MDAwMDAwMDEpOworCW9jcF93cml0ZSh0cCwgMHgxLCAweDMwLCAweDAwMDAwMDAxKTsKIH0KIAogI2RlZmluZSBPT0JfQ01EX1JFU0VUCQkweDAwCkBAIC05NzMsNyArOTc0LDggQEAKIAkJaWYgKHBtKQogCQkJcG1fcmVxdWVzdF9yZXN1bWUoJnRwLT5wY2lfZGV2LT5kZXYpOwogCQluZXRpZl9jYXJyaWVyX29uKGRldik7Ci0JCW5ldGlmX2luZm8odHAsIGlmdXAsIGRldiwgImxpbmsgdXBcbiIpOworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJbmV0aWZfaW5mbyh0cCwgaWZ1cCwgZGV2LCAibGluayB1cFxuIik7CiAJfSBlbHNlIHsKIAkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAkJbmV0aWZfaW5mbyh0cCwgaWZkb3duLCBkZXYsICJsaW5rIGRvd25cbiIpOwpAQCAtMjg2Nyw4ICsyODY5LDExIEBACiB7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwogCi0JaWYgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI3KQorCWlmICgoKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI3KSB8fAorCSAgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI4KSkgJiYKKwkgICAgKG9jcF9yZWFkKHRwLCAweDBmLCAweDAwMTApICYgMHgwMDAwODAwMCkpIHsKIAkJcmV0dXJuOworCX0KIAogCWlmICgoKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzIzKSB8fAogCSAgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI0KSkgJiYKQEAgLTI4OTAsNiArMjg5NSw4IEBACiAJc3dpdGNoICh0cC0+bWFjX3ZlcnNpb24pIHsKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjU6CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI2OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNzoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjg6CiAJCVJUTF9XOChQTUNILCBSVExfUjgoUE1DSCkgJiB+MHg4MCk7CiAJCWJyZWFrOwogCX0KQEAgLTI4OTksMTIgKzI5MDYsMTcgQEAKIHsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAKLQlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjcpCisJaWYgKCgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjcpIHx8CisJICAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjgpKSAmJgorCSAgICAob2NwX3JlYWQodHAsIDB4MGYsIDB4MDAxMCkgJiAweDAwMDA4MDAwKSkgewogCQlyZXR1cm47CisJfQogCiAJc3dpdGNoICh0cC0+bWFjX3ZlcnNpb24pIHsKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjU6CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI2OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNzoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjg6CiAJCVJUTF9XOChQTUNILCBSVExfUjgoUE1DSCkgfCAweDgwKTsKIAkJYnJlYWs7CiAJfQpAQCAtMzA0MSw3ICszMDUzLDcgQEAKIAkJZ290byBlcnJfb3V0X213aV8yOwogCX0KIAotCXRwLT5jcF9jbWQgPSBQQ0lNdWxSVyB8IFJ4Q2hrU3VtOworCXRwLT5jcF9jbWQgPSBSeENoa1N1bTsKIAogCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCkgJiYKIAkgICAgIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkgJiYgdXNlX2RhYykgewpAQCAtMzE4OSw2ICszMjAxLDggQEAKIAlpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSkKIAkJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZwZGV2LT5kZXYpOwogCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwogb3V0OgogCXJldHVybiByYzsKIApAQCAtMzMxNSw3ICszMzI5LDggQEAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KIAlydGw4MTY5X2lycV9tYXNrX2FuZF9hY2soaW9hZGRyKTsKIAotCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCkgeworCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNyB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCkgewogCQl3aGlsZSAoUlRMX1I4KFR4UG9sbCkgJiBOUFEpCiAJCQl1ZGVsYXkoMjApOwogCkBAIC0zNzU3LDcgKzM3NzIsOCBAQAogCVJUTF9XMTYoSW50ck1pdGlnYXRlLCAweDUxNTEpOwogCiAJLyogV29yayBhcm91bmQgZm9yIFJ4RklGTyBvdmVyZmxvdy4gKi8KLQlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMTEpIHsKKwlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMTEgfHwKKwkgICAgdHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjIpIHsKIAkJdHAtPmludHJfZXZlbnQgfD0gUnhGSUZPT3ZlciB8IFBDU1RpbWVvdXQ7CiAJCXRwLT5pbnRyX2V2ZW50ICY9IH5SeE92ZXJmbG93OwogCX0KQEAgLTM4NDMsOCArMzg1OSw3IEBACiAJQ3hwbF9kYmdfc2VsIHwgXAogCUFTRiB8IFwKIAlQa3RDbnRyRGlzYWJsZSB8IFwKLQlQQ0lEQUMgfCBcCi0JUENJTXVsUlcpCisJTWFjX2RiZ29fc2VsKQogCiBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODEwMmVfMSh2b2lkIF9faW9tZW0gKmlvYWRkciwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CkBAIC0zODc0LDggKzM4ODksNiBAQAogCWlmICgoY2ZnMSAmIExFRFMwKSAmJiAoY2ZnMSAmIExFRFMxKSkKIAkJUlRMX1c4KENvbmZpZzEsIGNmZzEgJiB+TEVEUzApOwogCi0JUlRMX1cxNihDUGx1c0NtZCwgUlRMX1IxNihDUGx1c0NtZCkgJiB+UjgxMFhfQ1BDTURfUVVJUktfTUFTSyk7Ci0KIAlydGxfZXBoeV9pbml0KGlvYWRkciwgZV9pbmZvXzgxMDJlXzEsIEFSUkFZX1NJWkUoZV9pbmZvXzgxMDJlXzEpKTsKIH0KIApAQCAtMzg4Nyw4ICszOTAwLDYgQEAKIAogCVJUTF9XOChDb25maWcxLCBNRU1NQVAgfCBJT01BUCB8IFZQRCB8IFBNRW5hYmxlKTsKIAlSVExfVzgoQ29uZmlnMywgUlRMX1I4KENvbmZpZzMpICYgfkJlYWNvbl9lbik7Ci0KLQlSVExfVzE2KENQbHVzQ21kLCBSVExfUjE2KENQbHVzQ21kKSAmIH5SODEwWF9DUENNRF9RVUlSS19NQVNLKTsKIH0KIAogc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMDJlXzModm9pZCBfX2lvbWVtICppb2FkZHIsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtMzkxNCw2ICszOTI1LDggQEAKIAkJfQogCX0KIAorCVJUTF9XOChDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CisKIAlzd2l0Y2ggKHRwLT5tYWNfdmVyc2lvbikgewogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wNzoKIAkJcnRsX2h3X3N0YXJ0XzgxMDJlXzEoaW9hZGRyLCBwZGV2KTsKQEAgLTM5MjgsMTQgKzM5NDEsMTMgQEAKIAkJYnJlYWs7CiAJfQogCi0JUlRMX1c4KENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKKwlSVExfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKIAogCVJUTF9XOChNYXhUeFBhY2tldFNpemUsIFR4UGFja2V0TWF4KTsKIAogCXJ0bF9zZXRfcnhfbWF4X3NpemUoaW9hZGRyLCByeF9idWZfc3opOwogCi0JdHAtPmNwX2NtZCB8PSBydGxfcndfY3BsdXNjbWQoaW9hZGRyKSB8IFBDSU11bFJXOwotCisJdHAtPmNwX2NtZCAmPSB+UjgxMFhfQ1BDTURfUVVJUktfTUFTSzsKIAlSVExfVzE2KENQbHVzQ21kLCB0cC0+Y3BfY21kKTsKIAogCVJUTF9XMTYoSW50ck1pdGlnYXRlLCAweDAwMDApOwpAQCAtMzk0NSwxNCArMzk1NywxMCBAQAogCVJUTF9XOChDaGlwQ21kLCBDbWRUeEVuYiB8IENtZFJ4RW5iKTsKIAlydGxfc2V0X3J4X3R4X2NvbmZpZ19yZWdpc3RlcnModHApOwogCi0JUlRMX1c4KENmZzkzNDYsIENmZzkzNDZfTG9jayk7Ci0KIAlSVExfUjgoSW50ck1hc2spOwogCiAJcnRsX3NldF9yeF9tb2RlKGRldik7CiAKLQlSVExfVzgoQ2hpcENtZCwgQ21kVHhFbmIgfCBDbWRSeEVuYik7Ci0KIAlSVExfVzE2KE11bHRpSW50ciwgUlRMX1IxNihNdWx0aUludHIpICYgMHhmMDAwKTsKIAogCVJUTF9XMTYoSW50ck1hc2ssIHRwLT5pbnRyX2V2ZW50KTsKQEAgLTQ2MzksMTIgKzQ2NDcsMzMgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJLyogV29yayBhcm91bmQgZm9yIHJ4IGZpZm8gb3ZlcmZsb3cgKi8KLQkJaWYgKHVubGlrZWx5KHN0YXR1cyAmIFJ4RklGT092ZXIpICYmCi0JCSh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8xMSkpIHsKLQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJCXJ0bDgxNjlfdHhfdGltZW91dChkZXYpOwotCQkJYnJlYWs7CisJCWlmICh1bmxpa2VseShzdGF0dXMgJiBSeEZJRk9PdmVyKSkgeworCQkJc3dpdGNoICh0cC0+bWFjX3ZlcnNpb24pIHsKKwkJCS8qIFdvcmsgYXJvdW5kIGZvciByeCBmaWZvIG92ZXJmbG93ICovCisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTE6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjI6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjY6CisJCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQkJCXJ0bDgxNjlfdHhfdGltZW91dChkZXYpOworCQkJCWdvdG8gZG9uZTsKKwkJCS8qIFRlc3RlcnMgbmVlZGVkLiAqLworCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE3OgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE5OgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIwOgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIxOgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIzOgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI0OgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI3OgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI4OgorCQkJLyogRXhwZXJpbWVudGFsIHNjaWVuY2UuIFBrdGdlbiBwcm9vZi4gKi8KKwkJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8xMjoKKwkJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNToKKwkJCQlpZiAoc3RhdHVzID09IFJ4RklGT092ZXIpCisJCQkJCWdvdG8gZG9uZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAogCQlpZiAodW5saWtlbHkoc3RhdHVzICYgU1lTRXJyKSkgewpAQCAtNDY4MCw3ICs0NzA5LDcgQEAKIAkJCShzdGF0dXMgJiBSeEZJRk9PdmVyKSA/IChzdGF0dXMgfCBSeE92ZXJmbG93KSA6IHN0YXR1cyk7CiAJCXN0YXR1cyA9IFJUTF9SMTYoSW50clN0YXR1cyk7CiAJfQotCitkb25lOgogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuYwppbmRleCAwZThiYjE5Li5jYTg4NmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMKQEAgLTU2OSw5ICs1NjksMTQgQEAKIAkJCQkgIHN0cnVjdCBldGh0b29sX3Rlc3QgKnRlc3QsIHU2NCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7Ci0Jc3RydWN0IGVmeF9zZWxmX3Rlc3RzIGVmeF90ZXN0czsKKwlzdHJ1Y3QgZWZ4X3NlbGZfdGVzdHMgKmVmeF90ZXN0czsKIAlpbnQgYWxyZWFkeV91cDsKLQlpbnQgcmM7CisJaW50IHJjID0gLUVOT01FTTsKKworCWVmeF90ZXN0cyA9IGt6YWxsb2Moc2l6ZW9mKCplZnhfdGVzdHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVmeF90ZXN0cykKKwkJZ290byBmYWlsOworCiAKIAlBU1NFUlRfUlROTCgpOwogCWlmIChlZngtPnN0YXRlICE9IFNUQVRFX1JVTk5JTkcpIHsKQEAgLTU4OSwxMyArNTk0LDExIEBACiAJCWlmIChyYykgewogCQkJbmV0aWZfZXJyKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCiAJCQkJICAiZmFpbGVkIG9wZW5pbmcgZGV2aWNlLlxuIik7Ci0JCQlnb3RvIGZhaWwyOworCQkJZ290byBmYWlsMTsKIAkJfQogCX0KIAotCW1lbXNldCgmZWZ4X3Rlc3RzLCAwLCBzaXplb2YoZWZ4X3Rlc3RzKSk7Ci0KLQlyYyA9IGVmeF9zZWxmdGVzdChlZngsICZlZnhfdGVzdHMsIHRlc3QtPmZsYWdzKTsKKwlyYyA9IGVmeF9zZWxmdGVzdChlZngsIGVmeF90ZXN0cywgdGVzdC0+ZmxhZ3MpOwogCiAJaWYgKCFhbHJlYWR5X3VwKQogCQlkZXZfY2xvc2UoZWZ4LT5uZXRfZGV2KTsKQEAgLTYwNCwxMCArNjA3LDExIEBACiAJCSAgIHJjID09IDAgPyAicGFzc2VkIiA6ICJmYWlsZWQiLAogCQkgICAodGVzdC0+ZmxhZ3MgJiBFVEhfVEVTVF9GTF9PRkZMSU5FKSA/ICJvZmYiIDogIm9uIik7CiAKLSBmYWlsMjoKLSBmYWlsMToKK2ZhaWwxOgogCS8qIEZpbGwgZXRodG9vbCByZXN1bHRzIHN0cnVjdHVyZXMgKi8KLQllZnhfZXRodG9vbF9maWxsX3NlbGZfdGVzdHMoZWZ4LCAmZWZ4X3Rlc3RzLCBOVUxMLCBkYXRhKTsKKwllZnhfZXRodG9vbF9maWxsX3NlbGZfdGVzdHMoZWZ4LCBlZnhfdGVzdHMsIE5VTEwsIGRhdGEpOworCWtmcmVlKGVmeF90ZXN0cyk7CitmYWlsOgogCWlmIChyYykKIAkJdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzOTAwLmMgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwppbmRleCA1OTc2ZDFkLi42NDBlMzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaXM5MDAuYworKysgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwpAQCAtMTc3Nyw2ICsxNzc3LDcgQEAKIAkJCQkJICAgICAgImN1cl9yeDolNC40ZCwgZGlydHlfcng6JTQuNGRcbiIsCiAJCQkJCSAgICAgIG5ldF9kZXYtPm5hbWUsIHNpc19wcml2LT5jdXJfcngsCiAJCQkJCSAgICAgIHNpc19wcml2LT5kaXJ0eV9yeCk7CisJCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJCWJyZWFrOwogCQkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCmluZGV4IDM0YTBhZjMuLjBlNWYwMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCkBAIC0xNTYwLDggKzE1NjAsMTAgQEAKIAogCXByaXYtPmh3ID0gZGV2aWNlOwogCi0JaWYgKGRldmljZV9jYW5fd2FrZXVwKHByaXYtPmRldmljZSkpCisJaWYgKGRldmljZV9jYW5fd2FrZXVwKHByaXYtPmRldmljZSkpIHsKIAkJcHJpdi0+d29sb3B0cyA9IFdBS0VfTUFHSUM7IC8qIE1hZ2ljIEZyYW1lIGFzIGRlZmF1bHQgKi8KKwkJZW5hYmxlX2lycV93YWtlKGRldi0+aXJxKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5jIGIvZHJpdmVycy9uZXQvdGczLmMKaW5kZXggNzg0MWE4Zi4uMDZjMGU1MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC02MCwxMiArNjAsNiBAQAogI2RlZmluZSBCQVJfMAkwCiAjZGVmaW5lIEJBUl8yCTIKIAotI2lmIGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVEpIHx8IGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVFfTU9EVUxFKQotI2RlZmluZSBURzNfVkxBTl9UQUdfVVNFRCAxCi0jZWxzZQotI2RlZmluZSBURzNfVkxBTl9UQUdfVVNFRCAwCi0jZW5kaWYKLQogI2luY2x1ZGUgInRnMy5oIgogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJInRnMyIKQEAgLTEzNCw5ICsxMjgsNiBAQAogCQkJCSBURzNfVFhfUklOR19TSVpFKQogI2RlZmluZSBORVhUX1RYKE4pCQkoKChOKSArIDEpICYgKFRHM19UWF9SSU5HX1NJWkUgLSAxKSkKIAotI2RlZmluZSBURzNfUlhfRE1BX0FMSUdOCQkxNgotI2RlZmluZSBURzNfUlhfSEVBRFJPT00JCQlBTElHTihWTEFOX0hMRU4sIFRHM19SWF9ETUFfQUxJR04pCi0KICNkZWZpbmUgVEczX0RNQV9CWVRFX0VOQUIJCTY0CiAKICNkZWZpbmUgVEczX1JYX1NURF9ETUFfU1oJCTE1MzYKQEAgLTQ3MjIsOCArNDcxMyw2IEBACiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAJCXUzMiBvcGFxdWVfa2V5LCBkZXNjX2lkeCwgKnBvc3RfcHRyOwotCQlib29sIGh3X3ZsYW4gX19tYXliZV91bnVzZWQgPSBmYWxzZTsKLQkJdTE2IHZ0YWcgX19tYXliZV91bnVzZWQgPSAwOwogCiAJCWRlc2NfaWR4ID0gZGVzYy0+b3BhcXVlICYgUlhEX09QQVFVRV9JTkRFWF9NQVNLOwogCQlvcGFxdWVfa2V5ID0gZGVzYy0+b3BhcXVlICYgUlhEX09QQVFVRV9SSU5HX01BU0s7CkBAIC00NzgyLDEyICs0NzcxLDEyIEBACiAJCQl0ZzNfcmVjeWNsZV9yeCh0bmFwaSwgdHByLCBvcGFxdWVfa2V5LAogCQkJCSAgICAgICBkZXNjX2lkeCwgKnBvc3RfcHRyKTsKIAotCQkJY29weV9za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHRwLT5kZXYsIGxlbiArIFZMQU5fSExFTiArCisJCQljb3B5X3NrYiA9IG5ldGRldl9hbGxvY19za2IodHAtPmRldiwgbGVuICsKIAkJCQkJCSAgICBURzNfUkFXX0lQX0FMSUdOKTsKIAkJCWlmIChjb3B5X3NrYiA9PSBOVUxMKQogCQkJCWdvdG8gZHJvcF9pdF9ub19yZWN5Y2xlOwogCi0JCQlza2JfcmVzZXJ2ZShjb3B5X3NrYiwgVEczX1JBV19JUF9BTElHTiArIFZMQU5fSExFTik7CisJCQlza2JfcmVzZXJ2ZShjb3B5X3NrYiwgVEczX1JBV19JUF9BTElHTik7CiAJCQlza2JfcHV0KGNvcHlfc2tiLCBsZW4pOwogCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHRwLT5wZGV2LCBkbWFfYWRkciwgbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIGNvcHlfc2tiLT5kYXRhLCBsZW4pOwpAQCAtNDgxNCwzMCArNDgwMywxMSBAQAogCQl9CiAKIAkJaWYgKGRlc2MtPnR5cGVfZmxhZ3MgJiBSWERfRkxBR19WTEFOICYmCi0JCSAgICAhKHRwLT5yeF9tb2RlICYgUlhfTU9ERV9LRUVQX1ZMQU5fVEFHKSkgewotCQkJdnRhZyA9IGRlc2MtPmVycl92bGFuICYgUlhEX1ZMQU5fTUFTSzsKLSNpZiBURzNfVkxBTl9UQUdfVVNFRAotCQkJaWYgKHRwLT52bGdycCkKLQkJCQlod192bGFuID0gdHJ1ZTsKLQkJCWVsc2UKLSNlbmRpZgotCQkJewotCQkJCXN0cnVjdCB2bGFuX2V0aGhkciAqdmUgPSAoc3RydWN0IHZsYW5fZXRoaGRyICopCi0JCQkJCQkgICAgX19za2JfcHVzaChza2IsIFZMQU5fSExFTik7CisJCSAgICAhKHRwLT5yeF9tb2RlICYgUlhfTU9ERV9LRUVQX1ZMQU5fVEFHKSkKKwkJCV9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLAorCQkJCQkgICAgICAgZGVzYy0+ZXJyX3ZsYW4gJiBSWERfVkxBTl9NQVNLKTsKIAotCQkJCW1lbW1vdmUodmUsIHNrYi0+ZGF0YSArIFZMQU5fSExFTiwKLQkJCQkJRVRIX0FMRU4gKiAyKTsKLQkJCQl2ZS0+aF92bGFuX3Byb3RvID0gaHRvbnMoRVRIX1BfODAyMVEpOwotCQkJCXZlLT5oX3ZsYW5fVENJID0gaHRvbnModnRhZyk7Ci0JCQl9Ci0JCX0KLQotI2lmIFRHM19WTEFOX1RBR19VU0VECi0JCWlmIChod192bGFuKQotCQkJdmxhbl9ncm9fcmVjZWl2ZSgmdG5hcGktPm5hcGksIHRwLT52bGdycCwgdnRhZywgc2tiKTsKLQkJZWxzZQotI2VuZGlmCi0JCQluYXBpX2dyb19yZWNlaXZlKCZ0bmFwaS0+bmFwaSwgc2tiKTsKKwkJbmFwaV9ncm9fcmVjZWl2ZSgmdG5hcGktPm5hcGksIHNrYik7CiAKIAkJcmVjZWl2ZWQrKzsKIAkJYnVkZ2V0LS07CkBAIC01NzQwLDExICs1NzEwLDkgQEAKIAkJYmFzZV9mbGFncyB8PSBUWERfRkxBR19UQ1BVRFBfQ1NVTTsKIAl9CiAKLSNpZiBURzNfVkxBTl9UQUdfVVNFRAogCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpCiAJCWJhc2VfZmxhZ3MgfD0gKFRYRF9GTEFHX1ZMQU4gfAogCQkJICAgICAgICh2bGFuX3R4X3RhZ19nZXQoc2tiKSA8PCAxNikpOwotI2VuZGlmCiAKIAlsZW4gPSBza2JfaGVhZGxlbihza2IpOwogCkBAIC01OTg2LDExICs1OTU0LDEwIEBACiAJCQl9CiAJCX0KIAl9Ci0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKKwogCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpCiAJCWJhc2VfZmxhZ3MgfD0gKFRYRF9GTEFHX1ZMQU4gfAogCQkJICAgICAgICh2bGFuX3R4X3RhZ19nZXQoc2tiKSA8PCAxNikpOwotI2VuZGlmCiAKIAlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX0pVTUJPX0JERkxBRykgJiYKIAkgICAgIW1zcyAmJiBza2ItPmxlbiA+IFZMQU5fRVRIX0ZSQU1FX0xFTikKQEAgLTk1MzIsMTcgKzk0OTksMTAgQEAKIAlyeF9tb2RlID0gdHAtPnJ4X21vZGUgJiB+KFJYX01PREVfUFJPTUlTQyB8CiAJCQkJICBSWF9NT0RFX0tFRVBfVkxBTl9UQUcpOwogCisjaWYgIWRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVEpICYmICFkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKIAkvKiBXaGVuIEFTRiBpcyBpbiB1c2UsIHdlIGFsd2F5cyBrZWVwIHRoZSBSWF9NT0RFX0tFRVBfVkxBTl9UQUcKIAkgKiBmbGFnIGNsZWFyLgogCSAqLwotI2lmIFRHM19WTEFOX1RBR19VU0VECi0JaWYgKCF0cC0+dmxncnAgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpCi0JCXJ4X21vZGUgfD0gUlhfTU9ERV9LRUVQX1ZMQU5fVEFHOwotI2Vsc2UKLQkvKiBCeSBkZWZpbml0aW9uLCBWTEFOIGlzIGRpc2FibGVkIGFsd2F5cyBpbiB0aGlzCi0JICogY2FzZS4KLQkgKi8KIAlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpCiAJCXJ4X21vZGUgfD0gUlhfTU9ERV9LRUVQX1ZMQU5fVEFHOwogI2VuZGlmCkBAIC0xMTE5OCw3ICsxMTE1OCw5IEBACiAJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKQogCQkJYnJlYWs7CQkJLyogV2UgaGF2ZSBubyBQSFkgKi8KIAotCQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfTE9XX1BPV0VSKQorCQlpZiAoKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0xPV19QT1dFUikgfHwKKwkJICAgICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpICYmCisJCSAgICAgIW5ldGlmX3J1bm5pbmcoZGV2KSkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAogCQlzcGluX2xvY2tfYmgoJnRwLT5sb2NrKTsKQEAgLTExMjE0LDcgKzExMTc2LDkgQEAKIAkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX1BIWV9TRVJERVMpCiAJCQlicmVhazsJCQkvKiBXZSBoYXZlIG5vIFBIWSAqLwogCi0JCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19MT1dfUE9XRVIpCisJCWlmICgodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfTE9XX1BPV0VSKSB8fAorCQkgICAgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgJiYKKwkJICAgICAhbmV0aWZfcnVubmluZyhkZXYpKSkKIAkJCXJldHVybiAtRUFHQUlOOwogCiAJCXNwaW5fbG9ja19iaCgmdHAtPmxvY2spOwpAQCAtMTEyMzAsMzEgKzExMTk0LDYgQEAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKLSNpZiBURzNfVkxBTl9UQUdfVVNFRAotc3RhdGljIHZvaWQgdGczX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCkKLXsKLQlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQl0cC0+dmxncnAgPSBncnA7Ci0JCXJldHVybjsKLQl9Ci0KLQl0ZzNfbmV0aWZfc3RvcCh0cCk7Ci0KLQl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKLQotCXRwLT52bGdycCA9IGdycDsKLQotCS8qIFVwZGF0ZSBSWF9NT0RFX0tFRVBfVkxBTl9UQUcgYml0IGluIFJYX01PREUgcmVnaXN0ZXIuICovCi0JX190ZzNfc2V0X3J4X21vZGUoZGV2KTsKLQotCXRnM19uZXRpZl9zdGFydCh0cCk7Ci0KLQl0ZzNfZnVsbF91bmxvY2sodHApOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgdGczX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMpCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTMwNjYsOSArMTMwMDUsNyBAQAogCiBzdGF0aWMgdm9pZCBpbmxpbmUgdmxhbl9mZWF0dXJlc19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLSNpZiBURzNfVkxBTl9UQUdfVVNFRAogCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBmbGFnczsKLSNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHUzMiB0ZzNfcnhfcmV0X3Jpbmdfc2l6ZShzdHJ1Y3QgdGczICp0cCkKQEAgLTEzODYxLDExICsxMzc5OCwxMSBAQAogCWVsc2UKIAkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfUE9MTF9TRVJERVM7CiAKLQl0cC0+cnhfb2Zmc2V0ID0gTkVUX0lQX0FMSUdOICsgVEczX1JYX0hFQURST09NOworCXRwLT5yeF9vZmZzZXQgPSBORVRfSVBfQUxJR047CiAJdHAtPnJ4X2NvcHlfdGhyZXNoID0gVEczX1JYX0NPUFlfVEhSRVNIT0xEOwogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMSAmJgogCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BDSVhfTU9ERSkgIT0gMCkgewotCQl0cC0+cnhfb2Zmc2V0IC09IE5FVF9JUF9BTElHTjsKKwkJdHAtPnJ4X29mZnNldCA9IDA7CiAjaWZuZGVmIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTCiAJCXRwLT5yeF9jb3B5X3RocmVzaCA9IH4odTE2KTA7CiAjZW5kaWYKQEAgLTE0NjI5LDkgKzE0NTY2LDYgQEAKIAkubmRvX2RvX2lvY3RsCQk9IHRnM19pb2N0bCwKIAkubmRvX3R4X3RpbWVvdXQJCT0gdGczX3R4X3RpbWVvdXQsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IHRnM19jaGFuZ2VfbXR1LAotI2lmIFRHM19WTEFOX1RBR19VU0VECi0JLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gdGczX3ZsYW5fcnhfcmVnaXN0ZXIsCi0jZW5kaWYKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gdGczX3BvbGxfY29udHJvbGxlciwKICNlbmRpZgpAQCAtMTQ2NDgsOSArMTQ1ODIsNiBAQAogCS5uZG9fZG9faW9jdGwJCT0gdGczX2lvY3RsLAogCS5uZG9fdHhfdGltZW91dAkJPSB0ZzNfdHhfdGltZW91dCwKIAkubmRvX2NoYW5nZV9tdHUJCT0gdGczX2NoYW5nZV9tdHUsCi0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKLQkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIJPSB0ZzNfdmxhbl9yeF9yZWdpc3RlciwKLSNlbmRpZgogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSB0ZzNfcG9sbF9jb250cm9sbGVyLAogI2VuZGlmCkBAIC0xNDcwMCw5ICsxNDYzMSw3IEBACiAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCi0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKLSNlbmRpZgogCiAJdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXRwLT5wZGV2ID0gcGRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5oIGIvZHJpdmVycy9uZXQvdGczLmgKaW5kZXggZDYyYzhkOS4uZjUyODI0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmgKKysrIGIvZHJpdmVycy9uZXQvdGczLmgKQEAgLTI4MDgsOSArMjgwOCw2IEBACiAJdTMyCQkJCXJ4X3N0ZF9tYXhfcG9zdDsKIAl1MzIJCQkJcnhfb2Zmc2V0OwogCXUzMgkJCQlyeF9wa3RfbWFwX3N6OwotI2lmIFRHM19WTEFOX1RBR19VU0VECi0Jc3RydWN0IHZsYW5fZ3JvdXAJCSp2bGdycDsKLSNlbmRpZgogCiAKIAkvKiBiZWdpbiAiZXZlcnl0aGluZyBlbHNlIiBjYWNoZWxpbmUocykgc2VjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMKaW5kZXggZDc3NmM0YS4uNzExMzE2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGNkY19uY20uYwogICoKLSAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gMjAxMAorICogQ29weXJpZ2h0IChDKSBTVC1Fcmljc3NvbiAyMDEwLTIwMTEKICAqIENvbnRhY3Q6IEFsZXhleSBPcmlzaGtvIDxhbGV4ZXkub3Jpc2hrb0BzdGVyaWNzc29uLmNvbT4KICAqIE9yaWdpbmFsIGF1dGhvcjogSGFucyBQZXR0ZXIgU2VsYXNreSA8aGFucy5wZXR0ZXIuc2VsYXNreUBzdGVyaWNzc29uLmNvbT4KICAqCkBAIC01NCw3ICs1NCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiL3VzYm5ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9jZGMuaD4KIAotI2RlZmluZQlEUklWRVJfVkVSU0lPTgkJCQkiMzAtTm92LTIwMTAiCisjZGVmaW5lCURSSVZFUl9WRVJTSU9OCQkJCSI3LUZlYi0yMDExIgogCiAvKiBDREMgTkNNIHN1YmNsYXNzIDMuMi4xICovCiAjZGVmaW5lIFVTQl9DRENfTkNNX05EUDE2X0xFTkdUSF9NSU4JCTB4MTAKQEAgLTc3LDYgKzc3LDkgQEAKICAqLwogI2RlZmluZQlDRENfTkNNX0RQVF9EQVRBR1JBTVNfTUFYCQkzMgogCisvKiBNYXhpbXVtIGFtb3VudCBvZiBJTiBkYXRhZ3JhbXMgaW4gTlRCICovCisjZGVmaW5lCUNEQ19OQ01fRFBUX0RBVEFHUkFNU19JTl9NQVgJCTAgLyogdW5saW1pdGVkICovCisKIC8qIFJlc3RhcnQgdGhlIHRpbWVyLCBpZiBhbW91bnQgb2YgZGF0YWdyYW1zIGlzIGxlc3MgdGhhbiBnaXZlbiB2YWx1ZSAqLwogI2RlZmluZQlDRENfTkNNX1JFU1RBUlRfVElNRVJfREFUQUdSQU1fQ05UCTMKIApAQCAtODUsMTEgKzg4LDYgQEAKIAkoc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25jbV9udGgxNikgKyBzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX25kcDE2KSArIFwKIAkoQ0RDX05DTV9EUFRfREFUQUdSQU1TX01BWCArIDEpICogc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25jbV9kcGUxNikpCiAKLXN0cnVjdCBjb25uZWN0aW9uX3NwZWVkX2NoYW5nZSB7Ci0JX19sZTMyCVVTQml0UmF0ZTsgLyogaG9sZHMgM0dQUCBkb3dubGluayB2YWx1ZSwgYml0cyBwZXIgc2Vjb25kICovCi0JX19sZTMyCURTQml0UmF0ZTsgLyogaG9sZHMgM0dQUCB1cGxpbmsgdmFsdWUsIGJpdHMgcGVyIHNlY29uZCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KIHN0cnVjdCBjZGNfbmNtX2RhdGEgewogCXN0cnVjdCB1c2JfY2RjX25jbV9udGgxNiBudGgxNjsKIAlzdHJ1Y3QgdXNiX2NkY19uY21fbmRwMTYgbmRwMTY7CkBAIC0xOTgsMTAgKzE5NiwxMCBAQAogewogCXN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbiByZXE7CiAJdTMyIHZhbDsKLQlfX2xlMTYgbWF4X2RhdGFncmFtX3NpemU7CiAJdTggZmxhZ3M7CiAJdTggaWZhY2Vfbm87CiAJaW50IGVycjsKKwl1MTYgbnRiX2ZtdF9zdXBwb3J0ZWQ7CiAKIAlpZmFjZV9ubyA9IGN0eC0+Y29udHJvbC0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKIApAQCAtMjIzLDYgKzIyMSw5IEBACiAJY3R4LT50eF9yZW1haW5kZXIgPSBsZTE2X3RvX2NwdShjdHgtPm5jbV9wYXJtLndOZHBPdXRQYXlsb2FkUmVtYWluZGVyKTsKIAljdHgtPnR4X21vZHVsdXMgPSBsZTE2X3RvX2NwdShjdHgtPm5jbV9wYXJtLndOZHBPdXREaXZpc29yKTsKIAljdHgtPnR4X25kcF9tb2R1bHVzID0gbGUxNl90b19jcHUoY3R4LT5uY21fcGFybS53TmRwT3V0QWxpZ25tZW50KTsKKwkvKiBkZXZpY2VzIHByaW9yIHRvIE5DTSBFcnJhdGEgc2hhbGwgc2V0IHRoaXMgZmllbGQgdG8gemVybyAqLworCWN0eC0+dHhfbWF4X2RhdGFncmFtcyA9IGxlMTZfdG9fY3B1KGN0eC0+bmNtX3Bhcm0ud050Yk91dE1heERhdGFncmFtcyk7CisJbnRiX2ZtdF9zdXBwb3J0ZWQgPSBsZTE2X3RvX2NwdShjdHgtPm5jbV9wYXJtLmJtTnRiRm9ybWF0c1N1cHBvcnRlZCk7CiAKIAlpZiAoY3R4LT5mdW5jX2Rlc2MgIT0gTlVMTCkKIAkJZmxhZ3MgPSBjdHgtPmZ1bmNfZGVzYy0+Ym1OZXR3b3JrQ2FwYWJpbGl0aWVzOwpAQCAtMjMxLDIyICsyMzIsNTggQEAKIAogCXByX2RlYnVnKCJkd050YkluTWF4U2l6ZT0ldSBkd050Yk91dE1heFNpemU9JXUgIgogCQkgIndOZHBPdXRQYXlsb2FkUmVtYWluZGVyPSV1IHdOZHBPdXREaXZpc29yPSV1ICIKLQkJICJ3TmRwT3V0QWxpZ25tZW50PSV1IGZsYWdzPTB4JXhcbiIsCisJCSAid05kcE91dEFsaWdubWVudD0ldSB3TnRiT3V0TWF4RGF0YWdyYW1zPSV1IGZsYWdzPTB4JXhcbiIsCiAJCSBjdHgtPnJ4X21heCwgY3R4LT50eF9tYXgsIGN0eC0+dHhfcmVtYWluZGVyLCBjdHgtPnR4X21vZHVsdXMsCi0JCSBjdHgtPnR4X25kcF9tb2R1bHVzLCBmbGFncyk7CisJCSBjdHgtPnR4X25kcF9tb2R1bHVzLCBjdHgtPnR4X21heF9kYXRhZ3JhbXMsIGZsYWdzKTsKIAotCS8qIG1heCBjb3VudCBvZiB0eCBkYXRhZ3JhbXMgd2l0aG91dCB0ZXJtaW5hdGluZyBOVUxMIGVudHJ5ICovCi0JY3R4LT50eF9tYXhfZGF0YWdyYW1zID0gQ0RDX05DTV9EUFRfREFUQUdSQU1TX01BWDsKKwkvKiBtYXggY291bnQgb2YgdHggZGF0YWdyYW1zICovCisJaWYgKChjdHgtPnR4X21heF9kYXRhZ3JhbXMgPT0gMCkgfHwKKwkJCShjdHgtPnR4X21heF9kYXRhZ3JhbXMgPiBDRENfTkNNX0RQVF9EQVRBR1JBTVNfTUFYKSkKKwkJY3R4LT50eF9tYXhfZGF0YWdyYW1zID0gQ0RDX05DTV9EUFRfREFUQUdSQU1TX01BWDsKIAogCS8qIHZlcmlmeSBtYXhpbXVtIHNpemUgb2YgcmVjZWl2ZWQgTlRCIGluIGJ5dGVzICovCi0JaWYgKChjdHgtPnJ4X21heCA8Ci0JICAgIChDRENfTkNNX01JTl9IRFJfU0laRSArIENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUpKSB8fAotCSAgICAoY3R4LT5yeF9tYXggPiBDRENfTkNNX05UQl9NQVhfU0laRV9SWCkpIHsKKwlpZiAoY3R4LT5yeF9tYXggPCBVU0JfQ0RDX05DTV9OVEJfTUlOX0lOX1NJWkUpIHsKKwkJcHJfZGVidWcoIlVzaW5nIG1pbiByZWNlaXZlIGxlbmd0aD0lZFxuIiwKKwkJCQkJCVVTQl9DRENfTkNNX05UQl9NSU5fSU5fU0laRSk7CisJCWN0eC0+cnhfbWF4ID0gVVNCX0NEQ19OQ01fTlRCX01JTl9JTl9TSVpFOworCX0KKworCWlmIChjdHgtPnJ4X21heCA+IENEQ19OQ01fTlRCX01BWF9TSVpFX1JYKSB7CiAJCXByX2RlYnVnKCJVc2luZyBkZWZhdWx0IG1heGltdW0gcmVjZWl2ZSBsZW5ndGg9JWRcbiIsCiAJCQkJCQlDRENfTkNNX05UQl9NQVhfU0laRV9SWCk7CiAJCWN0eC0+cnhfbWF4ID0gQ0RDX05DTV9OVEJfTUFYX1NJWkVfUlg7CiAJfQogCisJLyogaW5mb3JtIGRldmljZSBhYm91dCBOVEIgaW5wdXQgc2l6ZSBjaGFuZ2VzICovCisJaWYgKGN0eC0+cnhfbWF4ICE9IGxlMzJfdG9fY3B1KGN0eC0+bmNtX3Bhcm0uZHdOdGJJbk1heFNpemUpKSB7CisJCXJlcS5ibVJlcXVlc3RUeXBlID0gVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCB8CisJCQkJCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRTsKKwkJcmVxLmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19TRVRfTlRCX0lOUFVUX1NJWkU7CisJCXJlcS53VmFsdWUgPSAwOworCQlyZXEud0luZGV4ID0gY3B1X3RvX2xlMTYoaWZhY2Vfbm8pOworCisJCWlmIChmbGFncyAmIFVTQl9DRENfTkNNX05DQVBfTlRCX0lOUFVUX1NJWkUpIHsKKwkJCXN0cnVjdCB1c2JfY2RjX25jbV9uZHBfaW5wdXRfc2l6ZSBuZHBfaW5fc3o7CisKKwkJCXJlcS53TGVuZ3RoID0gODsKKwkJCW5kcF9pbl9zei5kd050YkluTWF4U2l6ZSA9IGNwdV90b19sZTMyKGN0eC0+cnhfbWF4KTsKKwkJCW5kcF9pbl9zei53TnRiSW5NYXhEYXRhZ3JhbXMgPQorCQkJCQljcHVfdG9fbGUxNihDRENfTkNNX0RQVF9EQVRBR1JBTVNfTUFYKTsKKwkJCW5kcF9pbl9zei53UmVzZXJ2ZWQgPSAwOworCQkJZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgJm5kcF9pbl9zeiwgMCwgTlVMTCwKKwkJCQkJCQkJCTEwMDApOworCQl9IGVsc2UgeworCQkJX19sZTMyIGR3TnRiSW5NYXhTaXplID0gY3B1X3RvX2xlMzIoY3R4LT5yeF9tYXgpOworCisJCQlyZXEud0xlbmd0aCA9IDQ7CisJCQllcnIgPSBjZGNfbmNtX2RvX3JlcXVlc3QoY3R4LCAmcmVxLCAmZHdOdGJJbk1heFNpemUsIDAsCisJCQkJCQkJCU5VTEwsIDEwMDApOworCQl9CisKKwkJaWYgKGVycikKKwkJCXByX2RlYnVnKCJTZXR0aW5nIE5UQiBJbnB1dCBTaXplIGZhaWxlZFxuIik7CisJfQorCiAJLyogdmVyaWZ5IG1heGltdW0gc2l6ZSBvZiB0cmFuc21pdHRlZCBOVEIgaW4gYnl0ZXMgKi8KIAlpZiAoKGN0eC0+dHhfbWF4IDwKIAkgICAgKENEQ19OQ01fTUlOX0hEUl9TSVpFICsgQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRSkpIHx8CkBAIC0yOTcsNDcgKzMzNCw4NCBAQAogCS8qIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiAqLwogCiAJLyogc2V0IENSQyBNb2RlICovCi0JcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRTsKLQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX1NFVF9DUkNfTU9ERTsKLQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYoVVNCX0NEQ19OQ01fQ1JDX05PVF9BUFBFTkRFRCk7Ci0JcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKLQlyZXEud0xlbmd0aCA9IDA7CisJaWYgKGZsYWdzICYgVVNCX0NEQ19OQ01fTkNBUF9DUkNfTU9ERSkgeworCQlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQgfAorCQkJCQkJCVVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJCXJlcS5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfU0VUX0NSQ19NT0RFOworCQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYoVVNCX0NEQ19OQ01fQ1JDX05PVF9BUFBFTkRFRCk7CisJCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpZmFjZV9ubyk7CisJCXJlcS53TGVuZ3RoID0gMDsKIAotCWVyciA9IGNkY19uY21fZG9fcmVxdWVzdChjdHgsICZyZXEsIE5VTEwsIDAsIE5VTEwsIDEwMDApOwotCWlmIChlcnIpCi0JCXByX2RlYnVnKCJTZXR0aW5nIENSQyBtb2RlIG9mZiBmYWlsZWRcbiIpOworCQllcnIgPSBjZGNfbmNtX2RvX3JlcXVlc3QoY3R4LCAmcmVxLCBOVUxMLCAwLCBOVUxMLCAxMDAwKTsKKwkJaWYgKGVycikKKwkJCXByX2RlYnVnKCJTZXR0aW5nIENSQyBtb2RlIG9mZiBmYWlsZWRcbiIpOworCX0KIAotCS8qIHNldCBOVEIgZm9ybWF0ICovCi0JcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRTsKLQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX1NFVF9OVEJfRk9STUFUOwotCXJlcS53VmFsdWUgPSBjcHVfdG9fbGUxNihVU0JfQ0RDX05DTV9OVEIxNl9GT1JNQVQpOwotCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpZmFjZV9ubyk7Ci0JcmVxLndMZW5ndGggPSAwOworCS8qIHNldCBOVEIgZm9ybWF0LCBpZiBib3RoIGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLworCWlmIChudGJfZm10X3N1cHBvcnRlZCAmIFVTQl9DRENfTkNNX05USDMyX1NJR04pIHsKKwkJcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUIHwKKwkJCQkJCQlVU0JfUkVDSVBfSU5URVJGQUNFOworCQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX1NFVF9OVEJfRk9STUFUOworCQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYoVVNCX0NEQ19OQ01fTlRCMTZfRk9STUFUKTsKKwkJcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKKwkJcmVxLndMZW5ndGggPSAwOwogCi0JZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgTlVMTCwgMCwgTlVMTCwgMTAwMCk7Ci0JaWYgKGVycikKLQkJcHJfZGVidWcoIlNldHRpbmcgTlRCIGZvcm1hdCB0byAxNi1iaXQgZmFpbGVkXG4iKTsKKwkJZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgTlVMTCwgMCwgTlVMTCwgMTAwMCk7CisJCWlmIChlcnIpCisJCQlwcl9kZWJ1ZygiU2V0dGluZyBOVEIgZm9ybWF0IHRvIDE2LWJpdCBmYWlsZWRcbiIpOworCX0KKworCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPSBDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFOwogCiAJLyogc2V0IE1heCBEYXRhZ3JhbSBTaXplIChNVFUpICovCi0JcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFOwotCXJlcS5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfR0VUX01BWF9EQVRBR1JBTV9TSVpFOwotCXJlcS53VmFsdWUgPSAwOwotCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpZmFjZV9ubyk7Ci0JcmVxLndMZW5ndGggPSBjcHVfdG9fbGUxNigyKTsKKwlpZiAoZmxhZ3MgJiBVU0JfQ0RDX05DTV9OQ0FQX01BWF9EQVRBR1JBTV9TSVpFKSB7CisJCV9fbGUxNiBtYXhfZGF0YWdyYW1fc2l6ZTsKKwkJdTE2IGV0aF9tYXhfc3ogPSBsZTE2X3RvX2NwdShjdHgtPmV0aGVyX2Rlc2MtPndNYXhTZWdtZW50U2l6ZSk7CiAKLQllcnIgPSBjZGNfbmNtX2RvX3JlcXVlc3QoY3R4LCAmcmVxLCAmbWF4X2RhdGFncmFtX3NpemUsIDAsIE5VTEwsIDEwMDApOwotCWlmIChlcnIpIHsKLQkJcHJfZGVidWcoIiBHRVRfTUFYX0RBVEFHUkFNX1NJWkUgZmFpbGVkLCB1c2luZyBzaXplPSV1XG4iLAotCQkJIENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUpOwotCQkvKiB1c2UgZGVmYXVsdCAqLwotCQljdHgtPm1heF9kYXRhZ3JhbV9zaXplID0gQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRTsKLQl9IGVsc2UgewotCQljdHgtPm1heF9kYXRhZ3JhbV9zaXplID0gbGUxNl90b19jcHUobWF4X2RhdGFncmFtX3NpemUpOworCQlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiB8CisJCQkJCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRTsKKwkJcmVxLmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19HRVRfTUFYX0RBVEFHUkFNX1NJWkU7CisJCXJlcS53VmFsdWUgPSAwOworCQlyZXEud0luZGV4ID0gY3B1X3RvX2xlMTYoaWZhY2Vfbm8pOworCQlyZXEud0xlbmd0aCA9IGNwdV90b19sZTE2KDIpOwogCi0JCWlmIChjdHgtPm1heF9kYXRhZ3JhbV9zaXplIDwgQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRSkKLQkJCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPSBDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFOwotCQllbHNlIGlmIChjdHgtPm1heF9kYXRhZ3JhbV9zaXplID4gQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRSkKLQkJCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPSBDRENfTkNNX01BWF9EQVRBR1JBTV9TSVpFOworCQllcnIgPSBjZGNfbmNtX2RvX3JlcXVlc3QoY3R4LCAmcmVxLCAmbWF4X2RhdGFncmFtX3NpemUsIDAsIE5VTEwsCisJCQkJCQkJCQkxMDAwKTsKKwkJaWYgKGVycikgeworCQkJcHJfZGVidWcoIkdFVF9NQVhfREFUQUdSQU1fU0laRSBmYWlsZWQsIHVzZSBzaXplPSV1XG4iLAorCQkJCQkJQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRSk7CisJCX0gZWxzZSB7CisJCQljdHgtPm1heF9kYXRhZ3JhbV9zaXplID0gbGUxNl90b19jcHUobWF4X2RhdGFncmFtX3NpemUpOworCQkJLyogQ2hlY2sgRXRoIGRlc2NyaXB0b3IgdmFsdWUgKi8KKwkJCWlmIChldGhfbWF4X3N6IDwgQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRSkgeworCQkJCWlmIChjdHgtPm1heF9kYXRhZ3JhbV9zaXplID4gZXRoX21heF9zeikKKwkJCQkJY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA9IGV0aF9tYXhfc3o7CisJCQl9IGVsc2UgeworCQkJCWlmIChjdHgtPm1heF9kYXRhZ3JhbV9zaXplID4KKwkJCQkJCUNEQ19OQ01fTUFYX0RBVEFHUkFNX1NJWkUpCisJCQkJCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPQorCQkJCQkJQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRTsKKwkJCX0KKworCQkJaWYgKGN0eC0+bWF4X2RhdGFncmFtX3NpemUgPCBDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFKQorCQkJCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPQorCQkJCQlDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFOworCisJCQkvKiBpZiB2YWx1ZSBjaGFuZ2VkLCB1cGRhdGUgZGV2aWNlICovCisJCQlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQgfAorCQkJCQkJCVVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJCQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX1NFVF9NQVhfREFUQUdSQU1fU0laRTsKKwkJCXJlcS53VmFsdWUgPSAwOworCQkJcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKKwkJCXJlcS53TGVuZ3RoID0gMjsKKwkJCW1heF9kYXRhZ3JhbV9zaXplID0gY3B1X3RvX2xlMTYoY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSk7CisKKwkJCWVyciA9IGNkY19uY21fZG9fcmVxdWVzdChjdHgsICZyZXEsICZtYXhfZGF0YWdyYW1fc2l6ZSwKKwkJCQkJCQkJMCwgTlVMTCwgMTAwMCk7CisJCQlpZiAoZXJyKQorCQkJCXByX2RlYnVnKCJTRVRfTUFYX0RBVEFHUkFNX1NJWkUgZmFpbGVkXG4iKTsKKwkJfQorCiAJfQogCiAJaWYgKGN0eC0+bmV0ZGV2LT5tdHUgIT0gKGN0eC0+bWF4X2RhdGFncmFtX3NpemUgLSBFVEhfSExFTikpCkBAIC00NjYsMTkgKzU0MCwxMyBAQAogCiAJCQljdHgtPmV0aGVyX2Rlc2MgPQogCQkJCQkoY29uc3Qgc3RydWN0IHVzYl9jZGNfZXRoZXJfZGVzYyAqKWJ1ZjsKLQogCQkJZGV2LT5oYXJkX210dSA9CiAJCQkJbGUxNl90b19jcHUoY3R4LT5ldGhlcl9kZXNjLT53TWF4U2VnbWVudFNpemUpOwogCi0JCQlpZiAoZGV2LT5oYXJkX210dSA8Ci0JCQkgICAgKENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUgLSBFVEhfSExFTikpCi0JCQkJZGV2LT5oYXJkX210dSA9Ci0JCQkJCUNEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUgLSBFVEhfSExFTjsKLQotCQkJZWxzZSBpZiAoZGV2LT5oYXJkX210dSA+Ci0JCQkJIChDRENfTkNNX01BWF9EQVRBR1JBTV9TSVpFIC0gRVRIX0hMRU4pKQotCQkJCWRldi0+aGFyZF9tdHUgPQotCQkJCQlDRENfTkNNX01BWF9EQVRBR1JBTV9TSVpFIC0gRVRIX0hMRU47CisJCQlpZiAoZGV2LT5oYXJkX210dSA8IENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUpCisJCQkJZGV2LT5oYXJkX210dSA9CUNEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkU7CisJCQllbHNlIGlmIChkZXYtPmhhcmRfbXR1ID4gQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRSkKKwkJCQlkZXYtPmhhcmRfbXR1ID0JQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVVNCX0NEQ19OQ01fVFlQRToKQEAgLTYyOCwxMyArNjk2LDEzIEBACiAJdTMyIG9mZnNldDsKIAl1MzIgbGFzdF9vZmZzZXQ7CiAJdTE2IG4gPSAwOwotCXU4IHRpbWVvdXQgPSAwOworCXU4IHJlYWR5MnNlbmQgPSAwOwogCiAJLyogaWYgdGhlcmUgaXMgYSByZW1haW5pbmcgc2tiLCBpdCBnZXRzIHByaW9yaXR5ICovCiAJaWYgKHNrYiAhPSBOVUxMKQogCQlzd2FwKHNrYiwgY3R4LT50eF9yZW1fc2tiKTsKIAllbHNlCi0JCXRpbWVvdXQgPSAxOworCQlyZWFkeTJzZW5kID0gMTsKIAogCS8qCiAJICogKy0tLS0tLS0tLS0tLS0tLS0rCkBAIC02ODIsOSArNzUwLDEwIEBACiAKIAlmb3IgKDsgbiA8IGN0eC0+dHhfbWF4X2RhdGFncmFtczsgbisrKSB7CiAJCS8qIGNoZWNrIGlmIGVuZCBvZiB0cmFuc21pdCBidWZmZXIgaXMgcmVhY2hlZCAqLwotCQlpZiAob2Zmc2V0ID49IGN0eC0+dHhfbWF4KQorCQlpZiAob2Zmc2V0ID49IGN0eC0+dHhfbWF4KSB7CisJCQlyZWFkeTJzZW5kID0gMTsKIAkJCWJyZWFrOwotCisJCX0KIAkJLyogY29tcHV0ZSBtYXhpbXVtIGJ1ZmZlciBzaXplICovCiAJCXJlbSA9IGN0eC0+dHhfbWF4IC0gb2Zmc2V0OwogCkBAIC03MTEsOSArNzgwLDcgQEAKIAkJCQl9CiAJCQkJY3R4LT50eF9yZW1fc2tiID0gc2tiOwogCQkJCXNrYiA9IE5VTEw7Ci0KLQkJCQkvKiBsb29wIG9uZSBtb3JlIHRpbWUgKi8KLQkJCQl0aW1lb3V0ID0gMTsKKwkJCQlyZWFkeTJzZW5kID0gMTsKIAkJCX0KIAkJCWJyZWFrOwogCQl9CkBAIC03NTYsNyArODIzLDcgQEAKIAkJY3R4LT50eF9jdXJyX2xhc3Rfb2Zmc2V0ID0gbGFzdF9vZmZzZXQ7CiAJCWdvdG8gZXhpdF9ub19za2I7CiAKLQl9IGVsc2UgaWYgKChuIDwgY3R4LT50eF9tYXhfZGF0YWdyYW1zKSAmJiAodGltZW91dCA9PSAwKSkgeworCX0gZWxzZSBpZiAoKG4gPCBjdHgtPnR4X21heF9kYXRhZ3JhbXMpICYmIChyZWFkeTJzZW5kID09IDApKSB7CiAJCS8qIHdhaXQgZm9yIG1vcmUgZnJhbWVzICovCiAJCS8qIHB1c2ggdmFyaWFibGVzICovCiAJCWN0eC0+dHhfY3Vycl9za2IgPSBza2Jfb3V0OwpAQCAtODEzLDcgKzg4MCw3IEBACiAJCQkJCWNwdV90b19sZTE2KHNpemVvZihjdHgtPnR4X25jbS5udGgxNikpOwogCWN0eC0+dHhfbmNtLm50aDE2LndTZXF1ZW5jZSA9IGNwdV90b19sZTE2KGN0eC0+dHhfc2VxKTsKIAljdHgtPnR4X25jbS5udGgxNi53QmxvY2tMZW5ndGggPSBjcHVfdG9fbGUxNihsYXN0X29mZnNldCk7Ci0JY3R4LT50eF9uY20ubnRoMTYud0ZwSW5kZXggPSBBTElHTihzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX250aDE2KSwKKwljdHgtPnR4X25jbS5udGgxNi53TmRwSW5kZXggPSBBTElHTihzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX250aDE2KSwKIAkJCQkJCQljdHgtPnR4X25kcF9tb2R1bHVzKTsKIAogCW1lbWNweShza2Jfb3V0LT5kYXRhLCAmKGN0eC0+dHhfbmNtLm50aDE2KSwgc2l6ZW9mKGN0eC0+dHhfbmNtLm50aDE2KSk7CkBAIC04MjUsMTMgKzg5MiwxMyBAQAogCXJlbSA9IHNpemVvZihjdHgtPnR4X25jbS5uZHAxNikgKyAoKGN0eC0+dHhfY3Vycl9mcmFtZV9udW0gKyAxKSAqCiAJCQkJCXNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fZHBlMTYpKTsKIAljdHgtPnR4X25jbS5uZHAxNi53TGVuZ3RoID0gY3B1X3RvX2xlMTYocmVtKTsKLQljdHgtPnR4X25jbS5uZHAxNi53TmV4dEZwSW5kZXggPSAwOyAvKiByZXNlcnZlZCAqLworCWN0eC0+dHhfbmNtLm5kcDE2LndOZXh0TmRwSW5kZXggPSAwOyAvKiByZXNlcnZlZCAqLwogCi0JbWVtY3B5KCgodTggKilza2Jfb3V0LT5kYXRhKSArIGN0eC0+dHhfbmNtLm50aDE2LndGcEluZGV4LAorCW1lbWNweSgoKHU4ICopc2tiX291dC0+ZGF0YSkgKyBjdHgtPnR4X25jbS5udGgxNi53TmRwSW5kZXgsCiAJCQkJCQkmKGN0eC0+dHhfbmNtLm5kcDE2KSwKIAkJCQkJCXNpemVvZihjdHgtPnR4X25jbS5uZHAxNikpOwogCi0JbWVtY3B5KCgodTggKilza2Jfb3V0LT5kYXRhKSArIGN0eC0+dHhfbmNtLm50aDE2LndGcEluZGV4ICsKKwltZW1jcHkoKCh1OCAqKXNrYl9vdXQtPmRhdGEpICsgY3R4LT50eF9uY20ubnRoMTYud05kcEluZGV4ICsKIAkJCQkJc2l6ZW9mKGN0eC0+dHhfbmNtLm5kcDE2KSwKIAkJCQkJJihjdHgtPnR4X25jbS5kcGUxNiksCiAJCQkJCShjdHgtPnR4X2N1cnJfZnJhbWVfbnVtICsgMSkgKgpAQCAtODY4LDE1ICs5MzUsMTkgQEAKIAlpZiAoY3R4LT50eF90aW1lcl9wZW5kaW5nICE9IDApIHsKIAkJY3R4LT50eF90aW1lcl9wZW5kaW5nLS07CiAJCXJlc3RhcnQgPSAxOwotCX0gZWxzZQorCX0gZWxzZSB7CiAJCXJlc3RhcnQgPSAwOworCX0KIAogCXNwaW5fdW5sb2NrKCZjdHgtPm10eCk7CiAKLQlpZiAocmVzdGFydCkKKwlpZiAocmVzdGFydCkgeworCQlzcGluX2xvY2soJmN0eC0+bXR4KTsKIAkJY2RjX25jbV90eF90aW1lb3V0X3N0YXJ0KGN0eCk7Ci0JZWxzZSBpZiAoY3R4LT5uZXRkZXYgIT0gTlVMTCkKKwkJc3Bpbl91bmxvY2soJmN0eC0+bXR4KTsKKwl9IGVsc2UgaWYgKGN0eC0+bmV0ZGV2ICE9IE5VTEwpIHsKIAkJdXNibmV0X3N0YXJ0X3htaXQoTlVMTCwgY3R4LT5uZXRkZXYpOworCX0KIH0KIAogc3RhdGljIHN0cnVjdCBza19idWZmICoKQEAgLTkwMCw3ICs5NzEsNiBAQAogCXNrYl9vdXQgPSBjZGNfbmNtX2ZpbGxfdHhfZnJhbWUoY3R4LCBza2IpOwogCWlmIChjdHgtPnR4X2N1cnJfc2tiICE9IE5VTEwpCiAJCW5lZWRfdGltZXIgPSAxOwotCXNwaW5fdW5sb2NrKCZjdHgtPm10eCk7CiAKIAkvKiBTdGFydCB0aW1lciwgaWYgdGhlcmUgaXMgYSByZW1haW5pbmcgc2tiICovCiAJaWYgKG5lZWRfdGltZXIpCkBAIC05MDgsNiArOTc4LDggQEAKIAogCWlmIChza2Jfb3V0KQogCQlkZXYtPm5ldC0+c3RhdHMudHhfcGFja2V0cyArPSBjdHgtPnR4X2N1cnJfZnJhbWVfbnVtOworCisJc3Bpbl91bmxvY2soJmN0eC0+bXR4KTsKIAlyZXR1cm4gc2tiX291dDsKIAogZXJyb3I6CkBAIC05NTYsNyArMTAyOCw3IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JdGVtcCA9IGxlMTZfdG9fY3B1KGN0eC0+cnhfbmNtLm50aDE2LndGcEluZGV4KTsKKwl0ZW1wID0gbGUxNl90b19jcHUoY3R4LT5yeF9uY20ubnRoMTYud05kcEluZGV4KTsKIAlpZiAoKHRlbXAgKyBzaXplb2YoY3R4LT5yeF9uY20ubmRwMTYpKSA+IGFjdGxlbikgewogCQlwcl9kZWJ1ZygiaW52YWxpZCBEUFQxNiBpbmRleFxuIik7CiAJCWdvdG8gZXJyb3I7CkBAIC0xMDIwLDggKzEwOTIsOCBAQAogCQlpZiAoKChvZmZzZXQgKyB0ZW1wKSA+IGFjdGxlbikgfHwKIAkJICAgICh0ZW1wID4gQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRSkgfHwgKHRlbXAgPCBFVEhfSExFTikpIHsKIAkJCXByX2RlYnVnKCJpbnZhbGlkIGZyYW1lIGRldGVjdGVkIChpZ25vcmVkKSIKLQkJCQkib2Zmc2V0WyV1XT0ldSwgbGVuZ3RoPSV1LCBza2I9JXBcbiIsCi0JCQkJCQkJeCwgb2Zmc2V0LCB0ZW1wLCBza2JfaW4pOworCQkJCQkib2Zmc2V0WyV1XT0ldSwgbGVuZ3RoPSV1LCBza2I9JXBcbiIsCisJCQkJCXgsIG9mZnNldCwgdGVtcCwgc2tiX2luKTsKIAkJCWlmICgheCkKIAkJCQlnb3RvIGVycm9yOwogCQkJYnJlYWs7CkBAIC0xMDQzLDEwICsxMTE1LDEwIEBACiAKIHN0YXRpYyB2b2lkCiBjZGNfbmNtX3NwZWVkX2NoYW5nZShzdHJ1Y3QgY2RjX25jbV9jdHggKmN0eCwKLQkJICAgICBzdHJ1Y3QgY29ubmVjdGlvbl9zcGVlZF9jaGFuZ2UgKmRhdGEpCisJCSAgICAgc3RydWN0IHVzYl9jZGNfc3BlZWRfY2hhbmdlICpkYXRhKQogewotCXVpbnQzMl90IHJ4X3NwZWVkID0gbGUzMl90b19jcHUoZGF0YS0+VVNCaXRSYXRlKTsKLQl1aW50MzJfdCB0eF9zcGVlZCA9IGxlMzJfdG9fY3B1KGRhdGEtPkRTQml0UmF0ZSk7CisJdWludDMyX3Qgcnhfc3BlZWQgPSBsZTMyX3RvX2NwdShkYXRhLT5ETEJpdFJSYXRlKTsKKwl1aW50MzJfdCB0eF9zcGVlZCA9IGxlMzJfdG9fY3B1KGRhdGEtPlVMQml0UmF0ZSk7CiAKIAkvKgogCSAqIEN1cnJlbnRseSB0aGUgVVNCLU5FVCBBUEkgZG9lcyBub3Qgc3VwcG9ydCByZXBvcnRpbmcgdGhlIGFjdHVhbApAQCAtMTA4Nyw3ICsxMTU5LDcgQEAKIAkvKiB0ZXN0IGZvciBzcGxpdCBkYXRhIGluIDgtYnl0ZSBjaHVua3MgKi8KIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEVWRU5UX1NUU19TUExJVCwgJmRldi0+ZmxhZ3MpKSB7CiAJCWNkY19uY21fc3BlZWRfY2hhbmdlKGN0eCwKLQkJICAgICAgKHN0cnVjdCBjb25uZWN0aW9uX3NwZWVkX2NoYW5nZSAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJICAgICAgKHN0cnVjdCB1c2JfY2RjX3NwZWVkX2NoYW5nZSAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTExNSwxMiArMTE4NywxMiBAQAogCQlicmVhazsKIAogCWNhc2UgVVNCX0NEQ19OT1RJRllfU1BFRURfQ0hBTkdFOgotCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDwKLQkJICAgIChzaXplb2YoKmV2ZW50KSArIHNpemVvZihzdHJ1Y3QgY29ubmVjdGlvbl9zcGVlZF9jaGFuZ2UpKSkKKwkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8IChzaXplb2YoKmV2ZW50KSArCisJCQkJCXNpemVvZihzdHJ1Y3QgdXNiX2NkY19zcGVlZF9jaGFuZ2UpKSkKIAkJCXNldF9iaXQoRVZFTlRfU1RTX1NQTElULCAmZGV2LT5mbGFncyk7CiAJCWVsc2UKIAkJCWNkY19uY21fc3BlZWRfY2hhbmdlKGN0eCwKLQkJCQkoc3RydWN0IGNvbm5lY3Rpb25fc3BlZWRfY2hhbmdlICopICZldmVudFsxXSk7CisJCQkJKHN0cnVjdCB1c2JfY2RjX3NwZWVkX2NoYW5nZSAqKSAmZXZlbnRbMV0pOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMgYi9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKaW5kZXggMDJiNjIyZS4uNTAwMmY1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYwpAQCAtNjUxLDYgKzY1MSwxMCBAQAogCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSZkbTk2MDFfaW5mbywKIAkgfSwKIAl7CisJIFVTQl9ERVZJQ0UoMHgwZmU2LCAweDk3MDApLAkvKiBETTk2MDEgVVNCIHRvIEZhc3QgRXRoZXJuZXQgQWRhcHRlciAqLworCSAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmZG05NjAxX2luZm8sCisJIH0sCisJewogCSBVU0JfREVWSUNFKDB4MGE0NiwgMHg5MDAwKSwJLyogRE05MDAwRSAqLwogCSAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmZG05NjAxX2luZm8sCiAJIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaHNvLmMgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKaW5kZXggYmVkOGZjZS4uNmQ4MzgxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2hzby5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwpAQCAtMjYyOCwxNSArMjYyOCwxNSBAQAogCiBzdGF0aWMgdm9pZCBoc29fZnJlZV90aW9tZ2V0KHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwpCiB7Ci0Jc3RydWN0IGhzb190aW9jbWdldCAqdGlvY21nZXQgPSBzZXJpYWwtPnRpb2NtZ2V0OworCXN0cnVjdCBoc29fdGlvY21nZXQgKnRpb2NtZ2V0OworCWlmICghc2VyaWFsKQorCQlyZXR1cm47CisJdGlvY21nZXQgPSBzZXJpYWwtPnRpb2NtZ2V0OwogCWlmICh0aW9jbWdldCkgewotCQlpZiAodGlvY21nZXQtPnVyYikgewotCQkJdXNiX2ZyZWVfdXJiKHRpb2NtZ2V0LT51cmIpOwotCQkJdGlvY21nZXQtPnVyYiA9IE5VTEw7Ci0JCX0KKwkJdXNiX2ZyZWVfdXJiKHRpb2NtZ2V0LT51cmIpOworCQl0aW9jbWdldC0+dXJiID0gTlVMTDsKIAkJc2VyaWFsLT50aW9jbWdldCA9IE5VTEw7CiAJCWtmcmVlKHRpb2NtZ2V0KTsKLQogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jIGIvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCmluZGV4IDVlOTg2NDMuLjdkYzg0OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYworKysgYi9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKQEAgLTQwNiw2ICs0MDYsNyBAQAogCiAJaWYgKGZ3LT5zaXplID4gS0FXRVRIX0ZJUk1XQVJFX0JVRl9TSVpFKSB7CiAJCWVycigiRmlybXdhcmUgdG9vIGJpZzogJXp1IiwgZnctPnNpemUpOworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCWRhdGFfbGVuID0gZnctPnNpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKaW5kZXggZWQ5YTQxNi4uOTVjNDFkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwpAQCAtOTMxLDggKzkzMSwxMCBAQAogCQlpZiAodXJiICE9IE5VTEwpIHsKIAkJCWNsZWFyX2JpdCAoRVZFTlRfUlhfTUVNT1JZLCAmZGV2LT5mbGFncyk7CiAJCQlzdGF0dXMgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoZGV2LT5pbnRmKTsKLQkJCWlmIChzdGF0dXMgPCAwKQorCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQl1c2JfZnJlZV91cmIodXJiKTsKIAkJCQlnb3RvIGZhaWxfbG93bWVtOworCQkJfQogCQkJaWYgKHJ4X3N1Ym1pdCAoZGV2LCB1cmIsIEdGUF9LRVJORUwpID09IC1FTk9MSU5LKQogCQkJCXJlc2NoZWQgPSAwOwogCQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi0+aW50Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKaW5kZXggOTBhMjNlNC4uODJkYmE1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwpAQCAtNDQ2LDYgKzQ0NiwyMCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgdmlydG5ldF9uYXBpX2VuYWJsZShzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSkKK3sKKwluYXBpX2VuYWJsZSgmdmktPm5hcGkpOworCisJLyogSWYgYWxsIGJ1ZmZlcnMgd2VyZSBmaWxsZWQgYnkgb3RoZXIgc2lkZSBiZWZvcmUgd2UgbmFwaV9lbmFibGVkLCB3ZQorCSAqIHdvbid0IGdldCBhbm90aGVyIGludGVycnVwdCwgc28gcHJvY2VzcyBhbnkgb3V0c3RhbmRpbmcgcGFja2V0cworCSAqIG5vdy4gIHZpcnRuZXRfcG9sbCB3YW50cyByZS1lbmFibGUgdGhlIHF1ZXVlLCBzbyB3ZSBkaXNhYmxlIGhlcmUuCisJICogV2Ugc3luY2hyb25pemUgYWdhaW5zdCBpbnRlcnJ1cHRzIHZpYSBOQVBJX1NUQVRFX1NDSEVEICovCisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7CisJCXZpcnRxdWV1ZV9kaXNhYmxlX2NiKHZpLT5ydnEpOworCQlfX25hcGlfc2NoZWR1bGUoJnZpLT5uYXBpKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHJlZmlsbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aTsKQEAgLTQ1NCw3ICs0NjgsNyBAQAogCXZpID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aXJ0bmV0X2luZm8sIHJlZmlsbC53b3JrKTsKIAluYXBpX2Rpc2FibGUoJnZpLT5uYXBpKTsKIAlzdGlsbF9lbXB0eSA9ICF0cnlfZmlsbF9yZWN2KHZpLCBHRlBfS0VSTkVMKTsKLQluYXBpX2VuYWJsZSgmdmktPm5hcGkpOworCXZpcnRuZXRfbmFwaV9lbmFibGUodmkpOwogCiAJLyogSW4gdGhlb3J5LCB0aGlzIGNhbiBoYXBwZW46IGlmIHdlIGRvbid0IGdldCBhbnkgYnVmZmVycyBpbgogCSAqIHdlIHdpbGwgKm5ldmVyKiB0cnkgdG8gZmlsbCBhZ2Fpbi4gKi8KQEAgLTYzOCwxNiArNjUyLDcgQEAKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CiAKLQluYXBpX2VuYWJsZSgmdmktPm5hcGkpOwotCi0JLyogSWYgYWxsIGJ1ZmZlcnMgd2VyZSBmaWxsZWQgYnkgb3RoZXIgc2lkZSBiZWZvcmUgd2UgbmFwaV9lbmFibGVkLCB3ZQotCSAqIHdvbid0IGdldCBhbm90aGVyIGludGVycnVwdCwgc28gcHJvY2VzcyBhbnkgb3V0c3RhbmRpbmcgcGFja2V0cwotCSAqIG5vdy4gIHZpcnRuZXRfcG9sbCB3YW50cyByZS1lbmFibGUgdGhlIHF1ZXVlLCBzbyB3ZSBkaXNhYmxlIGhlcmUuCi0JICogV2Ugc3luY2hyb25pemUgYWdhaW5zdCBpbnRlcnJ1cHRzIHZpYSBOQVBJX1NUQVRFX1NDSEVEICovCi0JaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7Ci0JCXZpcnRxdWV1ZV9kaXNhYmxlX2NiKHZpLT5ydnEpOwotCQlfX25hcGlfc2NoZWR1bGUoJnZpLT5uYXBpKTsKLQl9CisJdmlydG5ldF9uYXBpX2VuYWJsZSh2aSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYwppbmRleCBkMTQzZThiLi5jYzE0YjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2Rydi5jCkBAIC00OCw2ICs0OCw5IEBACiBzdGF0aWMgaW50IGVuYWJsZV9tcSA9IDE7CiBzdGF0aWMgaW50IGlycV9zaGFyZV9tb2RlOwogCitzdGF0aWMgdm9pZAordm14bmV0M193cml0ZV9tYWNfYWRkcihzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLCB1OCAqbWFjKTsKKwogLyoKICAqICAgIEVuYWJsZS9EaXNhYmxlIHRoZSBnaXZlbiBpbnRyCiAgKi8KQEAgLTEzOSw5ICsxNDIsMTMgQEAKIHsKIAl1MzIgcmV0OwogCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwgVk1YTkVUM19DTURfR0VUX0xJTkspOwogCXJldCA9IFZNWE5FVDNfUkVBRF9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7CisKIAlhZGFwdGVyLT5saW5rX3NwZWVkID0gcmV0ID4+IDE2OwogCWlmIChyZXQgJiAxKSB7IC8qIExpbmsgaXMgdXAuICovCiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBOSUMgTGluayBpcyBVcCAlZCBNYnBzXG4iLApAQCAtMTgzLDggKzE5MCwxMCBAQAogCiAJLyogQ2hlY2sgaWYgdGhlcmUgaXMgYW4gZXJyb3Igb24geG1pdC9yZWN2IHF1ZXVlcyAqLwogCWlmIChldmVudHMgJiAoVk1YTkVUM19FQ1JfVFFFUlIgfCBWTVhORVQzX0VDUl9SUUVSUikpIHsKKwkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5jbWRfbG9jayk7CiAJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAogCQkJCSAgICAgICBWTVhORVQzX0NNRF9HRVRfUVVFVUVfU1RBVFVTKTsKKwkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPmNtZF9sb2NrKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQogCQkJaWYgKGFkYXB0ZXItPnRxZF9zdGFydFtpXS5zdGF0dXMuc3RvcHBlZCkKQEAgLTgwNCwzMCArODEzLDI1IEBACiAJCQkJICAgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSktPmRvZmYgKiA0OwogCQljdHgtPmNvcHlfc2l6ZSA9IGN0eC0+ZXRoX2lwX2hkcl9zaXplICsgY3R4LT5sNF9oZHJfc2l6ZTsKIAl9IGVsc2UgewotCQl1bnNpZ25lZCBpbnQgcHVsbF9zaXplOwotCiAJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CiAJCQljdHgtPmV0aF9pcF9oZHJfc2l6ZSA9IHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKTsKIAogCQkJaWYgKGN0eC0+aXB2NCkgewogCQkJCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKQogCQkJCQkJICAgIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpOwotCQkJCWlmIChpcGgtPnByb3RvY29sID09IElQUFJPVE9fVENQKSB7Ci0JCQkJCXB1bGxfc2l6ZSA9IGN0eC0+ZXRoX2lwX2hkcl9zaXplICsKLQkJCQkJCSAgICBzaXplb2Yoc3RydWN0IHRjcGhkcik7Ci0KLQkJCQkJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwKLQkJCQkJCQkJcHVsbF9zaXplKSkpIHsKLQkJCQkJCWdvdG8gZXJyOwotCQkJCQl9CisJCQkJaWYgKGlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCiAJCQkJCWN0eC0+bDRfaGRyX3NpemUgPSAoKHN0cnVjdCB0Y3BoZHIgKikKIAkJCQkJICAgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSktPmRvZmYgKiA0OwotCQkJCX0gZWxzZSBpZiAoaXBoLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgeworCQkJCWVsc2UgaWYgKGlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApCisJCQkJCS8qCisJCQkJCSAqIFVzZSB0Y3AgaGVhZGVyIHNpemUgc28gdGhhdCBieXRlcyB0bworCQkJCQkgKiBiZSBjb3BpZWQgYXJlIG1vcmUgdGhhbiByZXF1aXJlZCBieQorCQkJCQkgKiB0aGUgZGV2aWNlLgorCQkJCQkgKi8KIAkJCQkJY3R4LT5sNF9oZHJfc2l6ZSA9Ci0JCQkJCQkJc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCQkJCX0gZWxzZSB7CisJCQkJCQkJc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOworCQkJCWVsc2UKIAkJCQkJY3R4LT5sNF9oZHJfc2l6ZSA9IDA7Ci0JCQkJfQogCQkJfSBlbHNlIHsKIAkJCQkvKiBmb3Igc2ltcGxpY2l0eSwgZG9uJ3QgY29weSBMNCBoZWFkZXJzICovCiAJCQkJY3R4LT5sNF9oZHJfc2l6ZSA9IDA7CkBAIC0xODU5LDE4ICsxODYzLDE0IEBACiAJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IFZteG5ldDNfRHJpdmVyU2hhcmVkICpzaGFyZWQgPSBhZGFwdGVyLT5zaGFyZWQ7CiAJdTMyICp2ZlRhYmxlID0gYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnJ4RmlsdGVyQ29uZi52ZlRhYmxlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoZ3JwKSB7CiAJCS8qIGFkZCB2bGFuIHJ4IHN0cmlwcGluZy4gKi8KIAkJaWYgKGFkYXB0ZXItPm5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fUlgpIHsKIAkJCWludCBpOwotCQkJc3RydWN0IFZteG5ldDNfRFNEZXZSZWFkICpkZXZSZWFkID0gJnNoYXJlZC0+ZGV2UmVhZDsKIAkJCWFkYXB0ZXItPnZsYW5fZ3JwID0gZ3JwOwogCi0JCQkvKiB1cGRhdGUgRkVBVFVSRVMgdG8gZGV2aWNlICovCi0JCQlkZXZSZWFkLT5taXNjLnVwdEZlYXR1cmVzIHw9IFVQVDFfRl9SWFZMQU47Ci0JCQlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKLQkJCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9GRUFUVVJFKTsKIAkJCS8qCiAJCQkgKiAgQ2xlYXIgZW50aXJlIHZmVGFibGU7IHRoZW4gZW5hYmxlIHVudGFnZ2VkIHBrdHMuCiAJCQkgKiAgTm90ZTogc2V0dGluZyBvbmUgZW50cnkgaW4gdmZUYWJsZSB0byBub24temVybyB0dXJucwpAQCAtMTg4MCw4ICsxODgwLDEwIEBACiAJCQkJdmZUYWJsZVtpXSA9IDA7CiAKIAkJCVZNWE5FVDNfU0VUX1ZGVEFCTEVfRU5UUlkodmZUYWJsZSwgMCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAkJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAogCQkJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX1ZMQU5fRklMVEVSUyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRfbG9jaywgZmxhZ3MpOwogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdmxhbl9yeF9yZWdpc3RlciB3aGVuIGRldmljZSBoYXMgIgogCQkJICAgICAgICJubyBORVRJRl9GX0hXX1ZMQU5fUlhcbiIsIG5ldGRldi0+bmFtZSk7CkBAIC0xOTAwLDEzICsxOTAyLDEwIEBACiAJCQkJICovCiAJCQkJdmZUYWJsZVtpXSA9IDA7CiAJCQl9CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAkJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAogCQkJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX1ZMQU5fRklMVEVSUyk7Ci0KLQkJCS8qIHVwZGF0ZSBGRUFUVVJFUyB0byBkZXZpY2UgKi8KLQkJCWRldlJlYWQtPm1pc2MudXB0RmVhdHVyZXMgJj0gflVQVDFfRl9SWFZMQU47Ci0JCQlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKLQkJCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9GRUFUVVJFKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7CiAJCX0KIAl9CiB9CkBAIC0xOTM5LDEwICsxOTM4LDEzIEBACiB7CiAJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdTMyICp2ZlRhYmxlID0gYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnJ4RmlsdGVyQ29uZi52ZlRhYmxlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlWTVhORVQzX1NFVF9WRlRBQkxFX0VOVFJZKHZmVGFibGUsIHZpZCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7CiAJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCiAJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX1ZMQU5fRklMVEVSUyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIH0KIAogCkBAIC0xOTUxLDEwICsxOTUzLDEzIEBACiB7CiAJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdTMyICp2ZlRhYmxlID0gYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnJ4RmlsdGVyQ29uZi52ZlRhYmxlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlWTVhORVQzX0NMRUFSX1ZGVEFCTEVfRU5UUlkodmZUYWJsZSwgdmlkKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKIAkJCSAgICAgICBWTVhORVQzX0NNRF9VUERBVEVfVkxBTl9GSUxURVJTKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRfbG9jaywgZmxhZ3MpOwogfQogCiAKQEAgLTE5ODUsNiArMTk5MCw3IEBACiB2bXhuZXQzX3NldF9tYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IFZteG5ldDNfUnhGaWx0ZXJDb25mICpyeENvbmYgPQogCQkJCQkmYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnJ4RmlsdGVyQ29uZjsKIAl1OCAqbmV3X3RhYmxlID0gTlVMTDsKQEAgLTIwMjAsNiArMjAyNiw3IEBACiAJCXJ4Q29uZi0+bWZUYWJsZVBBID0gMDsKIAl9CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAlpZiAobmV3X21vZGUgIT0gcnhDb25mLT5yeE1vZGUpIHsKIAkJcnhDb25mLT5yeE1vZGUgPSBjcHVfdG9fbGUzMihuZXdfbW9kZSk7CiAJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELApAQCAtMjAyOCw2ICsyMDM1LDcgQEAKIAogCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAogCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9NQUNfRklMVEVSUyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAogCWtmcmVlKG5ld190YWJsZSk7CiB9CkBAIC0yMDgwLDEwICsyMDg4LDggQEAKIAkJZGV2UmVhZC0+bWlzYy51cHRGZWF0dXJlcyB8PSBVUFQxX0ZfTFJPOwogCQlkZXZSZWFkLT5taXNjLm1heE51bVJ4U0cgPSBjcHVfdG9fbGUxNigxICsgTUFYX1NLQl9GUkFHUyk7CiAJfQotCWlmICgoYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9SWCkgJiYKLQkgICAgYWRhcHRlci0+dmxhbl9ncnApIHsKKwlpZiAoYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9SWCkKIAkJZGV2UmVhZC0+bWlzYy51cHRGZWF0dXJlcyB8PSBVUFQxX0ZfUlhWTEFOOwotCX0KIAogCWRldlJlYWQtPm1pc2MubXR1ID0gY3B1X3RvX2xlMzIoYWRhcHRlci0+bmV0ZGV2LT5tdHUpOwogCWRldlJlYWQtPm1pc2MucXVldWVEZXNjUEEgPSBjcHVfdG9fbGU2NChhZGFwdGVyLT5xdWV1ZV9kZXNjX3BhKTsKQEAgLTIxNjgsNiArMjE3NCw4IEBACiAJLyogcnggZmlsdGVyIHNldHRpbmdzICovCiAJZGV2UmVhZC0+cnhGaWx0ZXJDb25mLnJ4TW9kZSA9IDA7CiAJdm14bmV0M19yZXN0b3JlX3ZsYW4oYWRhcHRlcik7CisJdm14bmV0M193cml0ZV9tYWNfYWRkcihhZGFwdGVyLCBhZGFwdGVyLT5uZXRkZXYtPmRldl9hZGRyKTsKKwogCS8qIHRoZSByZXN0IGFyZSBhbHJlYWR5IHplcm9lZCAqLwogfQogCkBAIC0yMTc3LDYgKzIxODUsNyBAQAogewogCWludCBlcnIsIGk7CiAJdTMyIHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGV2X2RiZygmYWRhcHRlci0+bmV0ZGV2LT5kZXYsICIlczogc2tiX2J1Zl9zaXplICVkLCByeF9idWZfcGVyX3BrdCAlZCwiCiAJCSIgcmluZyBzaXplcyAldSAldSAldVxuIiwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLApAQCAtMjIwNiw5ICsyMjE1LDExIEBACiAJCQkgICAgICAgYWRhcHRlci0+c2hhcmVkX3BhKSk7CiAJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19EU0FILCBWTVhORVQzX0dFVF9BRERSX0hJKAogCQkJICAgICAgIGFkYXB0ZXItPnNoYXJlZF9wYSkpOworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRfbG9jaywgZmxhZ3MpOwogCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAogCQkJICAgICAgIFZNWE5FVDNfQ01EX0FDVElWQVRFX0RFVik7CiAJcmV0ID0gVk1YTkVUM19SRUFEX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAogCWlmIChyZXQgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhY3RpdmF0ZSBkZXYgJXM6IGVycm9yICV1XG4iLApAQCAtMjI1NSw3ICsyMjY2LDEwIEBACiB2b2lkCiB2bXhuZXQzX3Jlc2V0X2RldihzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7CiAJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsIFZNWE5FVDNfQ01EX1JFU0VUX0RFVik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIH0KIAogCkBAIC0yMjYzLDEyICsyMjc3LDE1IEBACiB2bXhuZXQzX3F1aWVzY2VfZGV2KHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChWTVhORVQzX1NUQVRFX0JJVF9RVUlFU0NFRCwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJcmV0dXJuIDA7CiAKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRfbG9jaywgZmxhZ3MpOwogCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAogCQkJICAgICAgIFZNWE5FVDNfQ01EX1FVSUVTQ0VfREVWKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRfbG9jaywgZmxhZ3MpOwogCXZteG5ldDNfZGlzYWJsZV9hbGxfaW50cnMoYWRhcHRlcik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQpAQCAtMjQyNiw3ICsyNDQzLDcgQEAKIAlzeiA9IGFkYXB0ZXItPnJ4X2J1Zl9wZXJfcGt0ICogVk1YTkVUM19SSU5HX1NJWkVfQUxJR047CiAJcmluZzBfc2l6ZSA9IGFkYXB0ZXItPnJ4X3F1ZXVlWzBdLnJ4X3JpbmdbMF0uc2l6ZTsKIAlyaW5nMF9zaXplID0gKHJpbmcwX3NpemUgKyBzeiAtIDEpIC8gc3ogKiBzejsKLQlyaW5nMF9zaXplID0gbWluX3QodTMyLCBycS0+cnhfcmluZ1swXS5zaXplLCBWTVhORVQzX1JYX1JJTkdfTUFYX1NJWkUgLworCXJpbmcwX3NpemUgPSBtaW5fdCh1MzIsIHJpbmcwX3NpemUsIFZNWE5FVDNfUlhfUklOR19NQVhfU0laRSAvCiAJCQkgICBzeiAqIHN6KTsKIAlyaW5nMV9zaXplID0gYWRhcHRlci0+cnhfcXVldWVbMF0ucnhfcmluZ1sxXS5zaXplOwogCWNvbXBfc2l6ZSA9IHJpbmcwX3NpemUgKyByaW5nMV9zaXplOwpAQCAtMjY5NSw3ICsyNzEyLDcgQEAKIAkJCWJyZWFrOwogCQl9IGVsc2UgewogCQkJLyogSWYgZmFpbHMgdG8gZW5hYmxlIHJlcXVpcmVkIG51bWJlciBvZiBNU0kteCB2ZWN0b3JzCi0JCQkgKiB0cnkgZW5hYmxpbmcgMyBvZiB0aGVtLiBPbmUgZWFjaCBmb3IgcngsIHR4IGFuZCBldmVudAorCQkJICogdHJ5IGVuYWJsaW5nIG1pbmltdW0gbnVtYmVyIG9mIHZlY3RvcnMgcmVxdWlyZWQuCiAJCQkgKi8KIAkJCXZlY3RvcnMgPSB2ZWN0b3JfdGhyZXNob2xkOwogCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gZW5hYmxlICVkIE1TSS1YIGZvciAlcywgdHJ5IgpAQCAtMjcxOCw5ICsyNzM1LDExIEBACiAJdTMyIGNmZzsKIAogCS8qIGludHIgc2V0dGluZ3MgKi8KKwlzcGluX2xvY2soJmFkYXB0ZXItPmNtZF9sb2NrKTsKIAlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKIAkJCSAgICAgICBWTVhORVQzX0NNRF9HRVRfQ09ORl9JTlRSKTsKIAljZmcgPSBWTVhORVQzX1JFQURfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01EKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+Y21kX2xvY2spOwogCWFkYXB0ZXItPmludHIudHlwZSA9IGNmZyAmIDB4MzsKIAlhZGFwdGVyLT5pbnRyLm1hc2tfbW9kZSA9IChjZmcgPj4gMikgJiAweDM7CiAKQEAgLTI3NTUsNyArMjc3NCw3IEBACiAJCSAqLwogCQlpZiAoZXJyID09IFZNWE5FVDNfTElOVVhfTUlOX01TSVhfVkVDVCkgewogCQkJaWYgKGFkYXB0ZXItPnNoYXJlX2ludHIgIT0gVk1YTkVUM19JTlRSX0JVRERZU0hBUkUKLQkJCSAgICB8fCBhZGFwdGVyLT5udW1fcnhfcXVldWVzICE9IDIpIHsKKwkJCSAgICB8fCBhZGFwdGVyLT5udW1fcnhfcXVldWVzICE9IDEpIHsKIAkJCQlhZGFwdGVyLT5zaGFyZV9pbnRyID0gVk1YTkVUM19JTlRSX1RYU0hBUkU7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJOdW1iZXIgb2YgcnggcXVldWVzIDogMVxuIik7CiAJCQkJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IDE7CkBAIC0yOTA1LDYgKzI5MjQsNyBAQAogCWFkYXB0ZXItPm5ldGRldiA9IG5ldGRldjsKIAlhZGFwdGVyLT5wZGV2ID0gcGRldjsKIAorCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5jbWRfbG9jayk7CiAJYWRhcHRlci0+c2hhcmVkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKIAkJCSAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX0RyaXZlclNoYXJlZCksCiAJCQkgICZhZGFwdGVyLT5zaGFyZWRfcGEpOwpAQCAtMzEwOCwxMSArMzEyOCwxNSBAQAogCXU4ICphcnByZXE7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCXN0cnVjdCBpbl9pZmFkZHIgKmlmYTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpID0gMDsKIAogCWlmICghbmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQlyZXR1cm4gMDsKIAorCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCisJCW5hcGlfZGlzYWJsZSgmYWRhcHRlci0+cnhfcXVldWVbaV0ubmFwaSk7CisKIAl2bXhuZXQzX2Rpc2FibGVfYWxsX2ludHJzKGFkYXB0ZXIpOwogCXZteG5ldDNfZnJlZV9pcnFzKGFkYXB0ZXIpOwogCXZteG5ldDNfZnJlZV9pbnRyX3Jlc291cmNlcyhhZGFwdGVyKTsKQEAgLTMxODgsOCArMzIxMiwxMCBAQAogCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5wbUNvbmZEZXNjLmNvbmZQQSA9IGNwdV90b19sZTY0KHZpcnRfdG9fcGh5cygKIAkJCQkJCQkJIHBtQ29uZikpOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7CiAJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCiAJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX1BNQ0ZHKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRfbG9jaywgZmxhZ3MpOwogCiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgUE1TR19TVVNQRU5EKSwKQEAgLTMyMDQsNyArMzIzMCw4IEBACiBzdGF0aWMgaW50CiB2bXhuZXQzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBpID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXZpY2UpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CkBAIC0zMjMyLDEwICszMjU5LDE0IEBACiAKIAlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QwLCAwKTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRfbG9jaywgZmxhZ3MpOwogCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAogCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9QTUNGRyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAl2bXhuZXQzX2FsbG9jX2ludHJfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCXZteG5ldDNfcmVxdWVzdF9pcnFzKGFkYXB0ZXIpOworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCisJCW5hcGlfZW5hYmxlKCZhZGFwdGVyLT5yeF9xdWV1ZVtpXS5uYXBpKTsKIAl2bXhuZXQzX2VuYWJsZV9hbGxfaW50cnMoYWRhcHRlcik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZXRodG9vbC5jCmluZGV4IDhlMTdmYzguLjgxMjU0YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2V0aHRvb2wuYwpAQCAtNDUsNiArNDUsNyBAQAogdm14bmV0M19zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgdmFsKQogewogCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoYWRhcHRlci0+cnhjc3VtICE9IHZhbCkgewogCQlhZGFwdGVyLT5yeGNzdW0gPSB2YWw7CkBAIC01Niw4ICs1NywxMCBAQAogCQkJCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5taXNjLnVwdEZlYXR1cmVzICY9CiAJCQkJflVQVDFfRl9SWENTVU07CiAKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRfbG9jaywgZmxhZ3MpOwogCQkJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCiAJCQkJCSAgICAgICBWTVhORVQzX0NNRF9VUERBVEVfRkVBVFVSRSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRfbG9jaywgZmxhZ3MpOwogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtNjgsNzYgKzcxLDc4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHZteG5ldDNfc3RhdF9kZXNjCiB2bXhuZXQzX3RxX2Rldl9zdGF0c1tdID0gewogCS8qIGRlc2NyaXB0aW9uLCAgICAgICAgIG9mZnNldCAqLwotCXsgIlRTTyBwa3RzIHR4IiwgICAgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIFRTT1BrdHNUeE9LKSB9LAotCXsgIlRTTyBieXRlcyB0eCIsICAgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIFRTT0J5dGVzVHhPSykgfSwKLQl7ICJ1Y2FzdCBwa3RzIHR4IiwgICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9UeFN0YXRzLCB1Y2FzdFBrdHNUeE9LKSB9LAotCXsgInVjYXN0IGJ5dGVzIHR4IiwgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIHVjYXN0Qnl0ZXNUeE9LKSB9LAotCXsgIm1jYXN0IHBrdHMgdHgiLCAgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIG1jYXN0UGt0c1R4T0spIH0sCi0JeyAibWNhc3QgYnl0ZXMgdHgiLCAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfVHhTdGF0cywgbWNhc3RCeXRlc1R4T0spIH0sCi0JeyAiYmNhc3QgcGt0cyB0eCIsICAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfVHhTdGF0cywgYmNhc3RQa3RzVHhPSykgfSwKLQl7ICJiY2FzdCBieXRlcyB0eCIsICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9UeFN0YXRzLCBiY2FzdEJ5dGVzVHhPSykgfSwKLQl7ICJwa3RzIHR4IGVyciIsICAgICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9UeFN0YXRzLCBwa3RzVHhFcnJvcikgfSwKLQl7ICJwa3RzIHR4IGRpc2NhcmQiLCAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9UeFN0YXRzLCBwa3RzVHhEaXNjYXJkKSB9LAorCXsgIlR4IFF1ZXVlIyIsICAgICAgICAwIH0sCisJeyAiICBUU08gcGt0cyB0eCIsCW9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIFRTT1BrdHNUeE9LKSB9LAorCXsgIiAgVFNPIGJ5dGVzIHR4IiwJb2Zmc2V0b2Yoc3RydWN0IFVQVDFfVHhTdGF0cywgVFNPQnl0ZXNUeE9LKSB9LAorCXsgIiAgdWNhc3QgcGt0cyB0eCIsCW9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIHVjYXN0UGt0c1R4T0spIH0sCisJeyAiICB1Y2FzdCBieXRlcyB0eCIsCW9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIHVjYXN0Qnl0ZXNUeE9LKSB9LAorCXsgIiAgbWNhc3QgcGt0cyB0eCIsCW9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIG1jYXN0UGt0c1R4T0spIH0sCisJeyAiICBtY2FzdCBieXRlcyB0eCIsCW9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIG1jYXN0Qnl0ZXNUeE9LKSB9LAorCXsgIiAgYmNhc3QgcGt0cyB0eCIsCW9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIGJjYXN0UGt0c1R4T0spIH0sCisJeyAiICBiY2FzdCBieXRlcyB0eCIsCW9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIGJjYXN0Qnl0ZXNUeE9LKSB9LAorCXsgIiAgcGt0cyB0eCBlcnIiLAlvZmZzZXRvZihzdHJ1Y3QgVVBUMV9UeFN0YXRzLCBwa3RzVHhFcnJvcikgfSwKKwl7ICIgIHBrdHMgdHggZGlzY2FyZCIsCW9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIHBrdHNUeERpc2NhcmQpIH0sCiB9OwogCiAvKiBwZXIgdHEgc3RhdHMgbWFpbnRhaW5lZCBieSB0aGUgZHJpdmVyICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZteG5ldDNfc3RhdF9kZXNjCiB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0c1tdID0gewogCS8qIGRlc2NyaXB0aW9uLCAgICAgICAgIG9mZnNldCAqLwotCXsiZHJ2IGRyb3BwZWQgdHggdG90YWwiLCBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMsCi0JCQkJCWRyb3BfdG90YWwpIH0sCi0JeyAiICAgdG9vIG1hbnkgZnJhZ3MiLCAgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzLAotCQkJCQlkcm9wX3Rvb19tYW55X2ZyYWdzKSB9LAotCXsgIiAgIGdpYW50IGhkciIsICAgICAgIG9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cywKLQkJCQkJZHJvcF9vdmVyc2l6ZWRfaGRyKSB9LAotCXsgIiAgIGhkciBlcnIiLCAgICAgICAgIG9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cywKLQkJCQkJZHJvcF9oZHJfaW5zcGVjdF9lcnIpIH0sCi0JeyAiICAgdHNvIiwgICAgICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzLAotCQkJCQlkcm9wX3RzbykgfSwKLQl7ICJyaW5nIGZ1bGwiLCAgICAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMsCi0JCQkJCXR4X3JpbmdfZnVsbCkgfSwKLQl7ICJwa3RzIGxpbmVhcml6ZWQiLCAgICBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMsCi0JCQkJCWxpbmVhcml6ZWQpIH0sCi0JeyAiaGRyIGNsb25lZCIsICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzLAotCQkJCQljb3B5X3NrYl9oZWFkZXIpIH0sCi0JeyAiZ2lhbnQgaGRyIiwgICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzLAotCQkJCQlvdmVyc2l6ZWRfaGRyKSB9LAorCXsiICBkcnYgZHJvcHBlZCB0eCB0b3RhbCIsCW9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cywKKwkJCQkJCSBkcm9wX3RvdGFsKSB9LAorCXsgIiAgICAgdG9vIG1hbnkgZnJhZ3MiLCBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMsCisJCQkJCSAgZHJvcF90b29fbWFueV9mcmFncykgfSwKKwl7ICIgICAgIGdpYW50IGhkciIsCW9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cywKKwkJCQkJIGRyb3Bfb3ZlcnNpemVkX2hkcikgfSwKKwl7ICIgICAgIGhkciBlcnIiLAlvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMsCisJCQkJCSBkcm9wX2hkcl9pbnNwZWN0X2VycikgfSwKKwl7ICIgICAgIHRzbyIsCQlvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMsCisJCQkJCSBkcm9wX3RzbykgfSwKKwl7ICIgIHJpbmcgZnVsbCIsCW9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cywKKwkJCQkJIHR4X3JpbmdfZnVsbCkgfSwKKwl7ICIgIHBrdHMgbGluZWFyaXplZCIsCW9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cywKKwkJCQkJIGxpbmVhcml6ZWQpIH0sCisJeyAiICBoZHIgY2xvbmVkIiwJb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzLAorCQkJCQkgY29weV9za2JfaGVhZGVyKSB9LAorCXsgIiAgZ2lhbnQgaGRyIiwJb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzLAorCQkJCQkgb3ZlcnNpemVkX2hkcikgfSwKIH07CiAKIC8qIHBlciBycSBzdGF0cyBtYWludGFpbmVkIGJ5IHRoZSBkZXZpY2UgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm14bmV0M19zdGF0X2Rlc2MKIHZteG5ldDNfcnFfZGV2X3N0YXRzW10gPSB7Ci0JeyAiTFJPIHBrdHMgcngiLCAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgTFJPUGt0c1J4T0spIH0sCi0JeyAiTFJPIGJ5dGUgcngiLCAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgTFJPQnl0ZXNSeE9LKSB9LAotCXsgInVjYXN0IHBrdHMgcngiLCAgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1J4U3RhdHMsIHVjYXN0UGt0c1J4T0spIH0sCi0JeyAidWNhc3QgYnl0ZXMgcngiLCAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgdWNhc3RCeXRlc1J4T0spIH0sCi0JeyAibWNhc3QgcGt0cyByeCIsICAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgbWNhc3RQa3RzUnhPSykgfSwKLQl7ICJtY2FzdCBieXRlcyByeCIsICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9SeFN0YXRzLCBtY2FzdEJ5dGVzUnhPSykgfSwKLQl7ICJiY2FzdCBwa3RzIHJ4IiwgICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9SeFN0YXRzLCBiY2FzdFBrdHNSeE9LKSB9LAotCXsgImJjYXN0IGJ5dGVzIHJ4IiwgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1J4U3RhdHMsIGJjYXN0Qnl0ZXNSeE9LKSB9LAotCXsgInBrdHMgcnggb3V0IG9mIGJ1ZiIsIG9mZnNldG9mKHN0cnVjdCBVUFQxX1J4U3RhdHMsIHBrdHNSeE91dE9mQnVmKSB9LAotCXsgInBrdHMgcnggZXJyIiwgICAgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1J4U3RhdHMsIHBrdHNSeEVycm9yKSB9LAorCXsgIlJ4IFF1ZXVlIyIsICAgICAgICAwIH0sCisJeyAiICBMUk8gcGt0cyByeCIsCW9mZnNldG9mKHN0cnVjdCBVUFQxX1J4U3RhdHMsIExST1BrdHNSeE9LKSB9LAorCXsgIiAgTFJPIGJ5dGUgcngiLAlvZmZzZXRvZihzdHJ1Y3QgVVBUMV9SeFN0YXRzLCBMUk9CeXRlc1J4T0spIH0sCisJeyAiICB1Y2FzdCBwa3RzIHJ4IiwJb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgdWNhc3RQa3RzUnhPSykgfSwKKwl7ICIgIHVjYXN0IGJ5dGVzIHJ4IiwJb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgdWNhc3RCeXRlc1J4T0spIH0sCisJeyAiICBtY2FzdCBwa3RzIHJ4IiwJb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgbWNhc3RQa3RzUnhPSykgfSwKKwl7ICIgIG1jYXN0IGJ5dGVzIHJ4IiwJb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgbWNhc3RCeXRlc1J4T0spIH0sCisJeyAiICBiY2FzdCBwa3RzIHJ4IiwJb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgYmNhc3RQa3RzUnhPSykgfSwKKwl7ICIgIGJjYXN0IGJ5dGVzIHJ4IiwJb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgYmNhc3RCeXRlc1J4T0spIH0sCisJeyAiICBwa3RzIHJ4IE9PQiIsCW9mZnNldG9mKHN0cnVjdCBVUFQxX1J4U3RhdHMsIHBrdHNSeE91dE9mQnVmKSB9LAorCXsgIiAgcGt0cyByeCBlcnIiLAlvZmZzZXRvZihzdHJ1Y3QgVVBUMV9SeFN0YXRzLCBwa3RzUnhFcnJvcikgfSwKIH07CiAKIC8qIHBlciBycSBzdGF0cyBtYWludGFpbmVkIGJ5IHRoZSBkcml2ZXIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm14bmV0M19zdGF0X2Rlc2MKIHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzW10gPSB7CiAJLyogZGVzY3JpcHRpb24sICAgICAgICAgb2Zmc2V0ICovCi0JeyAiZHJ2IGRyb3BwZWQgcnggdG90YWwiLCBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M19ycV9kcml2ZXJfc3RhdHMsCi0JCQkJCSAgIGRyb3BfdG90YWwpIH0sCi0JeyAiICAgZXJyIiwgICAgICAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M19ycV9kcml2ZXJfc3RhdHMsCi0JCQkJCWRyb3BfZXJyKSB9LAotCXsgIiAgIGZjcyIsICAgICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzLAotCQkJCQlkcm9wX2ZjcykgfSwKLQl7ICJyeCBidWYgYWxsb2MgZmFpbCIsIG9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cywKLQkJCQkJcnhfYnVmX2FsbG9jX2ZhaWx1cmUpIH0sCisJeyAiICBkcnYgZHJvcHBlZCByeCB0b3RhbCIsIG9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cywKKwkJCQkJICAgICBkcm9wX3RvdGFsKSB9LAorCXsgIiAgICAgZXJyIiwJCW9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cywKKwkJCQkJIGRyb3BfZXJyKSB9LAorCXsgIiAgICAgZmNzIiwJCW9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cywKKwkJCQkJIGRyb3BfZmNzKSB9LAorCXsgIiAgcnggYnVmIGFsbG9jIGZhaWwiLCBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M19ycV9kcml2ZXJfc3RhdHMsCisJCQkJCSAgcnhfYnVmX2FsbG9jX2ZhaWx1cmUpIH0sCiB9OwogCiAvKiBnbG9hYmwgc3RhdHMgbWFpbnRhaW5lZCBieSB0aGUgZHJpdmVyICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZteG5ldDNfc3RhdF9kZXNjCiB2bXhuZXQzX2dsb2JhbF9zdGF0c1tdID0gewogCS8qIGRlc2NyaXB0aW9uLCAgICAgICAgIG9mZnNldCAqLwotCXsgInR4IHRpbWVvdXQgY291bnQiLCAgIG9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIsCisJeyAidHggdGltZW91dCBjb3VudCIsCW9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIsCiAJCQkJCSB0eF90aW1lb3V0X2NvdW50KSB9CiB9OwogCkBAIC0xNTEsMTIgKzE1NiwxNSBAQAogCXN0cnVjdCBVUFQxX1R4U3RhdHMgKmRldlR4U3RhdHM7CiAJc3RydWN0IFVQVDFfUnhTdGF0cyAqZGV2UnhTdGF0czsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmV0X3N0YXRzID0gJm5ldGRldi0+c3RhdHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAogCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJLyogQ29sbGVjdCB0aGUgZGV2IHN0YXRzIGludG8gdGhlIHNoYXJlZCBhcmVhICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7CiAJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsIFZNWE5FVDNfQ01EX0dFVF9TVEFUUyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAogCW1lbXNldChuZXRfc3RhdHMsIDAsIHNpemVvZigqbmV0X3N0YXRzKSk7CiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgewpAQCAtMTkzLDEyICsyMDEsMTUgQEAKIHN0YXRpYyBpbnQKIHZteG5ldDNfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHNzZXQpCiB7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3dpdGNoIChzc2V0KSB7CiAJY2FzZSBFVEhfU1NfU1RBVFM6Ci0JCXJldHVybiBBUlJBWV9TSVpFKHZteG5ldDNfdHFfZGV2X3N0YXRzKSArCi0JCQlBUlJBWV9TSVpFKHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzKSArCi0JCQlBUlJBWV9TSVpFKHZteG5ldDNfcnFfZGV2X3N0YXRzKSArCi0JCQlBUlJBWV9TSVpFKHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzKSArCisJCXJldHVybiAoQVJSQVlfU0laRSh2bXhuZXQzX3RxX2Rldl9zdGF0cykgKworCQkJQVJSQVlfU0laRSh2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cykpICoKKwkJICAgICAgIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMgKworCQkgICAgICAgKEFSUkFZX1NJWkUodm14bmV0M19ycV9kZXZfc3RhdHMpICsKKwkJCUFSUkFZX1NJWkUodm14bmV0M19ycV9kcml2ZXJfc3RhdHMpKSAqCisJCSAgICAgICBhZGFwdGVyLT5udW1fcnhfcXVldWVzICsKIAkJCUFSUkFZX1NJWkUodm14bmV0M19nbG9iYWxfc3RhdHMpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTIwNiwxMCArMjE3LDE2IEBACiB9CiAKIAorLyogU2hvdWxkIGJlIG11bHRpcGxlIG9mIDQgKi8KKyNkZWZpbmUgTlVNX1RYX1JFR1MJOAorI2RlZmluZSBOVU1fUlhfUkVHUwkxMgorCiBzdGF0aWMgaW50CiB2bXhuZXQzX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewotCXJldHVybiAyMCAqIHNpemVvZih1MzIpOworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXJldHVybiAoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyAqIE5VTV9UWF9SRUdTICogc2l6ZW9mKHUzMikgKworCQlhZGFwdGVyLT5udW1fcnhfcXVldWVzICogTlVNX1JYX1JFR1MgKiBzaXplb2YodTMyKSk7CiB9CiAKIApAQCAtMjQwLDI5ICsyNTcsMzcgQEAKIHN0YXRpYyB2b2lkCiB2bXhuZXQzX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpidWYpCiB7CisJIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWlmIChzdHJpbmdzZXQgPT0gRVRIX1NTX1NUQVRTKSB7Ci0JCWludCBpOworCQlpbnQgaSwgajsKKwkJZm9yIChqID0gMDsgaiA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGorKykgeworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodm14bmV0M190cV9kZXZfc3RhdHMpOyBpKyspIHsKKwkJCQltZW1jcHkoYnVmLCB2bXhuZXQzX3RxX2Rldl9zdGF0c1tpXS5kZXNjLAorCQkJCSAgICAgICBFVEhfR1NUUklOR19MRU4pOworCQkJCWJ1ZiArPSBFVEhfR1NUUklOR19MRU47CisJCQl9CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cyk7CisJCQkgICAgIGkrKykgeworCQkJCW1lbWNweShidWYsIHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzW2ldLmRlc2MsCisJCQkJICAgICAgIEVUSF9HU1RSSU5HX0xFTik7CisJCQkJYnVmICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCX0KKwkJfQogCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZteG5ldDNfdHFfZGV2X3N0YXRzKTsgaSsrKSB7Ci0JCQltZW1jcHkoYnVmLCB2bXhuZXQzX3RxX2Rldl9zdGF0c1tpXS5kZXNjLAotCQkJICAgICAgIEVUSF9HU1RSSU5HX0xFTik7Ci0JCQlidWYgKz0gRVRIX0dTVFJJTkdfTEVOOworCQlmb3IgKGogPSAwOyBqIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaisrKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3JxX2Rldl9zdGF0cyk7IGkrKykgeworCQkJCW1lbWNweShidWYsIHZteG5ldDNfcnFfZGV2X3N0YXRzW2ldLmRlc2MsCisJCQkJICAgICAgIEVUSF9HU1RSSU5HX0xFTik7CisJCQkJYnVmICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCX0KKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzKTsKKwkJCSAgICAgaSsrKSB7CisJCQkJbWVtY3B5KGJ1Ziwgdm14bmV0M19ycV9kcml2ZXJfc3RhdHNbaV0uZGVzYywKKwkJCQkgICAgICAgRVRIX0dTVFJJTkdfTEVOKTsKKwkJCQlidWYgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJfQogCQl9Ci0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzKTsgaSsrKSB7Ci0JCQltZW1jcHkoYnVmLCB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0c1tpXS5kZXNjLAotCQkJICAgICAgIEVUSF9HU1RSSU5HX0xFTik7Ci0JCQlidWYgKz0gRVRIX0dTVFJJTkdfTEVOOwotCQl9Ci0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZteG5ldDNfcnFfZGV2X3N0YXRzKTsgaSsrKSB7Ci0JCQltZW1jcHkoYnVmLCB2bXhuZXQzX3JxX2Rldl9zdGF0c1tpXS5kZXNjLAotCQkJICAgICAgIEVUSF9HU1RSSU5HX0xFTik7Ci0JCQlidWYgKz0gRVRIX0dTVFJJTkdfTEVOOwotCQl9Ci0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzKTsgaSsrKSB7Ci0JCQltZW1jcHkoYnVmLCB2bXhuZXQzX3JxX2RyaXZlcl9zdGF0c1tpXS5kZXNjLAotCQkJICAgICAgIEVUSF9HU1RSSU5HX0xFTik7Ci0JCQlidWYgKz0gRVRIX0dTVFJJTkdfTEVOOwotCQl9CisKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodm14bmV0M19nbG9iYWxfc3RhdHMpOyBpKyspIHsKIAkJCW1lbWNweShidWYsIHZteG5ldDNfZ2xvYmFsX3N0YXRzW2ldLmRlc2MsCiAJCQkJRVRIX0dTVFJJTkdfTEVOKTsKQEAgLTI3Nyw2ICszMDIsNyBAQAogCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXU4IGxyb19yZXF1ZXN0ZWQgPSAoZGF0YSAmIEVUSF9GTEFHX0xSTykgPT0gMCA/IDAgOiAxOwogCXU4IGxyb19wcmVzZW50ID0gKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykgPT0gMCA/IDAgOiAxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoZGF0YSAmIH5FVEhfRkxBR19MUk8pCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTI5Miw4ICszMTgsMTAgQEAKIAkJZWxzZQogCQkJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLm1pc2MudXB0RmVhdHVyZXMgJj0KIAkJCQkJCQl+VVBUMV9GX0xSTzsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7CiAJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAogCQkJCSAgICAgICBWTVhORVQzX0NNRF9VUERBVEVfRkVBVFVSRSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMzAzLDMwICszMzEsNDEgQEAKIAkJCSAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgICpidWYpCiB7CiAJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCAqYmFzZTsKIAlpbnQgaTsKIAlpbnQgaiA9IDA7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwgVk1YTkVUM19DTURfR0VUX1NUQVRTKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRfbG9jaywgZmxhZ3MpOwogCiAJLyogdGhpcyBkb2VzIGFzc3VtZSBlYWNoIGNvdW50ZXIgaXMgNjQtYml0IHdpZGUgKi8KLS8qIFRPRE8gY2hhbmdlIHRoaXMgZm9yIG11bHRpcGxlIHF1ZXVlcyAqLworCWZvciAoaiA9IDA7IGogPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBqKyspIHsKKwkJYmFzZSA9ICh1OCAqKSZhZGFwdGVyLT50cWRfc3RhcnRbal0uc3RhdHM7CisJCSpidWYrKyA9ICh1NjQpajsKKwkJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUodm14bmV0M190cV9kZXZfc3RhdHMpOyBpKyspCisJCQkqYnVmKysgPSAqKHU2NCAqKShiYXNlICsKKwkJCQkJICB2bXhuZXQzX3RxX2Rldl9zdGF0c1tpXS5vZmZzZXQpOwogCi0JYmFzZSA9ICh1OCAqKSZhZGFwdGVyLT50cWRfc3RhcnRbal0uc3RhdHM7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodm14bmV0M190cV9kZXZfc3RhdHMpOyBpKyspCi0JCSpidWYrKyA9ICoodTY0ICopKGJhc2UgKyB2bXhuZXQzX3RxX2Rldl9zdGF0c1tpXS5vZmZzZXQpOworCQliYXNlID0gKHU4ICopJmFkYXB0ZXItPnR4X3F1ZXVlW2pdLnN0YXRzOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cyk7IGkrKykKKwkJCSpidWYrKyA9ICoodTY0ICopKGJhc2UgKworCQkJCQkgIHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzW2ldLm9mZnNldCk7CisJfQogCi0JYmFzZSA9ICh1OCAqKSZhZGFwdGVyLT50eF9xdWV1ZVtqXS5zdGF0czsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cyk7IGkrKykKLQkJKmJ1ZisrID0gKih1NjQgKikoYmFzZSArIHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzW2ldLm9mZnNldCk7CisJZm9yIChqID0gMDsgaiA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGorKykgeworCQliYXNlID0gKHU4ICopJmFkYXB0ZXItPnJxZF9zdGFydFtqXS5zdGF0czsKKwkJKmJ1ZisrID0gKHU2NCkgajsKKwkJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUodm14bmV0M19ycV9kZXZfc3RhdHMpOyBpKyspCisJCQkqYnVmKysgPSAqKHU2NCAqKShiYXNlICsKKwkJCQkJICB2bXhuZXQzX3JxX2Rldl9zdGF0c1tpXS5vZmZzZXQpOwogCi0JYmFzZSA9ICh1OCAqKSZhZGFwdGVyLT5ycWRfc3RhcnRbal0uc3RhdHM7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodm14bmV0M19ycV9kZXZfc3RhdHMpOyBpKyspCi0JCSpidWYrKyA9ICoodTY0ICopKGJhc2UgKyB2bXhuZXQzX3JxX2Rldl9zdGF0c1tpXS5vZmZzZXQpOwotCi0JYmFzZSA9ICh1OCAqKSZhZGFwdGVyLT5yeF9xdWV1ZVtqXS5zdGF0czsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cyk7IGkrKykKLQkJKmJ1ZisrID0gKih1NjQgKikoYmFzZSArIHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzW2ldLm9mZnNldCk7CisJCWJhc2UgPSAodTggKikmYWRhcHRlci0+cnhfcXVldWVbal0uc3RhdHM7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzKTsgaSsrKQorCQkJKmJ1ZisrID0gKih1NjQgKikoYmFzZSArCisJCQkJCSAgdm14bmV0M19ycV9kcml2ZXJfc3RhdHNbaV0ub2Zmc2V0KTsKKwl9CiAKIAliYXNlID0gKHU4ICopYWRhcHRlcjsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX2dsb2JhbF9zdGF0cyk7IGkrKykKQEAgLTMzOSw3ICszNzgsNyBAQAogewogCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXUzMiAqYnVmID0gcDsKLQlpbnQgaSA9IDA7CisJaW50IGkgPSAwLCBqID0gMDsKIAogCW1lbXNldChwLCAwLCB2bXhuZXQzX2dldF9yZWdzX2xlbihuZXRkZXYpKTsKIApAQCAtMzQ4LDMxICszODcsMzUgQEAKIAkvKiBVcGRhdGUgdm14bmV0M19nZXRfcmVnc19sZW4gaWYgd2Ugd2FudCB0byBkdW1wIG1vcmUgcmVnaXN0ZXJzICovCiAKIAkvKiBtYWtlIGVhY2ggcmluZyB1c2UgbXVsdGlwbGUgb2YgMTYgYnl0ZXMgKi8KLS8qIFRPRE8gY2hhbmdlIHRoaXMgZm9yIG11bHRpcGxlIHF1ZXVlcyAqLwotCWJ1ZlswXSA9IGFkYXB0ZXItPnR4X3F1ZXVlW2ldLnR4X3JpbmcubmV4dDJmaWxsOwotCWJ1ZlsxXSA9IGFkYXB0ZXItPnR4X3F1ZXVlW2ldLnR4X3JpbmcubmV4dDJjb21wOwotCWJ1ZlsyXSA9IGFkYXB0ZXItPnR4X3F1ZXVlW2ldLnR4X3JpbmcuZ2VuOwotCWJ1ZlszXSA9IDA7CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQlidWZbaisrXSA9IGFkYXB0ZXItPnR4X3F1ZXVlW2ldLnR4X3JpbmcubmV4dDJmaWxsOworCQlidWZbaisrXSA9IGFkYXB0ZXItPnR4X3F1ZXVlW2ldLnR4X3JpbmcubmV4dDJjb21wOworCQlidWZbaisrXSA9IGFkYXB0ZXItPnR4X3F1ZXVlW2ldLnR4X3JpbmcuZ2VuOworCQlidWZbaisrXSA9IDA7CiAKLQlidWZbNF0gPSBhZGFwdGVyLT50eF9xdWV1ZVtpXS5jb21wX3JpbmcubmV4dDJwcm9jOwotCWJ1Zls1XSA9IGFkYXB0ZXItPnR4X3F1ZXVlW2ldLmNvbXBfcmluZy5nZW47Ci0JYnVmWzZdID0gYWRhcHRlci0+dHhfcXVldWVbaV0uc3RvcHBlZDsKLQlidWZbN10gPSAwOworCQlidWZbaisrXSA9IGFkYXB0ZXItPnR4X3F1ZXVlW2ldLmNvbXBfcmluZy5uZXh0MnByb2M7CisJCWJ1ZltqKytdID0gYWRhcHRlci0+dHhfcXVldWVbaV0uY29tcF9yaW5nLmdlbjsKKwkJYnVmW2orK10gPSBhZGFwdGVyLT50eF9xdWV1ZVtpXS5zdG9wcGVkOworCQlidWZbaisrXSA9IDA7CisJfQogCi0JYnVmWzhdID0gYWRhcHRlci0+cnhfcXVldWVbaV0ucnhfcmluZ1swXS5uZXh0MmZpbGw7Ci0JYnVmWzldID0gYWRhcHRlci0+cnhfcXVldWVbaV0ucnhfcmluZ1swXS5uZXh0MmNvbXA7Ci0JYnVmWzEwXSA9IGFkYXB0ZXItPnJ4X3F1ZXVlW2ldLnJ4X3JpbmdbMF0uZ2VuOwotCWJ1ZlsxMV0gPSAwOworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJYnVmW2orK10gPSBhZGFwdGVyLT5yeF9xdWV1ZVtpXS5yeF9yaW5nWzBdLm5leHQyZmlsbDsKKwkJYnVmW2orK10gPSBhZGFwdGVyLT5yeF9xdWV1ZVtpXS5yeF9yaW5nWzBdLm5leHQyY29tcDsKKwkJYnVmW2orK10gPSBhZGFwdGVyLT5yeF9xdWV1ZVtpXS5yeF9yaW5nWzBdLmdlbjsKKwkJYnVmW2orK10gPSAwOwogCi0JYnVmWzEyXSA9IGFkYXB0ZXItPnJ4X3F1ZXVlW2ldLnJ4X3JpbmdbMV0ubmV4dDJmaWxsOwotCWJ1ZlsxM10gPSBhZGFwdGVyLT5yeF9xdWV1ZVtpXS5yeF9yaW5nWzFdLm5leHQyY29tcDsKLQlidWZbMTRdID0gYWRhcHRlci0+cnhfcXVldWVbaV0ucnhfcmluZ1sxXS5nZW47Ci0JYnVmWzE1XSA9IDA7CisJCWJ1ZltqKytdID0gYWRhcHRlci0+cnhfcXVldWVbaV0ucnhfcmluZ1sxXS5uZXh0MmZpbGw7CisJCWJ1ZltqKytdID0gYWRhcHRlci0+cnhfcXVldWVbaV0ucnhfcmluZ1sxXS5uZXh0MmNvbXA7CisJCWJ1ZltqKytdID0gYWRhcHRlci0+cnhfcXVldWVbaV0ucnhfcmluZ1sxXS5nZW47CisJCWJ1ZltqKytdID0gMDsKIAotCWJ1ZlsxNl0gPSBhZGFwdGVyLT5yeF9xdWV1ZVtpXS5jb21wX3JpbmcubmV4dDJwcm9jOwotCWJ1ZlsxN10gPSBhZGFwdGVyLT5yeF9xdWV1ZVtpXS5jb21wX3JpbmcuZ2VuOwotCWJ1ZlsxOF0gPSAwOwotCWJ1ZlsxOV0gPSAwOworCQlidWZbaisrXSA9IGFkYXB0ZXItPnJ4X3F1ZXVlW2ldLmNvbXBfcmluZy5uZXh0MnByb2M7CisJCWJ1ZltqKytdID0gYWRhcHRlci0+cnhfcXVldWVbaV0uY29tcF9yaW5nLmdlbjsKKwkJYnVmW2orK10gPSAwOworCQlidWZbaisrXSA9IDA7CisJfQorCiB9CiAKIApAQCAtNTc0LDYgKzYxNyw3IEBACiAJCSAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX3J4ZmhfaW5kaXIgKnApCiB7CiAJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgVVBUMV9SU1NDb25mICpyc3NDb25mID0gYWRhcHRlci0+cnNzX2NvbmY7CiAKQEAgLTU5Miw4ICs2MzYsMTAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgcnNzQ29uZi0+aW5kVGFibGVTaXplOyBpKyspCiAJCXJzc0NvbmYtPmluZFRhYmxlW2ldID0gcC0+cmluZ19pbmRleFtpXTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRfbG9jaywgZmxhZ3MpOwogCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAogCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9SU1NJRFQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2ludC5oIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2ludC5oCmluZGV4IDdmYWRlZWQuLmZiNWQyNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19pbnQuaAorKysgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfaW50LmgKQEAgLTY4LDEwICs2OCwxMCBAQAogLyoKICAqIFZlcnNpb24gbnVtYmVycwogICovCi0jZGVmaW5lIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fU1RSSU5HICAgIjEuMC4xNi4wLWsiCisjZGVmaW5lIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fU1RSSU5HICAgIjEuMC4yNS4wLWsiCiAKIC8qIGEgMzItYml0IGludCwgZWFjaCBieXRlIGVuY29kZSBhIHZlcmlvbiBudW1iZXIgaW4gVk1YTkVUM19EUklWRVJfVkVSU0lPTiAqLwotI2RlZmluZSBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX05VTSAgICAgIDB4MDEwMDEwMDAKKyNkZWZpbmUgVk1YTkVUM19EUklWRVJfVkVSU0lPTl9OVU0gICAgICAweDAxMDAxOTAwCiAKICNpZiBkZWZpbmVkKENPTkZJR19QQ0lfTVNJKQogCS8qIFJTUyBvbmx5IG1ha2VzIHNlbnNlIGlmIE1TSS1YIGlzIHN1cHBvcnRlZC4gKi8KQEAgLTI4OSw3ICsyODksNyBAQAogCiAjZGVmaW5lIFZNWE5FVDNfTElOVVhfTUFYX01TSVhfVkVDVCAgICAgKFZNWE5FVDNfREVWSUNFX01BWF9UWF9RVUVVRVMgKyBcCiAJCQkJCSBWTVhORVQzX0RFVklDRV9NQVhfUlhfUVVFVUVTICsgMSkKLSNkZWZpbmUgVk1YTkVUM19MSU5VWF9NSU5fTVNJWF9WRUNUICAgICAzICAgIC8qIDEgZm9yIGVhY2ggOiB0eCwgcnggYW5kIGV2ZW50ICovCisjZGVmaW5lIFZNWE5FVDNfTElOVVhfTUlOX01TSVhfVkVDVCAgICAgMiAvKiAxIGZvciB0eC1yeCBwYWlyIGFuZCAxIGZvciBldmVudCAqLwogCiAKIHN0cnVjdCB2bXhuZXQzX2ludHIgewpAQCAtMzE3LDYgKzMxNyw3IEBACiAJc3RydWN0IHZteG5ldDNfcnhfcXVldWUJCXJ4X3F1ZXVlW1ZNWE5FVDNfREVWSUNFX01BWF9SWF9RVUVVRVNdOwogCXN0cnVjdCB2bGFuX2dyb3VwCQkqdmxhbl9ncnA7CiAJc3RydWN0IHZteG5ldDNfaW50cgkJaW50cjsKKwlzcGlubG9ja190CQkJY21kX2xvY2s7CiAJc3RydWN0IFZteG5ldDNfRHJpdmVyU2hhcmVkCSpzaGFyZWQ7CiAJc3RydWN0IFZteG5ldDNfUE1Db25mCQkqcG1fY29uZjsKIAlzdHJ1Y3QgVm14bmV0M19UeFF1ZXVlRGVzYwkqdHFkX3N0YXJ0OyAgICAgLyogYWxsIHR4IHF1ZXVlIGRlc2MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYwppbmRleCAwMWMwNWY1Li4yMjhkNGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jCkBAIC0zNjkwLDcgKzM2OTAsNyBAQAogCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKIAkJZ290byBleGl0OwogCi0JaWYgKChydHNfdGFibGUgIT0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0RBKSB8fAorCWlmICgocnRzX3RhYmxlICE9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9EQSkgJiYKIAkgICAgKHJ0c190YWJsZSAhPQogCSAgICAgVlhHRV9IV19SVFNfQUNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9NVUxUSV9JVCkpCiAJCSpkYXRhMSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYwppbmRleCAwMTlhNzRkLi4wOWFlNGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKQEAgLTIyOTQsNiArMjI5NCw4IEBACiAJaW50IGk7CiAJYm9vbCBuZWVkcmVzZXQgPSBmYWxzZTsKIAorCW11dGV4X2xvY2soJnNjLT5sb2NrKTsKKwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNjLT50eHFzKTsgaSsrKSB7CiAJCWlmIChzYy0+dHhxc1tpXS5zZXR1cCkgewogCQkJdHhxID0gJnNjLT50eHFzW2ldOwpAQCAtMjMyMSw2ICsyMzIzLDggQEAKIAkJYXRoNWtfcmVzZXQoc2MsIE5VTEwsIHRydWUpOwogCX0KIAorCW11dGV4X3VubG9jaygmc2MtPmxvY2spOworCiAJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHcsICZzYy0+dHhfY29tcGxldGVfd29yaywKIAkJbXNlY3NfdG9famlmZmllcyhBVEg1S19UWF9DT01QTEVURV9QT0xMX0lOVCkpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RtYS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RtYS5jCmluZGV4IDAwNjRiZTcuLjIxMDkxYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kbWEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZG1hLmMKQEAgLTgzOCw5ICs4MzgsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBxbWF4OyBpKyspIHsKIAkJZXJyID0gYXRoNWtfaHdfc3RvcF90eF9kbWEoYWgsIGkpOwogCQkvKiAtRUlOVkFMIC0+IHF1ZXVlIGluYWN0aXZlICovCi0JCWlmIChlcnIgIT0gLUVJTlZBTCkKKwkJaWYgKGVyciAmJiBlcnIgIT0gLUVJTlZBTCkKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYwppbmRleCBlNWYyYjk2Li5hNzAyODE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jCkBAIC04Niw3ICs4Niw3IEBACiAJaWYgKCFhaC0+YWhfYndtb2RlKSB7CiAJCWR1ciA9IGllZWU4MDIxMV9nZW5lcmljX2ZyYW1lX2R1cmF0aW9uKHNjLT5odywKIAkJCQkJCU5VTEwsIGxlbiwgcmF0ZSk7Ci0JCXJldHVybiBkdXI7CisJCXJldHVybiBsZTE2X3RvX2NwdShkdXIpOwogCX0KIAogCWJpdHJhdGUgPSByYXRlLT5iaXRyYXRlOwpAQCAtMjY1LDggKzI2NSw2IEBACiAJCSAqIHdoYXQgcmF0ZSB3ZSBzaG91bGQgY2hvb3NlIHRvIFRYIEFDS3MuICovCiAJCXR4X3RpbWUgPSBhdGg1a19od19nZXRfZnJhbWVfZHVyYXRpb24oYWgsIDEwLCByYXRlKTsKIAotCQl0eF90aW1lID0gbGUxNl90b19jcHUodHhfdGltZSk7Ci0KIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCB0eF90aW1lLCByZWcpOwogCiAJCWlmICghKHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BoeS5jCmluZGV4IDc4YzI2ZmQuLjYyY2UyZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGh5LmMKQEAgLTI4Miw2ICsyODIsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFdhaXQgZm9yIHN5bnRoIHRvIHNldHRsZQorICovCitzdGF0aWMgdm9pZCBhdGg1a19od193YWl0X2Zvcl9zeW50aChzdHJ1Y3QgYXRoNWtfaHcgKmFoLAorCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQoreworCS8qCisJICogT24gNTIxMSsgcmVhZCBhY3RpdmF0aW9uIC0+IHJ4IGRlbGF5CisJICogYW5kIHVzZSBpdCAoMTAwbnMgc3RlcHMpLgorCSAqLworCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgeworCQl1MzIgZGVsYXk7CisJCWRlbGF5ID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1JYX0RFTEFZKSAmCisJCQlBUjVLX1BIWV9SWF9ERUxBWV9NOworCQlkZWxheSA9IChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfQ0NLKSA/CisJCQkoKGRlbGF5IDw8IDIpIC8gMjIpIDogKGRlbGF5IC8gMTApOworCQlpZiAoYWgtPmFoX2J3bW9kZSA9PSBBUjVLX0JXTU9ERV8xME1IWikKKwkJCWRlbGF5ID0gZGVsYXkgPDwgMTsKKwkJaWYgKGFoLT5haF9id21vZGUgPT0gQVI1S19CV01PREVfNU1IWikKKwkJCWRlbGF5ID0gZGVsYXkgPDwgMjsKKwkJLyogWFhYOiAvMiBvbiB0dXJibyA/IExldCdzIGJlIHNhZmUKKwkJICogZm9yIG5vdyAqLworCQl1ZGVsYXkoMTAwICsgZGVsYXkpOworCX0gZWxzZSB7CisJCW1kZWxheSgxKTsKKwl9Cit9CisKIAogLyoqKioqKioqKioqKioqKioqKioqKipcCiAqIFJGIEdhaW4gb3B0aW1pemF0aW9uICoKQEAgLTEyNTMsNiArMTI4MSw3IEBACiAJY2FzZSBBUjVLX1JGNTExMToKIAkJcmV0ID0gYXRoNWtfaHdfcmY1MTExX2NoYW5uZWwoYWgsIGNoYW5uZWwpOwogCQlicmVhazsKKwljYXNlIEFSNUtfUkYyMzE3OgogCWNhc2UgQVI1S19SRjI0MjU6CiAJCXJldCA9IGF0aDVrX2h3X3JmMjQyNV9jaGFubmVsKGFoLCBjaGFubmVsKTsKIAkJYnJlYWs7CkBAIC0zMjM3LDYgKzMyNjYsMTMgQEAKIAkJLyogRmFpbGVkICovCiAJCWlmIChpID49IDEwMCkKIAkJCXJldHVybiAtRUlPOworCisJCS8qIFNldCBjaGFubmVsIGFuZCB3YWl0IGZvciBzeW50aCAqLworCQlyZXQgPSBhdGg1a19od19jaGFubmVsKGFoLCBjaGFubmVsKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJYXRoNWtfaHdfd2FpdF9mb3Jfc3ludGgoYWgsIGNoYW5uZWwpOwogCX0KIAogCS8qCkBAIC0zMjUxLDEzICszMjg3LDUzIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCS8qIFdyaXRlIE9GRE0gdGltaW5ncyBvbiA1MjEyKi8KKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIgJiYKKwkJY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pIHsKKworCQlyZXQgPSBhdGg1a19od193cml0ZV9vZmRtX3RpbWluZ3MoYWgsIGNoYW5uZWwpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBTcHVyIGluZm8gaXMgYXZhaWxhYmxlIG9ubHkgZnJvbSBFRVBST00gdmVyc2lvbnMKKwkJICogZ3JlYXRlciB0aGFuIDUuMywgYnV0IHRoZSBFRVBST00gcm91dGluZXMgd2lsbCB1c2UKKwkJICogc3RhdGljIHZhbHVlcyBmb3Igb2xkZXIgdmVyc2lvbnMgKi8KKwkJaWYgKGFoLT5haF9tYWNfc3JldiA+PSBBUjVLX1NSRVZfQVI1NDI0KQorCQkJYXRoNWtfaHdfc2V0X3NwdXJfbWl0aWdhdGlvbl9maWx0ZXIoYWgsCisJCQkJCQkJICAgIGNoYW5uZWwpOworCX0KKworCS8qIElmIHdlIHVzZWQgZmFzdCBjaGFubmVsIHN3aXRjaGluZworCSAqIHdlIGFyZSBkb25lLCByZWxlYXNlIFJGIGJ1cyBhbmQKKwkgKiBmaXJlIHVwIE5GIGNhbGlicmF0aW9uLgorCSAqCisJICogTm90ZTogT25seSBORiBjYWxpYnJhdGlvbiBkdWUgdG8KKwkgKiBjaGFubmVsIGNoYW5nZSwgbm90IEFHQyBjYWxpYnJhdGlvbgorCSAqIHNpbmNlIEFHQyBpcyBzdGlsbCBydW5uaW5nICEKKwkgKi8KKwlpZiAoZmFzdCkgeworCQkvKgorCQkgKiBSZWxlYXNlIFJGIEJ1cyBncmFudAorCQkgKi8KKwkJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1BIWV9SRkJVU19SRVEsCisJCQkJICAgIEFSNUtfUEhZX1JGQlVTX1JFUV9SRVFVRVNUKTsKKworCQkvKgorCQkgKiBTdGFydCBORiBjYWxpYnJhdGlvbgorCQkgKi8KKwkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUEhZX0FHQ0NUTCwKKwkJCQkJQVI1S19QSFlfQUdDQ1RMX05GKTsKKworCQlyZXR1cm4gcmV0OworCX0KKwogCS8qCiAJICogRm9yIDUyMTAgd2UgZG8gYWxsIGluaXRpYWxpemF0aW9uIHVzaW5nCiAJICogaW5pdHZhbHMsIHNvIHdlIGRvbid0IGhhdmUgdG8gbW9kaWZ5CiAJICogYW55IHNldHRpbmdzICg1MjEwIGFsc28gb25seSBzdXBwb3J0cwogCSAqIGEvYXR1cmJvIG1vZGVzKQogCSAqLwotCWlmICgoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApICYmICFmYXN0KSB7CisJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7CiAKIAkJLyoKIAkJICogV3JpdGUgaW5pdGlhbCBSRiBnYWluIHNldHRpbmdzCkBAIC0zMjc2LDIyICszMzUyLDYgQEAKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJLyogV3JpdGUgT0ZETSB0aW1pbmdzIG9uIDUyMTIqLwotCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIgJiYKLQkJCWNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9PRkRNKSB7Ci0KLQkJCXJldCA9IGF0aDVrX2h3X3dyaXRlX29mZG1fdGltaW5ncyhhaCwgY2hhbm5lbCk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7Ci0KLQkJCS8qIFNwdXIgaW5mbyBpcyBhdmFpbGFibGUgb25seSBmcm9tIEVFUFJPTSB2ZXJzaW9ucwotCQkJICogZ3JlYXRlciB0aGFuIDUuMywgYnV0IHRoZSBFRVBST00gcm91dGluZXMgd2lsbCB1c2UKLQkJCSAqIHN0YXRpYyB2YWx1ZXMgZm9yIG9sZGVyIHZlcnNpb25zICovCi0JCQlpZiAoYWgtPmFoX21hY19zcmV2ID49IEFSNUtfU1JFVl9BUjU0MjQpCi0JCQkJYXRoNWtfaHdfc2V0X3NwdXJfbWl0aWdhdGlvbl9maWx0ZXIoYWgsCi0JCQkJCQkJCSAgICBjaGFubmVsKTsKLQkJfQotCiAJCS8qRW5hYmxlL2Rpc2FibGUgODAyLjExYiBtb2RlIG9uIDUxMTEKIAkJKGVuYWJsZSAyMTExIGZyZXF1ZW5jeSBjb252ZXJ0ZXIgKyBDQ0spKi8KIAkJaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMSkgewpAQCAtMzMyMiw0NyArMzM4MiwyMCBAQAogCSAqLwogCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfQUNUX0VOQUJMRSwgQVI1S19QSFlfQUNUKTsKIAotCS8qCi0JICogT24gNTIxMSsgcmVhZCBhY3RpdmF0aW9uIC0+IHJ4IGRlbGF5Ci0JICogYW5kIHVzZSBpdC4KLQkgKi8KLQlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKLQkJdTMyIGRlbGF5OwotCQlkZWxheSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9SWF9ERUxBWSkgJgotCQkJQVI1S19QSFlfUlhfREVMQVlfTTsKLQkJZGVsYXkgPSAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX0NDSykgPwotCQkJKChkZWxheSA8PCAyKSAvIDIyKSA6IChkZWxheSAvIDEwKTsKLQkJaWYgKGFoLT5haF9id21vZGUgPT0gQVI1S19CV01PREVfMTBNSFopCi0JCQlkZWxheSA9IGRlbGF5IDw8IDE7Ci0JCWlmIChhaC0+YWhfYndtb2RlID09IEFSNUtfQldNT0RFXzVNSFopCi0JCQlkZWxheSA9IGRlbGF5IDw8IDI7Ci0JCS8qIFhYWDogLzIgb24gdHVyYm8gPyBMZXQncyBiZSBzYWZlCi0JCSAqIGZvciBub3cgKi8KLQkJdWRlbGF5KDEwMCArIGRlbGF5KTsKLQl9IGVsc2UgewotCQltZGVsYXkoMSk7Ci0JfQorCWF0aDVrX2h3X3dhaXRfZm9yX3N5bnRoKGFoLCBjaGFubmVsKTsKIAotCWlmIChmYXN0KQotCQkvKgotCQkgKiBSZWxlYXNlIFJGIEJ1cyBncmFudAotCQkgKi8KLQkJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1BIWV9SRkJVU19SRVEsCi0JCQkJICAgIEFSNUtfUEhZX1JGQlVTX1JFUV9SRVFVRVNUKTsKLQllbHNlIHsKLQkJLyoKLQkJICogUGVyZm9ybSBBREMgdGVzdCB0byBzZWUgaWYgYmFzZWJhbmQgaXMgcmVhZHkKLQkJICogU2V0IHR4IGhvbGQgYW5kIGNoZWNrIGFkYyB0ZXN0IHJlZ2lzdGVyCi0JCSAqLwotCQlwaHlfdHN0MSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9UU1QxKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9UU1QxX1RYSE9MRCwgQVI1S19QSFlfVFNUMSk7Ci0JCWZvciAoaSA9IDA7IGkgPD0gMjA7IGkrKykgewotCQkJaWYgKCEoYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX0FEQ19URVNUKSAmIDB4MTApKQotCQkJCWJyZWFrOwotCQkJdWRlbGF5KDIwMCk7Ci0JCX0KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBwaHlfdHN0MSwgQVI1S19QSFlfVFNUMSk7CisJLyoKKwkgKiBQZXJmb3JtIEFEQyB0ZXN0IHRvIHNlZSBpZiBiYXNlYmFuZCBpcyByZWFkeQorCSAqIFNldCB0eCBob2xkIGFuZCBjaGVjayBhZGMgdGVzdCByZWdpc3RlcgorCSAqLworCXBoeV90c3QxID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1RTVDEpOworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfVFNUMV9UWEhPTEQsIEFSNUtfUEhZX1RTVDEpOworCWZvciAoaSA9IDA7IGkgPD0gMjA7IGkrKykgeworCQlpZiAoIShhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfQURDX1RFU1QpICYgMHgxMCkpCisJCQlicmVhazsKKwkJdWRlbGF5KDIwMCk7CiAJfQorCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgcGh5X3RzdDEsIEFSNUtfUEhZX1RTVDEpOwogCiAJLyoKIAkgKiBTdGFydCBhdXRvbWF0aWMgZ2FpbiBjb250cm9sIGNhbGlicmF0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2NhbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2NhbGliLmMKaW5kZXggZWEyZTdkNy4uNWUzMDBiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9jYWxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfY2FsaWIuYwpAQCAtNjc5LDEwICs2NzksNiBAQAogCiAJLyogRG8gTkYgY2FsIG9ubHkgYXQgbG9uZ2VyIGludGVydmFscyAqLwogCWlmIChsb25nY2FsIHx8IG5mY2FsX3BlbmRpbmcpIHsKLQkJLyogRG8gcGVyaW9kaWMgUEFPZmZzZXQgQ2FsICovCi0JCWFyOTAwMl9od19wYV9jYWwoYWgsIGZhbHNlKTsKLQkJYXI5MDAyX2h3X29sY190ZW1wX2NvbXBlbnNhdGlvbihhaCk7Ci0KIAkJLyoKIAkJICogR2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBwcmV2aW91cyBORiBjYWwgYW5kIHVwZGF0ZQogCQkgKiBoaXN0b3J5IGJ1ZmZlci4KQEAgLTY5Nyw4ICs2OTMsMTIgQEAKIAkJCWF0aDlrX2h3X2xvYWRuZihhaCwgYWgtPmN1cmNoYW4pOwogCQl9CiAKLQkJaWYgKGxvbmdjYWwpCisJCWlmIChsb25nY2FsKSB7CiAJCQlhdGg5a19od19zdGFydF9uZmNhbChhaCwgZmFsc2UpOworCQkJLyogRG8gcGVyaW9kaWMgUEFPZmZzZXQgQ2FsICovCisJCQlhcjkwMDJfaHdfcGFfY2FsKGFoLCBmYWxzZSk7CisJCQlhcjkwMDJfaHdfb2xjX3RlbXBfY29tcGVuc2F0aW9uKGFoKTsKKwkJfQogCX0KIAogCXJldHVybiBpc2NhbGRvbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2h3LmMKaW5kZXggZjhhNzc3MS4uZjQ0Yzg0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfaHcuYwpAQCAtNDI2LDkgKzQyNiw4IEBACiAJCX0KIAogCQkvKiBXQVIgZm9yIEFTUE0gc3lzdGVtIGhhbmcgKi8KLQkJaWYgKEFSX1NSRVZfOTI4MChhaCkgfHwgQVJfU1JFVl85Mjg1KGFoKSB8fCBBUl9TUkVWXzkyODcoYWgpKSB7CisJCWlmIChBUl9TUkVWXzkyODUoYWgpIHx8IEFSX1NSRVZfOTI4NyhhaCkpCiAJCQl2YWwgfD0gKEFSX1dBX0JJVDYgfCBBUl9XQV9CSVQ3KTsKLQkJfQogCiAJCWlmIChBUl9TUkVWXzkyODVFXzIwKGFoKSkKIAkJCXZhbCB8PSBBUl9XQV9CSVQyMzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfMnAyX2luaXR2YWxzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzXzJwMl9pbml0dmFscy5oCmluZGV4IDgxZjljZjIuLjllY2NhOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfMnAyX2luaXR2YWxzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM18ycDJfaW5pdHZhbHMuaApAQCAtMTg0Miw3ICsxODQyLDcgQEAKIAogc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBQY2llUGh5X3BsbF9vbl9jbGtyZXFfZGlzYWJsZV9MMV8ycDJbXVsyXSA9IHsKIAkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCi0JezB4MDAwMDQwNDAsIDB4MDgyMTJlNWV9LAorCXsweDAwMDA0MDQwLCAweDA4MjEyNjVlfSwKIAl7MHgwMDAwNDA0MCwgMHgwMDA4MDAzYn0sCiAJezB4MDAwMDQwNDQsIDB4MDAwMDAwMDB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfaHcuYwppbmRleCA2MTM3NjM0Li4wNmZiMmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19ody5jCkBAIC0xNDYsOCArMTQ2LDggQEAKIAkJLyogU2xlZXAgU2V0dGluZyAqLwogCiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUGNpZVNlcmRlc0xvd1Bvd2VyLAotCQkJCWFyOTMwMFBjaWVQaHlfY2xrcmVxX2VuYWJsZV9MMV8ycDIsCi0JCQkJQVJSQVlfU0laRShhcjkzMDBQY2llUGh5X2Nsa3JlcV9lbmFibGVfTDFfMnAyKSwKKwkJCQlhcjkzMDBQY2llUGh5X3BsbF9vbl9jbGtyZXFfZGlzYWJsZV9MMV8ycDIsCisJCQkJQVJSQVlfU0laRShhcjkzMDBQY2llUGh5X3BsbF9vbl9jbGtyZXFfZGlzYWJsZV9MMV8ycDIpLAogCQkJCTIpOwogCiAJCS8qIEZhc3QgY2xvY2sgbW9kYWwgc2V0dGluZ3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKaW5kZXggMzY4MWNhZjUuLjFhN2ZhNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9wbV9xb3NfcGFyYW1zLmg+CiAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgImNvbW1vbi5oIgpAQCAtNTcsOCArNTYsNiBAQAogCiAjZGVmaW5lIEFfTUFYKGEsIGIpICgoYSkgPiAoYikgPyAoYSkgOiAoYikpCiAKLSNkZWZpbmUgQVRIOUtfUE1fUU9TX0RFRkFVTFRfVkFMVUUJNTUKLQogI2RlZmluZSBUU0ZfVE9fVFUoX2gsX2wpIFwKIAkoKCgodTMyKShfaCkpIDw8IDIyKSB8ICgoKHUzMikoX2wpKSA+PiAxMCkpCiAKQEAgLTIxOCw2ICsyMTUsNyBAQAogc3RydWN0IGF0aF9idWZfc3RhdGUgewogCXU4IGJmX3R5cGU7CiAJdTggYmZzX3BhcHJkOworCXVuc2lnbmVkIGxvbmcgYmZzX3BhcHJkX3RpbWVzdGFtcDsKIAllbnVtIGF0aDlrX2ludGVybmFsX2ZyYW1lX3R5cGUgYmZzX2Z0eXBlOwogfTsKIApAQCAtNTkzLDcgKzU5MSw2IEBACiAJc3RydWN0IHdvcmtfc3RydWN0IHBhcHJkX3dvcms7CiAJc3RydWN0IHdvcmtfc3RydWN0IGh3X2NoZWNrX3dvcms7CiAJc3RydWN0IGNvbXBsZXRpb24gcGFwcmRfY29tcGxldGU7Ci0JYm9vbCBwYXByZF9wZW5kaW5nOwogCiAJdTMyIGludHJzdGF0dXM7CiAJdTMyIHNjX2ZsYWdzOyAvKiBTQ19PUF8qICovCkBAIC02MzMsOCArNjMwLDYgQEAKIAlzdHJ1Y3QgYXRoX2Rlc2NkbWEgdHhzZG1hOwogCiAJc3RydWN0IGF0aF9hbnRfY29tYiBhbnRfY29tYjsKLQotCXN0cnVjdCBwbV9xb3NfcmVxdWVzdF9saXN0IHBtX3Fvc19yZXE7CiB9OwogCiBzdHJ1Y3QgYXRoX3dpcGh5IHsKQEAgLTY2Niw3ICs2NjEsNiBAQAogZXh0ZXJuIHN0cnVjdCBpZWVlODAyMTFfb3BzIGF0aDlrX29wczsKIGV4dGVybiBpbnQgYXRoOWtfbW9kcGFyYW1fbm9od2NyeXB0OwogZXh0ZXJuIGludCBsZWRfYmxpbms7Ci1leHRlcm4gaW50IGF0aDlrX3BtX3Fvc192YWx1ZTsKIGV4dGVybiBib29sIGlzX2F0aDlrX3VubG9hZGVkOwogCiBpcnFyZXR1cm5fdCBhdGhfaXNyKGludCBpcnEsIHZvaWQgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgKaW5kZXggMWNlNTA2Zi4uNzgwYWM1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaApAQCAtNzgsNyArNzgsNyBAQAogCXU4IG5vZGVfaWR4OwogCXU4IHZpZl9pZHg7CiAJdTggdGlkbm87Ci0JdTMyIGZsYWdzOyAvKiBBVEg5S19IVENfVFhfKiAqLworCV9fYmUzMiBmbGFnczsgLyogQVRIOUtfSFRDX1RYXyogKi8KIAl1OCBrZXlfdHlwZTsKIAl1OCBrZXlpeDsKIAl1OCByZXNlcnZlZFsyNl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMKaW5kZXggMzg0MzNmOS4uMDM1MmYwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYwpAQCAtMTQyLDkgKzE0Miw2IEBACiB7CiAJYXRoOWtfaHRjX2V4aXRfZGVidWcocHJpdi0+YWgpOwogCWF0aDlrX2h3X2RlaW5pdChwcml2LT5haCk7Ci0JdGFza2xldF9raWxsKCZwcml2LT5zd2JhX3Rhc2tsZXQpOwotCXRhc2tsZXRfa2lsbCgmcHJpdi0+cnhfdGFza2xldCk7Ci0JdGFza2xldF9raWxsKCZwcml2LT50eF90YXNrbGV0KTsKIAlrZnJlZShwcml2LT5haCk7CiAJcHJpdi0+YWggPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jCmluZGV4IGY0ZDU3NmIuLjZiYjU5OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMKQEAgLTEwMjUsMTIgKzEwMjUsNiBAQAogCWludCByZXQgPSAwOwogCXU4IGNtZF9yc3A7CiAKLQkvKiBDYW5jZWwgYWxsIHRoZSBydW5uaW5nIHRpbWVycy93b3JrIC4uICovCi0JY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+ZmF0YWxfd29yayk7Ci0JY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+cHNfd29yayk7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5hdGg5a19sZWRfYmxpbmtfd29yayk7Ci0JYXRoOWtfbGVkX3N0b3BfYnJpZ2h0bmVzcyhwcml2KTsKLQogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCWlmIChwcml2LT5vcF9mbGFncyAmIE9QX0lOVkFMSUQpIHsKQEAgLTEwNDQsOCArMTAzOCwyMyBAQAogCVdNSV9DTUQoV01JX0RJU0FCTEVfSU5UUl9DTURJRCk7CiAJV01JX0NNRChXTUlfRFJBSU5fVFhRX0FMTF9DTURJRCk7CiAJV01JX0NNRChXTUlfU1RPUF9SRUNWX0NNRElEKTsKKworCXRhc2tsZXRfa2lsbCgmcHJpdi0+c3diYV90YXNrbGV0KTsKKwl0YXNrbGV0X2tpbGwoJnByaXYtPnJ4X3Rhc2tsZXQpOworCXRhc2tsZXRfa2lsbCgmcHJpdi0+dHhfdGFza2xldCk7CisKIAlza2JfcXVldWVfcHVyZ2UoJnByaXYtPnR4X3F1ZXVlKTsKIAorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCisJLyogQ2FuY2VsIGFsbCB0aGUgcnVubmluZyB0aW1lcnMvd29yayAuLiAqLworCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPmZhdGFsX3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPnBzX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+YXRoOWtfbGVkX2JsaW5rX3dvcmspOworCWF0aDlrX2xlZF9zdG9wX2JyaWdodG5lc3MocHJpdik7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisKIAkvKiBSZW1vdmUgbW9uaXRvciBpbnRlcmZhY2UgaGVyZSAqLwogCWlmIChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpIHsKIAkJaWYgKGF0aDlrX2h0Y19yZW1vdmVfbW9uaXRvcl9pbnRlcmZhY2UocHJpdikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMKaW5kZXggMzNmMzYwMi4uN2E1ZmZjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYwpAQCAtMTEzLDYgKzExMyw3IEBACiAKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7CiAJCXN0cnVjdCB0eF9mcmFtZV9oZHIgdHhfaGRyOworCQl1MzIgZmxhZ3MgPSAwOwogCQl1OCAqcWM7CiAKIAkJbWVtc2V0KCZ0eF9oZHIsIDAsIHNpemVvZihzdHJ1Y3QgdHhfZnJhbWVfaGRyKSk7CkBAIC0xMzYsMTMgKzEzNywxNCBAQAogCQkvKiBDaGVjayBmb3IgUlRTIHByb3RlY3Rpb24gKi8KIAkJaWYgKHByaXYtPmh3LT53aXBoeS0+cnRzX3RocmVzaG9sZCAhPSAodTMyKSAtMSkKIAkJCWlmIChza2ItPmxlbiA+IHByaXYtPmh3LT53aXBoeS0+cnRzX3RocmVzaG9sZCkKLQkJCQl0eF9oZHIuZmxhZ3MgfD0gQVRIOUtfSFRDX1RYX1JUU0NUUzsKKwkJCQlmbGFncyB8PSBBVEg5S19IVENfVFhfUlRTQ1RTOwogCiAJCS8qIENUUy10by1zZWxmICovCi0JCWlmICghKHR4X2hkci5mbGFncyAmIEFUSDlLX0hUQ19UWF9SVFNDVFMpICYmCisJCWlmICghKGZsYWdzICYgQVRIOUtfSFRDX1RYX1JUU0NUUykgJiYKIAkJICAgIChwcml2LT5vcF9mbGFncyAmIE9QX1BST1RFQ1RfRU5BQkxFKSkKLQkJCXR4X2hkci5mbGFncyB8PSBBVEg5S19IVENfVFhfQ1RTT05MWTsKKwkJCWZsYWdzIHw9IEFUSDlLX0hUQ19UWF9DVFNPTkxZOwogCisJCXR4X2hkci5mbGFncyA9IGNwdV90b19iZTMyKGZsYWdzKTsKIAkJdHhfaGRyLmtleV90eXBlID0gYXRoOWtfY21uX2dldF9od19jcnlwdG9fa2V5dHlwZShza2IpOwogCQlpZiAodHhfaGRyLmtleV90eXBlID09IEFUSDlLX0tFWV9UWVBFX0NMRUFSKQogCQkJdHhfaGRyLmtleWl4ID0gKHU4KSBBVEg5S19UWEtFWUlYX0lOVkFMSUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jCmluZGV4IDFhZmI4YmIuLjlmMDFlNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jCkBAIC0zNjksNiArMzY5LDkgQEAKIAllbHNlCiAJCWFoLT5jb25maWcuaHRfZW5hYmxlID0gMDsKIAorCS8qIFBBUFJEIG5lZWRzIHNvbWUgbW9yZSB3b3JrIHRvIGJlIGVuYWJsZWQgKi8KKwlhaC0+Y29uZmlnLnBhcHJkX2Rpc2FibGUgPSAxOworCiAJYWgtPmNvbmZpZy5yeF9pbnRyX21pdGlnYXRpb24gPSB0cnVlOwogCWFoLT5jb25maWcucGNpZVNlckRlc1dyaXRlID0gdHJ1ZTsKIApAQCAtMTkzMyw3ICsxOTM2LDggQEAKIAkJcENhcC0+cnhfc3RhdHVzX2xlbiA9IHNpemVvZihzdHJ1Y3QgYXI5MDAzX3J4cyk7CiAJCXBDYXAtPnR4X2Rlc2NfbGVuID0gc2l6ZW9mKHN0cnVjdCBhcjkwMDNfdHhjKTsKIAkJcENhcC0+dHhzX2xlbiA9IHNpemVvZihzdHJ1Y3QgYXI5MDAzX3R4cyk7Ci0JCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1BBUFJEKSkKKwkJaWYgKCFhaC0+Y29uZmlnLnBhcHJkX2Rpc2FibGUgJiYKKwkJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUEFQUkQpKQogCQkJcENhcC0+aHdfY2FwcyB8PSBBVEg5S19IV19DQVBfUEFQUkQ7CiAJfSBlbHNlIHsKIAkJcENhcC0+dHhfZGVzY19sZW4gPSBzaXplb2Yoc3RydWN0IGF0aF9kZXNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKaW5kZXggNWEzZGZlYy4uZWE5ZmRlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKQEAgLTIyNSw2ICsyMjUsNyBAQAogCXUzMiBwY2llX3dhZW47CiAJdTggYW5hbG9nX3NoaWZ0cmVnOwogCXU4IGh0X2VuYWJsZTsKKwl1OCBwYXByZF9kaXNhYmxlOwogCXUzMiBvZmRtX3RyaWdfbG93OwogCXUzMiBvZmRtX3RyaWdfaGlnaDsKIAl1MzIgY2NrX3RyaWdfaGlnaDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jCmluZGV4IDc2N2Q4YjguLmEwMzNkMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXQuYwpAQCAtNDEsMTAgKzQxLDYgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChidGNvZXhfZW5hYmxlLCBhdGg5a19idGNvZXhfZW5hYmxlLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhidGNvZXhfZW5hYmxlLCAiRW5hYmxlIHdpZmktQlQgY29leGlzdGVuY2UiKTsKIAotaW50IGF0aDlrX3BtX3Fvc192YWx1ZSA9IEFUSDlLX1BNX1FPU19ERUZBVUxUX1ZBTFVFOwotbW9kdWxlX3BhcmFtX25hbWVkKHBtcW9zLCBhdGg5a19wbV9xb3NfdmFsdWUsIGludCwgU19JUlVTUiB8IFNfSVJHUlAgfCBTX0lST1RIKTsKLU1PRFVMRV9QQVJNX0RFU0MocG1xb3MsICJVc2VyIHNwZWNpZmllZCBQTS1RT1MgdmFsdWUiKTsKLQogYm9vbCBpc19hdGg5a191bmxvYWRlZDsKIC8qIFdlIHVzZSB0aGUgaHdfdmFsdWUgYXMgYW4gaW5kZXggaW50byBvdXIgcHJpdmF0ZSBjaGFubmVsIHN0cnVjdHVyZSAqLwogCkBAIC01OTgsOCArNTk0LDYgQEAKIGVycl9xdWV1ZXM6CiAJYXRoOWtfaHdfZGVpbml0KGFoKTsKIGVycl9odzoKLQl0YXNrbGV0X2tpbGwoJnNjLT5pbnRyX3RxKTsKLQl0YXNrbGV0X2tpbGwoJnNjLT5iY29uX3Rhc2tsZXQpOwogCiAJa2ZyZWUoYWgpOwogCXNjLT5zY19haCA9IE5VTEw7CkBAIC03NjQsOSArNzU4LDYgQEAKIAlhdGhfaW5pdF9sZWRzKHNjKTsKIAlhdGhfc3RhcnRfcmZraWxsX3BvbGwoc2MpOwogCi0JcG1fcW9zX2FkZF9yZXF1ZXN0KCZzYy0+cG1fcW9zX3JlcSwgUE1fUU9TX0NQVV9ETUFfTEFURU5DWSwKLQkJCSAgIFBNX1FPU19ERUZBVUxUX1ZBTFVFKTsKLQogCXJldHVybiAwOwogCiBlcnJvcl93b3JsZDoKQEAgLTgwNyw5ICs3OTgsNiBAQAogCiAJYXRoOWtfaHdfZGVpbml0KHNjLT5zY19haCk7CiAKLQl0YXNrbGV0X2tpbGwoJnNjLT5pbnRyX3RxKTsKLQl0YXNrbGV0X2tpbGwoJnNjLT5iY29uX3Rhc2tsZXQpOwotCiAJa2ZyZWUoc2MtPnNjX2FoKTsKIAlzYy0+c2NfYWggPSBOVUxMOwogfQpAQCAtODI0LDYgKzgxMiw4IEBACiAJd2lwaHlfcmZraWxsX3N0b3BfcG9sbGluZyhzYy0+aHctPndpcGh5KTsKIAlhdGhfZGVpbml0X2xlZHMoc2MpOwogCisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CisKIAlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgewogCQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gc2MtPnNlY193aXBoeVtpXTsKIAkJaWYgKGFwaHkgPT0gTlVMTCkKQEAgLTgzNCw3ICs4MjQsNiBAQAogCX0KIAogCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGh3KTsKLQlwbV9xb3NfcmVtb3ZlX3JlcXVlc3QoJnNjLT5wbV9xb3NfcmVxKTsKIAlhdGhfcnhfY2xlYW51cChzYyk7CiAJYXRoX3R4X2NsZWFudXAoc2MpOwogCWF0aDlrX2RlaW5pdF9zb2Z0YyhzYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwppbmRleCBmOTBhNmNhLi5hMDlkMTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKQEAgLTMyNSw2ICszMjUsOCBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAlzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgdHhjdGw7CiAJaW50IHRpbWVfbGVmdDsKIApAQCAtMzQwLDE0ICszNDIsMTYgQEAKIAl0eF9pbmZvLT5jb250cm9sLnJhdGVzWzFdLmlkeCA9IC0xOwogCiAJaW5pdF9jb21wbGV0aW9uKCZzYy0+cGFwcmRfY29tcGxldGUpOwotCXNjLT5wYXByZF9wZW5kaW5nID0gdHJ1ZTsKIAl0eGN0bC5wYXByZCA9IEJJVChjaGFpbik7Ci0JaWYgKGF0aF90eF9zdGFydChodywgc2tiLCAmdHhjdGwpICE9IDApCisKKwlpZiAoYXRoX3R4X3N0YXJ0KGh3LCBza2IsICZ0eGN0bCkgIT0gMCkgeworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19YTUlULCAiUEFQUkQgVFggZmFpbGVkXG4iKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuIGZhbHNlOworCX0KIAogCXRpbWVfbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc2MtPnBhcHJkX2NvbXBsZXRlLAogCQkJbXNlY3NfdG9famlmZmllcyhBVEhfUEFQUkRfVElNRU9VVCkpOwotCXNjLT5wYXByZF9wZW5kaW5nID0gZmFsc2U7CiAKIAlpZiAoIXRpbWVfbGVmdCkKIAkJYXRoX2RiZyhhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgQVRIX0RCR19DQUxJQlJBVEUsCkBAIC01OTIsMTQgKzU5NiwxMiBAQAogCXUzMiBzdGF0dXMgPSBzYy0+aW50cnN0YXR1czsKIAl1MzIgcnhtYXNrOwogCi0JYXRoOWtfcHNfd2FrZXVwKHNjKTsKLQogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfRkFUQUwpIHsKIAkJYXRoX3Jlc2V0KHNjLCB0cnVlKTsKLQkJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAJCXJldHVybjsKIAl9CiAKKwlhdGg5a19wc193YWtldXAoc2MpOwogCXNwaW5fbG9jaygmc2MtPnNjX3BjdV9sb2NrKTsKIAogCWlmICghYXRoOWtfaHdfY2hlY2tfYWxpdmUoYWgpKQpAQCAtOTU1LDggKzk1Nyw2IEBACiAKIAlzcGluX3VubG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKIAlhdGg5a19wc19yZXN0b3JlKHNjKTsKLQotCWF0aDlrX3NldHBvd2VyKHNjLCBBVEg5S19QTV9GVUxMX1NMRUVQKTsKIH0KIAogaW50IGF0aF9yZXNldChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgYm9vbCByZXRyeV90eCkKQEAgLTk2OSw2ICs5NjksNyBAQAogCS8qIFN0b3AgQU5JICovCiAJZGVsX3RpbWVyX3N5bmMoJmNvbW1vbi0+YW5pLnRpbWVyKTsKIAorCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcGN1X2xvY2spOwogCiAJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKQEAgLTEwMTUsNiArMTAxNiw3IEBACiAKIAkvKiBTdGFydCBBTkkgKi8KIAlhdGhfc3RhcnRfYW5pKGNvbW1vbik7CisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAKIAlyZXR1cm4gcjsKIH0KQEAgLTExNzEsMTIgKzExNzMsNiBAQAogCQkJYXRoOWtfYnRjb2V4X3RpbWVyX3Jlc3VtZShzYyk7CiAJfQogCi0JLyogVXNlciBoYXMgdGhlIG9wdGlvbiB0byBwcm92aWRlIHBtLXFvcyB2YWx1ZSBhcyBhIG1vZHVsZQotCSAqIHBhcmFtZXRlciByYXRoZXIgdGhhbiB1c2luZyB0aGUgZGVmYXVsdCB2YWx1ZSBvZgotCSAqICdBVEg5S19QTV9RT1NfREVGQVVMVF9WQUxVRScuCi0JICovCi0JcG1fcW9zX3VwZGF0ZV9yZXF1ZXN0KCZzYy0+cG1fcW9zX3JlcSwgYXRoOWtfcG1fcW9zX3ZhbHVlKTsKLQogCWlmIChhaC0+Y2Fwcy5wY2llX2xjcl9leHRzeW5jX2VuICYmIGNvbW1vbi0+YnVzX29wcy0+ZXh0bl9zeW5jaF9lbikKIAkJY29tbW9uLT5idXNfb3BzLT5leHRuX3N5bmNoX2VuKGNvbW1vbik7CiAKQEAgLTEzMDksNiArMTMwNSw5IEBACiAKIAlzcGluX2xvY2tfYmgoJnNjLT5zY19wY3VfbG9jayk7CiAKKwkvKiBwcmV2ZW50IHRhc2tsZXRzIHRvIGVuYWJsZSBpbnRlcnJ1cHRzIG9uY2Ugd2UgZGlzYWJsZSB0aGVtICovCisJYWgtPmltYXNrICY9IH5BVEg5S19JTlRfR0xPQkFMOworCiAJLyogbWFrZSBzdXJlIGgvdyB3aWxsIG5vdCBnZW5lcmF0ZSBhbnkgaW50ZXJydXB0CiAJICogYmVmb3JlIHNldHRpbmcgdGhlIGludmFsaWQgZmxhZy4gKi8KIAlhdGg5a19od19kaXNhYmxlX2ludGVycnVwdHMoYWgpOwpAQCAtMTMyNiw2ICsxMzI1LDEyIEBACiAKIAlzcGluX3VubG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKIAorCS8qIHdlIGNhbiBub3cgc3luYyBpcnEgYW5kIGtpbGwgYW55IHJ1bm5pbmcgdGFza2xldHMsIHNpbmNlIHdlIGFscmVhZHkKKwkgKiBkaXNhYmxlZCBpbnRlcnJ1cHRzIGFuZCBub3QgaG9sZGluZyBhIHNwaW4gbG9jayAqLworCXN5bmNocm9uaXplX2lycShzYy0+aXJxKTsKKwl0YXNrbGV0X2tpbGwoJnNjLT5pbnRyX3RxKTsKKwl0YXNrbGV0X2tpbGwoJnNjLT5iY29uX3Rhc2tsZXQpOworCiAJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAKIAlzYy0+cHNfaWRsZSA9IHRydWU7CkBAIC0xMzM0LDggKzEzMzksNiBAQAogCiAJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0lOVkFMSUQ7CiAKLQlwbV9xb3NfdXBkYXRlX3JlcXVlc3QoJnNjLT5wbV9xb3NfcmVxLCBQTV9RT1NfREVGQVVMVF9WQUxVRSk7Ci0KIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiAKIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJEcml2ZXIgaGFsdFxuIik7CkBAIC0xNzAxLDcgKzE3MDQsOSBAQAogc2tpcF9jaGFuX2NoYW5nZToKIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUikgewogCQlzYy0+Y29uZmlnLnR4cG93bGltaXQgPSAyICogY29uZi0+cG93ZXJfbGV2ZWw7CisJCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJCWF0aF91cGRhdGVfdHhwb3coc2MpOworCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAl9CiAKIAlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCmluZGV4IDMzMmQxZmUuLjA3Yjc4MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYwpAQCAtMTcyNSw2ICsxNzI1LDkgQEAKIAkJCWFyOTAwM19od19zZXRfcGFwcmRfdHhkZXNjKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MsCiAJCQkJCQkgICBiZi0+YmZfc3RhdGUuYmZzX3BhcHJkKTsKIAorCQlpZiAodHhjdGwtPnBhcHJkKQorCQkJYmYtPmJmX3N0YXRlLmJmc19wYXByZF90aW1lc3RhbXAgPSBqaWZmaWVzOworCiAJCWF0aF90eF9zZW5kX25vcm1hbChzYywgdHhjdGwtPnR4cSwgdGlkLCAmYmZfaGVhZCk7CiAJfQogCkBAIC0xODg2LDcgKzE4ODksOSBAQAogCWJmLT5iZl9idWZfYWRkciA9IDA7CiAKIAlpZiAoYmYtPmJmX3N0YXRlLmJmc19wYXByZCkgewotCQlpZiAoIXNjLT5wYXByZF9wZW5kaW5nKQorCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAorCQkJCWJmLT5iZl9zdGF0ZS5iZnNfcGFwcmRfdGltZXN0YW1wICsKKwkJCQltc2Vjc190b19qaWZmaWVzKEFUSF9QQVBSRF9USU1FT1VUKSkpCiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQllbHNlCiAJCQljb21wbGV0ZSgmc2MtPnBhcHJkX2NvbXBsZXRlKTsKQEAgLTIxMTMsOSArMjExOCw3IEBACiAJaWYgKG5lZWRyZXNldCkgewogCQlhdGhfZGJnKGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLCBBVEhfREJHX1JFU0VULAogCQkJInR4IGh1bmcsIHJlc2V0dGluZyB0aGUgY2hpcFxuIik7Ci0JCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJCWF0aF9yZXNldChzYywgdHJ1ZSk7Ci0JCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCX0KIAogCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LCAmc2MtPnR4X2NvbXBsZXRlX3dvcmssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9yeC5jCmluZGV4IDkzOWEwZTkuLjg0ODY2YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9yeC5jCkBAIC01NjQsNyArNTY0LDcgQEAKIAljYW0gPSBpZWVlODAyMTFfY2hlY2tfdGltKHRpbV9pZSwgdGltX2xlbiwgYXItPmNvbW1vbi5jdXJhaWQpOwogCiAJLyogMi4gTWF5YmUgdGhlIEFQIHdhbnRzIHRvIHNlbmQgbXVsdGljYXN0L2Jyb2FkY2FzdCBkYXRhPyAqLwotCWNhbSA9ICEhKHRpbV9pZS0+Yml0bWFwX2N0cmwgJiAweDAxKTsKKwljYW0gfD0gISEodGltX2llLT5iaXRtYXBfY3RybCAmIDB4MDEpOwogCiAJaWYgKCFjYW0pIHsKIAkJLyogYmFjayB0byBsb3ctcG93ZXIgbGFuZC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYwppbmRleCBhOWI4NTJiLi4zOWI2ZjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCkBAIC00MDIsNzIgKzQwMiw2IEBACiB9CiAjZW5kaWYKIAotLyoqCi0gKiBpd2wzOTQ1X2dvb2RfcGxjcF9oZWFsdGggLSBjaGVja3MgZm9yIHBsY3AgZXJyb3IuCi0gKgotICogV2hlbiB0aGUgcGxjcCBlcnJvciBpcyBleGNlZWRpbmcgdGhlIHRocmVzaG9sZHMsIHJlc2V0IHRoZSByYWRpbwotICogdG8gaW1wcm92ZSB0aGUgdGhyb3VnaHB1dC4KLSAqLwotc3RhdGljIGJvb2wgaXdsMzk0NV9nb29kX3BsY3BfaGVhbHRoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0KQotewotCWJvb2wgcmMgPSB0cnVlOwotCXN0cnVjdCBpd2wzOTQ1X25vdGlmX3N0YXRpc3RpY3MgY3VycmVudF9zdGF0OwotCWludCBjb21iaW5lZF9wbGNwX2RlbHRhOwotCXVuc2lnbmVkIGludCBwbGNwX21zZWM7Ci0JdW5zaWduZWQgbG9uZyBwbGNwX3JlY2VpdmVkX2ppZmZpZXM7Ci0KLQlpZiAocHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+cGxjcF9kZWx0YV90aHJlc2hvbGQgPT0KLQkgICAgSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfRElTQUJMRSkgewotCQlJV0xfREVCVUdfUkFESU8ocHJpdiwgInBsY3BfZXJyIGNoZWNrIGRpc2FibGVkXG4iKTsKLQkJcmV0dXJuIHJjOwotCX0KLQltZW1jcHkoJmN1cnJlbnRfc3RhdCwgcGt0LT51LnJhdywgc2l6ZW9mKHN0cnVjdAotCQkJaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzKSk7Ci0JLyoKLQkgKiBjaGVjayBmb3IgcGxjcF9lcnIgYW5kIHRyaWdnZXIgcmFkaW8gcmVzZXQgaWYgaXQgZXhjZWVkcwotCSAqIHRoZSBwbGNwIGVycm9yIHRocmVzaG9sZCBwbGNwX2RlbHRhLgotCSAqLwotCXBsY3BfcmVjZWl2ZWRfamlmZmllcyA9IGppZmZpZXM7Ci0JcGxjcF9tc2VjID0gamlmZmllc190b19tc2VjcygobG9uZykgcGxjcF9yZWNlaXZlZF9qaWZmaWVzIC0KLQkJCQkJKGxvbmcpIHByaXYtPnBsY3BfamlmZmllcyk7Ci0JcHJpdi0+cGxjcF9qaWZmaWVzID0gcGxjcF9yZWNlaXZlZF9qaWZmaWVzOwotCS8qCi0JICogY2hlY2sgdG8gbWFrZSBzdXJlIHBsY3BfbXNlYyBpcyBub3QgMCB0byBwcmV2ZW50IGRpdmlzaW9uCi0JICogYnkgemVyby4KLQkgKi8KLQlpZiAocGxjcF9tc2VjKSB7Ci0JCWNvbWJpbmVkX3BsY3BfZGVsdGEgPQotCQkJKGxlMzJfdG9fY3B1KGN1cnJlbnRfc3RhdC5yeC5vZmRtLnBsY3BfZXJyKSAtCi0JCQlsZTMyX3RvX2NwdShwcml2LT5fMzk0NS5zdGF0aXN0aWNzLnJ4Lm9mZG0ucGxjcF9lcnIpKTsKLQotCQlpZiAoKGNvbWJpbmVkX3BsY3BfZGVsdGEgPiAwKSAmJgotCQkJKChjb21iaW5lZF9wbGNwX2RlbHRhICogMTAwKSAvIHBsY3BfbXNlYykgPgotCQkJcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+cGxjcF9kZWx0YV90aHJlc2hvbGQpIHsKLQkJCS8qCi0JCQkgKiBpZiBwbGNwX2VyciBleGNlZWQgdGhlIHRocmVzaG9sZCwgdGhlIGZvbGxvd2luZwotCQkJICogZGF0YSBpcyBwcmludGVkIGluIGNzdiBmb3JtYXQ6Ci0JCQkgKiAgICBUZXh0OiBwbGNwX2VyciBleGNlZWRlZCAlZCwKLQkJCSAqICAgIFJlY2VpdmVkIG9mZG0ucGxjcF9lcnIsCi0JCQkgKiAgICBDdXJyZW50IG9mZG0ucGxjcF9lcnIsCi0JCQkgKiAgICBjb21iaW5lZF9wbGNwX2RlbHRhLAotCQkJICogICAgcGxjcF9tc2VjCi0JCQkgKi8KLQkJCUlXTF9ERUJVR19SQURJTyhwcml2LCAicGxjcF9lcnIgZXhjZWVkZWQgJXUsICIKLQkJCQkiJXUsICVkLCAldSBtU2Vjc1xuIiwKLQkJCQlwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5wbGNwX2RlbHRhX3RocmVzaG9sZCwKLQkJCQlsZTMyX3RvX2NwdShjdXJyZW50X3N0YXQucngub2ZkbS5wbGNwX2VyciksCi0JCQkJY29tYmluZWRfcGxjcF9kZWx0YSwgcGxjcF9tc2VjKTsKLQkJCS8qCi0JCQkgKiBSZXNldCB0aGUgUkYgcmFkaW8gZHVlIHRvIHRoZSBoaWdoIHBsY3AKLQkJCSAqIGVycm9yIHJhdGUKLQkJCSAqLwotCQkJcmMgPSBmYWxzZTsKLQkJfQotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KIHZvaWQgaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7CkBAIC0yNzM0LDcgKzI2NjgsNiBAQAogCS5pc3Jfb3BzID0gewogCQkuaXNyID0gaXdsX2lzcl9sZWdhY3ksCiAJfSwKLQkuY2hlY2tfcGxjcF9oZWFsdGggPSBpd2wzOTQ1X2dvb2RfcGxjcF9oZWFsdGgsCiAKIAkuZGVidWdmc19vcHMgPSB7CiAJCS5yeF9zdGF0c19yZWFkID0gaXdsMzk0NV91Y29kZV9yeF9zdGF0c19yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCmluZGV4IDNmMWU1ZjEuLjkxYTlmNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKQEAgLTI2MjQsNiArMjYyNCw3IEBACiAJLmZ3X25hbWVfcHJlID0gSVdMNDk2NV9GV19QUkUsCiAJLnVjb2RlX2FwaV9tYXggPSBJV0w0OTY1X1VDT0RFX0FQSV9NQVgsCiAJLnVjb2RlX2FwaV9taW4gPSBJV0w0OTY1X1VDT0RFX0FQSV9NSU4sCisJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0d8SVdMX1NLVV9OLAogCS52YWxpZF90eF9hbnQgPSBBTlRfQUIsCiAJLnZhbGlkX3J4X2FudCA9IEFOVF9BQkMsCiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNDk2NV9FRVBST01fVkVSU0lPTiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYwppbmRleCBhZjUwNWJjLi5lZjM2YWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCkBAIC02ODEsNiArNjgxLDggQEAKIAkuZndfbmFtZV9wcmUgPSBJV0w2MDUwX0ZXX1BSRSwJCQkJXAogCS51Y29kZV9hcGlfbWF4ID0gSVdMNjA1MF9VQ09ERV9BUElfTUFYLAkJCVwKIAkudWNvZGVfYXBpX21pbiA9IElXTDYwNTBfVUNPREVfQVBJX01JTiwJCQlcCisJLnZhbGlkX3R4X2FudCA9IEFOVF9BQiwJCS8qIC5jZmcgb3ZlcndyaXRlICovCVwKKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAkJLyogLmNmZyBvdmVyd3JpdGUgKi8JXAogCS5vcHMgPSAmaXdsNjA1MF9vcHMsCQkJCQlcCiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNjA1MF9FRVBST01fVkVSU0lPTiwJCVwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MDUwX1RYX1BPV0VSX1ZFUlNJT04sCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1lZXByb20uYwppbmRleCA5NzkwNmRkLi4yN2I1YTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWVlcHJvbS5jCkBAIC0xNTIsMTEgKzE1MiwxNCBAQAogCiAJZWVwcm9tX3NrdSA9IGl3bF9lZXByb21fcXVlcnkxNihwcml2LCBFRVBST01fU0tVX0NBUCk7CiAKLQlwcml2LT5jZmctPnNrdSA9ICgoZWVwcm9tX3NrdSAmIEVFUFJPTV9TS1VfQ0FQX0JBTkRfU0VMRUNUSU9OKSA+PgorCWlmICghcHJpdi0+Y2ZnLT5za3UpIHsKKwkJLyogbm90IHVzaW5nIHNrdSBvdmVyd3JpdGUgKi8KKwkJcHJpdi0+Y2ZnLT5za3UgPQorCQkJKChlZXByb21fc2t1ICYgRUVQUk9NX1NLVV9DQVBfQkFORF9TRUxFQ1RJT04pID4+CiAJCQlFRVBST01fU0tVX0NBUF9CQU5EX1BPUyk7Ci0JaWYgKGVlcHJvbV9za3UgJiBFRVBST01fU0tVX0NBUF8xMU5fRU5BQkxFKQotCQlwcml2LT5jZmctPnNrdSB8PSBJV0xfU0tVX047Ci0KKwkJaWYgKGVlcHJvbV9za3UgJiBFRVBST01fU0tVX0NBUF8xMU5fRU5BQkxFKQorCQkJcHJpdi0+Y2ZnLT5za3UgfD0gSVdMX1NLVV9OOworCX0KIAlpZiAoIXByaXYtPmNmZy0+c2t1KSB7CiAJCUlXTF9FUlIocHJpdiwgIkludmFsaWQgZGV2aWNlIHNrdVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTY4LDcgKzE3MSw3IEBACiAJCS8qIG5vdCB1c2luZyAuY2ZnIG92ZXJ3cml0ZSAqLwogCQlyYWRpb19jZmcgPSBpd2xfZWVwcm9tX3F1ZXJ5MTYocHJpdiwgRUVQUk9NX1JBRElPX0NPTkZJRyk7CiAJCXByaXYtPmNmZy0+dmFsaWRfdHhfYW50ID0gRUVQUk9NX1JGX0NGR19UWF9BTlRfTVNLKHJhZGlvX2NmZyk7Ci0JCXByaXYtPmNmZy0+dmFsaWRfcnhfYW50ID0gRUVQUk9NX1JGX0NGR19UWF9BTlRfTVNLKHJhZGlvX2NmZyk7CisJCXByaXYtPmNmZy0+dmFsaWRfcnhfYW50ID0gRUVQUk9NX1JGX0NGR19SWF9BTlRfTVNLKHJhZGlvX2NmZyk7CiAJCWlmICghcHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQgfHwgIXByaXYtPmNmZy0+dmFsaWRfcnhfYW50KSB7CiAJCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIGNoYWluICgwWCV4LCAwWCV4KVxuIiwKIAkJCQlwcml2LT5jZmctPnZhbGlkX3R4X2FudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKaW5kZXggMzYzMzViMS4uYzFjZmQ5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKQEAgLTExNTcsNiArMTE1Nyw5IEBACiAJLyogb25seSBSZS1lbmFibGUgaWYgZGlzYWJsZWQgYnkgaXJxICovCiAJaWYgKHRlc3RfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cykpCiAJCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwkvKiBSZS1lbmFibGUgUkZfS0lMTCBpZiBpdCBvY2N1cnJlZCAqLworCWVsc2UgaWYgKGhhbmRsZWQgJiBDU1JfSU5UX0JJVF9SRl9LSUxMKQorCQlpd2xfZW5hYmxlX3Jma2lsbF9pbnQocHJpdik7CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogCWlmIChpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgKElXTF9ETF9JU1IpKSB7CkBAIC0xMzcxLDYgKzEzNzQsOSBAQAogCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpc2FibGVkIGJ5IGlycSAqLwogCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQogCQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CisJLyogUmUtZW5hYmxlIFJGX0tJTEwgaWYgaXQgb2NjdXJyZWQgKi8KKwllbHNlIGlmIChoYW5kbGVkICYgQ1NSX0lOVF9CSVRfUkZfS0lMTCkKKwkJaXdsX2VuYWJsZV9yZmtpbGxfaW50KHByaXYpOwogfQogCiAvKiB0aGUgdGhyZXNob2xkIHJhdGlvIG9mIGFjdHVhbF9hY2tfY250IHRvIGV4cGVjdGVkX2Fja19jbnQgaW4gcGVyY2VudCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL25ldGRldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL25ldGRldi5jCmluZGV4IDEzYTY5ZWIuLjUwOTFkNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbmV0ZGV2LmMKQEAgLTEyNiw2ICsxMjYsNyBAQAogCW5kZXYgPSBhbGxvY19uZXRkZXZfbXEoMCwgIndsYW4lZCIsIGV0aGVyX3NldHVwLCBJV01fVFhfUVVFVUVTKTsKIAlpZiAoIW5kZXYpIHsKIAkJZGV2X2VycihkZXYsICJubyBtZW1vcnkgZm9yIG5ldHdvcmsgZGV2aWNlIGluc3RhbmNlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfcHJpdjsKIAl9CiAKQEAgLTEzOCw2ICsxMzksNyBAQAogCQkJCSAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIWl3bS0+dW1hY19wcm9maWxlKSB7CiAJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgYWxsb2MgbWVtb3J5IGZvciBwcm9maWxlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfcHJvZmlsZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYwppbmRleCAxZWFjYmE0Li4wNDk0ZDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCkBAIC0xOTksNiArMTk5LDcgQEAKIAl3aGlsZSAoaSAhPSBpZHgpIHsKIAkJdTE2IGxlbjsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAkJZGVzYyA9ICZyaW5nW2ldOwogCQlsZW4gPSBsZTE2X3RvX2NwdShkZXNjLT5sZW4pOwogCQlza2IgPSByeF9idWZbaV07CkBAIC0yMTYsMTcgKzIxNywyMCBAQAogCiAJCQlsZW4gPSBwcml2LT5jb21tb24ucnhfbXR1OwogCQl9CisJCWRtYV9hZGRyID0gbGUzMl90b19jcHUoZGVzYy0+aG9zdF9hZGRyKTsKKwkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHByaXYtPnBkZXYsIGRtYV9hZGRyLAorCQkJcHJpdi0+Y29tbW9uLnJ4X210dSArIDMyLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQlza2JfcHV0KHNrYiwgbGVuKTsKIAogCQlpZiAocDU0X3J4KGRldiwgc2tiKSkgewotCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LAotCQkJCQkgbGUzMl90b19jcHUoZGVzYy0+aG9zdF9hZGRyKSwKLQkJCQkJIHByaXYtPmNvbW1vbi5yeF9tdHUgKyAzMiwKLQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGRtYV9hZGRyLAorCQkJCXByaXYtPmNvbW1vbi5yeF9tdHUgKyAzMiwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCXJ4X2J1ZltpXSA9IE5VTEw7Ci0JCQlkZXNjLT5ob3N0X2FkZHIgPSAwOworCQkJZGVzYy0+aG9zdF9hZGRyID0gY3B1X3RvX2xlMzIoMCk7CiAJCX0gZWxzZSB7CiAJCQlza2JfdHJpbShza2IsIDApOworCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHByaXYtPnBkZXYsIGRtYV9hZGRyLAorCQkJCXByaXYtPmNvbW1vbi5yeF9tdHUgKyAzMiwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCWRlc2MtPmxlbiA9IGNwdV90b19sZTE2KHByaXYtPmNvbW1vbi5yeF9tdHUgKyAzMik7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHBjaS5jCmluZGV4IGFhOTc5NzEuLjNiM2YxZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwcGNpLmMKQEAgLTY1Miw2ICs2NTIsMTIgQEAKIAkJICovCiAJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19JVl9TVFJJUFBFRDsKIAorCQkvKgorCQkgKiBUaGUgaGFyZHdhcmUgaGFzIGFscmVhZHkgY2hlY2tlZCB0aGUgTWljaGFlbCBNaWMgYW5kIGhhcworCQkgKiBzdHJpcHBlZCBpdCBmcm9tIHRoZSBmcmFtZS4gU2lnbmFsIHRoaXMgdG8gbWFjODAyMTEuCisJCSAqLworCQlyeGRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfTU1JQ19TVFJJUFBFRDsKKwogCQlpZiAocnhkZXNjLT5jaXBoZXJfc3RhdHVzID09IFJYX0NSWVBUT19TVUNDRVNTKQogCQkJcnhkZXNjLT5mbGFncyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKIAkJZWxzZSBpZiAocnhkZXNjLT5jaXBoZXJfc3RhdHVzID09IFJYX0NSWVBUT19GQUlMX01JQykKQEAgLTEwNjUsNiArMTA3MSw4IEBACiAJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzMzkwKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9SVDM1WFgKKwl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3MTEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzIyKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAogCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzA2MCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMwNjIpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzNTYyKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCmluZGV4IGI5N2E0YTUuLjE5N2EzNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKQEAgLTQ4Niw2ICs0ODYsMTIgQEAKIAkJICovCiAJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19JVl9TVFJJUFBFRDsKIAorCQkvKgorCQkgKiBUaGUgaGFyZHdhcmUgaGFzIGFscmVhZHkgY2hlY2tlZCB0aGUgTWljaGFlbCBNaWMgYW5kIGhhcworCQkgKiBzdHJpcHBlZCBpdCBmcm9tIHRoZSBmcmFtZS4gU2lnbmFsIHRoaXMgdG8gbWFjODAyMTEuCisJCSAqLworCQlyeGRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfTU1JQ19TVFJJUFBFRDsKKwogCQlpZiAocnhkZXNjLT5jaXBoZXJfc3RhdHVzID09IFJYX0NSWVBUT19TVUNDRVNTKQogCQkJcnhkZXNjLT5mbGFncyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKIAkJZWxzZSBpZiAocnhkZXNjLT5jaXBoZXJfc3RhdHVzID09IFJYX0NSWVBUT19GQUlMX01JQykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGZpcm13YXJlLmMKaW5kZXggZjBlMWViNy4uYmUwZmY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGZpcm13YXJlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGZpcm13YXJlLmMKQEAgLTU4LDYgKzU4LDcgQEAKIAogCWlmICghZncgfHwgIWZ3LT5zaXplIHx8ICFmdy0+ZGF0YSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJGYWlsZWQgdG8gcmVhZCBGaXJtd2FyZS5cbiIpOworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwppbmRleCAwYjRlODU5Li4wMjliZTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKQEAgLTI0NDYsNiArMjQ0Niw3IEBACiAJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTNkKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI1NzMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MjY3MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDgxMiwgMHgzMTAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAkvKiBRY29tICovCiAJeyBVU0JfREVWSUNFKDB4MThlOCwgMHg2MTk2KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxOGU4LCAweDYyMjkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5jCmluZGV4IGI4NDMzZjMuLjYyODc2Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZWZ1c2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2VmdXNlLmMKQEAgLTcyNiw5ICs3MjYsOSBAQAogfQogCiBzdGF0aWMgdm9pZCBlZnVzZV93cml0ZV9kYXRhX2Nhc2UxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgKmVmdXNlX2FkZHIsCi0JCQkJdTggZWZ1c2VfZGF0YSwgdTggb2Zmc2V0LCBpbnQgKmJjb250aW51YWwsCi0JCQkJdTggKndyaXRlX3N0YXRlLCBzdHJ1Y3QgcGdwa3Rfc3RydWN0IHRhcmdldF9wa3QsCi0JCQkJaW50ICpyZXBlYXRfdGltZXMsIGludCAqYnJlc3VsdCwgdTggd29yZF9lbikKKwkJCXU4IGVmdXNlX2RhdGEsIHU4IG9mZnNldCwgaW50ICpiY29udGludWFsLAorCQkJdTggKndyaXRlX3N0YXRlLCBzdHJ1Y3QgcGdwa3Rfc3RydWN0ICp0YXJnZXRfcGt0LAorCQkJaW50ICpyZXBlYXRfdGltZXMsIGludCAqYnJlc3VsdCwgdTggd29yZF9lbikKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHBncGt0X3N0cnVjdCB0bXBfcGt0OwpAQCAtNzQ0LDggKzc0NCw4IEBACiAJdG1wX3BrdC53b3JkX2VuID0gdG1wX2hlYWRlciAmIDB4MEY7CiAJdG1wX3dvcmRfY250cyA9IGVmdXNlX2NhbGN1bGF0ZV93b3JkX2NudHModG1wX3BrdC53b3JkX2VuKTsKIAotCWlmICh0bXBfcGt0Lm9mZnNldCAhPSB0YXJnZXRfcGt0Lm9mZnNldCkgewotCQllZnVzZV9hZGRyID0gZWZ1c2VfYWRkciArICh0bXBfd29yZF9jbnRzICogMikgKyAxOworCWlmICh0bXBfcGt0Lm9mZnNldCAhPSB0YXJnZXRfcGt0LT5vZmZzZXQpIHsKKwkJKmVmdXNlX2FkZHIgPSAqZWZ1c2VfYWRkciArICh0bXBfd29yZF9jbnRzICogMikgKyAxOwogCQkqd3JpdGVfc3RhdGUgPSBQR19TVEFURV9IRUFERVI7CiAJfSBlbHNlIHsKIAkJZm9yICh0bXBpbmRleCA9IDA7IHRtcGluZGV4IDwgKHRtcF93b3JkX2NudHMgKiAyKTsgdG1waW5kZXgrKykgewpAQCAtNzU2LDIzICs3NTYsMjMgQEAKIAkJfQogCiAJCWlmIChiZGF0YWVtcHR5ID09IGZhbHNlKSB7Ci0JCQllZnVzZV9hZGRyID0gZWZ1c2VfYWRkciArICh0bXBfd29yZF9jbnRzICogMikgKyAxOworCQkJKmVmdXNlX2FkZHIgPSAqZWZ1c2VfYWRkciArICh0bXBfd29yZF9jbnRzICogMikgKyAxOwogCQkJKndyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOwogCQl9IGVsc2UgewogCQkJbWF0Y2hfd29yZF9lbiA9IDB4MEY7Ci0JCQlpZiAoISgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDApKSB8CisJCQlpZiAoISgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgwKSkgfAogCQkJICAgICAodG1wX3BrdC53b3JkX2VuICYgQklUKDApKSkpCiAJCQkJbWF0Y2hfd29yZF9lbiAmPSAofkJJVCgwKSk7CiAKLQkJCWlmICghKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMSkpIHwKKwkJCWlmICghKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDEpKSB8CiAJCQkgICAgICh0bXBfcGt0LndvcmRfZW4gJiBCSVQoMSkpKSkKIAkJCQltYXRjaF93b3JkX2VuICY9ICh+QklUKDEpKTsKIAotCQkJaWYgKCEoKHRhcmdldF9wa3Qud29yZF9lbiAmIEJJVCgyKSkgfAorCQkJaWYgKCEoKHRhcmdldF9wa3QtPndvcmRfZW4gJiBCSVQoMikpIHwKIAkJCSAgICAgKHRtcF9wa3Qud29yZF9lbiAmIEJJVCgyKSkpKQogCQkJCW1hdGNoX3dvcmRfZW4gJj0gKH5CSVQoMikpOwogCi0JCQlpZiAoISgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDMpKSB8CisJCQlpZiAoISgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgzKSkgfAogCQkJICAgICAodG1wX3BrdC53b3JkX2VuICYgQklUKDMpKSkpCiAJCQkJbWF0Y2hfd29yZF9lbiAmPSAofkJJVCgzKSk7CiAKQEAgLTc4MCw3ICs3ODAsNyBAQAogCQkJCWJhZHdvcmRlbiA9IGVmdXNlX3dvcmRfZW5hYmxlX2RhdGFfd3JpdGUoCiAJCQkJCQkJICAgIGh3LCAqZWZ1c2VfYWRkciArIDEsCiAJCQkJCQkJICAgIHRtcF9wa3Qud29yZF9lbiwKLQkJCQkJCQkgICAgdGFyZ2V0X3BrdC5kYXRhKTsKKwkJCQkJCQkgICAgdGFyZ2V0X3BrdC0+ZGF0YSk7CiAKIAkJCQlpZiAoMHgwRiAhPSAoYmFkd29yZGVuICYgMHgwRikpIHsKIAkJCQkJdTggcmVvcmdfb2Zmc2V0ID0gb2Zmc2V0OwpAQCAtNzkxLDI2ICs3OTEsMjYgQEAKIAkJCQl9CiAKIAkJCQl0bXBfd29yZF9lbiA9IDB4MEY7Ci0JCQkJaWYgKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMCkpIF4KKwkJCQlpZiAoKHRhcmdldF9wa3QtPndvcmRfZW4gJiBCSVQoMCkpIF4KIAkJCQkgICAgKG1hdGNoX3dvcmRfZW4gJiBCSVQoMCkpKQogCQkJCQl0bXBfd29yZF9lbiAmPSAofkJJVCgwKSk7CiAKLQkJCQlpZiAoKHRhcmdldF9wa3Qud29yZF9lbiAmIEJJVCgxKSkgXgorCQkJCWlmICgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgxKSkgXgogCQkJCSAgICAobWF0Y2hfd29yZF9lbiAmIEJJVCgxKSkpCiAJCQkJCXRtcF93b3JkX2VuICY9ICh+QklUKDEpKTsKIAotCQkJCWlmICgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDIpKSBeCisJCQkJaWYgKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDIpKSBeCiAJCQkJCShtYXRjaF93b3JkX2VuICYgQklUKDIpKSkKIAkJCQkJdG1wX3dvcmRfZW4gJj0gKH5CSVQoMikpOwogCi0JCQkJaWYgKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMykpIF4KKwkJCQlpZiAoKHRhcmdldF9wa3QtPndvcmRfZW4gJiBCSVQoMykpIF4KIAkJCQkgICAgKG1hdGNoX3dvcmRfZW4gJiBCSVQoMykpKQogCQkJCQl0bXBfd29yZF9lbiAmPSAofkJJVCgzKSk7CiAKIAkJCQlpZiAoKHRtcF93b3JkX2VuICYgMHgwRikgIT0gMHgwRikgewogCQkJCQkqZWZ1c2VfYWRkciA9IGVmdXNlX2dldF9jdXJyZW50X3NpemUoaHcpOwotCQkJCQl0YXJnZXRfcGt0Lm9mZnNldCA9IG9mZnNldDsKLQkJCQkJdGFyZ2V0X3BrdC53b3JkX2VuID0gdG1wX3dvcmRfZW47CisJCQkJCXRhcmdldF9wa3QtPm9mZnNldCA9IG9mZnNldDsKKwkJCQkJdGFyZ2V0X3BrdC0+d29yZF9lbiA9IHRtcF93b3JkX2VuOwogCQkJCX0gZWxzZQogCQkJCQkqYmNvbnRpbnVhbCA9IGZhbHNlOwogCQkJCSp3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKQEAgLTgyMSw4ICs4MjEsOCBAQAogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJKmVmdXNlX2FkZHIgKz0gKDIgKiB0bXBfd29yZF9jbnRzKSArIDE7Ci0JCQkJdGFyZ2V0X3BrdC5vZmZzZXQgPSBvZmZzZXQ7Ci0JCQkJdGFyZ2V0X3BrdC53b3JkX2VuID0gd29yZF9lbjsKKwkJCQl0YXJnZXRfcGt0LT5vZmZzZXQgPSBvZmZzZXQ7CisJCQkJdGFyZ2V0X3BrdC0+d29yZF9lbiA9IHdvcmRfZW47CiAJCQkJKndyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOwogCQkJfQogCQl9CkBAIC05MzgsNyArOTM4LDcgQEAKIAkJCQllZnVzZV93cml0ZV9kYXRhX2Nhc2UxKGh3LCAmZWZ1c2VfYWRkciwKIAkJCQkJCSAgICAgICBlZnVzZV9kYXRhLCBvZmZzZXQsCiAJCQkJCQkgICAgICAgJmJjb250aW51YWwsCi0JCQkJCQkgICAgICAgJndyaXRlX3N0YXRlLCB0YXJnZXRfcGt0LAorCQkJCQkJICAgICAgICZ3cml0ZV9zdGF0ZSwgJnRhcmdldF9wa3QsCiAJCQkJCQkgICAgICAgJnJlcGVhdF90aW1lcywgJmJyZXN1bHQsCiAJCQkJCQkgICAgICAgd29yZF9lbik7CiAJCQllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYwppbmRleCAwZmEzNmFhLi4xNzU4ZDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKQEAgLTYxOSw2ICs2MTksMTMgQEAKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnVza2IgPSBOVUxMOwogCQkJCQl1OCAqcGRhdGE7CiAJCQkJCXVza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYi0+bGVuICsgMTI4KTsKKwkJCQkJaWYgKCF1c2tiKSB7CisJCQkJCQlSVF9UUkFDRShydGxwcml2LAorCQkJCQkJCShDT01QX0lOVFIgfCBDT01QX1JFQ1YpLAorCQkJCQkJCURCR19FTUVSRywKKwkJCQkJCQkoImNhbid0IGFsbG9jIHJ4IHNrYlxuIikpOworCQkJCQkJZ290byBkb25lOworCQkJCQl9CiAJCQkJCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0IodXNrYiksCiAJCQkJCQkJJnJ4X3N0YXR1cywKIAkJCQkJCQlzaXplb2Yocnhfc3RhdHVzKSk7CkBAIC02NDEsNyArNjQ4LDcgQEAKIAkJCW5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKHJ0bHBjaS0+cnhidWZmZXJzaXplKTsKIAkJCWlmICh1bmxpa2VseSghbmV3X3NrYikpIHsKIAkJCQlSVF9UUkFDRShydGxwcml2LCAoQ09NUF9JTlRSIHwgQ09NUF9SRUNWKSwKLQkJCQkJIERCR19ETUVTRywKKwkJCQkJIERCR19FTUVSRywKIAkJCQkJICgiY2FuJ3QgYWxsb2Mgc2tiIGZvciByeFxuIikpOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KQEAgLTEwNjYsOSArMTA3Myw5IEBACiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0KIAkJCSAgICBkZXZfYWxsb2Nfc2tiKHJ0bHBjaS0+cnhidWZmZXJzaXplKTsKIAkJCXUzMiBidWZmZXJhZGRyZXNzOwotCQkJZW50cnkgPSAmcnRscGNpLT5yeF9yaW5nW3J4X3F1ZXVlX2lkeF0uZGVzY1tpXTsKIAkJCWlmICghc2tiKQogCQkJCXJldHVybiAwOworCQkJZW50cnkgPSAmcnRscGNpLT5yeF9yaW5nW3J4X3F1ZXVlX2lkeF0uZGVzY1tpXTsKIAogCQkJLypza2ItPmRldiA9IGRldjsgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9tYWluLmMKaW5kZXggMDEyZTFhNC4uNDAzNzJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvbWFpbi5jCkBAIC0xMDM5LDYgKzEwMzksOSBAQAogCiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT04pIHsKIAkJYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZik7CisJCWlmICghYmVhY29uKQorCQkJZ290byBvdXRfc2xlZXA7CisKIAkJcmV0ID0gd2wxMjUxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9CRUFDT04sIGJlYWNvbi0+ZGF0YSwKIAkJCQkJICAgICAgYmVhY29uLT5sZW4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc3BpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc3BpLmMKaW5kZXggNDY3MTQ5MS4uNzE0NWVhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NwaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuYwpAQCAtMTEwLDkgKzExMCw4IEBACiAJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKIAogCXNwaV9zeW5jKHdsX3RvX3NwaSh3bCksICZtKTsKLQlrZnJlZShjbWQpOwotCiAJd2wxMjcxX2R1bXAoREVCVUdfU1BJLCAic3BpIHJlc2V0IC0+ICIsIGNtZCwgV1NQSV9JTklUX0NNRF9MRU4pOworCWtmcmVlKGNtZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHdsMTI3MV9zcGlfaW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKaW5kZXggNTQ2ZGU1Ny4uZGExZjEyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKQEAgLTEyMCw2ICsxMjAsOSBAQAogCXVuc2lnbmVkIGxvbmcgcnhfcGZuX2FycmF5W05FVF9SWF9SSU5HX1NJWkVdOwogCXN0cnVjdCBtdWx0aWNhbGxfZW50cnkgcnhfbWNsW05FVF9SWF9SSU5HX1NJWkUrMV07CiAJc3RydWN0IG1tdV91cGRhdGUgcnhfbW11W05FVF9SWF9SSU5HX1NJWkVdOworCisJLyogU3RhdGlzdGljcyAqLworCWludCByeF9nc29fY2hlY2tzdW1fZml4dXA7CiB9OwogCiBzdHJ1Y3QgbmV0ZnJvbnRfcnhfaW5mbyB7CkBAIC03NzAsMTEgKzc3MywyOSBAQAogCXJldHVybiBjb25zOwogfQogCi1zdGF0aWMgaW50IHNrYl9jaGVja3N1bV9zZXR1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBjaGVja3N1bV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpcGhkciAqaXBoOwogCXVuc2lnbmVkIGNoYXIgKnRoOwogCWludCBlcnIgPSAtRVBST1RPOworCWludCByZWNhbGN1bGF0ZV9wYXJ0aWFsX2NzdW0gPSAwOworCisJLyoKKwkgKiBBIEdTTyBTS0IgbXVzdCBiZSBDSEVDS1NVTV9QQVJUSUFMLiBIb3dldmVyIHNvbWUgYnVnZ3kKKwkgKiBwZWVycyBjYW4gZmFpbCB0byBzZXQgTkVUUlhGX2NzdW1fYmxhbmsgd2hlbiBzZW5kaW5nIGEgR1NPCisJICogZnJhbWUuIEluIHRoaXMgY2FzZSBmb3JjZSB0aGUgU0tCIHRvIENIRUNLU1VNX1BBUlRJQUwgYW5kCisJICogcmVjYWxjdWxhdGUgdGhlIHBhcnRpYWwgY2hlY2tzdW0uCisJICovCisJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwgJiYgc2tiX2lzX2dzbyhza2IpKSB7CisJCXN0cnVjdCBuZXRmcm9udF9pbmZvICpucCA9IG5ldGRldl9wcml2KGRldik7CisJCW5wLT5yeF9nc29fY2hlY2tzdW1fZml4dXArKzsKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMOworCQlyZWNhbGN1bGF0ZV9wYXJ0aWFsX2NzdW0gPSAxOworCX0KKworCS8qIEEgbm9uLUNIRUNLU1VNX1BBUlRJQUwgU0tCIGRvZXMgbm90IHJlcXVpcmUgc2V0dXAuICovCisJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpCisJCXJldHVybiAwOwogCiAJaWYgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVApKQogCQlnb3RvIG91dDsKQEAgLTc4OCw5ICs4MDksMjMgQEAKIAlzd2l0Y2ggKGlwaC0+cHJvdG9jb2wpIHsKIAljYXNlIElQUFJPVE9fVENQOgogCQlza2ItPmNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spOworCisJCWlmIChyZWNhbGN1bGF0ZV9wYXJ0aWFsX2NzdW0pIHsKKwkJCXN0cnVjdCB0Y3BoZHIgKnRjcGggPSAoc3RydWN0IHRjcGhkciAqKXRoOworCQkJdGNwaC0+Y2hlY2sgPSB+Y3N1bV90Y3B1ZHBfbWFnaWMoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwKKwkJCQkJCQkgc2tiLT5sZW4gLSBpcGgtPmlobCo0LAorCQkJCQkJCSBJUFBST1RPX1RDUCwgMCk7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBJUFBST1RPX1VEUDoKIAkJc2tiLT5jc3VtX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTsKKworCQlpZiAocmVjYWxjdWxhdGVfcGFydGlhbF9jc3VtKSB7CisJCQlzdHJ1Y3QgdWRwaGRyICp1ZHBoID0gKHN0cnVjdCB1ZHBoZHIgKil0aDsKKwkJCXVkcGgtPmNoZWNrID0gfmNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCisJCQkJCQkJIHNrYi0+bGVuIC0gaXBoLT5paGwqNCwKKwkJCQkJCQkgSVBQUk9UT19VRFAsIDApOworCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCkBAIC04MjksMTMgKzg2NCwxMSBAQAogCQkvKiBFdGhlcm5ldCB3b3JrOiBEZWxheWVkIHRvIGhlcmUgYXMgaXQgcGVla3MgdGhlIGhlYWRlci4gKi8KIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAotCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewotCQkJaWYgKHNrYl9jaGVja3N1bV9zZXR1cChza2IpKSB7Ci0JCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQkJcGFja2V0c19kcm9wcGVkKys7Ci0JCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQljb250aW51ZTsKLQkJCX0KKwkJaWYgKGNoZWNrc3VtX3NldHVwKGRldiwgc2tiKSkgeworCQkJa2ZyZWVfc2tiKHNrYik7CisJCQlwYWNrZXRzX2Ryb3BwZWQrKzsKKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQljb250aW51ZTsKIAkJfQogCiAJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwpAQCAtMTYzMiwxMiArMTY2NSw1OSBAQAogCX0KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCB4ZW5uZXRfc3RhdCB7CisJY2hhciBuYW1lW0VUSF9HU1RSSU5HX0xFTl07CisJdTE2IG9mZnNldDsKK30geGVubmV0X3N0YXRzW10gPSB7CisJeworCQkicnhfZ3NvX2NoZWNrc3VtX2ZpeHVwIiwKKwkJb2Zmc2V0b2Yoc3RydWN0IG5ldGZyb250X2luZm8sIHJ4X2dzb19jaGVja3N1bV9maXh1cCkKKwl9LAorfTsKKworc3RhdGljIGludCB4ZW5uZXRfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHN0cmluZ19zZXQpCit7CisJc3dpdGNoIChzdHJpbmdfc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCXJldHVybiBBUlJBWV9TSVpFKHhlbm5ldF9zdGF0cyk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgdm9pZCB4ZW5uZXRfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdTY0ICogZGF0YSkKK3sKKwl2b2lkICpucCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh4ZW5uZXRfc3RhdHMpOyBpKyspCisJCWRhdGFbaV0gPSAqKGludCAqKShucCArIHhlbm5ldF9zdGF0c1tpXS5vZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCB4ZW5uZXRfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0cmluZ3NldCwgdTggKiBkYXRhKQoreworCWludCBpOworCisJc3dpdGNoIChzdHJpbmdzZXQpIHsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoeGVubmV0X3N0YXRzKTsgaSsrKQorCQkJbWVtY3B5KGRhdGEgKyBpICogRVRIX0dTVFJJTkdfTEVOLAorCQkJICAgICAgIHhlbm5ldF9zdGF0c1tpXS5uYW1lLCBFVEhfR1NUUklOR19MRU4pOworCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgeGVubmV0X2V0aHRvb2xfb3BzID0KIHsKIAkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9jc3VtLAogCS5zZXRfc2cgPSB4ZW5uZXRfc2V0X3NnLAogCS5zZXRfdHNvID0geGVubmV0X3NldF90c28sCiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKKworCS5nZXRfc3NldF9jb3VudCA9IHhlbm5ldF9nZXRfc3NldF9jb3VudCwKKwkuZ2V0X2V0aHRvb2xfc3RhdHMgPSB4ZW5uZXRfZ2V0X2V0aHRvb2xfc3RhdHMsCisJLmdldF9zdHJpbmdzID0geGVubmV0X2dldF9zdHJpbmdzLAogfTsKIAogI2lmZGVmIENPTkZJR19TWVNGUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvS2NvbmZpZyBiL2RyaXZlcnMvbmZjL0tjb25maWcKaW5kZXggZmZlZGZkNC4uZWExNTgwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZmMvS2NvbmZpZworKysgYi9kcml2ZXJzL25mYy9LY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogIwogCiBtZW51Y29uZmlnIE5GQ19ERVZJQ0VTCi0JYm9vbCAiTkZDIGRldmljZXMiCisJYm9vbCAiTmVhciBGaWVsZCBDb21tdW5pY2F0aW9uIChORkMpIGRldmljZXMiCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgWW91J2xsIGhhdmUgdG8gc2F5IFkgaWYgeW91ciBjb21wdXRlciBjb250YWlucyBhbiBORkMgZGV2aWNlIHRoYXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3BuNTQ0LmMgYi9kcml2ZXJzL25mYy9wbjU0NC5jCmluZGV4IGJhZTY0NzIuLjcyNGY2NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3BuNTQ0LmMKKysrIGIvZHJpdmVycy9uZmMvcG41NDQuYwpAQCAtNjAsNyArNjAsNyBAQAogc3RydWN0IHBuNTQ0X2luZm8gewogCXN0cnVjdCBtaXNjZGV2aWNlIG1pc2NkZXY7CiAJc3RydWN0IGkyY19jbGllbnQgKmkyY19kZXY7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgcmVnc1syXTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSByZWdzWzNdOwogCiAJZW51bSBwbjU0NF9zdGF0ZSBzdGF0ZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCByZWFkX3dhaXQ7CkBAIC03NCw2ICs3NCw3IEBACiAKIHN0YXRpYyBjb25zdCBjaGFyIHJlZ192ZGRfaW9bXQk9ICJWZGRfSU8iOwogc3RhdGljIGNvbnN0IGNoYXIgcmVnX3ZiYXRbXQk9ICJWQmF0IjsKK3N0YXRpYyBjb25zdCBjaGFyIHJlZ192c2ltW10JPSAiVlNpbSI7CiAKIC8qIHN5c2ZzIGludGVyZmFjZSAqLwogc3RhdGljIHNzaXplX3QgcG41NDRfdGVzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC03NDAsNiArNzQxLDcgQEAKIAogCWluZm8tPnJlZ3NbMF0uc3VwcGx5ID0gcmVnX3ZkZF9pbzsKIAlpbmZvLT5yZWdzWzFdLnN1cHBseSA9IHJlZ192YmF0OworCWluZm8tPnJlZ3NbMl0uc3VwcGx5ID0gcmVnX3ZzaW07CiAJciA9IHJlZ3VsYXRvcl9idWxrX2dldCgmY2xpZW50LT5kZXYsIEFSUkFZX1NJWkUoaW5mby0+cmVncyksCiAJCQkJIGluZm8tPnJlZ3MpOwogCWlmIChyIDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9zaGFyZS5jIGIvZHJpdmVycy9wYXJwb3J0L3NoYXJlLmMKaW5kZXggYTJkOWQxZS4uYTg0OGUwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3NoYXJlLmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L3NoYXJlLmMKQEAgLTY3OCw3ICs2NzgsNyBAQAogCiAJLyogTWFrZSBzdXJlIHdlIGhhdmVuJ3QgbGVmdCBhbnkgcG9pbnRlcnMgYXJvdW5kIGluIHRoZSB3YWl0CiAJICogbGlzdC4gKi8KLQlzcGluX2xvY2sgKCZwb3J0LT53YWl0bGlzdF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZwb3J0LT53YWl0bGlzdF9sb2NrKTsKIAlpZiAoZGV2LT53YWl0cHJldiB8fCBkZXYtPndhaXRuZXh0IHx8IHBvcnQtPndhaXRoZWFkID09IGRldikgewogCQlpZiAoZGV2LT53YWl0cHJldikKIAkJCWRldi0+d2FpdHByZXYtPndhaXRuZXh0ID0gZGV2LT53YWl0bmV4dDsKQEAgLTY4OSw3ICs2ODksNyBAQAogCQllbHNlCiAJCQlwb3J0LT53YWl0dGFpbCA9IGRldi0+d2FpdHByZXY7CiAJfQotCXNwaW5fdW5sb2NrICgmcG9ydC0+d2FpdGxpc3RfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZwb3J0LT53YWl0bGlzdF9sb2NrKTsKIAogCWtmcmVlKGRldi0+c3RhdGUpOwogCWtmcmVlKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYyBiL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jCmluZGV4IDhlY2FhYzkuLmVhMjVlNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgInBjaS5oIgpAQCAtMzY4LDcgKzM2OSw3IEBACiAJdTggKmRhdGEgPSAodTgqKSBidWY7CiAKIAkvKiBTZXZlcmFsIGNoaXBzIGxvY2sgdXAgdHJ5aW5nIHRvIHJlYWQgdW5kZWZpbmVkIGNvbmZpZyBzcGFjZSAqLwotCWlmIChjYXBfcmFpc2VkKGZpbHAtPmZfY3JlZC0+Y2FwX2VmZmVjdGl2ZSwgQ0FQX1NZU19BRE1JTikpIHsKKwlpZiAoc2VjdXJpdHlfY2FwYWJsZShmaWxwLT5mX2NyZWQsIENBUF9TWVNfQURNSU4pID09IDApIHsKIAkJc2l6ZSA9IGRldi0+Y2ZnX3NpemU7CiAJfSBlbHNlIGlmIChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9DQVJEQlVTKSB7CiAJCXNpemUgPSAxMjg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL0tjb25maWcgYi9kcml2ZXJzL3BjaS9wY2llL0tjb25maWcKaW5kZXggZGRhNzA5OC4uZGMyOTM0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvS2NvbmZpZwpAQCAtMzEsNyArMzEsNyBAQAogIyBQQ0kgRXhwcmVzcyBBU1BNCiAjCiBjb25maWcgUENJRUFTUE0KLQlib29sICJQQ0kgRXhwcmVzcyBBU1BNIGNvbnRyb2wiIGlmIEVNQkVEREVECisJYm9vbCAiUENJIEV4cHJlc3MgQVNQTSBjb250cm9sIiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIFBDSSAmJiBQQ0lFUE9SVEJVUwogCWRlZmF1bHQgeQogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL0tjb25maWcgYi9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCmluZGV4IGRlODg2ZjMuLjZlMzE4Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKKysrIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwpAQCAtNjksNyArNjksNyBAQAogY29uZmlnIFlFTlRBCiAJdHJpc3RhdGUgIkNhcmRCdXMgeWVudGEtY29tcGF0aWJsZSBicmlkZ2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSQotCXNlbGVjdCBDQVJEQlVTIGlmICFFTUJFRERFRAorCXNlbGVjdCBDQVJEQlVTIGlmICFFWFBFUlQKIAlzZWxlY3QgUENDQVJEX05PTlNUQVRJQyBpZiBQQ01DSUEgIT0gbgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgQ2FyZEJ1cyBob3N0IGJyaWRnZXMuICBWaXJ0dWFsbHkKQEAgLTg0LDI3ICs4NCwyNyBAQAogCiBjb25maWcgWUVOVEFfTzIKIAlkZWZhdWx0IHkKLQlib29sICJTcGVjaWFsIGluaXRpYWxpemF0aW9uIGZvciBPMk1pY3JvIGJyaWRnZXMiIGlmIEVNQkVEREVECisJYm9vbCAiU3BlY2lhbCBpbml0aWFsaXphdGlvbiBmb3IgTzJNaWNybyBicmlkZ2VzIiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIFlFTlRBCiAKIGNvbmZpZyBZRU5UQV9SSUNPSAogCWRlZmF1bHQgeQotCWJvb2wgIlNwZWNpYWwgaW5pdGlhbGl6YXRpb24gZm9yIFJpY29oIGJyaWRnZXMiIGlmIEVNQkVEREVECisJYm9vbCAiU3BlY2lhbCBpbml0aWFsaXphdGlvbiBmb3IgUmljb2ggYnJpZGdlcyIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBZRU5UQQogCiBjb25maWcgWUVOVEFfVEkKIAlkZWZhdWx0IHkKLQlib29sICJTcGVjaWFsIGluaXRpYWxpemF0aW9uIGZvciBUSSBhbmQgRW5FIGJyaWRnZXMiIGlmIEVNQkVEREVECisJYm9vbCAiU3BlY2lhbCBpbml0aWFsaXphdGlvbiBmb3IgVEkgYW5kIEVuRSBicmlkZ2VzIiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIFlFTlRBCiAKIGNvbmZpZyBZRU5UQV9FTkVfVFVORQogCWRlZmF1bHQgeQotCWJvb2wgIkF1dG8tdHVuZSBFbkUgYnJpZGdlcyBmb3IgQ0IgY2FyZHMiIGlmIEVNQkVEREVECisJYm9vbCAiQXV0by10dW5lIEVuRSBicmlkZ2VzIGZvciBDQiBjYXJkcyIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBZRU5UQV9USSAmJiBDQVJEQlVTCiAKIGNvbmZpZyBZRU5UQV9UT1NISUJBCiAJZGVmYXVsdCB5Ci0JYm9vbCAiU3BlY2lhbCBpbml0aWFsaXphdGlvbiBmb3IgVG9zaGliYSBUb1BJQyBicmlkZ2VzIiBpZiBFTUJFRERFRAorCWJvb2wgIlNwZWNpYWwgaW5pdGlhbGl6YXRpb24gZm9yIFRvc2hpYmEgVG9QSUMgYnJpZGdlcyIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBZRU5UQQogCiBjb25maWcgUEQ2NzI5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jCmluZGV4IDBiZGRhNWIuLjQyZmJmMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jCkBAIC01MTgsNiArNTE4LDggQEAKIAkJZmxhZ3MgfD0gQ09ORl9FTkFCTEVfSU9DQVJEOwogCWlmIChmbGFncyAmIENPTkZfRU5BQkxFX0lPQ0FSRCkKIAkJcy0+c29ja2V0LmZsYWdzIHw9IFNTX0lPQ0FSRDsKKwlpZiAoZmxhZ3MgJiBDT05GX0VOQUJMRV9aVkNBUkQpCisJCXMtPnNvY2tldC5mbGFncyB8PSBTU19aVkNBUkQgfCBTU19JT0NBUkQ7CiAJaWYgKGZsYWdzICYgQ09ORl9FTkFCTEVfU1BLUikgewogCQlzLT5zb2NrZXQuZmxhZ3MgfD0gU1NfU1BLUl9FTkE7CiAJCXN0YXR1cyA9IENDU1JfQVVESU9fRU5BOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKaW5kZXggMzc1NWU3Yy4uMmM1NDA1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCkBAIC0yMTUsNyArMjE1LDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBweGEyeHhfY29uZmlndXJlX3NvY2tldHMoc3RydWN0IGRldmljZSAqZGV2KQordm9pZCBweGEyeHhfY29uZmlndXJlX3NvY2tldHMoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmggYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5oCmluZGV4IGJiNjJlYTguLmI2MDliNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmgKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuaApAQCAtMSwzICsxLDQgQEAKIGludCBweGEyeHhfZHJ2X3BjbWNpYV9hZGRfb25lKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KTsKIHZvaWQgcHhhMnh4X2Rydl9wY21jaWFfb3BzKHN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHMpOwordm9pZCBweGEyeHhfY29uZmlndXJlX3NvY2tldHMoc3RydWN0IGRldmljZSAqZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9sdWJib2NrLmMKaW5kZXggYjlmOGM4Zi4uMjVhZmU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbHViYm9jay5jCkBAIC0yMjYsNiArMjI2LDcgQEAKIAkJbHViYm9ja19zZXRfbWlzY193cigoMSA8PCAxNSkgfCAoMSA8PCAxNCksIDApOwogCiAJCXB4YTJ4eF9kcnZfcGNtY2lhX29wcygmbHViYm9ja19wY21jaWFfb3BzKTsKKwkJcHhhMnh4X2NvbmZpZ3VyZV9zb2NrZXRzKCZzYWRldi0+ZGV2KTsKIAkJcmV0ID0gc2ExMTExX3BjbWNpYV9hZGQoc2FkZXYsICZsdWJib2NrX3BjbWNpYV9vcHMsCiAJCQkJcHhhMnh4X2Rydl9wY21jaWFfYWRkX29uZSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKaW5kZXggZDE2M2JjMi4uYTU5YWY1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCkBAIC0yMjcsNyArMjI3LDcgQEAKIGNvbmZpZyBJREVBUEFEX0xBUFRPUAogCXRyaXN0YXRlICJMZW5vdm8gSWRlYVBhZCBMYXB0b3AgRXh0cmFzIgogCWRlcGVuZHMgb24gQUNQSQotCWRlcGVuZHMgb24gUkZLSUxMCisJZGVwZW5kcyBvbiBSRktJTEwgJiYgSU5QVVQKIAlzZWxlY3QgSU5QVVRfU1BBUlNFS01BUAogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSByZmtpbGwgc3dpdGNoZXMgb24gTGVub3ZvIElkZWFQYWQgbmV0Ym9va3MuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYwppbmRleCBjNWM0YjhjLi4zOGIzNGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKQEAgLTg0LDcgKzg0LDcgQEAKICAqLwogI2RlZmluZSBBTVcwX0dVSUQxCQkiNjdDMzM3MUQtOTVBMy00QzM3LUJCNjEtREQ0N0I0OTFEQUFCIgogI2RlZmluZSBBTVcwX0dVSUQyCQkiNDMxRjE2RUQtMEMyQi00NDRDLUIyNjctMjdERUIxNDBDRjlDIgotI2RlZmluZSBXTUlEX0dVSUQxCQkiNkFGNEYyNTgtQjQwMS00MmZkLUJFOTEtM0Q0QUMyRDdDMEQzIgorI2RlZmluZSBXTUlEX0dVSUQxCQkiNkFGNEYyNTgtQjQwMS00MkZELUJFOTEtM0Q0QUMyRDdDMEQzIgogI2RlZmluZSBXTUlEX0dVSUQyCQkiOTU3NjRFMDktRkI1Ni00ZTgzLUIzMUEtMzc3NjFGNjA5OTRBIgogI2RlZmluZSBXTUlEX0dVSUQzCQkiNjFFRjY5RUEtODY1Qy00QkMzLUE1MDItQTBERUJBMENCNTMxIgogCkBAIC0xMjgwLDcgKzEyODAsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIGNvdW50OwogfQotc3RhdGljIERFVklDRV9BVFRSKHRocmVlZywgU19JV1VHTyB8IFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2Jvb2xfdGhyZWVnLAorc3RhdGljIERFVklDRV9BVFRSKHRocmVlZywgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYm9vbF90aHJlZWcsCiAJc2V0X2Jvb2xfdGhyZWVnKTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd19pbnRlcmZhY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKaW5kZXggNDYzM2ZkOC4uZmU0OTU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKQEAgLTEwODEsMTQgKzEwODEsOCBAQAogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYzsKIAltb2RlX3QgbW9kZTsKIAotCS8qCi0JICogSWYgcGFyYW1ldGVyIHVpZCBvciBnaWQgaXMgbm90IGNoYW5nZWQsIGtlZXAgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IKLQkgKiBvdXIgcHJvYyBlbnRyaWVzICgtcnctcnctcnctKSBlbHNlLCBpdCBtZWFucyB3ZSBjYXJlIGFib3V0IHNlY3VyaXR5LAotCSAqIGFuZCB0aGVuIHNldCB0byAtcnctcnctLS0tCi0JICovCi0KIAlpZiAoKGFzdXNfdWlkID09IDApICYmIChhc3VzX2dpZCA9PSAwKSkgewotCQltb2RlID0gU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVUdPOworCQltb2RlID0gU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSIHwgU19JV0dSUDsKIAl9IGVsc2UgewogCQltb2RlID0gU19JRlJFRyB8IFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JV1VTUiB8IFNfSVdHUlA7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgYXN1c191aWQgYW5kIGFzdXNfZ2lkIHBhcmFtZXRlcnMgYXJlICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCmluZGV4IDM0NjU3ZjkuLmFkMjRlZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYwpAQCAtMjkwLDkgKzI5MCwxMiBAQAogCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMTcsIDExKTsKIAogCS8qIElmIHRoZSBoYXJkd2FyZSBzd2l0Y2ggY29udHJvbHMgdGhpcyByYWRpbywgYW5kIHRoZSBoYXJkd2FyZQotCSAgIHN3aXRjaCBpcyBkaXNhYmxlZCwgZG9uJ3QgYWxsb3cgY2hhbmdpbmcgdGhlIHNvZnR3YXJlIHN0YXRlICovCisJICAgc3dpdGNoIGlzIGRpc2FibGVkLCBkb24ndCBhbGxvdyBjaGFuZ2luZyB0aGUgc29mdHdhcmUgc3RhdGUuCisJICAgSWYgdGhlIGhhcmR3YXJlIHN3aXRjaCBpcyByZXBvcnRlZCBhcyBub3Qgc3VwcG9ydGVkLCBhbHdheXMKKwkgICBmaXJlIHRoZSBTTUkgdG8gdG9nZ2xlIHRoZSBraWxsc3dpdGNoLiAqLwogCWlmICgoaHdzd2l0Y2hfc3RhdGUgJiBCSVQoaHdzd2l0Y2hfYml0KSkgJiYKLQkgICAgIShidWZmZXItPm91dHB1dFsxXSAmIEJJVCgxNikpKSB7CisJICAgICEoYnVmZmVyLT5vdXRwdXRbMV0gJiBCSVQoMTYpKSAmJgorCSAgICAoYnVmZmVyLT5vdXRwdXRbMV0gJiBCSVQoMCkpKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTM5OCw2ICs0MDEsMjMgQEAKIAogc3RhdGljIHZvaWQgZGVsbF91cGRhdGVfcmZraWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqaWdub3JlZCkKIHsKKwlpbnQgc3RhdHVzOworCisJZ2V0X2J1ZmZlcigpOworCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMTcsIDExKTsKKwlzdGF0dXMgPSBidWZmZXItPm91dHB1dFsxXTsKKwlyZWxlYXNlX2J1ZmZlcigpOworCisJLyogaWYgaGFyZHdhcmUgcmZraWxsIGlzIG5vdCBzdXBwb3J0ZWQsIHNldCBpdCBleHBsaWNpdGx5ICovCisJaWYgKCEoc3RhdHVzICYgQklUKDApKSkgeworCQlpZiAod2lmaV9yZmtpbGwpCisJCQlkZWxsX3Jma2lsbF9zZXQoKHZvaWQgKikxLCAhKChzdGF0dXMgJiBCSVQoMTcpKSA+PiAxNykpOworCQlpZiAoYmx1ZXRvb3RoX3Jma2lsbCkKKwkJCWRlbGxfcmZraWxsX3NldCgodm9pZCAqKTIsICEoKHN0YXR1cyAmIEJJVCgxOCkpID4+IDE4KSk7CisJCWlmICh3d2FuX3Jma2lsbCkKKwkJCWRlbGxfcmZraWxsX3NldCgodm9pZCAqKTMsICEoKHN0YXR1cyAmIEJJVCgxOSkpID4+IDE5KSk7CisJfQorCiAJaWYgKHdpZmlfcmZraWxsKQogCQlkZWxsX3Jma2lsbF9xdWVyeSh3aWZpX3Jma2lsbCwgKHZvaWQgKikxKTsKIAlpZiAoYmx1ZXRvb3RoX3Jma2lsbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3BtaWNfZ3Bpby5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcG1pY19ncGlvLmMKaW5kZXggOTMwZTYyNy4uNjE0MzNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcG1pY19ncGlvLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcG1pY19ncGlvLmMKQEAgLTYwLDY5ICs2MCwyMCBAQAogI2RlZmluZSBHUE9TV19ET1UgMHgwOAogI2RlZmluZSBHUE9TV19SRFJWIDB4MzAKIAorI2RlZmluZSBHUElPX1VQREFURV9UWVBFCTB4ODAwMDAwMDAKIAogI2RlZmluZSBOVU1fR1BJTyAyNAogCi1zdHJ1Y3QgcG1pY19ncGlvX2lycSB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXUzMiB0cmlnZ2VyW05VTV9HUElPXTsKLQl1MzIgZGlydHk7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci19OwotCi0KIHN0cnVjdCBwbWljX2dwaW8geworCXN0cnVjdCBtdXRleAkJYnVzbG9jazsKIAlzdHJ1Y3QgZ3Bpb19jaGlwCWNoaXA7Ci0Jc3RydWN0IHBtaWNfZ3Bpb19pcnEJaXJxdHlwZXM7CiAJdm9pZAkJCSpncGlvaW50cjsKIAlpbnQJCQlpcnE7CiAJdW5zaWduZWQJCWlycV9iYXNlOworCXVuc2lnbmVkIGludAkJdXBkYXRlX3R5cGU7CisJdTMyCQkJdHJpZ2dlcl90eXBlOwogfTsKIAotc3RhdGljIHZvaWQgcG1pY19wcm9ncmFtX2lycXR5cGUoaW50IGdwaW8sIGludCB0eXBlKQotewotCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpCi0JCWludGVsX3NjdV9pcGNfdXBkYXRlX3JlZ2lzdGVyKEdQSU8wICsgZ3BpbywgMHgyMCwgMHgyMCk7Ci0JZWxzZQotCQlpbnRlbF9zY3VfaXBjX3VwZGF0ZV9yZWdpc3RlcihHUElPMCArIGdwaW8sIDB4MDAsIDB4MjApOwotCi0JaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCi0JCWludGVsX3NjdV9pcGNfdXBkYXRlX3JlZ2lzdGVyKEdQSU8wICsgZ3BpbywgMHgxMCwgMHgxMCk7Ci0JZWxzZQotCQlpbnRlbF9zY3VfaXBjX3VwZGF0ZV9yZWdpc3RlcihHUElPMCArIGdwaW8sIDB4MDAsIDB4MTApOwotfTsKLQotc3RhdGljIHZvaWQgcG1pY19pcnF0eXBlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBwbWljX2dwaW9faXJxICp0ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwbWljX2dwaW9faXJxLCB3b3JrKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwotCXUxNiB0eXBlOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnQtPmxvY2ssIGZsYWdzKTsKLQkvKiBBcyB3ZSBkcm9wIHRoZSBsb2NrLCB3ZSBtYXkgbmVlZCBtdWx0aXBsZSBzY2FucyBpZiB3ZSByYWNlIHRoZQotCSAgIHBtaWNfaXJxX3R5cGUgZnVuY3Rpb24gKi8KLQl3aGlsZSAodC0+ZGlydHkpIHsKLQkJLyoKLQkJICoJRm9yIGVhY2ggcGluIHRoYXQgaGFzIHRoZSBkaXJ0eSBiaXQgc2V0IHNlbmQgYW4gSVBDCi0JCSAqCW1lc3NhZ2UgdG8gY29uZmlndXJlIHRoZSBoYXJkd2FyZSB2aWEgdGhlIFBNSUMKLQkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fR1BJTzsgaSsrKSB7Ci0JCQlpZiAoISh0LT5kaXJ0eSAmICgxIDw8IGkpKSkKLQkJCQljb250aW51ZTsKLQkJCXQtPmRpcnR5ICY9IH4oMSA8PCBpKTsKLQkJCS8qIFdlIGNhbid0IHRydXN0IHRoZSBhcnJheSBlbnRyeSBvciBkaXJ0eQotCQkJICAgb25jZSB0aGUgbG9jayBpcyBkcm9wcGVkICovCi0JCQl0eXBlID0gdC0+dHJpZ2dlcltpXTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQtPmxvY2ssIGZsYWdzKTsKLQkJCXBtaWNfcHJvZ3JhbV9pcnF0eXBlKGksIHR5cGUpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnQtPmxvY2ssIGZsYWdzKTsKLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0LT5sb2NrLCBmbGFncyk7Ci19Ci0KIHN0YXRpYyBpbnQgcG1pY19ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAJaWYgKG9mZnNldCA+IDgpIHsKQEAgLTE5MCwyNSArMTQxLDI0IEBACiAJCQkxIDw8IChvZmZzZXQgLSAxNikpOwogfQogCi1zdGF0aWMgaW50IHBtaWNfaXJxX3R5cGUodW5zaWduZWQgaXJxLCB1bnNpZ25lZCB0eXBlKQorLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gZ2VuaXJxIHdpdGggcGctPmJ1c2xvY2sgbG9ja2VkIGFuZAorICogaXJxX2Rlc2MtPmxvY2sgaGVsZC4gV2UgY2FuIG5vdCBhY2Nlc3MgdGhlIHNjdSBidXMgaGVyZSwgc28gd2UKKyAqIHN0b3JlIHRoZSBjaGFuZ2UgYW5kIHVwZGF0ZSBpbiB0aGUgYnVzX3N5bmNfdW5sb2NrKCkgZnVuY3Rpb24gYmVsb3cKKyAqLworc3RhdGljIGludCBwbWljX2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgdW5zaWduZWQgdHlwZSkKIHsKLQlzdHJ1Y3QgcG1pY19ncGlvICpwZyA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JdTMyIGdwaW8gPSBpcnEgLSBwZy0+aXJxX2Jhc2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcG1pY19ncGlvICpwZyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOworCXUzMiBncGlvID0gZGF0YS0+aXJxIC0gcGctPmlycV9iYXNlOwogCiAJaWYgKGdwaW8gPj0gcGctPmNoaXAubmdwaW8pCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBnLT5pcnF0eXBlcy5sb2NrLCBmbGFncyk7Ci0JcGctPmlycXR5cGVzLnRyaWdnZXJbZ3Bpb10gPSB0eXBlOwotCXBnLT5pcnF0eXBlcy5kaXJ0eSB8PSAgKDEgPDwgZ3Bpbyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGctPmlycXR5cGVzLmxvY2ssIGZsYWdzKTsKLQlzY2hlZHVsZV93b3JrKCZwZy0+aXJxdHlwZXMud29yayk7CisJcGctPnRyaWdnZXJfdHlwZSA9IHR5cGU7CisJcGctPnVwZGF0ZV90eXBlID0gZ3BpbyB8IEdQSU9fVVBEQVRFX1RZUEU7CiAJcmV0dXJuIDA7CiB9CiAKLQotCiBzdGF0aWMgaW50IHBtaWNfZ3Bpb190b19pcnEoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewogCXN0cnVjdCBwbWljX2dwaW8gKnBnID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBwbWljX2dwaW8sIGNoaXApOwpAQCAtMjE3LDM4ICsxNjcsMzIgQEAKIH0KIAogLyogdGhlIGdwaW9pbnRyIHJlZ2lzdGVyIGlzIHJlYWQtY2xlYXIsIHNvIGp1c3QgZG8gbm90aGluZy4gKi8KLXN0YXRpYyB2b2lkIHBtaWNfaXJxX3VubWFzayh1bnNpZ25lZCBpcnEpCi17Ci19Oworc3RhdGljIHZvaWQgcG1pY19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkgeyB9CiAKLXN0YXRpYyB2b2lkIHBtaWNfaXJxX21hc2sodW5zaWduZWQgaXJxKQotewotfTsKK3N0YXRpYyB2b2lkIHBtaWNfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkYXRhKSB7IH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBwbWljX2lycWNoaXAgPSB7CiAJLm5hbWUJCT0gIlBNSUMtR1BJTyIsCi0JLm1hc2sJCT0gcG1pY19pcnFfbWFzaywKLQkudW5tYXNrCQk9IHBtaWNfaXJxX3VubWFzaywKLQkuc2V0X3R5cGUJPSBwbWljX2lycV90eXBlLAorCS5pcnFfbWFzawk9IHBtaWNfaXJxX21hc2ssCisJLmlycV91bm1hc2sJPSBwbWljX2lycV91bm1hc2ssCisJLmlycV9zZXRfdHlwZQk9IHBtaWNfaXJxX3R5cGUsCiB9OwogCi1zdGF0aWMgdm9pZCBwbWljX2lycV9oYW5kbGVyKHVuc2lnbmVkIGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQorc3RhdGljIGlycXJldHVybl90IHBtaWNfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgcG1pY19ncGlvICpwZyA9IChzdHJ1Y3QgcG1pY19ncGlvICopZ2V0X2lycV9kYXRhKGlycSk7CisJc3RydWN0IHBtaWNfZ3BpbyAqcGcgPSBkYXRhOwogCXU4IGludHN0cyA9ICooKHU4ICopcGctPmdwaW9pbnRyICsgNCk7CiAJaW50IGdwaW87CisJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7CiAKIAlmb3IgKGdwaW8gPSAwOyBncGlvIDwgODsgZ3BpbysrKSB7CiAJCWlmIChpbnRzdHMgJiAoMSA8PCBncGlvKSkgewogCQkJcHJfZGVidWcoInBtaWMgcGluICVkIHRyaWdnZXJlZFxuIiwgZ3Bpbyk7CiAJCQlnZW5lcmljX2hhbmRsZV9pcnEocGctPmlycV9iYXNlICsgZ3Bpbyk7CisJCQlyZXQgPSBJUlFfSEFORExFRDsKIAkJfQogCX0KLQotCWlmIChkZXNjLT5jaGlwLT5pcnFfZW9pKQotCQlkZXNjLT5jaGlwLT5pcnFfZW9pKGlycV9nZXRfaXJxX2RhdGEoaXJxKSk7Ci0JZWxzZQotCQlkZXZfd2FybihwZy0+Y2hpcC5kZXYsICJtaXNzaW5nIEVPSSBoYW5kbGVyIGZvciBpcnEgJWRcbiIsIGlycSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgcGxhdGZvcm1fcG1pY19ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0yOTcsOCArMjQxLDcgQEAKIAlwZy0+Y2hpcC5jYW5fc2xlZXAgPSAxOwogCXBnLT5jaGlwLmRldiA9IGRldjsKIAotCUlOSVRfV09SSygmcGctPmlycXR5cGVzLndvcmssIHBtaWNfaXJxdHlwZV93b3JrKTsKLQlzcGluX2xvY2tfaW5pdCgmcGctPmlycXR5cGVzLmxvY2spOworCW11dGV4X2luaXQoJnBnLT5idXNsb2NrKTsKIAogCXBnLT5jaGlwLmRldiA9IGRldjsKIAlyZXR2YWwgPSBncGlvY2hpcF9hZGQoJnBnLT5jaGlwKTsKQEAgLTMwNiw4ICsyNDksMTMgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2FuIG5vdCBhZGQgcG1pYyBncGlvIGNoaXAuXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXJyOwogCX0KLQlzZXRfaXJxX2RhdGEocGctPmlycSwgcGcpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKHBnLT5pcnEsIHBtaWNfaXJxX2hhbmRsZXIpOworCisJcmV0dmFsID0gcmVxdWVzdF9pcnEocGctPmlycSwgcG1pY19pcnFfaGFuZGxlciwgMCwgInBtaWMiLCBwZyk7CisJaWYgKHJldHZhbCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJwbWljOiBJbnRlcnJ1cHQgcmVxdWVzdCBmYWlsZWRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGkgKyBwZy0+aXJxX2Jhc2UsICZwbWljX2lycWNoaXAsCiAJCQkJCWhhbmRsZV9zaW1wbGVfaXJxLCAiZGVtdXgiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGMuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGMuYwppbmRleCAxNzUyZWYwLi5hOTFkNTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9zY3VfaXBjLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfc2N1X2lwYy5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2ZpLmg+CiAjaW5jbHVkZSA8YXNtL21yc3QuaD4KICNpbmNsdWRlIDxhc20vaW50ZWxfc2N1X2lwYy5oPgotI2luY2x1ZGUgPGFzbS9tcnN0Lmg+CiAKIC8qIElQQyBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgbWVzc2FnZSB0eXBlcyAqLwogI2RlZmluZSBJUENNU0dfV0FUQ0hET0dfVElNRVIgMHhGOCAvKiBTZXQgS2VybmVsIFdhdGNoZG9nIFRocmVzaG9sZCAqLwpAQCAtMTYxLDcgKzE2MCw3IEBACiB7CiAJaW50IGksIG5jLCBieXRlcywgZDsKIAl1MzIgb2Zmc2V0ID0gMDsKLQl1MzIgZXJyID0gMDsKKwlpbnQgZXJyOwogCXU4IGNidWZbSVBDX1dXQlVGX1NJWkVdID0geyB9OwogCXUzMiAqd2J1ZiA9ICh1MzIgKikmY2J1ZjsKIApAQCAtNDA0LDcgKzQwMyw3IEBACiAgKi8KIGludCBpbnRlbF9zY3VfaXBjX3NpbXBsZV9jb21tYW5kKGludCBjbWQsIGludCBzdWIpCiB7Ci0JdTMyIGVyciA9IDA7CisJaW50IGVycjsKIAogCW11dGV4X2xvY2soJmlwY2xvY2spOwogCWlmIChpcGNkZXYucGRldiA9PSBOVUxMKSB7CkBAIC00MzQsOCArNDMzLDcgQEAKIGludCBpbnRlbF9zY3VfaXBjX2NvbW1hbmQoaW50IGNtZCwgaW50IHN1YiwgdTMyICppbiwgaW50IGlubGVuLAogCQkJCQkJCXUzMiAqb3V0LCBpbnQgb3V0bGVuKQogewotCXUzMiBlcnIgPSAwOwotCWludCBpID0gMDsKKwlpbnQgaSwgZXJyOwogCiAJbXV0ZXhfbG9jaygmaXBjbG9jayk7CiAJaWYgKGlwY2Rldi5wZGV2ID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGN1dGlsLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9zY3VfaXBjdXRpbC5jCmluZGV4IGJhMzIzMWQuLmI5M2EwMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGN1dGlsLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfc2N1X2lwY3V0aWwuYwpAQCAtMTI4LDYgKzEyOCw2IEBACiBtb2R1bGVfaW5pdChpcGNfbW9kdWxlX2luaXQpOwogbW9kdWxlX2V4aXQoaXBjX21vZHVsZV9leGl0KTsKIAotTU9EVUxFX0xJQ0VOU0UoIkdQTCBWMiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJVdGlsaXR5IGRyaXZlciBmb3IgaW50ZWwgc2N1IGlwYyIpOwogTU9EVUxFX0FVVEhPUigiU3JlZWRoYXJhIDxzcmVlZGhhcmEuZHNAaW50ZWwuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGMxMTAwLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGMxMTAwLXdtaS5jCmluZGV4IDFmZTBmMWYuLjg2NWVmNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RjMTEwMC13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90YzExMDAtd21pLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7IFwKIAlyZXR1cm4gY291bnQ7IFwKIH0gXAotc3RhdGljIERFVklDRV9BVFRSKHZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTyB8IFNfSVdVU1IsIFwKK3N0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JUlVHTyB8IFNfSVdVU1IsIFwKIAlzaG93X2Jvb2xfIyN2YWx1ZSwgc2V0X2Jvb2xfIyN2YWx1ZSk7CiAKIHNob3dfc2V0X2Jvb2wod2lyZWxlc3MsIFRDMTEwMF9JTlNUQU5DRV9XSVJFTEVTUyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKaW5kZXggZGQ1OTk1OC4uZWI5OTIyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtMjI3NSwxNiArMjI3NSwxMiBAQAogCWlmIChrZXljb2RlICE9IEtFWV9SRVNFUlZFRCkgewogCQltdXRleF9sb2NrKCZ0cGFjcGlfaW5wdXRkZXZfc2VuZF9tdXRleCk7CiAKKwkJaW5wdXRfZXZlbnQodHBhY3BpX2lucHV0ZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBzY2FuY29kZSk7CiAJCWlucHV0X3JlcG9ydF9rZXkodHBhY3BpX2lucHV0ZGV2LCBrZXljb2RlLCAxKTsKLQkJaWYgKGtleWNvZGUgPT0gS0VZX1VOS05PV04pCi0JCQlpbnB1dF9ldmVudCh0cGFjcGlfaW5wdXRkZXYsIEVWX01TQywgTVNDX1NDQU4sCi0JCQkJICAgIHNjYW5jb2RlKTsKIAkJaW5wdXRfc3luYyh0cGFjcGlfaW5wdXRkZXYpOwogCisJCWlucHV0X2V2ZW50KHRwYWNwaV9pbnB1dGRldiwgRVZfTVNDLCBNU0NfU0NBTiwgc2NhbmNvZGUpOwogCQlpbnB1dF9yZXBvcnRfa2V5KHRwYWNwaV9pbnB1dGRldiwga2V5Y29kZSwgMCk7Ci0JCWlmIChrZXljb2RlID09IEtFWV9VTktOT1dOKQotCQkJaW5wdXRfZXZlbnQodHBhY3BpX2lucHV0ZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLAotCQkJCSAgICBzY2FuY29kZSk7CiAJCWlucHV0X3N5bmModHBhY3BpX2lucHV0ZGV2KTsKIAogCQltdXRleF91bmxvY2soJnRwYWNwaV9pbnB1dGRldl9zZW5kX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHBzL2NsaWVudHMvcHBzLWt0aW1lci5jIGIvZHJpdmVycy9wcHMvY2xpZW50cy9wcHMta3RpbWVyLmMKaW5kZXggMjcyODQ2OS4uODI1ODNiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wcHMvY2xpZW50cy9wcHMta3RpbWVyLmMKKysrIGIvZHJpdmVycy9wcHMvY2xpZW50cy9wcHMta3RpbWVyLmMKQEAgLTQ2LDggKzQ2LDYgQEAKIAkvKiBGaXJzdCBvZiBhbGwgd2UgZ2V0IHRoZSB0aW1lIHN0YW1wLi4uICovCiAJcHBzX2dldF90cygmdHMpOwogCi0JZGV2X2luZm8ocHBzLT5kZXYsICJQUFMgZXZlbnQgYXQgJWx1XG4iLCBqaWZmaWVzKTsKLQogCXBwc19ldmVudChwcHMsICZ0cywgUFBTX0NBUFRVUkVBU1NFUlQsIE5VTEwpOwogCiAJbW9kX3RpbWVyKCZrdGltZXIsIGppZmZpZXMgKyBIWik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9jbGllbnRzL3Bwc19wYXJwb3J0LmMgYi9kcml2ZXJzL3Bwcy9jbGllbnRzL3Bwc19wYXJwb3J0LmMKaW5kZXggMzIyMjFlZi4uYzU3MWQ2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wcHMvY2xpZW50cy9wcHNfcGFycG9ydC5jCisrKyBiL2RyaXZlcnMvcHBzL2NsaWVudHMvcHBzX3BhcnBvcnQuYwpAQCAtMTYzLDcgKzE2Myw3IEBACiAJfQogCiAJZGV2aWNlLT5wYXJkZXYgPSBwYXJwb3J0X3JlZ2lzdGVyX2RldmljZShwb3J0LCBLQlVJTERfTU9ETkFNRSwKLQkJCU5VTEwsIE5VTEwsIHBhcnBvcnRfaXJxLCAwLCBkZXZpY2UpOworCQkJTlVMTCwgTlVMTCwgcGFycG9ydF9pcnEsIFBBUlBPUlRfRkxBR19FWENMLCBkZXZpY2UpOwogCWlmICghZGV2aWNlLT5wYXJkZXYpIHsKIAkJcHJfZXJyKCJjb3VsZG4ndCByZWdpc3RlciB3aXRoICVzXG4iLCBwb3J0LT5uYW1lKTsKIAkJZ290byBlcnJfZnJlZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHBzL2dlbmVyYXRvcnMvcHBzX2dlbl9wYXJwb3J0LmMgYi9kcml2ZXJzL3Bwcy9nZW5lcmF0b3JzL3Bwc19nZW5fcGFycG9ydC5jCmluZGV4IDVjMzJmOGQuLmI5M2FmM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHBzL2dlbmVyYXRvcnMvcHBzX2dlbl9wYXJwb3J0LmMKKysrIGIvZHJpdmVycy9wcHMvZ2VuZXJhdG9ycy9wcHNfZ2VuX3BhcnBvcnQuYwpAQCAtMTk4LDcgKzE5OCw3IEBACiAJfQogCiAJZGV2aWNlLnBhcmRldiA9IHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlKHBvcnQsIEtCVUlMRF9NT0ROQU1FLAotCQkJTlVMTCwgTlVMTCwgTlVMTCwgMCwgJmRldmljZSk7CisJCQlOVUxMLCBOVUxMLCBOVUxMLCBQQVJQT1JUX0ZMQUdfRVhDTCwgJmRldmljZSk7CiAJaWYgKCFkZXZpY2UucGFyZGV2KSB7CiAJCXByX2VycigiY291bGRuJ3QgcmVnaXN0ZXIgd2l0aCAlc1xuIiwgcG9ydC0+bmFtZSk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHBzL2thcGkuYyBiL2RyaXZlcnMvcHBzL2thcGkuYwppbmRleCBjYmExYjQzLi5hNGU4ZWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bwcy9rYXBpLmMKKysrIGIvZHJpdmVycy9wcHMva2FwaS5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjYXB0dXJlZCA9IDA7Ci0Jc3RydWN0IHBwc19rdGltZSB0c19yZWFsOworCXN0cnVjdCBwcHNfa3RpbWUgdHNfcmVhbCA9IHsgLnNlYyA9IDAsIC5uc2VjID0gMCwgLmZsYWdzID0gMCB9OwogCiAJLyogY2hlY2sgZXZlbnQgdHlwZSAqLwogCUJVR19PTigoZXZlbnQgJiAoUFBTX0NBUFRVUkVBU1NFUlQgfCBQUFNfQ0FQVFVSRUNMRUFSKSkgPT0gMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tc2Nhbi5jCmluZGV4IDQ2N2U4MmIuLmE1MDM5MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9yaW8tc2Nhbi5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tc2Nhbi5jCkBAIC05NDMsNiArOTQzLDggQEAKICAqIEBwb3J0OiBNYXN0ZXIgcG9ydCB0byBzZW5kIHRyYW5zYWN0aW9ucwogICogQGRlc3RpZDogQ3VycmVudCBkZXN0aW5hdGlvbiBJRCBpbiBuZXR3b3JrCiAgKiBAaG9wY291bnQ6IE51bWJlciBvZiBob3BzIGludG8gdGhlIG5ldHdvcmsKKyAqIEBwcmV2OiBwcmV2aW91cyByaW9fZGV2CisgKiBAcHJldl9wb3J0OiBwcmV2aW91cyBwb3J0IG51bWJlcgogICoKICAqIFJlY3Vyc2l2ZWx5IGRpc2NvdmVycyBhIFJJTyBuZXR3b3JrLiAgVHJhbnNhY3Rpb25zIGFyZSBzZW50IHZpYSB0aGUKICAqIG1hc3RlciBwb3J0IHBhc3NlZCBpbiBAcG9ydC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFwaWRpby9yaW8tc3lzZnMuYyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tc3lzZnMuYwppbmRleCA3NmI0MTg1Li4xMjY5ZmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JhcGlkaW8vcmlvLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9yYXBpZGlvL3Jpby1zeXNmcy5jCkBAIC03Nyw5ICs3Nyw5IEBACiAKIAkvKiBTZXZlcmFsIGNoaXBzIGxvY2sgdXAgdHJ5aW5nIHRvIHJlYWQgdW5kZWZpbmVkIGNvbmZpZyBzcGFjZSAqLwogCWlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlzaXplID0gMHgyMDAwMDA7CisJCXNpemUgPSBSSU9fTUFJTlRfU1BBQ0VfU1o7CiAKLQlpZiAob2ZmID4gc2l6ZSkKKwlpZiAob2ZmID49IHNpemUpCiAJCXJldHVybiAwOwogCWlmIChvZmYgKyBjb3VudCA+IHNpemUpIHsKIAkJc2l6ZSAtPSBvZmY7CkBAIC0xNDcsMTAgKzE0NywxMCBAQAogCWxvZmZfdCBpbml0X29mZiA9IG9mZjsKIAl1OCAqZGF0YSA9ICh1OCAqKSBidWY7CiAKLQlpZiAob2ZmID4gMHgyMDAwMDApCisJaWYgKG9mZiA+PSBSSU9fTUFJTlRfU1BBQ0VfU1opCiAJCXJldHVybiAwOwotCWlmIChvZmYgKyBjb3VudCA+IDB4MjAwMDAwKSB7Ci0JCXNpemUgPSAweDIwMDAwMCAtIG9mZjsKKwlpZiAob2ZmICsgY291bnQgPiBSSU9fTUFJTlRfU1BBQ0VfU1opIHsKKwkJc2l6ZSA9IFJJT19NQUlOVF9TUEFDRV9TWiAtIG9mZjsKIAkJY291bnQgPSBzaXplOwogCX0KIApAQCAtMjAwLDcgKzIwMCw3IEBACiAJCSAubmFtZSA9ICJjb25maWciLAogCQkgLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiwKIAkJIH0sCi0JLnNpemUgPSAweDIwMDAwMCwKKwkuc2l6ZSA9IFJJT19NQUlOVF9TUEFDRV9TWiwKIAkucmVhZCA9IHJpb19yZWFkX2NvbmZpZywKIAkud3JpdGUgPSByaW9fd3JpdGVfY29uZmlnLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL21jMTN4eHgtcmVndWxhdG9yLWNvcmUuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21jMTN4eHgtcmVndWxhdG9yLWNvcmUuYwppbmRleCBmNTNkMzFiLi4yYmI1ZGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzeHh4LXJlZ3VsYXRvci1jb3JlLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbWMxM3h4eC1yZWd1bGF0b3ItY29yZS5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIAogCWRldl9kYmcocmRldl9nZXRfZGV2KHJkZXYpLCAiJXMgaWQ6ICVkIHZhbDogJWRcbiIsIF9fZnVuY19fLCBpZCwgdmFsKTsKIAotCUJVR19PTih2YWwgPCAwIHx8IHZhbCA+IG1jMTN4eHhfcmVndWxhdG9yc1tpZF0uZGVzYy5uX3ZvbHRhZ2VzKTsKKwlCVUdfT04odmFsID4gbWMxM3h4eF9yZWd1bGF0b3JzW2lkXS5kZXNjLm5fdm9sdGFnZXMpOwogCiAJcmV0dXJuIG1jMTN4eHhfcmVndWxhdG9yc1tpZF0udm9sdGFnZXNbdmFsXTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1kY2RjLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtZGNkYy5jCmluZGV4IDhiMGQyYzQuLjA2ZGY4OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1kY2RjLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWRjZGMuYwpAQCAtMTIwLDYgKzEyMCw3IEBACiAJCXJldHVybiBSRUdVTEFUT1JfTU9ERV9JRExFOwogCWRlZmF1bHQ6CiAJCUJVRygpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL2NsYXNzLmMgYi9kcml2ZXJzL3J0Yy9jbGFzcy5jCmluZGV4IDk1ODNjYmMuLmM0MDRiNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL2NsYXNzLmMKKysrIGIvZHJpdmVycy9ydGMvY2xhc3MuYwpAQCAtMTQzLDYgKzE0Myw3IEBACiAJcnRjLT5pZCA9IGlkOwogCXJ0Yy0+b3BzID0gb3BzOwogCXJ0Yy0+b3duZXIgPSBvd25lcjsKKwlydGMtPmlycV9mcmVxID0gMTsKIAlydGMtPm1heF91c2VyX2ZyZXEgPSA2NDsKIAlydGMtPmRldi5wYXJlbnQgPSBkZXY7CiAJcnRjLT5kZXYuY2xhc3MgPSBydGNfY2xhc3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCmluZGV4IDkwMzg0YjkuLmNiMmYwNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCkBAIC0xNiw2ICsxNiw5IEBACiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCitzdGF0aWMgaW50IHJ0Y190aW1lcl9lbnF1ZXVlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIgKnRpbWVyKTsKK3N0YXRpYyB2b2lkIHJ0Y190aW1lcl9yZW1vdmUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lciAqdGltZXIpOworCiBzdGF0aWMgaW50IF9fcnRjX3JlYWRfdGltZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCWludCBlcnI7CkBAIC0xMjAsMTIgKzEyMywxOCBAQAogCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcnRjLT5vcHNfbG9jayk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKLQlhbGFybS0+ZW5hYmxlZCA9IHJ0Yy0+YWllX3RpbWVyLmVuYWJsZWQ7Ci0JaWYgKGFsYXJtLT5lbmFibGVkKQorCWlmIChydGMtPm9wcyA9PSBOVUxMKQorCQllcnIgPSAtRU5PREVWOworCWVsc2UgaWYgKCFydGMtPm9wcy0+cmVhZF9hbGFybSkKKwkJZXJyID0gLUVJTlZBTDsKKwllbHNlIHsKKwkJbWVtc2V0KGFsYXJtLCAwLCBzaXplb2Yoc3RydWN0IHJ0Y193a2Fscm0pKTsKKwkJYWxhcm0tPmVuYWJsZWQgPSBydGMtPmFpZV90aW1lci5lbmFibGVkOwogCQlhbGFybS0+dGltZSA9IHJ0Y19rdGltZV90b190bShydGMtPmFpZV90aW1lci5ub2RlLmV4cGlyZXMpOworCX0KIAltdXRleF91bmxvY2soJnJ0Yy0+b3BzX2xvY2spOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0Y19yZWFkX2FsYXJtKTsKIApAQCAtMTc1LDE2ICsxODQsMTQgQEAKIAkJcmV0dXJuIGVycjsKIAlpZiAocnRjLT5haWVfdGltZXIuZW5hYmxlZCkgewogCQlydGNfdGltZXJfcmVtb3ZlKHJ0YywgJnJ0Yy0+YWllX3RpbWVyKTsKLQkJcnRjLT5haWVfdGltZXIuZW5hYmxlZCA9IDA7CiAJfQogCXJ0Yy0+YWllX3RpbWVyLm5vZGUuZXhwaXJlcyA9IHJ0Y190bV90b19rdGltZShhbGFybS0+dGltZSk7CiAJcnRjLT5haWVfdGltZXIucGVyaW9kID0ga3RpbWVfc2V0KDAsIDApOwogCWlmIChhbGFybS0+ZW5hYmxlZCkgewotCQlydGMtPmFpZV90aW1lci5lbmFibGVkID0gMTsKLQkJcnRjX3RpbWVyX2VucXVldWUocnRjLCAmcnRjLT5haWVfdGltZXIpOworCQllcnIgPSBydGNfdGltZXJfZW5xdWV1ZShydGMsICZydGMtPmFpZV90aW1lcik7CiAJfQogCW11dGV4X3VubG9jaygmcnRjLT5vcHNfbG9jayk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0Y19zZXRfYWxhcm0pOwogCkBAIC0xOTUsMTYgKzIwMiwxNSBAQAogCQlyZXR1cm4gZXJyOwogCiAJaWYgKHJ0Yy0+YWllX3RpbWVyLmVuYWJsZWQgIT0gZW5hYmxlZCkgewotCQlpZiAoZW5hYmxlZCkgewotCQkJcnRjLT5haWVfdGltZXIuZW5hYmxlZCA9IDE7Ci0JCQlydGNfdGltZXJfZW5xdWV1ZShydGMsICZydGMtPmFpZV90aW1lcik7Ci0JCX0gZWxzZSB7CisJCWlmIChlbmFibGVkKQorCQkJZXJyID0gcnRjX3RpbWVyX2VucXVldWUocnRjLCAmcnRjLT5haWVfdGltZXIpOworCQllbHNlCiAJCQlydGNfdGltZXJfcmVtb3ZlKHJ0YywgJnJ0Yy0+YWllX3RpbWVyKTsKLQkJCXJ0Yy0+YWllX3RpbWVyLmVuYWJsZWQgPSAwOwotCQl9CiAJfQogCi0JaWYgKCFydGMtPm9wcykKKwlpZiAoZXJyKQorCQkvKiBub3RoaW5nICovOworCWVsc2UgaWYgKCFydGMtPm9wcykKIAkJZXJyID0gLUVOT0RFVjsKIAllbHNlIGlmICghcnRjLT5vcHMtPmFsYXJtX2lycV9lbmFibGUpCiAJCWVyciA9IC1FSU5WQUw7CkBAIC0yMjIsNiArMjI4LDEyIEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorI2lmZGVmIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwKKwlpZiAoZW5hYmxlZCA9PSAwICYmIHJ0Yy0+dWllX2lycV9hY3RpdmUpIHsKKwkJbXV0ZXhfdW5sb2NrKCZydGMtPm9wc19sb2NrKTsKKwkJcmV0dXJuIHJ0Y19kZXZfdXBkYXRlX2lycV9lbmFibGVfZW11bChydGMsIDApOworCX0KKyNlbmRpZgogCS8qIG1ha2Ugc3VyZSB3ZSdyZSBjaGFuZ2luZyBzdGF0ZSAqLwogCWlmIChydGMtPnVpZV9ydGN0aW1lci5lbmFibGVkID09IGVuYWJsZWQpCiAJCWdvdG8gb3V0OwpAQCAtMjM1LDE1ICsyNDcsMjIgQEAKIAkJbm93ID0gcnRjX3RtX3RvX2t0aW1lKHRtKTsKIAkJcnRjLT51aWVfcnRjdGltZXIubm9kZS5leHBpcmVzID0ga3RpbWVfYWRkKG5vdywgb25lc2VjKTsKIAkJcnRjLT51aWVfcnRjdGltZXIucGVyaW9kID0ga3RpbWVfc2V0KDEsIDApOwotCQlydGMtPnVpZV9ydGN0aW1lci5lbmFibGVkID0gMTsKLQkJcnRjX3RpbWVyX2VucXVldWUocnRjLCAmcnRjLT51aWVfcnRjdGltZXIpOwotCX0gZWxzZSB7CisJCWVyciA9IHJ0Y190aW1lcl9lbnF1ZXVlKHJ0YywgJnJ0Yy0+dWllX3J0Y3RpbWVyKTsKKwl9IGVsc2UKIAkJcnRjX3RpbWVyX3JlbW92ZShydGMsICZydGMtPnVpZV9ydGN0aW1lcik7Ci0JCXJ0Yy0+dWllX3J0Y3RpbWVyLmVuYWJsZWQgPSAwOwotCX0KIAogb3V0OgogCW11dGV4X3VubG9jaygmcnRjLT5vcHNfbG9jayk7CisjaWZkZWYgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTAorCS8qCisJICogRW5hYmxlIGVtdWxhdGlvbiBpZiB0aGUgZHJpdmVyIGRpZCBub3QgcHJvdmlkZQorCSAqIHRoZSB1cGRhdGVfaXJxX2VuYWJsZSBmdW5jdGlvbiBwb2ludGVyIG9yIGlmIHJldHVybmVkCisJICogLUVJTlZBTCB0byBzaWduYWwgdGhhdCBpdCBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGhvdXQKKwkgKiBpbnRlcnJ1cHRzIG9yIHRoYXQgYXJlIG5vdCBhdmFpbGFibGUgYXQgdGhlIG1vbWVudC4KKwkgKi8KKwlpZiAoZXJyID09IC1FSU5WQUwpCisJCWVyciA9IHJ0Y19kZXZfdXBkYXRlX2lycV9lbmFibGVfZW11bChydGMsIGVuYWJsZWQpOworI2VuZGlmCiAJcmV0dXJuIGVycjsKIAogfQpAQCAtMjU5LDcgKzI3OCw3IEBACiAgKgogICogVHJpZ2dlcnMgdGhlIHJlZ2lzdGVyZWQgaXJxX3Rhc2sgZnVuY3Rpb24gY2FsbGJhY2suCiAgKi8KLXN0YXRpYyB2b2lkIHJ0Y19oYW5kbGVfbGVnYWN5X2lycShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBpbnQgbnVtLCBpbnQgbW9kZSkKK3ZvaWQgcnRjX2hhbmRsZV9sZWdhY3lfaXJxKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIGludCBudW0sIGludCBtb2RlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTQ2MCw2ICs0NzksOSBAQAogCWludCBlcnIgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAoZnJlcSA8PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZydGMtPmlycV90YXNrX2xvY2ssIGZsYWdzKTsKIAlpZiAocnRjLT5pcnFfdGFzayAhPSBOVUxMICYmIHRhc2sgPT0gTlVMTCkKIAkJZXJyID0gLUVCVVNZOwpAQCAtNDg4LDEwICs1MTAsMTMgQEAKICAqIEVucXVldWVzIGEgdGltZXIgb250byB0aGUgcnRjIGRldmljZXMgdGltZXJxdWV1ZSBhbmQgc2V0cwogICogdGhlIG5leHQgYWxhcm0gZXZlbnQgYXBwcm9wcmlhdGVseS4KICAqCisgKiBTZXRzIHRoZSBlbmFibGVkIGJpdCBvbiB0aGUgYWRkZWQgdGltZXIuCisgKgogICogTXVzdCBob2xkIG9wc19sb2NrIGZvciBwcm9wZXIgc2VyaWFsaXphdGlvbiBvZiB0aW1lcnF1ZXVlCiAgKi8KLXZvaWQgcnRjX3RpbWVyX2VucXVldWUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lciAqdGltZXIpCitzdGF0aWMgaW50IHJ0Y190aW1lcl9lbnF1ZXVlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIgKnRpbWVyKQogeworCXRpbWVyLT5lbmFibGVkID0gMTsKIAl0aW1lcnF1ZXVlX2FkZCgmcnRjLT50aW1lcnF1ZXVlLCAmdGltZXItPm5vZGUpOwogCWlmICgmdGltZXItPm5vZGUgPT0gdGltZXJxdWV1ZV9nZXRuZXh0KCZydGMtPnRpbWVycXVldWUpKSB7CiAJCXN0cnVjdCBydGNfd2thbHJtIGFsYXJtOwpAQCAtNTAxLDcgKzUyNiwxMyBAQAogCQllcnIgPSBfX3J0Y19zZXRfYWxhcm0ocnRjLCAmYWxhcm0pOwogCQlpZiAoZXJyID09IC1FVElNRSkKIAkJCXNjaGVkdWxlX3dvcmsoJnJ0Yy0+aXJxd29yayk7CisJCWVsc2UgaWYgKGVycikgeworCQkJdGltZXJxdWV1ZV9kZWwoJnJ0Yy0+dGltZXJxdWV1ZSwgJnRpbWVyLT5ub2RlKTsKKwkJCXRpbWVyLT5lbmFibGVkID0gMDsKKwkJCXJldHVybiBlcnI7CisJCX0KIAl9CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtNTEyLDEzICs1NDMsMTUgQEAKICAqIFJlbW92ZXMgYSB0aW1lciBvbnRvIHRoZSBydGMgZGV2aWNlcyB0aW1lcnF1ZXVlIGFuZCBzZXRzCiAgKiB0aGUgbmV4dCBhbGFybSBldmVudCBhcHByb3ByaWF0ZWx5LgogICoKKyAqIENsZWFycyB0aGUgZW5hYmxlZCBiaXQgb24gdGhlIHJlbW92ZWQgdGltZXIuCisgKgogICogTXVzdCBob2xkIG9wc19sb2NrIGZvciBwcm9wZXIgc2VyaWFsaXphdGlvbiBvZiB0aW1lcnF1ZXVlCiAgKi8KLXZvaWQgcnRjX3RpbWVyX3JlbW92ZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWVyICp0aW1lcikKK3N0YXRpYyB2b2lkIHJ0Y190aW1lcl9yZW1vdmUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lciAqdGltZXIpCiB7CiAJc3RydWN0IHRpbWVycXVldWVfbm9kZSAqbmV4dCA9IHRpbWVycXVldWVfZ2V0bmV4dCgmcnRjLT50aW1lcnF1ZXVlKTsKIAl0aW1lcnF1ZXVlX2RlbCgmcnRjLT50aW1lcnF1ZXVlLCAmdGltZXItPm5vZGUpOwotCisJdGltZXItPmVuYWJsZWQgPSAwOwogCWlmIChuZXh0ID09ICZ0aW1lci0+bm9kZSkgewogCQlzdHJ1Y3QgcnRjX3drYWxybSBhbGFybTsKIAkJaW50IGVycjsKQEAgLTYyNiw4ICs2NTksNyBAQAogCXRpbWVyLT5ub2RlLmV4cGlyZXMgPSBleHBpcmVzOwogCXRpbWVyLT5wZXJpb2QgPSBwZXJpb2Q7CiAKLQl0aW1lci0+ZW5hYmxlZCA9IDE7Ci0JcnRjX3RpbWVyX2VucXVldWUocnRjLCB0aW1lcik7CisJcmV0ID0gcnRjX3RpbWVyX2VucXVldWUocnRjLCB0aW1lcik7CiAKIAltdXRleF91bmxvY2soJnJ0Yy0+b3BzX2xvY2spOwogCXJldHVybiByZXQ7CkBAIC02NDUsNyArNjc3LDYgQEAKIAltdXRleF9sb2NrKCZydGMtPm9wc19sb2NrKTsKIAlpZiAodGltZXItPmVuYWJsZWQpCiAJCXJ0Y190aW1lcl9yZW1vdmUocnRjLCB0aW1lcik7Ci0JdGltZXItPmVuYWJsZWQgPSAwOwogCW11dGV4X3VubG9jaygmcnRjLT5vcHNfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDMyYXA3MDB4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQzMmFwNzAweC5jCmluZGV4IGIyNzUyYjYuLmU3MjVkNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hdDMyYXA3MDB4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0MzJhcDcwMHguYwpAQCAtMTM0LDM2ICsxMzQsMjkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGF0MzJfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKLQkJCXVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBhdDMyX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7CiAJc3RydWN0IHJ0Y19hdDMyYXA3MDB4ICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCXNwaW5fbG9ja19pcnEoJnJ0Yy0+bG9jayk7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PTjoKKwlpZihlbmFibGVkKSB7CiAJCWlmIChydGNfcmVhZGwocnRjLCBWQUwpID4gcnRjLT5hbGFybV90aW1lKSB7CiAJCQlyZXQgPSAtRUlOVkFMOwotCQkJYnJlYWs7CisJCQlnb3RvIG91dDsKIAkJfQogCQlydGNfd3JpdGVsKHJ0YywgQ1RSTCwgcnRjX3JlYWRsKHJ0YywgQ1RSTCkKIAkJCQl8IFJUQ19CSVQoQ1RSTF9UT1BFTikpOwogCQlydGNfd3JpdGVsKHJ0YywgSUNSLCBSVENfQklUKElDUl9UT1BJKSk7CiAJCXJ0Y193cml0ZWwocnRjLCBJRVIsIFJUQ19CSVQoSUVSX1RPUEkpKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09GRjoKKwl9IGVsc2UgewogCQlydGNfd3JpdGVsKHJ0YywgQ1RSTCwgcnRjX3JlYWRsKHJ0YywgQ1RSTCkKIAkJCQkmIH5SVENfQklUKENUUkxfVE9QRU4pKTsKIAkJcnRjX3dyaXRlbChydGMsIElEUiwgUlRDX0JJVChJRFJfVE9QSSkpOwogCQlydGNfd3JpdGVsKHJ0YywgSUNSLCBSVENfQklUKElDUl9UT1BJKSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FTk9JT0NUTENNRDsKLQkJYnJlYWs7CiAJfQotCitvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxKCZydGMtPmxvY2spOwogCiAJcmV0dXJuIHJldDsKQEAgLTE5NSwxMSArMTg4LDExIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBhdDMyX3J0Y19vcHMgPSB7Ci0JLmlvY3RsCQk9IGF0MzJfcnRjX2lvY3RsLAogCS5yZWFkX3RpbWUJPSBhdDMyX3J0Y19yZWFkdGltZSwKIAkuc2V0X3RpbWUJPSBhdDMyX3J0Y19zZXR0aW1lLAogCS5yZWFkX2FsYXJtCT0gYXQzMl9ydGNfcmVhZGFsYXJtLAogCS5zZXRfYWxhcm0JPSBhdDMyX3J0Y19zZXRhbGFybSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IGF0MzJfcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhdDMyX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMKaW5kZXggYmM4YmJjYS4uMjZkMWNmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCkBAIC0xOTUsMTMgKzE5NSw2IEBACiAKIAkvKiBpbXBvcnRhbnQ6ICBzY3J1YiBvbGQgc3RhdHVzIGJlZm9yZSBlbmFibGluZyBJUlFzICovCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgkvKiBhbGFybSBvZmYgKi8KLQkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSURSLCBBVDkxX1JUQ19BTEFSTSk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PTjoJLyogYWxhcm0gb24gKi8KLQkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfU0NDUiwgQVQ5MV9SVENfQUxBUk0pOwotCQlhdDkxX3N5c193cml0ZShBVDkxX1JUQ19JRVIsIEFUOTFfUlRDX0FMQVJNKTsKLQkJYnJlYWs7CiAJY2FzZSBSVENfVUlFX09GRjoJLyogdXBkYXRlIG9mZiAqLwogCQlhdDkxX3N5c193cml0ZShBVDkxX1JUQ19JRFIsIEFUOTFfUlRDX1NFQ0VWKTsKIAkJYnJlYWs7CkBAIC0yMTcsNiArMjEwLDE4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBhdDkxX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJcHJfZGVidWcoIiVzKCk6IGNtZD0lMDh4XG4iLCBfX2Z1bmNfXywgZW5hYmxlZCk7CisKKwlpZiAoZW5hYmxlZCkgeworCQlhdDkxX3N5c193cml0ZShBVDkxX1JUQ19TQ0NSLCBBVDkxX1JUQ19BTEFSTSk7CisJCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX0lFUiwgQVQ5MV9SVENfQUxBUk0pOworCX0gZWxzZQorCQlhdDkxX3N5c193cml0ZShBVDkxX1JUQ19JRFIsIEFUOTFfUlRDX0FMQVJNKTsKKworCXJldHVybiAwOworfQogLyoKICAqIFByb3ZpZGUgYWRkaXRpb25hbCBSVEMgaW5mb3JtYXRpb24gaW4gL3Byb2MvZHJpdmVyL3J0YwogICovCkBAIC0yNzAsNiArMjc1LDcgQEAKIAkucmVhZF9hbGFybQk9IGF0OTFfcnRjX3JlYWRhbGFybSwKIAkuc2V0X2FsYXJtCT0gYXQ5MV9ydGNfc2V0YWxhcm0sCiAJLnByb2MJCT0gYXQ5MV9ydGNfcHJvYywKKwkuYWxhcm1faXJxX2VuYWJsZSA9IGF0OTFfcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYwppbmRleCBmNjc3ZTA3Li41NDY5YzUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYwpAQCAtMjI5LDEyICsyMjksNiBAQAogCWRldl9kYmcoZGV2LCAiaW9jdGw6IGNtZD0lMDh4LCBhcmc9JTA4bHgsIG1yICUwOHhcbiIsIGNtZCwgYXJnLCBtcik7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6CQkvKiBhbGFybSBvZmYgKi8KLQkJcnR0X3dyaXRlbChydGMsIE1SLCBtciAmIH5BVDkxX1JUVF9BTE1JRU4pOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT046CQkvKiBhbGFybSBvbiAqLwotCQlydHRfd3JpdGVsKHJ0YywgTVIsIG1yIHwgQVQ5MV9SVFRfQUxNSUVOKTsKLQkJYnJlYWs7CiAJY2FzZSBSVENfVUlFX09GRjoJCS8qIHVwZGF0ZSBvZmYgKi8KIAkJcnR0X3dyaXRlbChydGMsIE1SLCBtciAmIH5BVDkxX1JUVF9SVFRJTkNJRU4pOwogCQlicmVhazsKQEAgLTI0OSw2ICsyNDMsMTkgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGF0OTFfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3Qgc2FtOV9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXUzMiBtciA9IHJ0dF9yZWFkbChydGMsIE1SKTsKKworCWRldl9kYmcoZGV2LCAiYWxhcm1faXJxX2VuYWJsZTogZW5hYmxlZD0lMDh4LCBtciAlMDh4XG4iLCBlbmFibGVkLCBtcik7CisJaWYgKGVuYWJsZWQpCisJCXJ0dF93cml0ZWwocnRjLCBNUiwgbXIgfCBBVDkxX1JUVF9BTE1JRU4pOworCWVsc2UKKwkJcnR0X3dyaXRlbChydGMsIE1SLCBtciAmIH5BVDkxX1JUVF9BTE1JRU4pOworCXJldHVybiAwOworfQorCiAvKgogICogUHJvdmlkZSBhZGRpdGlvbmFsIFJUQyBpbmZvcm1hdGlvbiBpbiAvcHJvYy9kcml2ZXIvcnRjCiAgKi8KQEAgLTMwMiw2ICszMDksNyBAQAogCS5yZWFkX2FsYXJtCT0gYXQ5MV9ydGNfcmVhZGFsYXJtLAogCS5zZXRfYWxhcm0JPSBhdDkxX3J0Y19zZXRhbGFybSwKIAkucHJvYwkJPSBhdDkxX3J0Y19wcm9jLAorCS5hbGFybV9pcnFfZW5hYmxlID0gYXQ5MV9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYmZpbi5jIGIvZHJpdmVycy9ydGMvcnRjLWJmaW4uYwppbmRleCBiNGI2MDg3Li4xNzk3MWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYmZpbi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1iZmluLmMKQEAgLTI1OSwxNSArMjU5LDYgQEAKIAkJYmZpbl9ydGNfaW50X2NsZWFyKH5SVENfSVNUQVRfU0VDKTsKIAkJYnJlYWs7CiAKLQljYXNlIFJUQ19BSUVfT046Ci0JCWRldl9kYmdfc3RhbXAoZGV2KTsKLQkJYmZpbl9ydGNfaW50X3NldF9hbGFybShydGMpOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCQlkZXZfZGJnX3N0YW1wKGRldik7Ci0JCWJmaW5fcnRjX2ludF9jbGVhcih+KFJUQ19JU1RBVF9BTEFSTSB8IFJUQ19JU1RBVF9BTEFSTV9EQVkpKTsKLQkJYnJlYWs7Ci0KIAlkZWZhdWx0OgogCQlkZXZfZGJnX3N0YW1wKGRldik7CiAJCXJldCA9IC1FTk9JT0NUTENNRDsKQEAgLTI3Niw2ICsyNjcsMTcgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGJmaW5fcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgYmZpbl9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJZGV2X2RiZ19zdGFtcChkZXYpOworCWlmIChlbmFibGVkKQorCQliZmluX3J0Y19pbnRfc2V0X2FsYXJtKHJ0Yyk7CisJZWxzZQorCQliZmluX3J0Y19pbnRfY2xlYXIofihSVENfSVNUQVRfQUxBUk0gfCBSVENfSVNUQVRfQUxBUk1fREFZKSk7Cit9CisKIHN0YXRpYyBpbnQgYmZpbl9ydGNfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKIAlzdHJ1Y3QgYmZpbl9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtMzYyLDYgKzM2NCw3IEBACiAJLnJlYWRfYWxhcm0gICAgPSBiZmluX3J0Y19yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0gICAgID0gYmZpbl9ydGNfc2V0X2FsYXJtLAogCS5wcm9jICAgICAgICAgID0gYmZpbl9ydGNfcHJvYywKKwkuYWxhcm1faXJxX2VuYWJsZSA9IGJmaW5fcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBiZmluX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRldi5jIGIvZHJpdmVycy9ydGMvcnRjLWRldi5jCmluZGV4IDIxMmIxNmUuLmQwZTA2ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKQEAgLTQ2LDYgKzQ2LDEwNSBAQAogCXJldHVybiBlcnI7CiB9CiAKKyNpZmRlZiBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMCisvKgorICogUm91dGluZSB0byBwb2xsIFJUQyBzZWNvbmRzIGZpZWxkIGZvciBjaGFuZ2UgYXMgb2Z0ZW4gYXMgcG9zc2libGUsCisgKiBhZnRlciBmaXJzdCBSVENfVUlFIHVzZSB0aW1lciB0byByZWR1Y2UgcG9sbGluZworICovCitzdGF0aWMgdm9pZCBydGNfdWllX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0Y19kZXZpY2UsIHVpZV90YXNrKTsKKwlzdHJ1Y3QgcnRjX3RpbWUgdG07CisJaW50IG51bSA9IDA7CisJaW50IGVycjsKKworCWVyciA9IHJ0Y19yZWFkX3RpbWUocnRjLCAmdG0pOworCisJc3Bpbl9sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7CisJaWYgKHJ0Yy0+c3RvcF91aWVfcG9sbGluZyB8fCBlcnIpIHsKKwkJcnRjLT51aWVfdGFza19hY3RpdmUgPSAwOworCX0gZWxzZSBpZiAocnRjLT5vbGRzZWNzICE9IHRtLnRtX3NlYykgeworCQludW0gPSAodG0udG1fc2VjICsgNjAgLSBydGMtPm9sZHNlY3MpICUgNjA7CisJCXJ0Yy0+b2xkc2VjcyA9IHRtLnRtX3NlYzsKKwkJcnRjLT51aWVfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWiAtIChIWi8xMCk7CisJCXJ0Yy0+dWllX3RpbWVyX2FjdGl2ZSA9IDE7CisJCXJ0Yy0+dWllX3Rhc2tfYWN0aXZlID0gMDsKKwkJYWRkX3RpbWVyKCZydGMtPnVpZV90aW1lcik7CisJfSBlbHNlIGlmIChzY2hlZHVsZV93b3JrKCZydGMtPnVpZV90YXNrKSA9PSAwKSB7CisJCXJ0Yy0+dWllX3Rhc2tfYWN0aXZlID0gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKKwlpZiAobnVtKQorCQlydGNfaGFuZGxlX2xlZ2FjeV9pcnEocnRjLCBudW0sIFJUQ19VRik7Cit9CitzdGF0aWMgdm9pZCBydGNfdWllX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gKHN0cnVjdCBydGNfZGV2aWNlICopZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Yy0+aXJxX2xvY2ssIGZsYWdzKTsKKwlydGMtPnVpZV90aW1lcl9hY3RpdmUgPSAwOworCXJ0Yy0+dWllX3Rhc2tfYWN0aXZlID0gMTsKKwlpZiAoKHNjaGVkdWxlX3dvcmsoJnJ0Yy0+dWllX3Rhc2spID09IDApKQorCQlydGMtPnVpZV90YXNrX2FjdGl2ZSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjLT5pcnFfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGNsZWFyX3VpZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjKQoreworCXNwaW5fbG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOworCWlmIChydGMtPnVpZV9pcnFfYWN0aXZlKSB7CisJCXJ0Yy0+c3RvcF91aWVfcG9sbGluZyA9IDE7CisJCWlmIChydGMtPnVpZV90aW1lcl9hY3RpdmUpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7CisJCQlkZWxfdGltZXJfc3luYygmcnRjLT51aWVfdGltZXIpOworCQkJc3Bpbl9sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7CisJCQlydGMtPnVpZV90aW1lcl9hY3RpdmUgPSAwOworCQl9CisJCWlmIChydGMtPnVpZV90YXNrX2FjdGl2ZSkgeworCQkJc3Bpbl91bmxvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKKwkJCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJCQlzcGluX2xvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKKwkJfQorCQlydGMtPnVpZV9pcnFfYWN0aXZlID0gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfdWllKHN0cnVjdCBydGNfZGV2aWNlICpydGMpCit7CisJc3RydWN0IHJ0Y190aW1lIHRtOworCWludCBlcnI7CisKKwllcnIgPSBydGNfcmVhZF90aW1lKHJ0YywgJnRtKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXNwaW5fbG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOworCWlmICghcnRjLT51aWVfaXJxX2FjdGl2ZSkgeworCQlydGMtPnVpZV9pcnFfYWN0aXZlID0gMTsKKwkJcnRjLT5zdG9wX3VpZV9wb2xsaW5nID0gMDsKKwkJcnRjLT5vbGRzZWNzID0gdG0udG1fc2VjOworCQlydGMtPnVpZV90YXNrX2FjdGl2ZSA9IDE7CisJCWlmIChzY2hlZHVsZV93b3JrKCZydGMtPnVpZV90YXNrKSA9PSAwKQorCQkJcnRjLT51aWVfdGFza19hY3RpdmUgPSAwOworCX0KKwlydGMtPmlycV9kYXRhID0gMDsKKwlzcGluX3VubG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOworCXJldHVybiAwOworfQorCitpbnQgcnRjX2Rldl91cGRhdGVfaXJxX2VuYWJsZV9lbXVsKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCWlmIChlbmFibGVkKQorCQlyZXR1cm4gc2V0X3VpZShydGMpOworCWVsc2UKKwkJcmV0dXJuIGNsZWFyX3VpZShydGMpOworfQorRVhQT1JUX1NZTUJPTChydGNfZGV2X3VwZGF0ZV9pcnFfZW5hYmxlX2VtdWwpOworCisjZW5kaWYgLyogQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCAqLwogCiBzdGF0aWMgc3NpemVfdAogcnRjX2Rldl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKQEAgLTE1NCwxOSArMjUzLDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGRvbmU7CiAKLQkvKiB0cnkgdGhlIGRyaXZlcidzIGlvY3RsIGludGVyZmFjZSAqLwotCWlmIChvcHMtPmlvY3RsKSB7Ci0JCWVyciA9IG9wcy0+aW9jdGwocnRjLT5kZXYucGFyZW50LCBjbWQsIGFyZyk7Ci0JCWlmIChlcnIgIT0gLUVOT0lPQ1RMQ01EKSB7Ci0JCQltdXRleF91bmxvY2soJnJ0Yy0+b3BzX2xvY2spOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCS8qIGlmIHRoZSBkcml2ZXIgZG9lcyBub3QgcHJvdmlkZSB0aGUgaW9jdGwgaW50ZXJmYWNlCi0JICogb3IgaWYgdGhhdCBwYXJ0aWN1bGFyIGlvY3RsIHdhcyBub3QgaW1wbGVtZW50ZWQKLQkgKiAoLUVOT0lPQ1RMQ01EKSwgd2Ugd2lsbCB0cnkgdG8gZW11bGF0ZSBoZXJlLgotCSAqCisJLyoKIAkgKiBEcml2ZXJzICpTSE9VTEQgTk9UKiBwcm92aWRlIGlvY3RsIGltcGxlbWVudGF0aW9ucwogCSAqIGZvciB0aGVzZSByZXF1ZXN0cy4gIEluc3RlYWQsIHByb3ZpZGUgbWV0aG9kcyB0bwogCSAqIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBjb2RlLCBzbyB0aGF0IHRoZSBSVEMncyBtYWluCkBAIC0zMjksNyArNDE2LDEyIEBACiAJCXJldHVybiBlcnI7CiAKIAlkZWZhdWx0OgotCQllcnIgPSAtRU5PVFRZOworCQkvKiBGaW5hbGx5IHRyeSB0aGUgZHJpdmVyJ3MgaW9jdGwgaW50ZXJmYWNlICovCisJCWlmIChvcHMtPmlvY3RsKSB7CisJCQllcnIgPSBvcHMtPmlvY3RsKHJ0Yy0+ZGV2LnBhcmVudCwgY21kLCBhcmcpOworCQkJaWYgKGVyciA9PSAtRU5PSU9DVExDTUQpCisJCQkJZXJyID0gLUVOT1RUWTsKKwkJfQogCQlicmVhazsKIAl9CiAKQEAgLTM5NCw2ICs0ODYsMTEgQEAKIAogCXJ0Yy0+ZGV2LmRldnQgPSBNS0RFVihNQUpPUihydGNfZGV2dCksIHJ0Yy0+aWQpOwogCisjaWZkZWYgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTAorCUlOSVRfV09SSygmcnRjLT51aWVfdGFzaywgcnRjX3VpZV90YXNrKTsKKwlzZXR1cF90aW1lcigmcnRjLT51aWVfdGltZXIsIHJ0Y191aWVfdGltZXIsICh1bnNpZ25lZCBsb25nKXJ0Yyk7CisjZW5kaWYKKwogCWNkZXZfaW5pdCgmcnRjLT5jaGFyX2RldiwgJnJ0Y19kZXZfZm9wcyk7CiAJcnRjLT5jaGFyX2Rldi5vd25lciA9IHJ0Yy0+b3duZXI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMjg2LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMjg2LmMKaW5kZXggYmY0MzBmOS4uNjBjZTY5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTI4Ni5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEyODYuYwpAQCAtNDAsNiArNDAsMjYgQEAKIAlfX3Jhd193cml0ZWwoZGF0YSwgJnByaXYtPnJ0Y3JlZ3NbcmVnXSk7CiB9CiAKKworc3RhdGljIGludCBkczEyODZfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXN0cnVjdCBkczEyODZfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgY2hhciB2YWw7CisKKwkvKiBBbGxvdyBvciBtYXNrIGFsYXJtIGludGVycnVwdHMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXZhbCA9IGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfQ01EKTsKKwlpZiAoZW5hYmxlZCkKKwkJdmFsICY9ICB+UlRDX1RETTsKKwllbHNlCisJCXZhbCB8PSAgUlRDX1RETTsKKwlkczEyODZfcnRjX3dyaXRlKHByaXYsIHZhbCwgUlRDX0NNRCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKICNpZmRlZiBDT05GSUdfUlRDX0lOVEZfREVWCiAKIHN0YXRpYyBpbnQgZHMxMjg2X2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCkBAIC00OSwyMiArNjksNiBAQAogCXVuc2lnbmVkIGNoYXIgdmFsOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCQkvKiBNYXNrIGFsYXJtIGludC4gZW5hYi4gYml0CSovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCXZhbCA9IGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfQ01EKTsKLQkJdmFsIHw9ICBSVENfVERNOwotCQlkczEyODZfcnRjX3dyaXRlKHByaXYsIHZhbCwgUlRDX0NNRCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09OOgotCQkvKiBBbGxvdyBhbGFybSBpbnRlcnJ1cHRzLgkqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQl2YWwgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0NNRCk7Ci0JCXZhbCAmPSAgflJUQ19URE07Ci0JCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgdmFsLCBSVENfQ01EKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlicmVhazsKIAljYXNlIFJUQ19XSUVfT0ZGOgogCQkvKiBNYXNrIHdhdGNoZG9nIGludC4gZW5hYi4gYml0CSovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC0zMTYsMTIgKzMyMCwxMyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgZHMxMjg2X29wcyA9IHsKLQkuaW9jdGwgICAJPSBkczEyODZfaW9jdGwsCi0JLnByb2MgICAJPSBkczEyODZfcHJvYywKKwkuaW9jdGwJCT0gZHMxMjg2X2lvY3RsLAorCS5wcm9jCQk9IGRzMTI4Nl9wcm9jLAogCS5yZWFkX3RpbWUJPSBkczEyODZfcmVhZF90aW1lLAogCS5zZXRfdGltZQk9IGRzMTI4Nl9zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IGRzMTI4Nl9yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0JPSBkczEyODZfc2V0X2FsYXJtLAorCS5hbGFybV9pcnFfZW5hYmxlID0gZHMxMjg2X2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBkczEyODZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYwppbmRleCAwNzdhZjFkLi41N2ZiY2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jCkBAIC0xMzksNDkgKzEzOSwzMiBAQAogICogSW50ZXJmYWNlIHRvIFJUQyBmcmFtZXdvcmsKICAqLwogCi0jaWZkZWYgQ09ORklHX1JUQ19JTlRGX0RFVgotCi0vKgotICogQ29udGV4dDogY2FsbGVyIGhvbGRzIHJ0Yy0+b3BzX2xvY2sgKHRvIHByb3RlY3QgZHMxMzA1LT5jdHJsKQotICovCi1zdGF0aWMgaW50IGRzMTMwNV9pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGRzMTMwNV9hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7CiAJc3RydWN0IGRzMTMwNQkqZHMxMzA1ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJdTgJCWJ1ZlsyXTsKLQlpbnQJCXN0YXR1cyA9IC1FTk9JT0NUTENNRDsKKwlsb25nCQllcnIgPSAtRUlOVkFMOwogCiAJYnVmWzBdID0gRFMxMzA1X1dSSVRFIHwgRFMxMzA1X0NPTlRST0w7CiAJYnVmWzFdID0gZHMxMzA1LT5jdHJsWzBdOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCQlzdGF0dXMgPSAwOwotCQlpZiAoIShidWZbMV0gJiBEUzEzMDVfQUVJMCkpCi0JCQlnb3RvIGRvbmU7Ci0JCWJ1ZlsxXSAmPSB+RFMxMzA1X0FFSTA7Ci0JCWJyZWFrOwotCi0JY2FzZSBSVENfQUlFX09OOgotCQlzdGF0dXMgPSAwOworCWlmIChlbmFibGVkKSB7CiAJCWlmIChkczEzMDUtPmN0cmxbMF0gJiBEUzEzMDVfQUVJMCkKIAkJCWdvdG8gZG9uZTsKIAkJYnVmWzFdIHw9IERTMTMwNV9BRUkwOwotCQlicmVhazsKKwl9IGVsc2UgeworCQlpZiAoIShidWZbMV0gJiBEUzEzMDVfQUVJMCkpCisJCQlnb3RvIGRvbmU7CisJCWJ1ZlsxXSAmPSB+RFMxMzA1X0FFSTA7CiAJfQotCWlmIChzdGF0dXMgPT0gMCkgewotCQlzdGF0dXMgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKGRzMTMwNS0+c3BpLCBidWYsIHNpemVvZiBidWYsCi0JCQkJTlVMTCwgMCk7Ci0JCWlmIChzdGF0dXMgPj0gMCkKLQkJCWRzMTMwNS0+Y3RybFswXSA9IGJ1ZlsxXTsKLQl9Ci0KKwllcnIgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKGRzMTMwNS0+c3BpLCBidWYsIHNpemVvZiBidWYsIE5VTEwsIDApOworCWlmIChlcnIgPj0gMCkKKwkJZHMxMzA1LT5jdHJsWzBdID0gYnVmWzFdOwogZG9uZToKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiBlcnI7CisKIH0KIAotI2Vsc2UKLSNkZWZpbmUgZHMxMzA1X2lvY3RsCU5VTEwKLSNlbmRpZgogCiAvKgogICogR2V0L3NldCBvZiBkYXRlIGFuZCB0aW1lIGlzIHByZXR0eSBub3JtYWwuCkBAIC00NjAsMTIgKzQ0MywxMiBAQAogI2VuZGlmCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBkczEzMDVfb3BzID0gewotCS5pb2N0bAkJPSBkczEzMDVfaW9jdGwsCiAJLnJlYWRfdGltZQk9IGRzMTMwNV9nZXRfdGltZSwKIAkuc2V0X3RpbWUJPSBkczEzMDVfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0JPSBkczEzMDVfZ2V0X2FsYXJtLAogCS5zZXRfYWxhcm0JPSBkczEzMDVfc2V0X2FsYXJtLAogCS5wcm9jCQk9IGRzMTMwNV9wcm9jLAorCS5hbGFybV9pcnFfZW5hYmxlID0gZHMxMzA1X2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgdm9pZCBkczEzMDVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKaW5kZXggMGQ1NTliNi4uNDcyNGJhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYwpAQCAtNDk1LDUwICs0OTUsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkczEzMDdfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgZHMxMzA3X2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBkczEzMDcJCSpkczEzMDcgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQJCQlyZXQ7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCWlmICghdGVzdF9iaXQoSEFTX0FMQVJNLCAmZHMxMzA3LT5mbGFncykpCi0JCQlyZXR1cm4gLUVOT1RUWTsKKwlpZiAoIXRlc3RfYml0KEhBU19BTEFSTSwgJmRzMTMwNy0+ZmxhZ3MpKQorCQlyZXR1cm4gLUVOT1RUWTsKIAotCQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzEzMzdfUkVHX0NPTlRST0wpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7CisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzM3X1JFR19DT05UUk9MKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAorCWlmIChlbmFibGVkKQorCQlyZXQgfD0gRFMxMzM3X0JJVF9BMUlFOworCWVsc2UKIAkJcmV0ICY9IH5EUzEzMzdfQklUX0ExSUU7CiAKLQkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCQlEUzEzMzdfUkVHX0NPTlRST0wsIHJldCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQotCQlicmVhazsKLQotCWNhc2UgUlRDX0FJRV9PTjoKLQkJaWYgKCF0ZXN0X2JpdChIQVNfQUxBUk0sICZkczEzMDctPmZsYWdzKSkKLQkJCXJldHVybiAtRU5PVFRZOwotCi0JCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIERTMTMzN19SRUdfQ09OVFJPTCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQotCQlyZXQgfD0gRFMxMzM3X0JJVF9BMUlFOwotCi0JCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJRFMxMzM3X1JFR19DT05UUk9MLCByZXQpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzM3X1JFR19DT05UUk9MLCByZXQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NDgsNyArNTI1LDcgQEAKIAkuc2V0X3RpbWUJPSBkczEzMDdfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0JPSBkczEzMzdfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtCT0gZHMxMzM3X3NldF9hbGFybSwKLQkuaW9jdGwJCT0gZHMxMzA3X2lvY3RsLAorCS5hbGFybV9pcnFfZW5hYmxlID0gZHMxMzA3X2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jCmluZGV4IDQ3ZmI2MzUuLmQ4MzRhNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMKQEAgLTMwNyw0MiArMzA3LDI1IEBACiAJbXV0ZXhfdW5sb2NrKCZkczEzNzQtPm11dGV4KTsKIH0KIAotc3RhdGljIGludCBkczEzNzRfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgZHMxMzc0X2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBkczEzNzQgKmRzMTM3NCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCByZXQgPSAtRU5PSU9DVExDTUQ7CisJaW50IHJldDsKIAogCW11dGV4X2xvY2soJmRzMTM3NC0+bXV0ZXgpOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzEzNzRfUkVHX0NSKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzEzNzRfUkVHX0NSKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKLQkJcmV0ICY9IH5EUzEzNzRfUkVHX0NSX1dBQ0U7Ci0KLQkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIERTMTM3NF9SRUdfQ1IsIHJldCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFJUQ19BSUVfT046Ci0JCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIERTMTM3NF9SRUdfQ1IpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCisJaWYgKGVuYWJsZWQpIHsKIAkJcmV0IHw9IERTMTM3NF9SRUdfQ1JfV0FDRSB8IERTMTM3NF9SRUdfQ1JfQUlFOwogCQlyZXQgJj0gfkRTMTM3NF9SRUdfQ1JfV0RBTE07Ci0KLQkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIERTMTM3NF9SRUdfQ1IsIHJldCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0KLQkJYnJlYWs7CisJfSBlbHNlIHsKKwkJcmV0ICY9IH5EUzEzNzRfUkVHX0NSX1dBQ0U7CiAJfQorCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzEzNzRfUkVHX0NSLCByZXQpOwogCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZkczEzNzQtPm11dGV4KTsKQEAgLTM1NCw3ICszMzcsNyBAQAogCS5zZXRfdGltZSA9IGRzMTM3NF9zZXRfdGltZSwKIAkucmVhZF9hbGFybSA9IGRzMTM3NF9yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0gPSBkczEzNzRfc2V0X2FsYXJtLAotCS5pb2N0bCA9IGRzMTM3NF9pb2N0bCwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IGRzMTM3NF9hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIGludCBkczEzNzRfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczMyMzIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczMyMzIuYwppbmRleCAyM2E5ZWUxLi45NTA3MzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMzMjMyLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMzIzMi5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFJUQyBjbGllbnQvZHJpdmVyIGZvciB0aGUgTWF4aW0vRGFsbGFzIERTMzIzMiBSZWFsLVRpbWUgQ2xvY2sgb3ZlciBJMkMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rvci4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgogICogQXV0aG9yOiBKYWNrIExhbiA8amFjay5sYW5AZnJlZXNjYWxlLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKQEAgLTE0MSw5ICsxNDEsMTEgQEAKIAkJdGltZS0+dG1faG91ciA9IGJjZDJiaW4oaG91cik7CiAJfQogCi0JdGltZS0+dG1fd2RheSA9IGJjZDJiaW4od2Vlayk7CisJLyogRGF5IG9mIHRoZSB3ZWVrIGluIGxpbnV4IHJhbmdlIGlzIDB+NiB3aGlsZSAxfjcgaW4gUlRDIGNoaXAgKi8KKwl0aW1lLT50bV93ZGF5ID0gYmNkMmJpbih3ZWVrKSAtIDE7CiAJdGltZS0+dG1fbWRheSA9IGJjZDJiaW4oZGF5KTsKLQl0aW1lLT50bV9tb24gPSBiY2QyYmluKG1vbnRoICYgMHg3Rik7CisJLyogbGludXggdG1fbW9uIHJhbmdlOjB+MTEsIHdoaWxlIG1vbnRoIHJhbmdlIGlzIDF+MTIgaW4gUlRDIGNoaXAgKi8KKwl0aW1lLT50bV9tb24gPSBiY2QyYmluKG1vbnRoICYgMHg3RikgLSAxOwogCWlmIChjZW50dXJ5KQogCQlhZGRfY2VudHVyeSA9IDEwMDsKIApAQCAtMTYyLDkgKzE2NCwxMSBAQAogCWJ1ZlswXSA9IGJpbjJiY2QodGltZS0+dG1fc2VjKTsKIAlidWZbMV0gPSBiaW4yYmNkKHRpbWUtPnRtX21pbik7CiAJYnVmWzJdID0gYmluMmJjZCh0aW1lLT50bV9ob3VyKTsKLQlidWZbM10gPSBiaW4yYmNkKHRpbWUtPnRtX3dkYXkpOyAvKiBEYXkgb2YgdGhlIHdlZWsgKi8KKwkvKiBEYXkgb2YgdGhlIHdlZWsgaW4gbGludXggcmFuZ2UgaXMgMH42IHdoaWxlIDF+NyBpbiBSVEMgY2hpcCAqLworCWJ1ZlszXSA9IGJpbjJiY2QodGltZS0+dG1fd2RheSArIDEpOwogCWJ1Zls0XSA9IGJpbjJiY2QodGltZS0+dG1fbWRheSk7IC8qIERhdGUgKi8KLQlidWZbNV0gPSBiaW4yYmNkKHRpbWUtPnRtX21vbik7CisJLyogbGludXggdG1fbW9uIHJhbmdlOjB+MTEsIHdoaWxlIG1vbnRoIHJhbmdlIGlzIDF+MTIgaW4gUlRDIGNoaXAgKi8KKwlidWZbNV0gPSBiaW4yYmNkKHRpbWUtPnRtX21vbiArIDEpOwogCWlmICh0aW1lLT50bV95ZWFyID49IDEwMCkgewogCQlidWZbNV0gfD0gMHg4MDsKIAkJYnVmWzZdID0gYmluMmJjZCh0aW1lLT50bV95ZWFyIC0gMTAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYwppbmRleCA1YThkYWEzLi42OWZlNjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCkBAIC0yMTMsNDEgKzIxMywyNyBAQAogCXJldHVybiBtNDF0ODBfc2V0X2RhdGV0aW1lKHRvX2kyY19jbGllbnQoZGV2KSwgdG0pOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfREVWKSB8fCBkZWZpbmVkKENPTkZJR19SVENfSU5URl9ERVZfTU9EVUxFKQotc3RhdGljIGludAotbTQxdDgwX3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBtNDF0ODBfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCWludCByYzsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQljYXNlIFJUQ19BSUVfT046Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotCiAJcmMgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNNDFUODBfUkVHX0FMQVJNX01PTik7CiAJaWYgKHJjIDwgMCkKIAkJZ290byBlcnI7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCQlyYyAmPSB+TTQxVDgwX0FMTU9OX0FGRTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09OOgorCisJaWYgKGVuYWJsZWQpCiAJCXJjIHw9IE00MVQ4MF9BTE1PTl9BRkU7Ci0JCWJyZWFrOwotCX0KKwllbHNlCisJCXJjICY9IH5NNDFUODBfQUxNT05fQUZFOworCiAJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBNNDFUODBfUkVHX0FMQVJNX01PTiwgcmMpIDwgMCkKIAkJZ290byBlcnI7CisKIAlyZXR1cm4gMDsKIGVycjoKIAlyZXR1cm4gLUVJTzsKIH0KLSNlbHNlCi0jZGVmaW5lCW00MXQ4MF9ydGNfaW9jdGwgTlVMTAotI2VuZGlmCiAKIHN0YXRpYyBpbnQgbTQxdDgwX3J0Y19zZXRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqdCkKIHsKQEAgLTM3NCw3ICszNjAsNyBAQAogCS5yZWFkX2FsYXJtID0gbTQxdDgwX3J0Y19yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0gPSBtNDF0ODBfcnRjX3NldF9hbGFybSwKIAkucHJvYyA9IG00MXQ4MF9ydGNfcHJvYywKLQkuaW9jdGwgPSBtNDF0ODBfcnRjX2lvY3RsLAorCS5hbGFybV9pcnFfZW5hYmxlID0gbTQxdDgwX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX1NZU0ZTKSB8fCBkZWZpbmVkKENPTkZJR19SVENfSU5URl9TWVNGU19NT0RVTEUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDU5LmMgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDU5LmMKaW5kZXggYTk5YTBiNS4uMzk3OGY0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW00OHQ1OS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDh0NTkuYwpAQCAtMjYzLDMwICsyNjMsMjEgQEAKIC8qCiAgKiBIYW5kbGUgY29tbWFuZHMgZnJvbSB1c2VyLXNwYWNlCiAgKi8KLXN0YXRpYyBpbnQgbTQ4dDU5X3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsCi0JCQl1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgbTQ4dDU5X3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBtNDh0NTlfcGxhdF9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBtNDh0NTlfcHJpdmF0ZSAqbTQ4dDU5ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtNDh0NTktPmxvY2ssIGZsYWdzKTsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6CS8qIGFsYXJtIGludGVycnVwdCBvZmYgKi8KLQkJTTQ4VDU5X1dSSVRFKDB4MDAsIE00OFQ1OV9JTlRSKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09OOgkvKiBhbGFybSBpbnRlcnJ1cHQgb24gKi8KKwlpZiAoZW5hYmxlZCkKIAkJTTQ4VDU5X1dSSVRFKE00OFQ1OV9JTlRSX0FGRSwgTTQ4VDU5X0lOVFIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRU5PSU9DVExDTUQ7Ci0JCWJyZWFrOwotCX0KKwllbHNlCisJCU00OFQ1OV9XUklURSgweDAwLCBNNDhUNTlfSU5UUik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbTQ4dDU5LT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG00OHQ1OV9ydGNfcHJvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQpAQCAtMzMwLDEyICszMjEsMTIgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIG00OHQ1OV9ydGNfb3BzID0gewotCS5pb2N0bAkJPSBtNDh0NTlfcnRjX2lvY3RsLAogCS5yZWFkX3RpbWUJPSBtNDh0NTlfcnRjX3JlYWRfdGltZSwKIAkuc2V0X3RpbWUJPSBtNDh0NTlfcnRjX3NldF90aW1lLAogCS5yZWFkX2FsYXJtCT0gbTQ4dDU5X3J0Y19yZWFkYWxhcm0sCiAJLnNldF9hbGFybQk9IG00OHQ1OV9ydGNfc2V0YWxhcm0sCiAJLnByb2MJCT0gbTQ4dDU5X3J0Y19wcm9jLAorCS5hbGFybV9pcnFfZW5hYmxlID0gbTQ4dDU5X3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIG00OHQwMl9ydGNfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1yc3QuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tcnN0LmMKaW5kZXggYmNkMGNmNi4uMWRiNjJkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1yc3QuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbXJzdC5jCkBAIC0yNTUsNDIgKzI1NSwyMSBAQAogCXJldHVybiAwOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfREVWKSB8fCBkZWZpbmVkKENPTkZJR19SVENfSU5URl9ERVZfTU9EVUxFKQotCiAvKiBDdXJyZW50bHksIHRoZSB2UlRDIGRvZXNuJ3Qgc3VwcG9ydCBVSUUgT04vT0ZGICovCi1zdGF0aWMgaW50Ci1tcnN0X3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBtcnN0X3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7CiAJc3RydWN0IG1yc3RfcnRjCSptcnN0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQljYXNlIFJUQ19BSUVfT046Ci0JCWlmICghbXJzdC0+aXJxKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIFBJRSBPTi9PRkYgaXMgaGFuZGxlZCBieSBtcnN0X2lycV9zZXRfc3RhdGUoKSAqLwotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KLQogCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoJLyogYWxhcm0gb2ZmICovCi0JCW1yc3RfaXJxX2Rpc2FibGUobXJzdCwgUlRDX0FJRSk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PTjoJLyogYWxhcm0gb24gKi8KKwlpZiAoZW5hYmxlZCkKIAkJbXJzdF9pcnFfZW5hYmxlKG1yc3QsIFJUQ19BSUUpOwotCQlicmVhazsKLQl9CisJZWxzZQorCQltcnN0X2lycV9kaXNhYmxlKG1yc3QsIFJUQ19BSUUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKLSNlbHNlCi0jZGVmaW5lCW1yc3RfcnRjX2lvY3RsCU5VTEwKLSNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfUFJPQykgfHwgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfUFJPQ19NT0RVTEUpCiAKQEAgLTMxNywxMyArMjk2LDEzIEBACiAjZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIG1yc3RfcnRjX29wcyA9IHsKLQkuaW9jdGwJCT0gbXJzdF9ydGNfaW9jdGwsCiAJLnJlYWRfdGltZQk9IG1yc3RfcmVhZF90aW1lLAogCS5zZXRfdGltZQk9IG1yc3Rfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0JPSBtcnN0X3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybQk9IG1yc3Rfc2V0X2FsYXJtLAogCS5wcm9jCQk9IG1yc3RfcHJvY2ZzLAogCS5pcnFfc2V0X3N0YXRlCT0gbXJzdF9pcnFfc2V0X3N0YXRlLAorCS5hbGFybV9pcnFfZW5hYmxlID0gbXJzdF9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXJzdF9ydGMJbXJzdF9ydGM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbXNtNjI0Mi5jIGIvZHJpdmVycy9ydGMvcnRjLW1zbTYyNDIuYwppbmRleCBiMmZmZjBjLi42NzgyMDYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbXNtNjI0Mi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tc202MjQyLmMKQEAgLTgyLDcgKzgyLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtc202MjQyX3dyaXRlKHN0cnVjdCBtc202MjQyX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCB2YWwsCiAJCQkJdW5zaWduZWQgaW50IHJlZykKIHsKLQlyZXR1cm4gX19yYXdfd3JpdGVsKHZhbCwgJnByaXYtPnJlZ3NbcmVnXSk7CisJX19yYXdfd3JpdGVsKHZhbCwgJnByaXYtPnJlZ3NbcmVnXSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtc202MjQyX3NldChzdHJ1Y3QgbXNtNjI0Ml9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgdmFsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW12LmMgYi9kcml2ZXJzL3J0Yy9ydGMtbXYuYwppbmRleCBiY2NhNDcyLi42MDYyN2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbXYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbXYuYwpAQCAtMTY5LDI1ICsxNjksMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtdl9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLAotCQkJdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IG12X3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcjsKIAogCWlmIChwZGF0YS0+aXJxIDwgMCkKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsgLyogZmFsbCBiYWNrIGludG8gcnRjLWRldidzIGVtdWxhdGlvbiAqLwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJd3JpdGVsKDAsIGlvYWRkciArIFJUQ19BTEFSTV9JTlRFUlJVUFRfTUFTS19SRUdfT0ZGUyk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PTjoKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIGZhbGwgYmFjayBpbnRvIHJ0Yy1kZXYncyBlbXVsYXRpb24gKi8KKworCWlmIChlbmFibGVkKQogCQl3cml0ZWwoMSwgaW9hZGRyICsgUlRDX0FMQVJNX0lOVEVSUlVQVF9NQVNLX1JFR19PRkZTKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9CisJZWxzZQorCQl3cml0ZWwoMCwgaW9hZGRyICsgUlRDX0FMQVJNX0lOVEVSUlVQVF9NQVNLX1JFR19PRkZTKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjE2LDcgKzIxMCw3IEBACiAJLnNldF90aW1lCT0gbXZfcnRjX3NldF90aW1lLAogCS5yZWFkX2FsYXJtCT0gbXZfcnRjX3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybQk9IG12X3J0Y19zZXRfYWxhcm0sCi0JLmlvY3RsCQk9IG12X3J0Y19pb2N0bCwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IG12X3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgbXZfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwppbmRleCBlNzJiNTIzLi5iNGRiZjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKQEAgLTE0Myw4ICsxNDMsNiBAQAogCXU4IHJlZzsKIAogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQljYXNlIFJUQ19BSUVfT046CiAJY2FzZSBSVENfVUlFX09GRjoKIAljYXNlIFJUQ19VSUVfT046CiAJCWJyZWFrOwpAQCAtMTU2LDEzICsxNTQsNiBAQAogCXJ0Y193YWl0X25vdF9idXN5KCk7CiAJcmVnID0gcnRjX3JlYWQoT01BUF9SVENfSU5URVJSVVBUU19SRUcpOwogCXN3aXRjaCAoY21kKSB7Ci0JLyogQUlFID0gQWxhcm0gSW50ZXJydXB0IEVuYWJsZSAqLwotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCXJlZyAmPSB+T01BUF9SVENfSU5URVJSVVBUU19JVF9BTEFSTTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09OOgotCQlyZWcgfD0gT01BUF9SVENfSU5URVJSVVBUU19JVF9BTEFSTTsKLQkJYnJlYWs7CiAJLyogVUlFID0gVXBkYXRlIEludGVycnVwdCBFbmFibGUgKDEvc2Vjb25kKSAqLwogCWNhc2UgUlRDX1VJRV9PRkY6CiAJCXJlZyAmPSB+T01BUF9SVENfSU5URVJSVVBUU19JVF9USU1FUjsKQEAgLTE4Miw2ICsxNzMsMjQgQEAKICNkZWZpbmUJb21hcF9ydGNfaW9jdGwJTlVMTAogI2VuZGlmCiAKK3N0YXRpYyBpbnQgb21hcF9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXU4IHJlZzsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJcnRjX3dhaXRfbm90X2J1c3koKTsKKwlyZWcgPSBydGNfcmVhZChPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRyk7CisJaWYgKGVuYWJsZWQpCisJCXJlZyB8PSBPTUFQX1JUQ19JTlRFUlJVUFRTX0lUX0FMQVJNOworCWVsc2UKKwkJcmVnICY9IH5PTUFQX1JUQ19JTlRFUlJVUFRTX0lUX0FMQVJNOworCXJ0Y193YWl0X25vdF9idXN5KCk7CisJcnRjX3dyaXRlKHJlZywgT01BUF9SVENfSU5URVJSVVBUU19SRUcpOworCWxvY2FsX2lycV9lbmFibGUoKTsKKworCXJldHVybiAwOworfQorCiAvKiB0aGlzIGhhcmR3YXJlIGRvZXNuJ3Qgc3VwcG9ydCAiZG9uJ3QgY2FyZSIgYWxhcm0gZmllbGRzICovCiBzdGF0aWMgaW50IHRtMmJjZChzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewpAQCAtMzA5LDYgKzMxOCw3IEBACiAJLnNldF90aW1lCT0gb21hcF9ydGNfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0JPSBvbWFwX3J0Y19yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0JPSBvbWFwX3J0Y19zZXRfYWxhcm0sCisJLmFsYXJtX2lycV9lbmFibGUgPSBvbWFwX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIGludCBvbWFwX3J0Y19hbGFybTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcHJvYy5jCmluZGV4IGMwODZmYzMuLjI0MmJiZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXByb2MuYwpAQCAtODEsMTIgKzgxLDE2IEBACiAKIHN0YXRpYyBpbnQgcnRjX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwlpbnQgcmV0OwogCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBQREUoaW5vZGUpLT5kYXRhOwogCiAJaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJ0Y19wcm9jX3Nob3csIHJ0Yyk7CisJcmV0ID0gc2luZ2xlX29wZW4oZmlsZSwgcnRjX3Byb2Nfc2hvdywgcnRjKTsKKwlpZiAocmV0KQorCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHJ0Y19wcm9jX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcnA1YzAxLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcnA1YzAxLmMKaW5kZXggMzZlYjY2MS4uNjk0ZGEzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXJwNWMwMS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1ycDVjMDEuYwpAQCAtNzYsNyArNzYsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHJwNWMwMV93cml0ZShzdHJ1Y3QgcnA1YzAxX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCB2YWwsCiAJCQkJdW5zaWduZWQgaW50IHJlZykKIHsKLQlyZXR1cm4gX19yYXdfd3JpdGVsKHZhbCwgJnByaXYtPnJlZ3NbcmVnXSk7CisJX19yYXdfd3JpdGVsKHZhbCwgJnByaXYtPnJlZ3NbcmVnXSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJwNWMwMV9sb2NrKHN0cnVjdCBycDVjMDFfcHJpdiAqcHJpdikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jCmluZGV4IGRkMTRlMjAuLjZhYWExNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYwpAQCAtMjk5LDE0ICsyOTksNiBAQAogCQlpZiAocnM1Yy0+dHlwZSA9PSBydGNfcnM1YzM3MmEKIAkJCQkmJiAoYnVmICYgUlM1QzM3MkFfQ1RSTDFfU0wxKSkKIAkJCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQljYXNlIFJUQ19BSUVfT046Ci0JCS8qIHRoZXNlIGlycSBtYW5hZ2VtZW50IGNhbGxzIG9ubHkgbWFrZSBzZW5zZSBmb3IgY2hpcHMKLQkJICogd2hpY2ggYXJlIHdpcmVkIHVwIHRvIGFuIElSUS4KLQkJICovCi0JCWlmICghcnM1Yy0+aGFzX2lycSkKLQkJCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PSU9DVExDTUQ7CiAJfQpAQCAtMzE3LDEyICszMDksNiBAQAogCiAJYWRkciA9IFJTNUNfQUREUihSUzVDX1JFR19DVFJMMSk7CiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgkvKiBhbGFybSBvZmYgKi8KLQkJYnVmICY9IH5SUzVDX0NUUkwxX0FBTEU7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PTjoJLyogYWxhcm0gb24gKi8KLQkJYnVmIHw9IFJTNUNfQ1RSTDFfQUFMRTsKLQkJYnJlYWs7CiAJY2FzZSBSVENfVUlFX09GRjoJLyogdXBkYXRlIG9mZiAqLwogCQlidWYgJj0gflJTNUNfQ1RSTDFfQ1RfTUFTSzsKIAkJYnJlYWs7CkBAIC0zNDcsNiArMzMzLDM5IEBACiAjZW5kaWYKIAogCitzdGF0aWMgaW50IHJzNWNfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCByczVjMzcyCQkqcnM1YyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXVuc2lnbmVkIGNoYXIJCWJ1ZjsKKwlpbnQJCQlzdGF0dXMsIGFkZHI7CisKKwlidWYgPSByczVjLT5yZWdzW1JTNUNfUkVHX0NUUkwxXTsKKworCWlmICghcnM1Yy0+aGFzX2lycSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGF0dXMgPSByczVjX2dldF9yZWdzKHJzNWMpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJYWRkciA9IFJTNUNfQUREUihSUzVDX1JFR19DVFJMMSk7CisJaWYgKGVuYWJsZWQpCisJCWJ1ZiB8PSBSUzVDX0NUUkwxX0FBTEU7CisJZWxzZQorCQlidWYgJj0gflJTNUNfQ1RSTDFfQUFMRTsKKworCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgYWRkciwgYnVmKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhbid0IHVwZGF0ZSBhbGFybVxuIiwKKwkJCXJzNWMtPnJ0Yy0+bmFtZSk7CisJCXN0YXR1cyA9IC1FSU87CisJfSBlbHNlCisJCXJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdID0gYnVmOworCisJcmV0dXJuIHN0YXR1czsKK30KKworCiAvKiBOT1RFOiAgU2luY2UgUlRDX1dLQUxNX3tSRCxTRVR9IHdlcmUgb3JpZ2luYWxseSBkZWZpbmVkIGZvciBFRkksCiAgKiB3aGljaCBvbmx5IGV4cG9zZXMgYSBwb2xsZWQgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlOyBhbmQgc2luY2UKICAqIHRoZXNlIGNhbGxzIG1hcCBkaXJlY3RseSB0byB0aG9zZSBFRkkgcmVxdWVzdHM7IHdlIGRvbid0IGRlbWFuZApAQCAtNDY2LDYgKzQ4NSw3IEBACiAJLnNldF90aW1lCT0gcnM1YzM3Ml9ydGNfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0JPSByczVjX3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybQk9IHJzNWNfc2V0X2FsYXJtLAorCS5hbGFybV9pcnFfZW5hYmxlID0gcnM1Y19ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19SVENfSU5URl9TWVNGUykgfHwgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfU1lTRlNfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCmluZGV4IDg4ZWE1MmIuLjVkZmU1ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKQEAgLTMxNCwxNiArMzE0LDYgQEAKIAkJdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCQlzcGluX2xvY2tfaXJxKCZzYTExMDBfcnRjX2xvY2spOwotCQlSVFNSICY9IH5SVFNSX0FMRTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZzYTExMDBfcnRjX2xvY2spOwotCQlyZXR1cm4gMDsKLQljYXNlIFJUQ19BSUVfT046Ci0JCXNwaW5fbG9ja19pcnEoJnNhMTEwMF9ydGNfbG9jayk7Ci0JCVJUU1IgfD0gUlRTUl9BTEU7Ci0JCXNwaW5fdW5sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKLQkJcmV0dXJuIDA7CiAJY2FzZSBSVENfVUlFX09GRjoKIAkJc3Bpbl9sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKIAkJUlRTUiAmPSB+UlRTUl9IWkU7CkBAIC0zMzgsNiArMzI4LDE3IEBACiAJcmV0dXJuIC1FTk9JT0NUTENNRDsKIH0KIAorc3RhdGljIGludCBzYTExMDBfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzcGluX2xvY2tfaXJxKCZzYTExMDBfcnRjX2xvY2spOworCWlmIChlbmFibGVkKQorCQlSVFNSIHw9IFJUU1JfQUxFOworCWVsc2UKKwkJUlRTUiAmPSB+UlRTUl9BTEU7CisJc3Bpbl91bmxvY2tfaXJxKCZzYTExMDBfcnRjX2xvY2spOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNhMTEwMF9ydGNfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKIAlydGNfdGltZV90b190bShSQ05SLCB0bSk7CkBAIC00MTAsNiArNDExLDcgQEAKIAkucHJvYyA9IHNhMTEwMF9ydGNfcHJvYywKIAkuaXJxX3NldF9mcmVxID0gc2ExMTAwX2lycV9zZXRfZnJlcSwKIAkuaXJxX3NldF9zdGF0ZSA9IHNhMTEwMF9pcnFfc2V0X3N0YXRlLAorCS5hbGFybV9pcnFfZW5hYmxlID0gc2ExMTAwX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIGludCBzYTExMDBfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtc2guYyBiL2RyaXZlcnMvcnRjL3J0Yy1zaC5jCmluZGV4IDA2ZTQxZWQuLjkzMzE0YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zaC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zaC5jCkBAIC0zNTAsMTAgKzM1MCw2IEBACiAJdW5zaWduZWQgaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JY2FzZSBSVENfQUlFX09OOgotCQlzaF9ydGNfc2V0YWllKGRldiwgY21kID09IFJUQ19BSUVfT04pOwotCQlicmVhazsKIAljYXNlIFJUQ19VSUVfT0ZGOgogCQlydGMtPnBlcmlvZGljX2ZyZXEgJj0gflBGX09YUzsKIAkJc2hfcnRjX3NldGNpZShkZXYsIDApOwpAQCAtMzY5LDYgKzM2NSwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgc2hfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzaF9ydGNfc2V0YWllKGRldiwgZW5hYmxlZCk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc2hfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwpAQCAtNjA0LDYgKzYwNiw3IEBACiAJLmlycV9zZXRfc3RhdGUJPSBzaF9ydGNfaXJxX3NldF9zdGF0ZSwKIAkuaXJxX3NldF9mcmVxCT0gc2hfcnRjX2lycV9zZXRfZnJlcSwKIAkucHJvYwkJPSBzaF9ydGNfcHJvYywKKwkuYWxhcm1faXJxX2VuYWJsZSA9IHNoX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2hfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdGVzdC5jIGIvZHJpdmVycy9ydGMvcnRjLXRlc3QuYwppbmRleCA1MTcyNWY3Li5hODJkNmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdGVzdC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy10ZXN0LmMKQEAgLTUwLDI0ICs1MCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGVzdF9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLAotCXVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCB0ZXN0X3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZSkKIHsKLQkvKiBXZSBkbyBzdXBwb3J0IGludGVycnVwdHMsIHRoZXkncmUgZ2VuZXJhdGVkCi0JICogdXNpbmcgdGhlIHN5c2ZzIGludGVyZmFjZS4KLQkgKi8KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX1BJRV9PTjoKLQljYXNlIFJUQ19QSUVfT0ZGOgotCWNhc2UgUlRDX1VJRV9PTjoKLQljYXNlIFJUQ19VSUVfT0ZGOgotCWNhc2UgUlRDX0FJRV9PTjoKLQljYXNlIFJUQ19BSUVfT0ZGOgotCQlyZXR1cm4gMDsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgdGVzdF9ydGNfb3BzID0gewpAQCAtNzYsNyArNjEsNyBAQAogCS5yZWFkX2FsYXJtID0gdGVzdF9ydGNfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtID0gdGVzdF9ydGNfc2V0X2FsYXJtLAogCS5zZXRfbW1zcyA9IHRlc3RfcnRjX3NldF9tbXNzLAotCS5pb2N0bCA9IHRlc3RfcnRjX2lvY3RsLAorCS5hbGFybV9pcnFfZW5hYmxlID0gdGVzdF9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBzc2l6ZV90IHRlc3RfaXJxX3Nob3coc3RydWN0IGRldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jIGIvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCmluZGV4IGMzMjQ0MjQuLjc2OTE5MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKQEAgLTI0MCwyNiArMjQwLDYgQEAKIHN0YXRpYyBpbnQgdnI0MXh4X3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09OOgotCQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0KLQkJaWYgKCFhbGFybV9lbmFibGVkKSB7Ci0JCQllbmFibGVfaXJxKGFpZV9pcnEpOwotCQkJYWxhcm1fZW5hYmxlZCA9IDE7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JCWlmIChhbGFybV9lbmFibGVkKSB7Ci0JCQlkaXNhYmxlX2lycShhaWVfaXJxKTsKLQkJCWFsYXJtX2VuYWJsZWQgPSAwOwotCQl9Ci0KLQkJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Ci0JCWJyZWFrOwogCWNhc2UgUlRDX0VQT0NIX1JFQUQ6CiAJCXJldHVybiBwdXRfdXNlcihlcG9jaCwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopYXJnKTsKIAljYXNlIFJUQ19FUE9DSF9TRVQ6CkBAIC0yNzUsNiArMjU1LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdnI0MXh4X3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOworCWlmIChlbmFibGVkKSB7CisJCWlmICghYWxhcm1fZW5hYmxlZCkgeworCQkJZW5hYmxlX2lycShhaWVfaXJxKTsKKwkJCWFsYXJtX2VuYWJsZWQgPSAxOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGFsYXJtX2VuYWJsZWQpIHsKKwkJCWRpc2FibGVfaXJxKGFpZV9pcnEpOworCQkJYWxhcm1fZW5hYmxlZCA9IDA7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBlbGFwc2VkdGltZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKWRldl9pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jCmluZGV4IDQxNTU4MDUuLjJiNzcxZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYwpAQCAtMzE5LDYgKzMxOSw5IEBACiAKIAlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7CiAJbGN1ID0gcHJpdmF0ZS0+bGN1OworCS8qIG5vdGhpbmcgdG8gZG8gaWYgYWxyZWFkeSBkaXNjb25uZWN0ZWQgKi8KKwlpZiAoIWxjdSkKKwkJcmV0dXJuOwogCWRldmljZS0+ZGlzY2lwbGluZS0+Z2V0X3VpZChkZXZpY2UsICZ1aWQpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZsY3UtPmxvY2ssIGZsYWdzKTsKIAlsaXN0X2RlbF9pbml0KCZkZXZpY2UtPmFsaWFzX2xpc3QpOwpAQCAtNjgwLDYgKzY4Myw5IEBACiAKIAlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7CiAJbGN1ID0gcHJpdmF0ZS0+bGN1OworCS8qIG5vdGhpbmcgdG8gZG8gaWYgYWxyZWFkeSByZW1vdmVkICovCisJaWYgKCFsY3UpCisJCXJldHVybiAwOwogCXNwaW5fbG9ja19pcnFzYXZlKCZsY3UtPmxvY2ssIGZsYWdzKTsKIAlfcmVtb3ZlX2RldmljZV9mcm9tX2xjdShsY3UsIGRldmljZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGN1LT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKaW5kZXggMzE4NjcyZC4uYTlmZTIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwpAQCAtNzIsNyArNzIsNyBAQAogc3RhdGljIHN0cnVjdCBjY3dfZGV2aWNlX2lkIGRhc2RfZWNrZF9pZHNbXSA9IHsKIAl7IENDV19ERVZJQ0VfREVWVFlQRSAoMHgzOTkwLCAwLCAweDMzOTAsIDApLCAuZHJpdmVyX2luZm8gPSAweDF9LAogCXsgQ0NXX0RFVklDRV9ERVZUWVBFICgweDIxMDUsIDAsIDB4MzM5MCwgMCksIC5kcml2ZXJfaW5mbyA9IDB4Mn0sCi0JeyBDQ1dfREVWSUNFX0RFVlRZUEUgKDB4Mzg4MCwgMCwgMHgzMzkwLCAwKSwgLmRyaXZlcl9pbmZvID0gMHgzfSwKKwl7IENDV19ERVZJQ0VfREVWVFlQRSAoMHgzODgwLCAwLCAweDMzODAsIDApLCAuZHJpdmVyX2luZm8gPSAweDN9LAogCXsgQ0NXX0RFVklDRV9ERVZUWVBFICgweDM5OTAsIDAsIDB4MzM4MCwgMCksIC5kcml2ZXJfaW5mbyA9IDB4NH0sCiAJeyBDQ1dfREVWSUNFX0RFVlRZUEUgKDB4MjEwNSwgMCwgMHgzMzgwLCAwKSwgLmRyaXZlcl9pbmZvID0gMHg1fSwKIAl7IENDV19ERVZJQ0VfREVWVFlQRSAoMHg5MzQzLCAwLCAweDkzNDUsIDApLCAuZHJpdmVyX2luZm8gPSAweDZ9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKaW5kZXggZTlmZmYyYi4uNTY0MGM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCkBAIC00NzYsNyArNDc2LDcgQEAKIHN0YXRpYyBpbnQgZ2V0X2luYm91bmRfYnVmZmVyX2Zyb250aWVyKHN0cnVjdCBxZGlvX3EgKnEpCiB7CiAJaW50IGNvdW50LCBzdG9wOwotCXVuc2lnbmVkIGNoYXIgc3RhdGU7CisJdW5zaWduZWQgY2hhciBzdGF0ZSA9IDA7CiAKIAkvKgogCSAqIERvbid0IGNoZWNrIDEyOCBidWZmZXJzLCBhcyBvdGhlcndpc2UgcWRpb19pbmJvdW5kX3FfbW92ZWQKQEAgLTY0Myw3ICs2NDMsNyBAQAogc3RhdGljIGludCBnZXRfb3V0Ym91bmRfYnVmZmVyX2Zyb250aWVyKHN0cnVjdCBxZGlvX3EgKnEpCiB7CiAJaW50IGNvdW50LCBzdG9wOwotCXVuc2lnbmVkIGNoYXIgc3RhdGU7CisJdW5zaWduZWQgY2hhciBzdGF0ZSA9IDA7CiAKIAlpZiAobmVlZF9zaWdhX3N5bmMocSkpCiAJCWlmICgoKHF1ZXVlX3R5cGUocSkgIT0gUURJT19JUURJT19RRk1UKSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwppbmRleCA2NWViZWUwLi5iNmE2MzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwpAQCAtNTY1LDcgKzU2NSw3IEBACiAJc3RydWN0IGl1Y3ZfZXZlbnQgZXY7CiAJaW50IHJjOwogCi0JaWYgKG1lbWNtcChpdWN2TWFnaWMsIGlwdXNlciwgc2l6ZW9mKGlwdXNlcikpKQorCWlmIChtZW1jbXAoaXVjdk1hZ2ljLCBpcHVzZXIsIDE2KSkKIAkJLyogaXB1c2VyIG11c3QgbWF0Y2ggaXVjdk1hZ2ljLiAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAlyYyA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKaW5kZXggMjlmODQ4Yi4uMDE5YWU1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwpAQCAtOTg4LDE2ICs5ODgsMzAgQEAKIAljaHBfZHNjID0gKHN0cnVjdCBjaGFubmVsUGF0aF9kc2MgKiljY3dfZGV2aWNlX2dldF9jaHBfZGVzYyhjY3dkZXYsIDApOwogCWlmIChjaHBfZHNjICE9IE5VTEwpIHsKIAkJLyogQ0hQUCBmaWVsZCBiaXQgNiA9PSAxIC0+IHNpbmdsZSBxdWV1ZSAqLwotCQlpZiAoKGNocF9kc2MtPmNocHAgJiAweDAyKSA9PSAweDAyKQorCQlpZiAoKGNocF9kc2MtPmNocHAgJiAweDAyKSA9PSAweDAyKSB7CisJCQlpZiAoKGF0b21pY19yZWFkKCZjYXJkLT5xZGlvLnN0YXRlKSAhPQorCQkJCVFFVEhfUURJT19VTklOSVRJQUxJWkVEKSAmJgorCQkJICAgIChjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMgPT0gNCkpCisJCQkJLyogY2hhbmdlIGZyb20gNCB0byAxIG91dGJvdW5kIHF1ZXVlcyAqLworCQkJCXFldGhfZnJlZV9xZGlvX2J1ZmZlcnMoY2FyZCk7CiAJCQljYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMgPSAxOworCQkJaWYgKGNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgIT0gMCkKKwkJCQlkZXZfaW5mbygmY2FyZC0+Z2Rldi0+ZGV2LAorCQkJCQkiUHJpb3JpdHkgUXVldWVpbmcgbm90IHN1cHBvcnRlZFxuIik7CisJCQljYXJkLT5xZGlvLmRlZmF1bHRfb3V0X3F1ZXVlID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlmICgoYXRvbWljX3JlYWQoJmNhcmQtPnFkaW8uc3RhdGUpICE9CisJCQkJUUVUSF9RRElPX1VOSU5JVElBTElaRUQpICYmCisJCQkgICAgKGNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlcyA9PSAxKSkgeworCQkJCS8qIGNoYW5nZSBmcm9tIDEgdG8gNCBvdXRib3VuZCBxdWV1ZXMgKi8KKwkJCQlxZXRoX2ZyZWVfcWRpb19idWZmZXJzKGNhcmQpOworCQkJCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSAyOworCQkJfQorCQkJY2FyZC0+cWRpby5ub19vdXRfcXVldWVzID0gNDsKKwkJfQogCQljYXJkLT5pbmZvLmZ1bmNfbGV2ZWwgPSAweDQxMDAgKyBjaHBfZHNjLT5kZXNjOwogCQlrZnJlZShjaHBfZHNjKTsKIAl9Ci0JaWYgKGNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlcyA9PSAxKSB7Ci0JCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSAwOwotCQlkZXZfaW5mbygmY2FyZC0+Z2Rldi0+ZGV2LAotCQkJIlByaW9yaXR5IFF1ZXVlaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOwotCX0KIAlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIm5yOiV4IiwgY2FyZC0+cWRpby5ub19vdXRfcXVldWVzKTsKIAlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgImx2bDolMDJ4IiwgY2FyZC0+aW5mby5mdW5jX2xldmVsKTsKIAlyZXR1cm47CkBAIC0xODMyLDMzICsxODQ2LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHFldGhfZ2V0X21heF9tdHVfZm9yX2NhcmQoaW50IGNhcmR0eXBlKQotewotCXN3aXRjaCAoY2FyZHR5cGUpIHsKLQotCWNhc2UgUUVUSF9DQVJEX1RZUEVfVU5LTk9XTjoKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TRDoKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TTjoKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TTToKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TWDoKLQkJcmV0dXJuIDYxNDQwOwotCWNhc2UgUUVUSF9DQVJEX1RZUEVfSVFEOgotCQlyZXR1cm4gNTczNDQ7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDE1MDA7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIGludCBxZXRoX2dldF9tdHVfb3V0X29mX21wYyhpbnQgY2FyZHR5cGUpCi17Ci0Jc3dpdGNoIChjYXJkdHlwZSkgewotCWNhc2UgUUVUSF9DQVJEX1RZUEVfSVFEOgotCQlyZXR1cm4gMTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHFldGhfZ2V0X210dV9vdXRvZl9mcmFtZXNpemUoaW50IGZyYW1lc2l6ZSkKIHsKIAlzd2l0Y2ggKGZyYW1lc2l6ZSkgewpAQCAtMTg4MSwxMCArMTg2OCw5IEBACiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU0Q6CiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU006CiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU1g6Ci0JCXJldHVybiAoKG10dSA+PSA1NzYpICYmIChtdHUgPD0gNjE0NDApKTsKIAljYXNlIFFFVEhfQ0FSRF9UWVBFX0lRRDoKIAkJcmV0dXJuICgobXR1ID49IDU3NikgJiYKLQkJCShtdHUgPD0gY2FyZC0+aW5mby5tYXhfbXR1ICsgNDA5NiAtIDMyKSk7CisJCQkobXR1IDw9IGNhcmQtPmluZm8ubWF4X210dSkpOwogCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NOOgogCWNhc2UgUUVUSF9DQVJEX1RZUEVfVU5LTk9XTjoKIAlkZWZhdWx0OgpAQCAtMTkwNyw3ICsxODkzLDcgQEAKIAltZW1jcHkoJmNhcmQtPnRva2VuLnVscF9maWx0ZXJfciwKIAkgICAgICAgUUVUSF9VTFBfRU5BQkxFX1JFU1BfRklMVEVSX1RPS0VOKGlvYi0+ZGF0YSksCiAJICAgICAgIFFFVEhfTVBDX1RPS0VOX0xFTkdUSCk7Ci0JaWYgKHFldGhfZ2V0X210dV9vdXRfb2ZfbXBjKGNhcmQtPmluZm8udHlwZSkpIHsKKwlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgewogCQltZW1jcHkoJmZyYW1lc2l6ZSwgUUVUSF9VTFBfRU5BQkxFX1JFU1BfTUFYX01UVShpb2ItPmRhdGEpLCAyKTsKIAkJbXR1ID0gcWV0aF9nZXRfbXR1X291dG9mX2ZyYW1lc2l6ZShmcmFtZXNpemUpOwogCQlpZiAoIW10dSkgewpAQCAtMTkxNSwxMiArMTkwMSwyMSBAQAogCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIgIHJjJWQiLCBpb2ItPnJjKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCWNhcmQtPmluZm8ubWF4X210dSA9IG10dTsKKwkJaWYgKGNhcmQtPmluZm8uaW5pdGlhbF9tdHUgJiYgKGNhcmQtPmluZm8uaW5pdGlhbF9tdHUgIT0gbXR1KSkgeworCQkJLyogZnJhbWUgc2l6ZSBoYXMgY2hhbmdlZCAqLworCQkJaWYgKGNhcmQtPmRldiAmJgorCQkJICAgICgoY2FyZC0+ZGV2LT5tdHUgPT0gY2FyZC0+aW5mby5pbml0aWFsX210dSkgfHwKKwkJCSAgICAgKGNhcmQtPmRldi0+bXR1ID4gbXR1KSkpCisJCQkJY2FyZC0+ZGV2LT5tdHUgPSBtdHU7CisJCQlxZXRoX2ZyZWVfcWRpb19idWZmZXJzKGNhcmQpOworCQl9CiAJCWNhcmQtPmluZm8uaW5pdGlhbF9tdHUgPSBtdHU7CisJCWNhcmQtPmluZm8ubWF4X210dSA9IG10dTsKIAkJY2FyZC0+cWRpby5pbl9idWZfc2l6ZSA9IG10dSArIDIgKiBQQUdFX1NJWkU7CiAJfSBlbHNlIHsKIAkJY2FyZC0+aW5mby5pbml0aWFsX210dSA9IHFldGhfZ2V0X2luaXRpYWxfbXR1X2Zvcl9jYXJkKGNhcmQpOwotCQljYXJkLT5pbmZvLm1heF9tdHUgPSBxZXRoX2dldF9tYXhfbXR1X2Zvcl9jYXJkKGNhcmQtPmluZm8udHlwZSk7CisJCWNhcmQtPmluZm8ubWF4X210dSA9ICooX191MTYgKilRRVRIX1VMUF9FTkFCTEVfUkVTUF9NQVhfTVRVKAorCQkJaW9iLT5kYXRhKTsKIAkJY2FyZC0+cWRpby5pbl9idWZfc2l6ZSA9IFFFVEhfSU5fQlVGX1NJWkVfREVGQVVMVDsKIAl9CiAKQEAgLTM3NzUsNiArMzc3MCw0NyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgcWV0aF9kZXRlcm1pbmVfY2FwYWJpbGl0aWVzKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJaW50IHJjOworCWludCBsZW5ndGg7CisJY2hhciAqcHJjZDsKKwlzdHJ1Y3QgY2N3X2RldmljZSAqZGRldjsKKwlpbnQgZGRldl9vZmZsaW5lID0gMDsKKworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJkZXRjYXBhYiIpOworCWRkZXYgPSBDQVJEX0RERVYoY2FyZCk7CisJaWYgKCFkZGV2LT5vbmxpbmUpIHsKKwkJZGRldl9vZmZsaW5lID0gMTsKKwkJcmMgPSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoZGRldik7CisJCWlmIChyYykgeworCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIzZXJyJWQiLCByYyk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXJjID0gcWV0aF9yZWFkX2NvbmZfZGF0YShjYXJkLCAodm9pZCAqKikgJnByY2QsICZsZW5ndGgpOworCWlmIChyYykgeworCQlRRVRIX0RCRl9NRVNTQUdFKDIsICIlcyBxZXRoX3JlYWRfY29uZl9kYXRhIHJldHVybmVkICVpXG4iLAorCQkJZGV2X25hbWUoJmNhcmQtPmdkZXYtPmRldiksIHJjKTsKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI1ZXJyJWQiLCByYyk7CisJCWdvdG8gb3V0X29mZmxpbmU7CisJfQorCXFldGhfY29uZmlndXJlX3VuaXRhZGRyKGNhcmQsIHByY2QpOworCXFldGhfY29uZmlndXJlX2Jsa3RfZGVmYXVsdChjYXJkLCBwcmNkKTsKKwlrZnJlZShwcmNkKTsKKworCXJjID0gcWRpb19nZXRfc3NxZF9kZXNjKGRkZXYsICZjYXJkLT5zc3FkKTsKKwlpZiAocmMpCisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNmVyciVkIiwgcmMpOworCitvdXRfb2ZmbGluZToKKwlpZiAoZGRldl9vZmZsaW5lID09IDEpCisJCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoZGRldik7CitvdXQ6CisJcmV0dXJuOworfQorCiBzdGF0aWMgaW50IHFldGhfcWRpb19lc3RhYmxpc2goc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKIHsKIAlzdHJ1Y3QgcWRpb19pbml0aWFsaXplIGluaXRfZGF0YTsKQEAgLTM5MDUsNiArMzk0MSw3IEBACiAKIAlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiaHJkc2V0dXAiKTsKIAlhdG9taWNfc2V0KCZjYXJkLT5mb3JjZV9hbGxvY19za2IsIDApOworCXFldGhfZ2V0X2NoYW5uZWxfcGF0aF9kZXNjKGNhcmQpOwogcmV0cnk6CiAJaWYgKHJldHJpZXMpCiAJCVFFVEhfREJGX01FU1NBR0UoMiwgIiVzIFJldHJ5aW5nIHRvIGRvIElEWCBhY3RpdmF0ZXMuXG4iLApAQCAtMzkzMyw2ICszOTcwLDcgQEAKIAkJZWxzZQogCQkJZ290byByZXRyeTsKIAl9CisJcWV0aF9kZXRlcm1pbmVfY2FwYWJpbGl0aWVzKGNhcmQpOwogCXFldGhfaW5pdF90b2tlbnMoY2FyZCk7CiAJcWV0aF9pbml0X2Z1bmNfbGV2ZWwoY2FyZCk7CiAJcmMgPSBxZXRoX2lkeF9hY3RpdmF0ZV9jaGFubmVsKCZjYXJkLT5yZWFkLCBxZXRoX2lkeF9yZWFkX2NiKTsKQEAgLTQyMDIsNDEgKzQyNDAsNiBAQAogCWNhcmQtPmRpc2NpcGxpbmUuY2N3Z2RyaXZlciA9IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIHFldGhfZGV0ZXJtaW5lX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWludCByYzsKLQlpbnQgbGVuZ3RoOwotCWNoYXIgKnByY2Q7Ci0KLQlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiZGV0Y2FwYWIiKTsKLQlyYyA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShDQVJEX0RERVYoY2FyZCkpOwotCWlmIChyYykgewotCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjNlcnIlZCIsIHJjKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0KLQlyYyA9IHFldGhfcmVhZF9jb25mX2RhdGEoY2FyZCwgKHZvaWQgKiopICZwcmNkLCAmbGVuZ3RoKTsKLQlpZiAocmMpIHsKLQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiJXMgcWV0aF9yZWFkX2NvbmZfZGF0YSByZXR1cm5lZCAlaVxuIiwKLQkJCWRldl9uYW1lKCZjYXJkLT5nZGV2LT5kZXYpLCByYyk7Ci0JCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNWVyciVkIiwgcmMpOwotCQlnb3RvIG91dF9vZmZsaW5lOwotCX0KLQlxZXRoX2NvbmZpZ3VyZV91bml0YWRkcihjYXJkLCBwcmNkKTsKLQlxZXRoX2NvbmZpZ3VyZV9ibGt0X2RlZmF1bHQoY2FyZCwgcHJjZCk7Ci0Ja2ZyZWUocHJjZCk7Ci0KLQlyYyA9IHFkaW9fZ2V0X3NzcWRfZGVzYyhDQVJEX0RERVYoY2FyZCksICZjYXJkLT5zc3FkKTsKLQlpZiAocmMpCi0JCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNmVyciVkIiwgcmMpOwotCi1vdXRfb2ZmbGluZToKLQljY3dfZGV2aWNlX3NldF9vZmZsaW5lKENBUkRfRERFVihjYXJkKSk7Ci1vdXQ6Ci0JcmV0dXJuOwotfQotCiBzdGF0aWMgaW50IHFldGhfY29yZV9wcm9iZV9kZXZpY2Uoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqZ2RldikKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKaW5kZXggN2E3YTFiNi4uYWRhMGZlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCkBAIC01NzMsMTMgKzU3MywxMyBAQAogCQljYXNlIElQQV9SQ19MMl9EVVBfTEFZRVIzX01BQzoKIAkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCiAJCQkJIk1BQyBhZGRyZXNzICVwTSBhbHJlYWR5IGV4aXN0c1xuIiwKLQkJCQljYXJkLT5kZXYtPmRldl9hZGRyKTsKKwkJCQljbWQtPmRhdGEuc2V0ZGVsbWFjLm1hYyk7CiAJCQlicmVhazsKIAkJY2FzZSBJUEFfUkNfTDJfTUFDX05PVF9BVVRIX0JZX0hZUDoKIAkJY2FzZSBJUEFfUkNfTDJfTUFDX05PVF9BVVRIX0JZX0FEUDoKIAkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCiAJCQkJIk1BQyBhZGRyZXNzICVwTSBpcyBub3QgYXV0aG9yaXplZFxuIiwKLQkJCQljYXJkLT5kZXYtPmRldl9hZGRyKTsKKwkJCQljbWQtPmRhdGEuc2V0ZGVsbWFjLm1hYyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwpAQCAtODMxLDEyICs4MzEsMTQgQEAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCi1zdGF0aWMgaW50IHFldGhfbDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX3FldGhfbDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7CiAJaW50IHJjID0gMDsKIAogCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJxZXRob3BlbiIpOworCWlmIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1VQKQorCQlyZXR1cm4gcmM7CiAJaWYgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfU09GVFNFVFVQKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtODU3LDYgKzg1OSwxOCBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBxZXRoX2wyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OworCisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNSwgInFldGhvcGVfIik7CisJaWYgKHFldGhfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkgeworCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAzLCAib3BlblJFQyIpOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKwlyZXR1cm4gX19xZXRoX2wyX29wZW4oZGV2KTsKK30KKwogc3RhdGljIGludCBxZXRoX2wyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OwpAQCAtMTA0Niw3ICsxMDYwLDcgQEAKIAlpZiAocmVjb3Zlcl9mbGFnID09IENBUkRfU1RBVEVfUkVDT1ZFUikgewogCQlpZiAocmVjb3ZlcnlfbW9kZSAmJgogCQkgICAgY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX09TTikgewotCQkJcWV0aF9sMl9vcGVuKGNhcmQtPmRldik7CisJCQlfX3FldGhfbDJfb3BlbihjYXJkLT5kZXYpOwogCQl9IGVsc2UgewogCQkJcnRubF9sb2NrKCk7CiAJCQlkZXZfb3BlbihjYXJkLT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKaW5kZXggZTIyN2U0Ni4uZDA5YjBjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCkBAIC0yOTk4LDcgKzI5OTgsOSBAQAogCSAqLwogCWlmIChpcGgtPnByb3RvY29sID09IElQUFJPVE9fVURQKQogCQloZHItPmhkci5sMy5leHRfZmxhZ3MgfD0gUUVUSF9IRFJfRVhUX1VEUDsKLQloZHItPmhkci5sMy5leHRfZmxhZ3MgfD0gUUVUSF9IRFJfRVhUX0NTVU1fVFJBTlNQX1JFUTsKKwloZHItPmhkci5sMy5leHRfZmxhZ3MgfD0gUUVUSF9IRFJfRVhUX0NTVU1fVFJBTlNQX1JFUSB8CisJCVFFVEhfSERSX0VYVF9DU1VNX0hEUl9SRVE7CisJaXBoLT5jaGVjayA9IDA7CiAJaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpCiAJCWNhcmQtPnBlcmZfc3RhdHMudHhfY3N1bSsrOwogfQpAQCAtMzI0MCwxMiArMzI0MiwxNCBAQAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKLXN0YXRpYyBpbnQgcWV0aF9sM19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fcWV0aF9sM19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKIAlpbnQgcmMgPSAwOwogCiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgInFldGhvcGVuIik7CisJaWYgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfVVApCisJCXJldHVybiByYzsKIAlpZiAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9TT0ZUU0VUVVApCiAJCXJldHVybiAtRU5PREVWOwogCWNhcmQtPmRhdGEuc3RhdGUgPSBDSF9TVEFURV9VUDsKQEAgLTMyNjAsNiArMzI2NCwxOCBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBxZXRoX2wzX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OworCisJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNSwgInFldGhvcGVfIik7CisJaWYgKHFldGhfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkgeworCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAzLCAib3BlblJFQyIpOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKwlyZXR1cm4gX19xZXRoX2wzX29wZW4oZGV2KTsKK30KKwogc3RhdGljIGludCBxZXRoX2wzX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OwpAQCAtMzU2NCw3ICszNTgwLDcgQEAKIAkJbmV0aWZfY2Fycmllcl9vZmYoY2FyZC0+ZGV2KTsKIAlpZiAocmVjb3Zlcl9mbGFnID09IENBUkRfU1RBVEVfUkVDT1ZFUikgewogCQlpZiAocmVjb3ZlcnlfbW9kZSkKLQkJCXFldGhfbDNfb3BlbihjYXJkLT5kZXYpOworCQkJX19xZXRoX2wzX29wZW4oY2FyZC0+ZGV2KTsKIAkJZWxzZSB7CiAJCQlydG5sX2xvY2soKTsKIAkJCWRldl9vcGVuKGNhcmQtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKaW5kZXggNjVlMWNmMS4uMjA3YjdkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYwpAQCAtNjAsNyArNjAsNyBAQAogc3RhdGljIGludCBzbXNnX3BhdGhfcGVuZGluZyhzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCB1OCBpcHZtaWRbOF0sCiAJCQkgICAgIHU4IGlwdXNlclsxNl0pCiB7Ci0JaWYgKHN0cm5jbXAoaXB2bWlkLCAiKk1TRyAgICAiLCBzaXplb2YoaXB2bWlkKSkgIT0gMCkKKwlpZiAoc3RybmNtcChpcHZtaWQsICIqTVNHICAgICIsIDgpICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCS8qIFBhdGggcGVuZGluZyBmcm9tICpNU0cuICovCiAJcmV0dXJuIGl1Y3ZfcGF0aF9hY2NlcHQocGF0aCwgJnNtc2dfaGFuZGxlciwgIlNNU0dJVUNWICAgICAgICAiLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyLmggYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zci5oCmluZGV4IDQ3NWMzMWEuLjc3YjI2ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyLmgKKysrIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3IuaApAQCAtMiw3ICsyLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqICAgICAgICBPLlMgICA6IExpbnV4CiAqKiAgIEZJTEUgTkFNRSAgOiBhcmNtc3IuaAotKiogICAgICAgIEJZICAgIDogRXJpY2ggQ2hlbgorKiogICAgICAgIEJZICAgIDogTmljayBDaGVuZwogKiogICBEZXNjcmlwdGlvbjogU0NTSSBSQUlEIERldmljZSBEcml2ZXIgZm9yCiAqKiAgICAgICAgICAgICAgICBBUkVDQSBSQUlEIEhvc3QgYWRhcHRlcgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDYsOCArNDYsMTIgQEAKIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlOwogLypUaGUgbGltaXQgb2Ygb3V0c3RhbmRpbmcgc2NzaSBjb21tYW5kIHRoYXQgZmlybXdhcmUgY2FuIGhhbmRsZSovCiAjZGVmaW5lIEFSQ01TUl9NQVhfT1VUU1RBTkRJTkdfQ01ECQkJCQkJMjU2Ci0jZGVmaW5lIEFSQ01TUl9NQVhfRlJFRUNDQl9OVU0JCQkJCQkJMzIwCi0jZGVmaW5lIEFSQ01TUl9EUklWRVJfVkVSU0lPTgkJICAgICAiRHJpdmVyIFZlcnNpb24gMS4yMC4wMC4xNSAyMDEwLzAyLzAyIgorI2lmZGVmIENPTkZJR19YRU4KKwkjZGVmaW5lIEFSQ01TUl9NQVhfRlJFRUNDQl9OVU0JMTYwCisjZWxzZQorCSNkZWZpbmUgQVJDTVNSX01BWF9GUkVFQ0NCX05VTQkzMjAKKyNlbmRpZgorI2RlZmluZSBBUkNNU1JfRFJJVkVSX1ZFUlNJT04JCSAgICAgIkRyaXZlciBWZXJzaW9uIDEuMjAuMDAuMTUgMjAxMC8wOC8wNSIKICNkZWZpbmUgQVJDTVNSX1NDU0lfSU5JVElBVE9SX0lECQkJCQkJMjU1CiAjZGVmaW5lIEFSQ01TUl9NQVhfWEZFUl9TRUNUT1JTCQkJCQkJCTUxMgogI2RlZmluZSBBUkNNU1JfTUFYX1hGRVJfU0VDVE9SU19CCQkJCQkJNDA5NgpAQCAtNjAsNyArNjQsNiBAQAogI2RlZmluZSBBUkNNU1JfTUFYX0hCQl9QT1NUUVVFVUUJCQkJCQkyNjQKICNkZWZpbmUgQVJDTVNSX01BWF9YRkVSX0xFTgkJCQkJCQkweDI2MDAwIC8qIDE1MksgKi8KICNkZWZpbmUgQVJDTVNSX0NEQl9TR19QQUdFX0xFTkdUSAkJCQkJCTI1NiAKLSNkZWZpbmUgU0NTSV9DTURfQVJFQ0FfU1BFQ0lGSUMJCQkJCQkweEUxCiAjaWZuZGVmIFBDSV9ERVZJQ0VfSURfQVJFQ0FfMTg4MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSRUNBXzE4ODAgMHgxODgwCiAgI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9hdHRyLmMgYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9hdHRyLmMKaW5kZXggYTRlMDRjNS4uYWNkYWUzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2F0dHIuYwpAQCAtMiw3ICsyLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqICAgICAgICBPLlMgICA6IExpbnV4CiAqKiAgIEZJTEUgTkFNRSAgOiBhcmNtc3JfYXR0ci5jCi0qKiAgICAgICAgQlkgICAgOiBFcmljaCBDaGVuCisqKiAgICAgICAgQlkgICAgOiBOaWNrIENoZW5nCiAqKiAgIERlc2NyaXB0aW9uOiBhdHRyaWJ1dGVzIGV4cG9ydGVkIHRvIHN5c2ZzIGFuZCBkZXZpY2UgaG9zdAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiogQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwNSwgQXJlY2EgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBBbGwgcmlnaHRzIHJlc2VydmVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9oYmEuYyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jCmluZGV4IDFjYWRjZDYuLjk4NGJkNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jCkBAIC0yLDcgKzIsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiogICAgICAgIE8uUyAgIDogTGludXgKICoqICAgRklMRSBOQU1FICA6IGFyY21zcl9oYmEuYwotKiogICAgICAgIEJZICAgIDogRXJpY2ggQ2hlbgorKiogICAgICAgIEJZICAgIDogTmljayBDaGVuZwogKiogICBEZXNjcmlwdGlvbjogU0NTSSBSQUlEIERldmljZSBEcml2ZXIgZm9yCiAqKiAgICAgICAgICAgICAgICBBUkVDQSBSQUlEIEhvc3QgYWRhcHRlcgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzYsNyArNzYsNyBAQAogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogTU9EVUxFX1ZFUlNJT04oQVJDTVNSX0RSSVZFUl9WRVJTSU9OKTsKIHN0YXRpYyBpbnQgc2xlZXB0aW1lID0gMTA7Ci1zdGF0aWMgaW50IHJldHJ5Y291bnQgPSAzMDsKK3N0YXRpYyBpbnQgcmV0cnljb3VudCA9IDEyOwogd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xOwogc3RhdGljIGludCBhcmNtc3JfaW9wX21lc3NhZ2VfeGZlcihzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiLAogCQkJCQlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwpAQCAtMTg3LDcgKzE4Nyw2IEBACiAJCWlmIChpc2xlZXAgPiAwKSB7CiAJCQltc2xlZXAoaXNsZWVwKjEwMDApOwogCQl9Ci0JCXByaW50ayhLRVJOX05PVElDRSAid2FrZS11cFxuIik7CiAJCXJldHVybiAwOwogfQogCkBAIC05MjEsNyArOTIwLDYgQEAKIH0KIAogc3RhdGljIHZvaWQgYXJjbXNyX2RyYWluX2RvbmVxdWV1ZShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiLCBzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jayAqcENDQiwgYm9vbCBlcnJvcikKLQogewogCWludCBpZCwgbHVuOwogCWlmICgocENDQi0+YWNiICE9IGFjYikgfHwgKHBDQ0ItPnN0YXJ0ZG9uZSAhPSBBUkNNU1JfQ0NCX1NUQVJUKSkgewpAQCAtOTQ4LDcgKzk0Niw3IEBACiAJCQkJLCBwQ0NCLT5zdGFydGRvbmUKIAkJCQksIGF0b21pY19yZWFkKCZhY2ItPmNjYm91dHN0YW5kaW5nY291bnQpKTsKIAkJICByZXR1cm47Ci0JCX0KKwl9CiAJYXJjbXNyX3JlcG9ydF9jY2Jfc3RhdGUoYWNiLCBwQ0NCLCBlcnJvcik7CiB9CiAKQEAgLTk4MSw3ICs5NzksNyBAQAogCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9COiB7CiAJCXN0cnVjdCBNZXNzYWdlVW5pdF9CICpyZWcgPSBhY2ItPnBtdUI7CiAJCS8qY2xlYXIgYWxsIG91dGJvdW5kIHBvc3RlZCBRKi8KLQkJd3JpdGVsKEFSQ01TUl9ET09SQkVMTF9JTlRfQ0xFQVJfUEFUVEVSTiwgJnJlZy0+aW9wMmRydl9kb29yYmVsbCk7IC8qIGNsZWFyIGRvb3JiZWxsIGludGVycnVwdCAqLworCQl3cml0ZWwoQVJDTVNSX0RPT1JCRUxMX0lOVF9DTEVBUl9QQVRURVJOLCByZWctPmlvcDJkcnZfZG9vcmJlbGwpOyAvKiBjbGVhciBkb29yYmVsbCBpbnRlcnJ1cHQgKi8KIAkJZm9yIChpID0gMDsgaSA8IEFSQ01TUl9NQVhfSEJCX1BPU1RRVUVVRTsgaSsrKSB7CiAJCQlpZiAoKGZsYWdfY2NiID0gcmVhZGwoJnJlZy0+ZG9uZV9xYnVmZmVyW2ldKSkgIT0gMCkgewogCQkJCXdyaXRlbCgwLCAmcmVnLT5kb25lX3FidWZmZXJbaV0pOwpAQCAtMTUxMSw3ICsxNTA5LDYgQEAKIAkJYXJjbXNyX2RyYWluX2RvbmVxdWV1ZShhY2IsIHBDQ0IsIGVycm9yKTsKIAl9CiB9Ci0KIHN0YXRpYyB2b2lkIGFyY21zcl9oYmJfcG9zdHF1ZXVlX2lzcihzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQogewogCXVpbnQzMl90IGluZGV4OwpAQCAtMjEwNiwxMCArMjEwMyw2IEBACiAJaWYgKGF0b21pY19yZWFkKCZhY2ItPmNjYm91dHN0YW5kaW5nY291bnQpID49CiAJCQlBUkNNU1JfTUFYX09VVFNUQU5ESU5HX0NNRCkKIAkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7Ci0JaWYgKChzY3NpY21kID09IFNDU0lfQ01EX0FSRUNBX1NQRUNJRklDKSkgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJlY2VpdmVpbmcgU0NTSV9DTURfQVJFQ0FfU1BFQ0lGSUMgY29tbWFuZC4uXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQogCWNjYiA9IGFyY21zcl9nZXRfZnJlZWNjYihhY2IpOwogCWlmICghY2NiKQogCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKQEAgLTIzOTMsNiArMjM4Niw3IEBACiAJaW50IGluZGV4LCBydG47CiAJYm9vbCBlcnJvcjsKIAlwb2xsaW5nX2hiYl9jY2JfcmV0cnk6CisKIAlwb2xsX2NvdW50Kys7CiAJLyogY2xlYXIgZG9vcmJlbGwgaW50ZXJydXB0ICovCiAJd3JpdGVsKEFSQ01TUl9ET09SQkVMTF9JTlRfQ0xFQVJfUEFUVEVSTiwgcmVnLT5pb3AyZHJ2X2Rvb3JiZWxsKTsKQEAgLTI2NjMsNiArMjY1Nyw3IEBACiB7CiAJc3RydWN0IE1lc3NhZ2VVbml0X0EgX19pb21lbSAqcmVnID0gYWNiLT5wbXVBOwogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pID09IDApIHx8ICgoYWNiLT5hY2JfZmxhZ3MgJiBBQ0JfRl9CVVNfUkVTRVQpICE9IDAgKSB8fCAoKGFjYi0+YWNiX2ZsYWdzICYgQUNCX0ZfQUJPUlQpICE9IDAgKSl7CisJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2ICogSFopKTsKIAkJcmV0dXJuOwogCX0gZWxzZSB7CiAJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKQEAgLTI2NzAsOCArMjY2NSwxMCBAQAogCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKIAkJfQogCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikpOwotCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYWNiLT5ycV9tYXBfdG9rZW4pKQorCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYWNiLT5ycV9tYXBfdG9rZW4pKSB7CisJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCQlyZXR1cm47CisJCX0KIAkJd3JpdGVsKEFSQ01TUl9JTkJPVU5EX01FU0cwX0dFVF9DT05GSUcsICZyZWctPmluYm91bmRfbXNnYWRkcjApOwogCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJfQpAQCAtMjY4MiwxNSArMjY3OSwxOCBAQAogewogCXN0cnVjdCBNZXNzYWdlVW5pdF9CIF9faW9tZW0gKnJlZyA9IGFjYi0+cG11QjsKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSA9PSAwKSB8fCAoKGFjYi0+YWNiX2ZsYWdzICYgQUNCX0ZfQlVTX1JFU0VUKSAhPSAwICkgfHwgKChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0FCT1JUKSAhPSAwICkpeworCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCXJldHVybjsKIAl9IGVsc2UgewogCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7CiAJCWlmIChhdG9taWNfcmVhZCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlKSA9PSBhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pKSB7Ci0JCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwxNik7CisJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwogCQl9CiAJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSk7Ci0JCWlmKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjYi0+cnFfbWFwX3Rva2VuKSkKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjYi0+cnFfbWFwX3Rva2VuKSkgeworCQkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCQkJcmV0dXJuOworCQl9CiAJCXdyaXRlbChBUkNNU1JfTUVTU0FHRV9HRVRfQ09ORklHLCByZWctPmRydjJpb3BfZG9vcmJlbGwpOwogCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJfQpAQCAtMjcwMSw2ICsyNzAxLDcgQEAKIHsKIAlzdHJ1Y3QgTWVzc2FnZVVuaXRfQyBfX2lvbWVtICpyZWcgPSBhY2ItPnBtdUM7CiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikgPT0gMCkgfHwgKChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0JVU19SRVNFVCkgIT0gMCkgfHwgKChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0FCT1JUKSAhPSAwKSkgeworCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCXJldHVybjsKIAl9IGVsc2UgewogCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7CkBAIC0yNzA4LDggKzI3MDksMTAgQEAKIAkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7CiAJCX0KIAkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCBhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pKTsKLQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjYi0+cnFfbWFwX3Rva2VuKSkKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjYi0+cnFfbWFwX3Rva2VuKSkgeworCQkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCQkJcmV0dXJuOworCQl9CiAJCXdyaXRlbChBUkNNU1JfSU5CT1VORF9NRVNHMF9HRVRfQ09ORklHLCAmcmVnLT5pbmJvdW5kX21zZ2FkZHIwKTsKIAkJd3JpdGVsKEFSQ01TUl9IQkNNVV9EUlYySU9QX01FU1NBR0VfQ01EX0RPTkUsICZyZWctPmluYm91bmRfZG9vcmJlbGwpOwogCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CkBAIC0yODk3LDYgKzI5MDAsOCBAQAogCXVpbnQzMl90IGludG1hc2tfb3JnOwogCXVpbnQ4X3QgcnRudmFsID0gMHgwMDsKIAlpbnQgaSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCWlmIChhdG9taWNfcmVhZCgmYWNiLT5jY2JvdXRzdGFuZGluZ2NvdW50KSAhPSAwKSB7CiAJCS8qIGRpc2FibGUgYWxsIG91dGJvdW5kIGludGVycnVwdCAqLwogCQlpbnRtYXNrX29yZyA9IGFyY21zcl9kaXNhYmxlX291dGJvdW5kX2ludHMoYWNiKTsKQEAgLTI5MDcsNyArMjkxMiwxMiBAQAogCQlmb3IgKGkgPSAwOyBpIDwgQVJDTVNSX01BWF9GUkVFQ0NCX05VTTsgaSsrKSB7CiAJCQljY2IgPSBhY2ItPnBjY2JfcG9vbFtpXTsKIAkJCWlmIChjY2ItPnN0YXJ0ZG9uZSA9PSBBUkNNU1JfQ0NCX1NUQVJUKSB7Ci0JCQkJYXJjbXNyX2NjYl9jb21wbGV0ZShjY2IpOworCQkJCXNjc2lfZG1hX3VubWFwKGNjYi0+cGNtZCk7CisJCQkJY2NiLT5zdGFydGRvbmUgPSBBUkNNU1JfQ0NCX0RPTkU7CisJCQkJY2NiLT5jY2JfZmxhZ3MgPSAwOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZhY2ItPmNjYmxpc3RfbG9jaywgZmxhZ3MpOworCQkJCWxpc3RfYWRkX3RhaWwoJmNjYi0+bGlzdCwgJmFjYi0+Y2NiX2ZyZWVfbGlzdCk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNiLT5jY2JsaXN0X2xvY2ssIGZsYWdzKTsKIAkJCX0KIAkJfQogCQlhdG9taWNfc2V0KCZhY2ItPmNjYm91dHN0YW5kaW5nY291bnQsIDApOwpAQCAtMjkyMCw4ICsyOTMwLDcgQEAKIAogc3RhdGljIGludCBhcmNtc3JfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKLQlzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiID0KLQkJKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICopY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2I7CiAJdWludDMyX3QgaW50bWFza19vcmcsIG91dGJvdW5kX2Rvb3JiZWxsOwogCWludCByZXRyeV9jb3VudCA9IDA7CiAJaW50IHJ0biA9IEZBSUxFRDsKQEAgLTI5NzEsMzEgKzI5ODAsMTYgQEAKIAkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwogCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOwogCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKLQkJCQlpbml0X3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOwotCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWik7Ci0JCQkJYWNiLT5ldGVybmFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWNiOwotCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5mdW5jdGlvbiA9ICZhcmNtc3JfcmVxdWVzdF9kZXZpY2VfbWFwOwotCQkJCWFkZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKKwkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCQkJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0JVU19SRVNFVDsKIAkJCQlydG4gPSBTVUNDRVNTOwogCQkJCXByaW50ayhLRVJOX0VSUiAiYXJjbXNyOiBzY3NpICBidXMgcmVzZXQgZWggcmV0dXJucyB3aXRoIHN1Y2Nlc3NcbiIpOwogCQkJfSBlbHNlIHsKIAkJCQlhY2ItPmFjYl9mbGFncyAmPSB+QUNCX0ZfQlVTX1JFU0VUOwotCQkJCWlmIChhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pID09IDApIHsKLQkJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKLQkJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7Ci0JCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKLQkJCQkJaW5pdF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWik7Ci0JCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFjYjsKLQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmZ1bmN0aW9uID0gJmFyY21zcl9yZXF1ZXN0X2RldmljZV9tYXA7Ci0JCQkJCWFkZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQl9IGVsc2UgewotCQkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwotCQkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKLQkJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwotCQkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWikpOwotCQkJCX0KKwkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOworCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOworCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKKwkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWikpOwogCQkJCXJ0biA9IFNVQ0NFU1M7CiAJCQl9CiAJCQlicmVhazsKQEAgLTMwMDcsMjEgKzMwMDEsMTAgQEAKIAkJCQlydG4gPSBGQUlMRUQ7CiAJCQl9IGVsc2UgewogCQkJCWFjYi0+YWNiX2ZsYWdzICY9IH5BQ0JfRl9CVVNfUkVTRVQ7Ci0JCQkJaWYgKGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikgPT0gMCkgewotCQkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwotCQkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKLQkJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwotCQkJCQlpbml0X3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOwotCQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2KkhaKTsKLQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWNiOwotCQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZnVuY3Rpb24gPSAmYXJjbXNyX3JlcXVlc3RfZGV2aWNlX21hcDsKLQkJCQkJYWRkX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7Ci0JCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOwotCQkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7Ci0JCQkJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2KkhaKSk7Ci0JCQkJfQorCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7CisJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7CisJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOworCQkJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2ICogSFopKTsKIAkJCQlydG4gPSBTVUNDRVNTOwogCQkJfQogCQkJYnJlYWs7CkBAIC0zMDY3LDMxICszMDUwLDE2IEBACiAJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKIAkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKIAkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7Ci0JCQkJaW5pdF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWik7Ci0JCQkJYWNiLT5ldGVybmFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWNiOwotCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5mdW5jdGlvbiA9ICZhcmNtc3JfcmVxdWVzdF9kZXZpY2VfbWFwOwotCQkJCWFkZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKKwkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCQkJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0JVU19SRVNFVDsKIAkJCQlydG4gPSBTVUNDRVNTOwogCQkJCXByaW50ayhLRVJOX0VSUiAiYXJjbXNyOiBzY3NpIGJ1cyByZXNldCBlaCByZXR1cm5zIHdpdGggc3VjY2Vzc1xuIik7CiAJCQl9IGVsc2UgewogCQkJCWFjYi0+YWNiX2ZsYWdzICY9IH5BQ0JfRl9CVVNfUkVTRVQ7Ci0JCQkJaWYgKGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikgPT0gMCkgewotCQkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwotCQkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKLQkJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwotCQkJCQlpbml0X3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOwotCQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2KkhaKTsKLQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWNiOwotCQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZnVuY3Rpb24gPSAmYXJjbXNyX3JlcXVlc3RfZGV2aWNlX21hcDsKLQkJCQkJYWRkX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7Ci0JCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOwotCQkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7Ci0JCQkJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2KkhaKSk7Ci0JCQkJfQorCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7CisJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7CisJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOworCQkJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2KkhaKSk7CiAJCQkJcnRuID0gU1VDQ0VTUzsKIAkJCX0KIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYwppbmRleCA1ODE1Y2JlLi45YTdhYWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYwpAQCAtNjQ2LDYgKzY0Niw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJbGlzdF9zcGxpY2VfaW5pdCgmc2hvc3QtPmVoX2NtZF9xLCAmZWhfd29ya19xKTsKKwlzaG9zdC0+aG9zdF9laF9zY2hlZHVsZWQgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJU0FTX0RQUklOVEsoIkVudGVyICVzXG4iLCBfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCmluZGV4IGIyYTgxNzAuLjllYWQwMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCkBAIC0yMTc2LDkgKzIxNzYsOSBAQAogCQkvKiBhZGp1c3QgaGJhX3F1ZXVlX2RlcHRoLCByZXBseV9mcmVlX3F1ZXVlX2RlcHRoLAogCQkgKiBhbmQgcXVldWVfc2l6ZQogCQkgKi8KLQkJaW9jLT5oYmFfcXVldWVfZGVwdGggLT0gcXVldWVfZGlmZjsKLQkJaW9jLT5yZXBseV9mcmVlX3F1ZXVlX2RlcHRoIC09IHF1ZXVlX2RpZmY7Ci0JCXF1ZXVlX3NpemUgLT0gcXVldWVfZGlmZjsKKwkJaW9jLT5oYmFfcXVldWVfZGVwdGggLT0gKHF1ZXVlX2RpZmYgLyAyKTsKKwkJaW9jLT5yZXBseV9mcmVlX3F1ZXVlX2RlcHRoIC09IChxdWV1ZV9kaWZmIC8gMik7CisJCXF1ZXVlX3NpemUgPSBmYWN0cy0+TWF4UmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGg7CiAJfQogCWlvYy0+cmVwbHlfcG9zdF9xdWV1ZV9kZXB0aCA9IHF1ZXVlX3NpemU7CiAKQEAgLTM5NDEsNiArMzk0MSw4IEBACiBzdGF0aWMgdm9pZAogX2Jhc2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCByZXNldF9waGFzZSkKIHsKKwltcHQyc2FzX3Njc2loX3Jlc2V0X2hhbmRsZXIoaW9jLCByZXNldF9waGFzZSk7CisJbXB0MnNhc19jdGxfcmVzZXRfaGFuZGxlcihpb2MsIHJlc2V0X3BoYXNlKTsKIAlzd2l0Y2ggKHJlc2V0X3BoYXNlKSB7CiAJY2FzZSBNUFQyX0lPQ19QUkVfUkVTRVQ6CiAJCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogIgpAQCAtMzk3MSw4ICszOTczLDYgQEAKIAkJICAgICJNUFQyX0lPQ19ET05FX1JFU0VUXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CiAJCWJyZWFrOwogCX0KLQltcHQyc2FzX3Njc2loX3Jlc2V0X2hhbmRsZXIoaW9jLCByZXNldF9waGFzZSk7Ci0JbXB0MnNhc19jdGxfcmVzZXRfaGFuZGxlcihpb2MsIHJlc2V0X3BoYXNlKTsKIH0KIAogLyoqCkBAIC00MDI2LDYgKzQwMjYsNyBAQAogewogCWludCByOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggcGVfY29tcGxldGUgPSBpb2MtPndhaXRfZm9yX3BvcnRfZW5hYmxlX3RvX2NvbXBsZXRlOwogCiAJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwpAQCAtNDA2OCw2ICs0MDY5LDE0IEBACiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCV9iYXNlX3Jlc2V0X2hhbmRsZXIoaW9jLCBNUFQyX0lPQ19BRlRFUl9SRVNFVCk7CisKKwkvKiBJZiB0aGlzIGhhcmQgcmVzZXQgaXMgY2FsbGVkIHdoaWxlIHBvcnQgZW5hYmxlIGlzIGFjdGl2ZSwgdGhlbgorCSAqIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBjYWxsIG1ha2VfaW9jX29wZXJhdGlvbmFsCisJICovCisJaWYgKHBlX2NvbXBsZXRlKSB7CisJCXIgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CiAJciA9IF9iYXNlX21ha2VfaW9jX29wZXJhdGlvbmFsKGlvYywgc2xlZXBfZmxhZyk7CiAJaWYgKCFyKQogCQlfYmFzZV9yZXNldF9oYW5kbGVyKGlvYywgTVBUMl9JT0NfRE9ORV9SRVNFVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKaW5kZXggZWRhMzQ3Yy4uNWRlZDNkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYwpAQCAtODE5LDcgKzgxOSw3IEBACiB9CiAKIC8qKgotICogbXB0c2NzaWhfZ2V0X3Njc2lfbG9va3VwIC0gcmV0dXJucyBzY21kIGVudHJ5CisgKiBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0IC0gcmV0dXJucyBzY21kIGVudHJ5CiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CiAgKgpAQCAtODMyLDYgKzgzMiwyOCBAQAogfQogCiAvKioKKyAqIF9zY3NpaF9zY3NpX2xvb2t1cF9nZXRfY2xlYXIgLSByZXR1cm5zIHNjbWQgZW50cnkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqCisgKiBSZXR1cm5zIHRoZSBzbWlkIHN0b3JlZCBzY21kIHBvaW50ZXIuCisgKiBUaGVuIHdpbGwgZGVyZWZyZW5jZSB0aGUgc3RvcmVkIHNjbWQgcG9pbnRlci4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NzaV9jbW5kICoKK19zY3NpaF9zY3NpX2xvb2t1cF9nZXRfY2xlYXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJc2NtZCA9IGlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLnNjbWQ7CisJaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0uc2NtZCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gc2NtZDsKK30KKworLyoqCiAgKiBfc2NzaWhfc2NzaV9sb29rdXBfZmluZF9ieV9zY21kIC0gc2NtZCBsb29rdXAKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKQEAgLTI5ODEsOSArMzAwMyw2IEBACiAJdTE2IGhhbmRsZTsKIAogCWZvciAoaSA9IDAgOyBpIDwgZXZlbnRfZGF0YS0+TnVtRW50cmllczsgaSsrKSB7Ci0JCWlmIChldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKLQkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUEhZU1RBVFVTX1ZBQ0FOVCkKLQkJCWNvbnRpbnVlOwogCQloYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5QSFlbaV0uQXR0YWNoZWREZXZIYW5kbGUpOwogCQlpZiAoIWhhbmRsZSkKIAkJCWNvbnRpbnVlOwpAQCAtMzIxMCw3ICszMjI5LDcgQEAKIAl1MTYgY291bnQgPSAwOwogCiAJZm9yIChzbWlkID0gMTsgc21pZCA8PSBpb2MtPnNjc2lpb19kZXB0aDsgc21pZCsrKSB7Ci0JCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0KGlvYywgc21pZCk7CisJCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0X2NsZWFyKGlvYywgc21pZCk7CiAJCWlmICghc2NtZCkKIAkJCWNvbnRpbnVlOwogCQljb3VudCsrOwpAQCAtMzgwNCw3ICszODIzLDcgQEAKIAl1MzIgcmVzcG9uc2VfY29kZSA9IDA7CiAKIAltcGlfcmVwbHkgPSBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKLQlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldChpb2MsIHNtaWQpOworCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0X2NsZWFyKGlvYywgc21pZCk7CiAJaWYgKHNjbWQgPT0gTlVMTCkKIAkJcmV0dXJuIDE7CiAKQEAgLTUwMDUsNiArNTAyNCwxMiBAQAogCQkgICAgIGV2ZW50X2RhdGEpOwogI2VuZGlmCiAKKwkvKiBJbiBNUEkgUmV2aXNpb24gSyAoMHhDKSwgdGhlIGludGVybmFsIGRldmljZSByZXNldCBjb21wbGV0ZSB3YXMKKwkgKiBpbXBsZW1lbnRlZCwgc28gYXZvaWQgc2V0dGluZyB0bV9idXN5IGZsYWcgZm9yIG9sZGVyIGZpcm13YXJlLgorCSAqLworCWlmICgoaW9jLT5mYWN0cy5IZWFkZXJWZXJzaW9uID4+IDgpIDwgMHhDKQorCQlyZXR1cm47CisKIAlpZiAoZXZlbnRfZGF0YS0+UmVhc29uQ29kZSAhPQogCSAgICBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19JTlRFUk5BTF9ERVZJQ0VfUkVTRVQgJiYKIAkgICBldmVudF9kYXRhLT5SZWFzb25Db2RlICE9CkBAIC01MDk5LDYgKzUxMjQsNyBAQAogICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAl1MTYgc21pZCwgaGFuZGxlOwogCXUzMiBsdW47CiAJc3RydWN0IE1QVDJTQVNfREVWSUNFICpzYXNfZGV2aWNlX3ByaXZfZGF0YTsKQEAgLTUxMDksMTIgKzUxMzUsMTcgQEAKIAlNcGkyRXZlbnREYXRhU2FzQnJvYWRjYXN0UHJpbWl0aXZlX3QgKmV2ZW50X2RhdGEgPSBmd19ldmVudC0+ZXZlbnRfZGF0YTsKICNlbmRpZgogCXUxNiBpb2Nfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHI7CisKIAlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImJyb2FkY2FzdCBwcmltYXRpdmU6ICIKIAkgICAgInBoeSBudW1iZXIoJWQpLCB3aWR0aCglZClcbiIsIGlvYy0+bmFtZSwgZXZlbnRfZGF0YS0+UGh5TnVtLAogCSAgICBldmVudF9kYXRhLT5Qb3J0V2lkdGgpKTsKIAlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGVudGVyXG4iLCBpb2MtPm5hbWUsCiAJICAgIF9fZnVuY19fKSk7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJaW9jLT5icm9hZGNhc3RfYWVuX2J1c3kgPSAwOwogCXRlcm1pbmF0aW9uX2NvdW50ID0gMDsKIAlxdWVyeV9jb3VudCA9IDA7CiAJbXBpX3JlcGx5ID0gaW9jLT50bV9jbWRzLnJlcGx5OwpAQCAtNTEyMiw3ICs1MTUzLDggQEAKIAkJc2NtZCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9nZXQoaW9jLCBzbWlkKTsKIAkJaWYgKCFzY21kKQogCQkJY29udGludWU7Ci0JCXNhc19kZXZpY2VfcHJpdl9kYXRhID0gc2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwkJc2RldiA9IHNjbWQtPmRldmljZTsKKwkJc2FzX2RldmljZV9wcml2X2RhdGEgPSBzZGV2LT5ob3N0ZGF0YTsKIAkJaWYgKCFzYXNfZGV2aWNlX3ByaXZfZGF0YSB8fCAhc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQpCiAJCQljb250aW51ZTsKIAkJIC8qIHNraXAgaGlkZGVuIHJhaWQgY29tcG9uZW50cyAqLwpAQCAtNTEzOCw2ICs1MTcwLDcgQEAKIAkJbHVuID0gc2FzX2RldmljZV9wcml2X2RhdGEtPmx1bjsKIAkJcXVlcnlfY291bnQrKzsKIAorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAkJbXB0MnNhc19zY3NpaF9pc3N1ZV90bShpb2MsIGhhbmRsZSwgMCwgMCwgbHVuLAogCQkgICAgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVVFUllfVEFTSywgc21pZCwgMzAsIE5VTEwpOwogCQlpb2MtPnRtX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CkBAIC01MTQ3LDE0ICs1MTgwLDIwIEBACiAJCSAgICAobXBpX3JlcGx5LT5SZXNwb25zZUNvZGUgPT0KIAkJICAgICBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fU1VDQ0VFREVEIHx8CiAJCSAgICAgbXBpX3JlcGx5LT5SZXNwb25zZUNvZGUgPT0KLQkJICAgICBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfSU9fUVVFVUVEX09OX0lPQykpCisJCSAgICAgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX0lPX1FVRVVFRF9PTl9JT0MpKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJCQljb250aW51ZTsKLQotCQltcHQyc2FzX3Njc2loX2lzc3VlX3RtKGlvYywgaGFuZGxlLCAwLCAwLCBsdW4sCi0JCSAgICBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQlJUX1RBU0tfU0VULCAwLCAzMCwgTlVMTCk7CisJCX0KKwkJciA9IG1wdDJzYXNfc2NzaWhfaXNzdWVfdG0oaW9jLCBoYW5kbGUsIHNkZXYtPmNoYW5uZWwsIHNkZXYtPmlkLAorCQkgICAgc2Rldi0+bHVuLCBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQk9SVF9UQVNLLCBzbWlkLCAzMCwKKwkJICAgIHNjbWQpOworCQlpZiAociA9PSBGQUlMRUQpCisJCQlzZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsIHNkZXYsICJ0YXNrIGFib3J0OiBGQUlMRUQgIgorCQkJICAgICJzY21kKCVwKVxuIiwgc2NtZCk7CiAJCXRlcm1pbmF0aW9uX2NvdW50ICs9IGxlMzJfdG9fY3B1KG1waV9yZXBseS0+VGVybWluYXRpb25Db3VudCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAl9Ci0JaW9jLT5icm9hZGNhc3RfYWVuX2J1c3kgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCiAJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKIAkgICAgIiVzIC0gZXhpdCwgcXVlcnlfY291bnQgPSAlZCB0ZXJtaW5hdGlvbl9jb3VudCA9ICVkXG4iLApAQCAtNjYyNiw2ICs2NjY1LDcgQEAKIAkJZGVzdHJveV93b3JrcXVldWUod3EpOwogCiAJLyogcmVsZWFzZSBhbGwgdGhlIHZvbHVtZXMgKi8KKwlfc2NzaWhfaXJfc2h1dGRvd24oaW9jKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmFpZF9kZXZpY2UsIG5leHQsICZpb2MtPnJhaWRfZGV2aWNlX2xpc3QsCiAJICAgIGxpc3QpIHsKIAkJaWYgKHJhaWRfZGV2aWNlLT5zdGFyZ2V0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwppbmRleCA0NDU3OGI1Li5kM2U1OGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKQEAgLTE1NjEsNiArMTU2MSw3IEBACiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKIAlmY19wb3J0X3QgKmZjcG9ydCA9ICooZmNfcG9ydF90ICoqKXJwb3J0LT5kZF9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIWZjcG9ydCkKIAkJcmV0dXJuOwpAQCAtMTU3MywxMCArMTU3NCwxMCBAQAogCSAqIFRyYW5zcG9ydCBoYXMgZWZmZWN0aXZlbHkgJ2RlbGV0ZWQnIHRoZSBycG9ydCwgY2xlYXIKIAkgKiBhbGwgbG9jYWwgcmVmZXJlbmNlcy4KIAkgKi8KLQlzcGluX2xvY2tfaXJxKGhvc3QtPmhvc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJZmNwb3J0LT5ycG9ydCA9IGZjcG9ydC0+ZHJwb3J0ID0gTlVMTDsKIAkqKChmY19wb3J0X3QgKiopcnBvcnQtPmRkX2RhdGEpID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHRlc3RfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZmY3BvcnQtPnZoYS0+ZHBjX2ZsYWdzKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKaW5kZXggZjk0OGUxYS4uZDk0NzljMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCkBAIC0yNTA1LDExICsyNTA1LDEyIEBACiB7CiAJZmNfcG9ydF90ICpmY3BvcnQgPSBkYXRhOwogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnEoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCXJwb3J0ID0gZmNwb3J0LT5kcnBvcnQgPyBmY3BvcnQtPmRycG9ydDogZmNwb3J0LT5ycG9ydDsKIAlmY3BvcnQtPmRycG9ydCA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxKGZjcG9ydC0+dmhhLT5ob3N0LT5ob3N0X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCWlmIChycG9ydCkKIAkJZmNfcmVtb3RlX3BvcnRfZGVsZXRlKHJwb3J0KTsKIH0KQEAgLTI4NzksNiArMjg4MCw3IEBACiAJc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzIHJwb3J0X2lkczsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlxbGEyeDAwX3Jwb3J0X2RlbChmY3BvcnQpOwogCkBAIC0yODkzLDkgKzI4OTUsOSBAQAogCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBmYyByZW1vdGUgcG9ydCFcbiIpOwogCQlyZXR1cm47CiAJfQotCXNwaW5fbG9ja19pcnEoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCSooKGZjX3BvcnRfdCAqKilycG9ydC0+ZGRfZGF0YSkgPSBmY3BvcnQ7Ci0Jc3Bpbl91bmxvY2tfaXJxKGZjcG9ydC0+dmhhLT5ob3N0LT5ob3N0X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJcnBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzID0gZmNwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwppbmRleCBjMTk0YzIzLi5mMjc3MjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwpAQCAtNTYyLDcgKzU2Miw2IEBACiAJfQogCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgIT0gRkNTX09OTElORSkgewogCQlpZiAoYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpID09IEZDU19ERVZJQ0VfREVBRCB8fAotCQkJYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpID09IEZDU19ERVZJQ0VfTE9TVCB8fAogCQkJYXRvbWljX3JlYWQoJmJhc2VfdmhhLT5sb29wX3N0YXRlKSA9PSBMT09QX0RFQUQpIHsKIAkJCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCQlnb3RvIHFjMjRfZmFpbF9jb21tYW5kOwpAQCAtMjUxMyw2ICsyNTEyLDcgQEAKIHsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwogCXNjc2lfcWxhX2hvc3RfdCAqYmFzZV92aGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghZmNwb3J0LT5ycG9ydCkKIAkJcmV0dXJuOwpAQCAtMjUyMCw5ICsyNTIwLDkgQEAKIAlycG9ydCA9IGZjcG9ydC0+cnBvcnQ7CiAJaWYgKGRlZmVyKSB7CiAJCWJhc2VfdmhhID0gcGNpX2dldF9kcnZkYXRhKHZoYS0+aHctPnBkZXYpOwotCQlzcGluX2xvY2tfaXJxKHZoYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUodmhhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJZmNwb3J0LT5kcnBvcnQgPSBycG9ydDsKLQkJc3Bpbl91bmxvY2tfaXJxKHZoYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh2aGEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCQlzZXRfYml0KEZDUE9SVF9VUERBVEVfTkVFREVELCAmYmFzZV92aGEtPmRwY19mbGFncyk7CiAJCXFsYTJ4eHhfd2FrZV9kcGMoYmFzZV92aGEpOwogCX0gZWxzZQpAQCAtMzI4MiwxMCArMzI4MiwxMCBAQAogCiAJc2V0X3VzZXJfbmljZShjdXJyZW50LCAtMjApOwogCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewogCQlERUJVRzMocHJpbnRrKCJxbGEyeDAwOiBEUEMgaGFuZGxlciBzbGVlcGluZ1xuIikpOwogCi0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCXNjaGVkdWxlKCk7CiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIApAQCAtMzQ1NCw3ICszNDU0LDkgQEAKIAkJcWxhMngwMF9kb19kcGNfYWxsX3ZwcyhiYXNlX3ZoYSk7CiAKIAkJaGEtPmRwY19hY3RpdmUgPSAwOworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCX0gLyogRW5kIG9mIHdoaWxlKDEpICovCisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCiAJREVCVUcocHJpbnRrKCJzY3NpKCVsZCk6IERQQyBoYW5kbGVyIGV4aXRpbmdcbiIsIGJhc2VfdmhhLT5ob3N0X25vKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCmluZGV4IDdiMzEwOTMuLmE2YjJkNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYwpAQCAtMTY3MSw3ICsxNjcxLDcgQEAKIAkJCSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLCB1bnNpZ25lZCBpbnQgbnVtLCBpbnQgd3JpdGUpCiB7CiAJaW50IHJldDsKLQl1bnNpZ25lZCBpbnQgYmxvY2ssIHJlc3QgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywgcmVzdCA9IDA7CiAJaW50ICgqZnVuYykoc3RydWN0IHNjc2lfY21uZCAqLCB1bnNpZ25lZCBjaGFyICosIGludCk7CiAKIAlmdW5jID0gd3JpdGUgPyBmZXRjaF90b19kZXZfYnVmZmVyIDogZmlsbF9mcm9tX2Rldl9idWZmZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NoL2ludGMvY2hpcC5jIGIvZHJpdmVycy9zaC9pbnRjL2NoaXAuYwppbmRleCBkZTg4NWEwLi5mMzNlMmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL2ludGMvY2hpcC5jCisrKyBiL2RyaXZlcnMvc2gvaW50Yy9jaGlwLmMKQEAgLTE3Myw3ICsxNzMsOCBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIFZBTElEKHgpICh4IHwgMHg4MCkKKyNkZWZpbmUgU0VOU0VfVkFMSURfRkxBRyAweDgwCisjZGVmaW5lIFZBTElEKHgpICh4IHwgU0VOU0VfVkFMSURfRkxBRykKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgaW50Y19pcnFfc2Vuc2VfdGFibGVbSVJRX1RZUEVfU0VOU0VfTUFTSyArIDFdID0gewogCVtJUlFfVFlQRV9FREdFX0ZBTExJTkddID0gVkFMSUQoMCksCkBAIC0yMDEsNyArMjAyLDggQEAKIAlpaHAgPSBpbnRjX2ZpbmRfaXJxKGQtPnNlbnNlLCBkLT5ucl9zZW5zZSwgaXJxKTsKIAlpZiAoaWhwKSB7CiAJCWFkZHIgPSBJTlRDX1JFRyhkLCBfSU5UQ19BRERSX0UoaWhwLT5oYW5kbGUpLCAwKTsKLQkJaW50Y19yZWdfZm5zW19JTlRDX0ZOKGlocC0+aGFuZGxlKV0oYWRkciwgaWhwLT5oYW5kbGUsIHZhbHVlKTsKKwkJaW50Y19yZWdfZm5zW19JTlRDX0ZOKGlocC0+aGFuZGxlKV0oYWRkciwgaWhwLT5oYW5kbGUsCisJCQkJCQkgICAgdmFsdWUgJiB+U0VOU0VfVkFMSURfRkxBRyk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpX3BjaS5jIGIvZHJpdmVycy9zcGkvcHhhMnh4X3NwaV9wY2kuYwppbmRleCAzNTFkOGEzLi4xOTc1MmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpX3BjaS5jCisrKyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGlfcGNpLmMKQEAgLTcsMTAgKzcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9weGEyeHhfc3BpLmg+CiAKLXN0cnVjdCBhd2Vzb21lX3N0cnVjdCB7CitzdHJ1Y3QgY2U0MTAwX2luZm8gewogCXN0cnVjdCBzc3BfZGV2aWNlIHNzcDsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaV9wZGV2OwotCXN0cnVjdCBweGEyeHhfc3BpX21hc3RlciBzcGlfcGRhdGE7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc3BpX3BkZXY7CiB9OwogCiBzdGF0aWMgREVGSU5FX01VVEVYKHNzcF9sb2NrKTsKQEAgLTUxLDIzICs1MCwxNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocHhhX3NzcF9mcmVlKTsKIAotc3RhdGljIHZvaWQgcGxhdF9kZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF3ZXNvbWVfc3RydWN0ICphcyA9IGNvbnRhaW5lcl9vZihkZXYsCi0JCQlzdHJ1Y3QgYXdlc29tZV9zdHJ1Y3QsIHNwaV9wZGV2LmRldik7Ci0KLQlvZl9kZXZpY2Vfbm9kZV9wdXQoJmFzLT5zcGlfcGRldi5kZXYpOwotfQotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjZTQxMDBfc3BpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJaW50IHJldDsKIAlyZXNvdXJjZV9zaXplX3QgcGh5c19iZWc7CiAJcmVzb3VyY2Vfc2l6ZV90IHBoeXNfbGVuOwotCXN0cnVjdCBhd2Vzb21lX3N0cnVjdCAqc3BpX2luZm87CisJc3RydWN0IGNlNDEwMF9pbmZvICpzcGlfaW5mbzsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBweGEyeHhfc3BpX21hc3RlciAqc3BpX3BkYXRhOworCXN0cnVjdCBweGEyeHhfc3BpX21hc3RlciBzcGlfcGRhdGE7CiAJc3RydWN0IHNzcF9kZXZpY2UgKnNzcDsKIAogCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CkBAIC04NCwzMyArNzUsMzAgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJweGEyeHgtc3BpIiwgZGV2LT5kZXZmbik7CiAJc3BpX2luZm8gPSBremFsbG9jKHNpemVvZigqc3BpX2luZm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNwaV9pbmZvKSB7CisJaWYgKCFwZGV2IHx8ICFzcGlfaW5mbyApIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfa3o7CisJCWdvdG8gZXJyX25vbWVtOwogCX0KLQlzc3AgPSAmc3BpX2luZm8tPnNzcDsKLQlwZGV2ID0gJnNwaV9pbmZvLT5zcGlfcGRldjsKLQlzcGlfcGRhdGEgPSAgJnNwaV9pbmZvLT5zcGlfcGRhdGE7CisJbWVtc2V0KCZzcGlfcGRhdGEsIDAsIHNpemVvZihzcGlfcGRhdGEpKTsKKwlzcGlfcGRhdGEubnVtX2NoaXBzZWxlY3QgPSBkZXYtPmRldmZuOwogCi0JcGRldi0+bmFtZSA9ICJweGEyeHgtc3BpIjsKLQlwZGV2LT5pZCA9IGRldi0+ZGV2Zm47CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsICZzcGlfcGRhdGEsIHNpemVvZihzcGlfcGRhdGEpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9ub21lbTsKKwogCXBkZXYtPmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7Ci0JcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAmc3BpX2luZm8tPnNwaV9wZGF0YTsKLQogI2lmZGVmIENPTkZJR19PRgogCXBkZXYtPmRldi5vZl9ub2RlID0gZGV2LT5kZXYub2Zfbm9kZTsKICNlbmRpZgotCXBkZXYtPmRldi5yZWxlYXNlID0gcGxhdF9kZXZfcmVsZWFzZTsKLQotCXNwaV9wZGF0YS0+bnVtX2NoaXBzZWxlY3QgPSBkZXYtPmRldmZuOwotCisJc3NwID0gJnNwaV9pbmZvLT5zc3A7CiAJc3NwLT5waHlzX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKIAlzc3AtPm1taW9fYmFzZSA9IGlvcmVtYXAocGh5c19iZWcsIHBoeXNfbGVuKTsKIAlpZiAoIXNzcC0+bW1pb19iYXNlKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpb3JlbWFwKCkgcmVnaXN0ZXJzXG4iKTsKIAkJcmV0ID0gLUVJTzsKLQkJZ290byBlcnJfcmVtYXA7CisJCWdvdG8gZXJyX25vbWVtOwogCX0KIAlzc3AtPmlycSA9IGRldi0+aXJxOwogCXNzcC0+cG9ydF9pZCA9IHBkZXYtPmlkOwpAQCAtMTIyLDcgKzExMCw3IEBACiAKIAlwY2lfc2V0X2RydmRhdGEoZGV2LCBzcGlfaW5mbyk7CiAKLQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9kZXZfYWRkOwogCkBAIC0xMzUsMjcgKzEyMywyMSBAQAogCW11dGV4X3VubG9jaygmc3NwX2xvY2spOwogCWlvdW5tYXAoc3NwLT5tbWlvX2Jhc2UpOwogCi1lcnJfcmVtYXA6Ci0Ja2ZyZWUoc3BpX2luZm8pOwotCi1lcnJfa3o6CitlcnJfbm9tZW06CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHBoeXNfYmVnLCBwaHlzX2xlbik7Ci0KKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCWtmcmVlKHNwaV9pbmZvKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgY2U0MTAwX3NwaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKLQlzdHJ1Y3QgYXdlc29tZV9zdHJ1Y3QgKnNwaV9pbmZvOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IGNlNDEwMF9pbmZvICpzcGlfaW5mbzsKIAlzdHJ1Y3Qgc3NwX2RldmljZSAqc3NwOwogCiAJc3BpX2luZm8gPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKLQogCXNzcCA9ICZzcGlfaW5mby0+c3NwOwotCXBkZXYgPSAmc3BpX2luZm8tPnNwaV9wZGV2OwotCi0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc3BpX2luZm8tPnNwaV9wZGV2KTsKIAogCWlvdW5tYXAoc3NwLT5tbWlvX2Jhc2UpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSwKQEAgLTE3MSw3ICsxNTMsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2U0MTAwX3NwaV9kZXZpY2VzW10gX19kZXZpbml0ZGF0YSA9IHsKLQogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDJlNmEpIH0sCiAJeyB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zaF9tc2lvZi5jIGIvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMKaW5kZXggNTZmNjBjOC4uMmM2NjVmY2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfc2hfbXNpb2YuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfc2hfbXNpb2YuYwpAQCAtNTA5LDkgKzUwOSwxMSBAQAogCWJ5dGVzX2RvbmUgPSAwOwogCiAJd2hpbGUgKGJ5dGVzX2RvbmUgPCB0LT5sZW4pIHsKKwkJdm9pZCAqcnhfYnVmID0gdC0+cnhfYnVmID8gdC0+cnhfYnVmICsgYnl0ZXNfZG9uZSA6IE5VTEw7CisJCWNvbnN0IHZvaWQgKnR4X2J1ZiA9IHQtPnR4X2J1ZiA/IHQtPnR4X2J1ZiArIGJ5dGVzX2RvbmUgOiBOVUxMOwogCQluID0gc2hfbXNpb2Zfc3BpX3R4cnhfb25jZShwLCB0eF9maWZvLCByeF9maWZvLAotCQkJCQkgICB0LT50eF9idWYgKyBieXRlc19kb25lLAotCQkJCQkgICB0LT5yeF9idWYgKyBieXRlc19kb25lLAorCQkJCQkgICB0eF9idWYsCisJCQkJCSAgIHJ4X2J1ZiwKIAkJCQkJICAgd29yZHMsIGJpdHMpOwogCQlpZiAobiA8IDApCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL0tjb25maWcgYi9kcml2ZXJzL3NzYi9LY29uZmlnCmluZGV4IDJkOGNjNDUuLjQyY2RhYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL0tjb25maWcKKysrIGIvZHJpdmVycy9zc2IvS2NvbmZpZwpAQCAtODIsNyArODIsNyBAQAogCiBjb25maWcgU1NCX1NJTEVOVAogCWJvb2wgIk5vIFNTQiBrZXJuZWwgbWVzc2FnZXMiCi0JZGVwZW5kcyBvbiBTU0IgJiYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFNTQiAmJiBFWFBFUlQKIAloZWxwCiAJICBUaGlzIG9wdGlvbiB0dXJucyBvZmYgYWxsIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZSBwcmludGtzLgogCSAgTm90ZSB0aGF0IHlvdSB3b24ndCBiZSBhYmxlIHRvIGlkZW50aWZ5IHByb2JsZW1zLCBvbmNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9wY21jaWEuYyBiL2RyaXZlcnMvc3NiL3BjbWNpYS5jCmluZGV4IGM3MzQ1ZGIuLmY4NTMzNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvc3NiL3BjbWNpYS5jCkBAIC03MzMsNyArNzMzLDcgQEAKIAogCS8qIEZldGNoIHRoZSB2ZW5kb3Igc3BlY2lmaWMgdHVwbGVzLiAqLwogCXJlcyA9IHBjbWNpYV9sb29wX3R1cGxlKGJ1cy0+aG9zdF9wY21jaWEsIFNTQl9QQ01DSUFfQ0lTLAotCQkJCXNzYl9wY21jaWFfZG9fZ2V0X2ludmFyaWFudHMsIHNwcm9tKTsKKwkJCQlzc2JfcGNtY2lhX2RvX2dldF9pbnZhcmlhbnRzLCBpdik7CiAJaWYgKChyZXMgPT0gMCkgfHwgKHJlcyA9PSAtRU5PU1BDKSkKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvbWlzY2Rydi9hcjNrcHMvYXIza3BzY29uZmlnLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvYXIza3BzL2FyM2twc2NvbmZpZy5jCmluZGV4IDBlMjk4ZGIuLjI5YjhhYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvbWlzY2Rydi9hcjNrcHMvYXIza3BzY29uZmlnLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2FyM2twcy9hcjNrcHNjb25maWcuYwpAQCAtMzYwLDggKzM2MCw4IEBACiAgICAgICAgIAlzdGF0dXMgPSAxOwogICAgICAgICAJZ290byBjb21wbGV0ZTsKICAgICAJfQotICAgICAgICBsZW4gPSAoZmlybXdhcmUtPnNpemUgPiBNQVhfQkRBRERSX0ZPUk1BVF9MRU5HVEgpPyBNQVhfQkRBRERSX0ZPUk1BVF9MRU5HVEg6IGZpcm13YXJlLT5zaXplOwotCW1lbWNweShjb25maWdfYmRhZGRyLCBmaXJtd2FyZS0+ZGF0YSxsZW4pOworCWxlbiA9IG1pbihmaXJtd2FyZS0+c2l6ZSwgTUFYX0JEQUREUl9GT1JNQVRfTEVOR1RIIC0gMSk7CisJbWVtY3B5KGNvbmZpZ19iZGFkZHIsIGZpcm13YXJlLT5kYXRhLCBsZW4pOwogCWNvbmZpZ19iZGFkZHJbbGVuXSA9ICdcMCc7CiAJd3JpdGVfYmRhZGRyKGhkZXYsY29uZmlnX2JkYWRkcixCREFERFJfVFlQRV9TVFJJTkcpOwogICAgICAgIAlBX1JFTEVBU0VfRklSTVdBUkUoZmlybXdhcmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xfbWFjODAyMTEuYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvc3lzL3dsX21hYzgwMjExLmMKaW5kZXggYmRkNjI5ZC4uY2Q4MzkyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xfbWFjODAyMTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bF9tYWM4MDIxMS5jCkBAIC0yMDksMTEgKzIwOSw4IEBACiAJc3RydWN0IHdsX2luZm8gKndsID0gaHctPnByaXY7CiAJQVNTRVJUKHdsKTsKIAlXTF9MT0NLKHdsKTsKLQl3bF9kb3duKHdsKTsKIAlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOwogCVdMX1VOTE9DSyh3bCk7Ci0KLQlyZXR1cm47CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTI0Niw3ICsyNDMsMTQgQEAKIHN0YXRpYyB2b2lkCiB3bF9vcHNfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlyZXR1cm47CisJc3RydWN0IHdsX2luZm8gKndsOworCisJd2wgPSBIV19UT19XTChodyk7CisKKwkvKiBwdXQgZHJpdmVyIGluIGRvd24gc3RhdGUgKi8KKwlXTF9MT0NLKHdsKTsKKwl3bF9kb3duKHdsKTsKKwlXTF9VTkxPQ0sod2wpOwogfQogCiBzdGF0aWMgaW50CkBAIC0yNTksOSArMjYzLDcgQEAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIE5MODAyMTFfQ0hBTl9IVDIwOgogCWNhc2UgTkw4MDIxMV9DSEFOX05PX0hUOgotCQlXTF9MT0NLKHdsKTsKIAkJZXJyID0gd2xjX3NldCh3bC0+d2xjLCBXTENfU0VUX0NIQU5ORUwsIGNoYW4tPmh3X3ZhbHVlKTsKLQkJV0xfVU5MT0NLKHdsKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTOgogCWNhc2UgTkw4MDIxMV9DSEFOX0hUNDBQTFVTOgpAQCAtMjgxLDYgKzI4Myw3IEBACiAJaW50IGVyciA9IDA7CiAJaW50IG5ld19pbnQ7CiAKKwlXTF9MT0NLKHdsKTsKIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9MSVNURU5fSU5URVJWQUwpIHsKIAkJV0xfTk9ORSgiJXM6IFNldHRpbmcgbGlzdGVuIGludGVydmFsIHRvICVkXG4iLAogCQkJX19mdW5jX18sIGNvbmYtPmxpc3Rlbl9pbnRlcnZhbCk7CkBAIC0zMzcsNiArMzQwLDcgQEAKIAl9CiAKICBjb25maWdfb3V0OgorCVdMX1VOTE9DSyh3bCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNDU1LDEzICs0NTksMjEgQEAKIAogc3RhdGljIHZvaWQgd2xfb3BzX3N3X3NjYW5fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CisJc3RydWN0IHdsX2luZm8gKndsID0gaHctPnByaXY7CiAJV0xfTk9ORSgiU2NhbiBTdGFydFxuIik7CisJV0xfTE9DSyh3bCk7CisJd2xjX3NjYW5fc3RhcnQod2wtPndsYyk7CisJV0xfVU5MT0NLKHdsKTsKIAlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIHdsX29wc19zd19zY2FuX2NvbXBsZXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogeworCXN0cnVjdCB3bF9pbmZvICp3bCA9IGh3LT5wcml2OwogCVdMX05PTkUoIlNjYW4gQ29tcGxldGVcbiIpOworCVdMX0xPQ0sod2wpOworCXdsY19zY2FuX3N0b3Aod2wtPndsYyk7CisJV0xfVU5MT0NLKHdsKTsKIAlyZXR1cm47CiB9CiAKQEAgLTc3OSw3ICs3OTEsNyBAQAogCXdsX2ZvdW5kKys7CiAJcmV0dXJuIHdsOwogCi0gZmFpbDoKK2ZhaWw6CiAJd2xfZnJlZSh3bCk7CiBmYWlsMToKIAlyZXR1cm4gTlVMTDsKQEAgLTEwOTAsNyArMTEwMiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBMSU5VWFNUQV9QUwogc3RhdGljIGludCB3bF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHdsX2luZm8gKndsOwpAQCAtMTEwNSwxMSArMTExNiwxMiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwkvKiBvbmx5IG5lZWQgdG8gZmxhZyBodyBpcyBkb3duIGZvciBwcm9wZXIgcmVzdW1lICovCiAJV0xfTE9DSyh3bCk7Ci0Jd2xfZG93bih3bCk7CiAJd2wtPnB1Yi0+aHdfdXAgPSBmYWxzZTsKIAlXTF9VTkxPQ0sod2wpOwotCXBjaV9zYXZlX3N0YXRlKHBkZXYsIHdsLT5wY2lfcHNzdGF0ZSk7CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcmV0dXJuIHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKIH0KQEAgLTExMzMsNyArMTE0NSw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYsIHdsLT5wY2lfcHNzdGF0ZSk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAoZXJyKQpAQCAtMTE0NSwxMyArMTE1NywxMiBAQAogCWlmICgodmFsICYgMHgwMDAwZmYwMCkgIT0gMCkKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCB2YWwgJiAweGZmZmYwMGZmKTsKIAotCVdMX0xPQ0sod2wpOwotCWVyciA9IHdsX3VwKHdsKTsKLQlXTF9VTkxPQ0sod2wpOwotCisJLyoKKwkqICBkb25lLiBkcml2ZXIgd2lsbCBiZSBwdXQgaW4gdXAgc3RhdGUKKwkqICBpbiB3bF9vcHNfYWRkX2ludGVyZmFjZSgpIGNhbGwuCisJKi8KIAlyZXR1cm4gZXJyOwogfQotI2VuZGlmCQkJCS8qIExJTlVYU1RBX1BTICovCiAKIHN0YXRpYyB2b2lkIHdsX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTExODQsMTQgKzExOTUsMTIgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHdsX3BjaV9kcml2ZXIgPSB7Ci0gLm5hbWUgID0gImJyY204MDIxMSIsCi0gLnByb2JlID0gd2xfcGNpX3Byb2JlLAotI2lmZGVmIExJTlVYU1RBX1BTCi0gLnN1c3BlbmQgPSB3bF9zdXNwZW5kLAotIC5yZXN1bWUgID0gd2xfcmVzdW1lLAotI2VuZGlmCQkJCS8qIExJTlVYU1RBX1BTICovCi0gLnJlbW92ZSAgID0gX19kZXZleGl0X3Aod2xfcmVtb3ZlKSwKLSAuaWRfdGFibGUgPSB3bF9pZF90YWJsZSwKKwkubmFtZSA9ICJicmNtODAyMTEiLAorCS5wcm9iZSA9IHdsX3BjaV9wcm9iZSwKKwkuc3VzcGVuZCA9IHdsX3N1c3BlbmQsCisJLnJlc3VtZSA9IHdsX3Jlc3VtZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aod2xfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSB3bF9pZF90YWJsZSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xjX21hYzgwMjExLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfbWFjODAyMTEuYwppbmRleCAxZDVkMDFhLi5lMzdlODA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfbWFjODAyMTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfbWFjODAyMTEuYwpAQCAtNTEyNiw3ICs1MTI2LDYgQEAKIAlmaWZvID0gcHJpbzJmaWZvW3ByaW9dOwogCiAJQVNTRVJUKCh1aW50KSBza2JfaGVhZHJvb20oc2R1KSA+PSBUWE9GRik7Ci0JQVNTRVJUKCEoc2R1LT5jbG9uZWQpKTsKIAlBU1NFUlQoIShzZHUtPm5leHQpKTsKIAlBU1NFUlQoIShzZHUtPnByZXYpKTsKIAlBU1NFUlQoZmlmbyA8IE5GSUZPKTsKQEAgLTg0NjIsMyArODQ2MSwxNiBAQAogCiAJa2ZyZWUocWkpOwogfQorCisvKgorICogRmxhZyAnc2NhbiBpbiBwcm9ncmVzcycgdG8gd2l0aG9sZCBkeW5hbWljIHBoeSBjYWxpYnJhdGlvbgorICovCit2b2lkIHdsY19zY2FuX3N0YXJ0KHN0cnVjdCB3bGNfaW5mbyAqd2xjKQoreworCXdsY19waHlfaG9sZF91cGQod2xjLT5iYW5kLT5waSwgUEhZX0hPTERfRk9SX1NDQU4sIHRydWUpOworfQorCit2b2lkIHdsY19zY2FuX3N0b3Aoc3RydWN0IHdsY19pbmZvICp3bGMpCit7CisJd2xjX3BoeV9ob2xkX3VwZCh3bGMtPmJhbmQtPnBpLCBQSFlfSE9MRF9GT1JfU0NBTiwgZmFsc2UpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xjX3B1Yi5oIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xjX3B1Yi5oCmluZGV4IDE0NmE2OTAuLmFmZjQxMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvc3lzL3dsY19wdWIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfcHViLmgKQEAgLTU3MCw2ICs1NzAsOCBAQAogZXh0ZXJuIHUxNiB3bGNfcmF0ZV9zaG1fb2Zmc2V0KHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB1OCByYXRlKTsKIGV4dGVybiB1MzIgd2xjX2dldF9yc3BlY19oaXN0b3J5KHN0cnVjdCB3bGNfYnNzY2ZnICpjZmcpOwogZXh0ZXJuIHUzMiB3bGNfZ2V0X2N1cnJlbnRfaGlnaGVzdF9yYXRlKHN0cnVjdCB3bGNfYnNzY2ZnICpjZmcpOworZXh0ZXJuIHZvaWQgd2xjX3NjYW5fc3RhcnQoc3RydWN0IHdsY19pbmZvICp3bGMpOworZXh0ZXJuIHZvaWQgd2xjX3NjYW5fc3RvcChzdHJ1Y3Qgd2xjX2luZm8gKndsYyk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IHdsY19pb3Zhcl9nZXR1aW50KHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBjb25zdCBjaGFyICpuYW1lLAogCQkJCSAgICB1aW50ICphcmcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcKaW5kZXggYWFkNDczMi4uMTUwMmQ4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZwpAQCAtNDM5LDYgKzQzOSw3IEBACiBjb25maWcgQ09NRURJX05JX0FUTUlPCiAJdHJpc3RhdGUgIk5JIEFULU1JTyBFIHNlcmllcyBJU0EtUE5QIGNhcmQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIElTQVBOUCAmJiBDT01FRElfTklfVElPICYmIENPTUVESV9OSV9DT01NT04KKwlzZWxlY3QgQ09NRURJXzgyNTUKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgQVQtTUlPIEUgc2VyaWVzIGNhcmRzCkBAIC0xMDQwLDYgKzEwNDEsOCBAQAogY29uZmlnIENPTUVESV9OSV9QQ0lNSU8KIAl0cmlzdGF0ZSAiTkkgUENJLU1JTy1FIHNlcmllcyBhbmQgTSBzZXJpZXMgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIENPTUVESV9OSV9USU8gJiYgQ09NRURJX05JX0NPTU1PTgorCXNlbGVjdCBDT01FRElfODI1NQorCXNlbGVjdCBDT01FRElfRkMKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgUENJLU1JTy1FIHNlcmllcyBhbmQgTSBzZXJpZXMKQEAgLTExNjQsNiArMTE2Nyw3IEBACiBjb25maWcgQ09NRURJX05JX01JT19DUwogCXRyaXN0YXRlICJOSSBEQVFDYXJkIEUgc2VyaWVzIFBDTUNJQSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ09NRURJX05JX1RJTyAmJiBDT01FRElfTklfQ09NTU9OCisJc2VsZWN0IENPTUVESV84MjU1CiAJc2VsZWN0IENPTUVESV9GQwogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KQEAgLTEyNjgsNyArMTI3Miw2IEBACiBjb25maWcgQ09NRURJX05JX1RJTwogCXRyaXN0YXRlICJOSSBnZW5lcmFsIHB1cnBvc2UgY291bnRlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ09NRURJX01JVEUKLQlzZWxlY3QgQ09NRURJXzgyNTUKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXJzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmMKaW5kZXggY2QyNWIyNC4uZmQyNzRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWl0ZS5jCkBAIC02MSw4ICs2MSw2IEBACiAjZGVmaW5lIFBDSV9EQVFfU0laRQkJNDA5NgogI2RlZmluZSBQQ0lfREFRX1NJWkVfNjYwWCAgICAgICA4MTkyCiAKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQogc3RydWN0IG1pdGVfc3RydWN0ICptaXRlX2RldmljZXM7CiBFWFBPUlRfU1lNQk9MKG1pdGVfZGV2aWNlcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NTI3LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjUyNy5jCmluZGV4IDE0ZTcxNmUuLjU0NzQxYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NTI3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1MjcuYwpAQCAtNTI3LDMgKzUyNyw3IEBACiAKIG1vZHVsZV9pbml0KGRyaXZlcl9uaTY1MjdfaW5pdF9tb2R1bGUpOwogbW9kdWxlX2V4aXQoZHJpdmVyX25pNjUyN19jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jCmluZGV4IDhiOGUyYWEuLjQwM2ZjMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYwpAQCAtODcxLDMgKzg3MSw3IEBACiAKIG1vZHVsZV9pbml0KGRyaXZlcl9uaV82NXh4X2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KGRyaXZlcl9uaV82NXh4X2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NjB4LmMKaW5kZXggNjYxMmIwOC4uY2EyYWVhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjYweC5jCkBAIC0xNDIxLDMgKzE0MjEsNyBAQAogCX07CiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jCmluZGV4IGU5ZjAzNGUuLmQ4ZDkxZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYwpAQCAtMzg0LDMgKzM4NCw3IEBACiAJbWl0ZV9saXN0X2RldmljZXMoKTsKIAlyZXR1cm4gLUVJTzsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYwppbmRleCA0ZDE4NjhkLi4wNzI4YzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYwpAQCAtNTc1LDcgKzU3NSw4IEBACiAJLyogZ3JhYiBvdXIgSVJRICovCiAJaWYgKGlycSkgewogCQlpc3JfZmxhZ3MgPSAwOwotCQlpZiAodGhpc2JvYXJkLT5idXN0eXBlID09IHBjaV9idXN0eXBlKQorCQlpZiAodGhpc2JvYXJkLT5idXN0eXBlID09IHBjaV9idXN0eXBlCisJCSAgICB8fCB0aGlzYm9hcmQtPmJ1c3R5cGUgPT0gcGNtY2lhX2J1c3R5cGUpCiAJCQlpc3JfZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CiAJCWlmIChyZXF1ZXN0X2lycShpcnEsIGxhYnBjX2ludGVycnVwdCwgaXNyX2ZsYWdzLAogCQkJCWRyaXZlcl9sYWJwYy5kcml2ZXJfbmFtZSwgZGV2KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCmluZGV4IDg0YTE1YzMuLjAwNWQyZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKQEAgLTEzNTQsMyArMTM1NCw3IEBACiAKIG1vZHVsZV9pbml0KGRyaXZlcl9wY2lkaW9faW5pdF9tb2R1bGUpOwogbW9kdWxlX2V4aXQoZHJpdmVyX3BjaWRpb19jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYwppbmRleCAyM2EzODEyLi45MTQ4YWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jCkBAIC0xODUzLDMgKzE4NTMsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jCmluZGV4IGIzZDA1ZmMuLjRmYjgwOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYwpAQCAtMzY4LDYgKzM2OCw3IEBACiAJCWJsa2Rldi0+Z2QtPmZpcnN0X21pbm9yID0gMDsKIAlibGtkZXYtPmdkLT5mb3BzID0gJmJsb2NrX29wczsKIAlibGtkZXYtPmdkLT5wcml2YXRlX2RhdGEgPSBibGtkZXY7CisJYmxrZGV2LT5nZC0+ZHJpdmVyZnNfZGV2ID0gJihibGtkZXYtPmRldmljZV9jdHgtPmRldmljZSk7CiAJc3ByaW50ZihibGtkZXYtPmdkLT5kaXNrX25hbWUsICJoZCVjIiwgJ2EnICsgZGV2bnVtKTsKIAogCWJsa3ZzY19kb19pbnF1aXJ5KGJsa2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjLmMKaW5kZXggZGY5Y2QxMy4uMGVkYmU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2MuYwpAQCAtMTI3OSw3ICsxMjc5LDcgQEAKIAkvKiBBU1NFUlQoZGV2aWNlKTsgKi8KIAogCXBhY2tldCA9IGt6YWxsb2MoTkVUVlNDX1BBQ0tFVF9TSVpFICogc2l6ZW9mKHVuc2lnbmVkIGNoYXIpLAotCQkJIEdGUF9LRVJORUwpOworCQkJIEdGUF9BVE9NSUMpOwogCWlmICghcGFja2V0KQogCQlyZXR1cm47CiAJYnVmZmVyID0gcGFja2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMKaW5kZXggMDE0N2I0MC4uYjQxYzk2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jCkBAIC0yMzYsNiArMjM2LDcgQEAKIAlpZiAoc3RhdHVzID09IDEpIHsKIAkJbmV0aWZfY2Fycmllcl9vbihuZXQpOwogCQluZXRpZl93YWtlX3F1ZXVlKG5ldCk7CisJCW5ldGlmX25vdGlmeV9wZWVycyhuZXQpOwogCX0gZWxzZSB7CiAJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldCk7CiAJCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKQEAgLTM1OCw3ICszNTksNiBAQAogCiAJLyogU2V0IGluaXRpYWwgc3RhdGUgKi8KIAluZXRpZl9jYXJyaWVyX29mZihuZXQpOwotCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKIAogCW5ldF9kZXZpY2VfY3R4ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAluZXRfZGV2aWNlX2N0eC0+ZGV2aWNlX2N0eCA9IGRldmljZV9jdHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc0NzZfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NDc2X2NvcmUuYwppbmRleCBkZWI2OGM4Li5iOGI1NGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc0NzZfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzQ3Nl9jb3JlLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAkvKiBDb3JyZXNwb25kcyB0byBWcmVmIC8gMl4oYml0cykgKi8KIAl1bnNpZ25lZCBpbnQgc2NhbGVfdXYgPSAoc3QtPmludF92cmVmX212ICogMTAwMCkgPj4gc3QtPmNoaXBfaW5mby0+Yml0czsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiVkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAzZFxuIiwgc2NhbGVfdXYgLyAxMDAwLCBzY2FsZV91diAlIDEwMDApOwogfQogc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbl9zY2FsZSwgU19JUlVHTywgYWQ3NDc2X3Nob3dfc2NhbGUsIE5VTEwsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc4ODdfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3ODg3X2NvcmUuYwppbmRleCA2ODU5MDg5Li41ZDg1ZWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc4ODdfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzg4N19jb3JlLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAkvKiBDb3JyZXNwb25kcyB0byBWcmVmIC8gMl4oYml0cykgKi8KIAl1bnNpZ25lZCBpbnQgc2NhbGVfdXYgPSAoc3QtPmludF92cmVmX212ICogMTAwMCkgPj4gc3QtPmNoaXBfaW5mby0+Yml0czsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiVkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAzZFxuIiwgc2NhbGVfdXYgLyAxMDAwLCBzY2FsZV91diAlIDEwMDApOwogfQogc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbl9zY2FsZSwgU19JUlVHTywgYWQ3ODg3X3Nob3dfc2NhbGUsIE5VTEwsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3OTl4X2NvcmUuYwppbmRleCA2MzA5ZDUyLi44OWNjZjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9jb3JlLmMKQEAgLTQzMiw3ICs0MzIsNyBAQAogCS8qIENvcnJlc3BvbmRzIHRvIFZyZWYgLyAyXihiaXRzKSAqLwogCXVuc2lnbmVkIGludCBzY2FsZV91diA9IChzdC0+aW50X3ZyZWZfbXYgKiAxMDAwKSA+PiBzdC0+Y2hpcF9pbmZvLT5iaXRzOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJWRcbiIsIHNjYWxlX3V2IC8gMTAwMCwgc2NhbGVfdXYgJSAxMDAwKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDNkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7CiB9CiAKIHN0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW5fc2NhbGUsIFNfSVJVR08sIGFkNzk5eF9zaG93X3NjYWxlLCBOVUxMLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL2FkNTQ0Ni5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvYWQ1NDQ2LmMKaW5kZXggZTMzODdjZC4uMGY4N2VjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvYWQ1NDQ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvYWQ1NDQ2LmMKQEAgLTg3LDcgKzg3LDcgQEAKIAkvKiBDb3JyZXNwb25kcyB0byBWcmVmIC8gMl4oYml0cykgKi8KIAl1bnNpZ25lZCBpbnQgc2NhbGVfdXYgPSAoc3QtPnZyZWZfbXYgKiAxMDAwKSA+PiBzdC0+Y2hpcF9pbmZvLT5iaXRzOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJWRcbiIsIHNjYWxlX3V2IC8gMTAwMCwgc2NhbGVfdXYgJSAxMDAwKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDNkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7CiB9CiBzdGF0aWMgSUlPX0RFVklDRV9BVFRSKG91dF9zY2FsZSwgU19JUlVHTywgYWQ1NDQ2X3Nob3dfc2NhbGUsIE5VTEwsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YyX2NvbnRyb2wuYyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjJfY29udHJvbC5jCmluZGV4IGUzOGU4OWQuLmUyZjZkNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjJfY29udHJvbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjJfY29udHJvbC5jCkBAIC04NzQsNyArODc0LDEwIEBACiAJCXNjX2FjY2Vzc1szXS5yZWdfYWRkciA9IDB4MTA5OwogCQlzY19hY2Nlc3NbM10ubWFzayA9IE1BU0s2OwogCQlzY19hY2Nlc3NbM10udmFsdWUgPSAweDAwOwotCQludW1fdmFsID0gNDsKKwkJc2NfYWNjZXNzWzRdLnJlZ19hZGRyID0gMHgxMDQ7CisJCXNjX2FjY2Vzc1s0XS52YWx1ZSA9IDB4M0M7CisJCXNjX2FjY2Vzc1s0XS5tYXNrID0gMHhmZjsKKwkJbnVtX3ZhbCA9IDU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvVE9ETy5saXJjX3ppbG9nIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvVE9ETy5saXJjX3ppbG9nCmluZGV4IDZhYTMxMmQuLjJkMDI2M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL1RPRE8ubGlyY196aWxvZworKysgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9UT0RPLmxpcmNfemlsb2cKQEAgLTEsMTMgKzEsMzcgQEAKLVRoZSBiaW5kaW5nIGJldHdlZW4gaGRwdnIgYW5kIGxpcmNfemlsb2cgaXMgY3VycmVudGx5IGRpc2FibGVkLAorMS4gQm90aCBpci1rYmQtaTJjIGFuZCBsaXJjX3ppbG9nIHByb3ZpZGUgc3VwcG9ydCBmb3IgUlggZXZlbnRzLgorVGhlICd0eF9vbmx5JyBsaXJjX3ppbG9nIG1vZHVsZSBwYXJhbWV0ZXIgd2lsbCBhbGxvdyBpci1rYmQtaTJjCithbmQgbGlyY196aWxvZyB0byBjb2V4aXN0IGluIHRoZSBrZXJuZWwsIGlmIHRoZSB1c2VyIHJlcXVpcmVzIHN1Y2ggYSBzZXQtdXAuCitIb3dldmVyIHRoZSBJUiB1bml0IHdpbGwgbm90IHdvcmsgd2VsbCB3aXRob3V0IGNvb3JkaW5hdGlvbiBiZXR3ZWVuIHRoZQordHdvIG1vZHVsZXMuICBBIHNoYXJlZCBtdXRleCwgZm9yIHRyYW5zY2VpdmVyIGFjY2VzcyBsb2NraW5nLCBuZWVkcyB0byBiZQorc3VwcGxpZWQgYnkgYnJpZGdlIGRyaXZlcnMsIGluIHN0cnVjdCBJUl9pMl9pbml0X2RhdGEsIHRvIGJvdGggaXIta2JkLWkyYworYW5kIGxpcmNfemlsb2csIGJlZm9yZSB0aGV5IHdpbGwgY29leGlzdCB1c2VmdWxseS4gIFRoaXMgc2hvdWxkIGJlIGZpeGVkCitiZWZvcmUgbW92aW5nIG91dCBvZiBzdGFnaW5nLgorCisyLiBSZWZlcmVuY2VzIGFuZCBsb2NraW5nIG5lZWQgY2FyZWZ1bCBleGFtaW5hdGlvbi4gIEZvciBjeDE4IGFuZCBpdnR2IFBDSQorY2FyZHMsIHdoaWNoIGFyZSBub3QgZWFzaWx5ICJob3QgdW5wbHVnZ2VkIiwgdGhlIGltcGVyZmVjdCBzdGF0ZSBvZiByZWZlcmVuY2UKK2NvdW50aW5nIGFuZCBsb2NraW5nIGlzIGFjY2VwdGFibGUgaWYgbm90IGNvcnJlY3QuICBGb3IgVVNCIGNvbm5lY3RlZCB1bml0cworbGlrZSBIRCBQVlIsIFBWUiBVU0IyLCBIVlItMTkwMCwgYW5kIEhWUjE5NTAsIHRoZSBsaWtlbHlob29kIG9mIGFuIE9vb3BzIG9uCit1bnBsdWcgaXMgcHJvYmFibHkgZ3JlYXQuICBQcm9wZXIgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsb2NraW5nIG5lZWRzIHRvIGJlCitpbXBsZW1lbnRlZCBiZWZvcmUgdGhpcyBtb2R1bGUgaXMgbW92ZWQgb3V0IG9mIHN0YWdpbmcuCisKKzMuIFRoZSBiaW5kaW5nIGJldHdlZW4gaGRwdnIgYW5kIGxpcmNfemlsb2cgaXMgY3VycmVudGx5IGRpc2FibGVkLAogZHVlIHRvIGFuIE9PUFMgcmVwb3J0ZWQgYSBmZXcgeWVhcnMgYWdvIHdoZW4gYm90aCB0aGUgaGRwdnIgYW5kIGN4MTgKIGRyaXZlcnMgd2VyZSBsb2FkZWQgaW4gaGlzIHN5c3RlbS4gTW9yZSBkZXRhaWxzIGNhbiBiZSBzZWVuIGF0OgogCWh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9saW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcvbXNnMDkxNjMuaHRtbAogTW9yZSB0ZXN0cyBuZWVkIHRvIGJlIGRvbmUsIGluIG9yZGVyIHRvIGZpeCB0aGUgcmVwb3J0ZWQgaXNzdWUuCiAKLVRoZXJlJ3MgYSBjb25mbGljdCBiZXR3ZWVuIGlyLWtiZC1pMmM6IEJvdGggcHJvdmlkZSBzdXBwb3J0IGZvciBSWCBldmVudHMuCi1TdWNoIGNvbmZsaWN0IG5lZWRzIHRvIGJlIGZpeGVkLCBiZWZvcmUgbW92aW5nIGl0IG91dCBvZiBzdGFnaW5nLgorNC4gSW4gYWRkaXRpb24gdG8gcHJvdmlkaW5nIGEgc2hhcmVkIG11dGV4IGZvciB0cmFuc2NlaXZlciBhY2Nlc3MKK2xvY2tpbmcsIGJyaWRnZSBkcml2ZXJzLCBpZiBhYmxlLCBzaG91bGQgcHJvdmlkZSBhIGNoaXAgcmVzZXQoKSBjYWxsYmFjawordG8gbGlyY196aWxvZyB2aWEgc3RydWN0IElSX2kyY19pbml0X2RhdGEuICBjeDE4IGFuZCBpdnR2IGFscmVhZHkgaGF2ZSByb3V0aW5lcwordG8gcGVyZm9ybSBaOCBjaGlwIHJlc2V0cyB2aWEgR1BJTyBtYW5pcHVsYXRpb25zLiAgVGhpcyB3aWxsIGFsbG93IGxpcmNfemlsb2cKK3RvIGJyaW5nIHRoZSBjaGlwIGJhY2sgdG8gbm9ybWFsIHdoZW4gaXQgaGFuZ3MsIGluIHRoZSBzYW1lIHBsYWNlcyB0aGUKK29yaWdpbmFsIGxpcmNfcHZyMTUwIGRyaXZlciBjb2RlIGRvZXMuICBUaGlzIGlzIG5vdCBzdHJpY3RseSBuZWVkZWQsIHNvIGl0CitpcyBub3QgcmVxdWlyZWQgdG8gbW92ZSBsaXJjX3ppbG9nIG91dCBvZiBzdGFnaW5nLgogCi1UaGUgd2F5IEkyQyBwcm9iZSB3b3JrcywgaXQgd2lsbCB0cnkgdG8gcmVnaXN0ZXIgdGhlIGRyaXZlciB0d2ljZSwgb25lCi1mb3IgUlggYW5kIGFub3RoZXIgZm9yIFRYLiBUaGUgbG9naWMgbmVlZHMgdG8gYmUgZml4ZWQgdG8gYXZvaWQgc3VjaAotaXNzdWUuCis1LiBCb3RoIGxpcmNfemlsb2cgYW5kIGlyLWtiZC1pMmMgc3VwcG9ydCB0aGUgWmlsb2cgWjggZm9yIElSLCBhcyBwcm9ncmFtbWVkCithbmQgaW5zdGFsbGVkIG9uIEhhdXBwYXVnZSBwcm9kdWN0cy4gIFdoZW4gd29ya2luZyBvbiBlaXRoZXIgbW9kdWxlLCBkZXZlbG9wZXJzCittdXN0IGNvbnNpZGVyIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgYnJpZGdlIGRyaXZlcnMgd2hpY2ggbWVudGlvbiBhbiBJUiBSeCB1bml0CithdCBhZGRyZXNzIDB4NzEgKGluZGljYXRpdmUgb2YgYSBaOCk6CisKKwlpdnR2IGN4MTggaGRwdnIgcHZydXNiMiBidDh4eCBjeDg4IHNhYTcxMzQKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19pbW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2ltb24uYwppbmRleCAwZGE2Yjk1Li4yMzVjYWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2ltb24uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2ltb24uYwpAQCAtNDQ3LDYgKzQ0Nyw3IEBACiAKIGV4aXQ6CiAJbXV0ZXhfdW5sb2NrKCZjb250ZXh0LT5jdHhfbG9jayk7CisJa2ZyZWUoZGF0YV9idWYpOwogCiAJcmV0dXJuICghcmV0dmFsKSA/IG5fYnl0ZXMgOiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2l0ODcuYyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfaXQ4Ny5jCmluZGV4IDkyOWFlNTcuLjU5Mzg2MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfaXQ4Ny5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfaXQ4Ny5jCkBAIC0yMzIsNiArMjMyLDcgQEAKIAkJaSsrOwogCX0KIAl0ZXJtaW5hdGVfc2VuZCh0eF9idWZbaSAtIDFdKTsKKwlrZnJlZSh0eF9idWYpOwogCXJldHVybiBuOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3BhcmFsbGVsLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3BhcmFsbGVsLmMKaW5kZXggZGZkMmM0NC4uM2E5YzA5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19wYXJhbGxlbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfcGFyYWxsZWwuYwpAQCAtMzc2LDYgKzM3Niw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY291bnR0aW1lcjsKIAlpbnQgKndidWY7CisJc3NpemVfdCByZXQ7CiAKIAlpZiAoIWlzX2NsYWltZWQpCiAJCXJldHVybiAtRUJVU1k7CkBAIC0zOTMsOCArMzk0LDEwIEBACiAJaWYgKHRpbWVyID09IDApIHsKIAkJLyogdHJ5IGFnYWluIGlmIGRldmljZSBpcyByZWFkeSAqLwogCQl0aW1lciA9IGluaXRfbGlyY190aW1lcigpOwotCQlpZiAodGltZXIgPT0gMCkKLQkJCXJldHVybiAtRUlPOworCQlpZiAodGltZXIgPT0gMCkgeworCQkJcmV0ID0gLUVJTzsKKwkJCWdvdG8gb3V0OworCQl9CiAJfQogCiAJLyogYWRqdXN0IHZhbHVlcyBmcm9tIHVzZWNzICovCkBAIC00MjAsNyArNDIzLDggQEAKIAkJCWlmIChjaGVja19wc2VsZWNkICYmIChpbigxKSAmIExQX1BTRUxFQ0QpKSB7CiAJCQkJbGlyY19vZmYoKTsKIAkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCQkJcmV0dXJuIC1FSU87CisJCQkJcmV0ID0gLUVJTzsKKwkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfSB3aGlsZSAoY291bnR0aW1lciA8IHdidWZbaV0pOwogCQlpKys7CkBAIC00MzYsNyArNDQwLDggQEAKIAkJCWxldmVsID0gbmV3bGV2ZWw7CiAJCQlpZiAoY2hlY2tfcHNlbGVjZCAmJiAoaW4oMSkgJiBMUF9QU0VMRUNEKSkgewogCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJCQlyZXR1cm4gLUVJTzsKKwkJCQlyZXQgPSAtRUlPOworCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9IHdoaWxlIChjb3VudHRpbWVyIDwgd2J1ZltpXSk7CiAJCWkrKzsKQEAgLTQ0NSw3ICs0NTAsMTEgQEAKICNlbHNlCiAJLyogcGxhY2UgY29kZSB0aGF0IGhhbmRsZXMgd3JpdGUgd2l0aG91dCBleHRlcm5hbCB0aW1lciBoZXJlICovCiAjZW5kaWYKLQlyZXR1cm4gbjsKKwlyZXQgPSBuOworb3V0OgorCWtmcmVlKHdidWYpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBsaXJjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3Nhc2VtLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3Nhc2VtLmMKaW5kZXggOTk4NDg1ZS4uOTI1ZWFiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19zYXNlbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfc2FzZW0uYwpAQCAtNDQ4LDYgKzQ0OCw3IEBACiBleGl0OgogCiAJbXV0ZXhfdW5sb2NrKCZjb250ZXh0LT5jdHhfbG9jayk7CisJa2ZyZWUoZGF0YV9idWYpOwogCiAJcmV0dXJuICghcmV0dmFsKSA/IG5fYnl0ZXMgOiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3NlcmlhbC5jIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19zZXJpYWwuYwppbmRleCA5YmNmMTQ5Li4xYzMwOTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfc2VyaWFsLmMKQEAgLTk2Niw3ICs5NjYsNyBAQAogCWlmIChuICUgc2l6ZW9mKGludCkgfHwgY291bnQgJSAyID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCXdidWYgPSBtZW1kdXBfdXNlcihidWYsIG4pOwotCWlmIChQVFJfRVJSKHdidWYpKQorCWlmIChJU19FUlIod2J1ZikpCiAJCXJldHVybiBQVFJfRVJSKHdidWYpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZoYXJkd2FyZVt0eXBlXS5sb2NrLCBmbGFncyk7CiAJaWYgKHR5cGUgPT0gTElSQ19JUkRFTykgewpAQCAtOTgxLDYgKzk4MSw3IEBACiAJfQogCW9mZigpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhcmR3YXJlW3R5cGVdLmxvY2ssIGZsYWdzKTsKKwlrZnJlZSh3YnVmKTsKIAlyZXR1cm4gbjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19zaXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfc2lyLmMKaW5kZXggYzU1M2FiNi4uNzZiZTdiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19zaXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3Npci5jCkBAIC0zMzAsNiArMzMwLDcgQEAKIAkvKiBlbmFibGUgcmVjZWl2ZXIgKi8KIAlTZXIyVVRDUjMgPSBVVENSM19SWEV8VVRDUjNfUklFOwogI2VuZGlmCisJa2ZyZWUodHhfYnVmKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfemlsb2cuYyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfemlsb2cuYwppbmRleCBhZDI5YmIxLi4wYWFkMGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3ppbG9nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY196aWxvZy5jCkBAIC0yMCw2ICsyMCw5IEBACiAgKgogICogcGFydHMgYXJlIGN1dCZwYXN0ZWQgZnJvbSB0aGUgbGlyY19pMmMuYyBkcml2ZXIKICAqCisgKiBOdW1lcm91cyBjaGFuZ2VzIHVwZGF0aW5nIGxpcmNfemlsb2cuYyBpbiBrZXJuZWwgMi42LjM4IGFuZCBsYXRlciBhcmUKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBbmR5IFdhbGxzIDxhd2FsbHNAbWQubWV0cm9jYXN0Lm5ldD4KKyAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCkBAIC02MCwzOCArNjMsNDQgQEAKICNpbmNsdWRlIDxtZWRpYS9saXJjX2Rldi5oPgogI2luY2x1ZGUgPG1lZGlhL2xpcmMuaD4KIAotc3RydWN0IElSIHsKLQlzdHJ1Y3QgbGlyY19kcml2ZXIgbDsKLQotCS8qIERldmljZSBpbmZvICovCi0Jc3RydWN0IG11dGV4IGlyX2xvY2s7Ci0JaW50IG9wZW47Ci0JYm9vbCBpc19oZHB2cjsKLQorc3RydWN0IElSX3J4IHsKIAkvKiBSWCBkZXZpY2UgKi8KLQlzdHJ1Y3QgaTJjX2NsaWVudCBjX3J4OwotCWludCBoYXZlX3J4OworCXN0cnVjdCBpMmNfY2xpZW50ICpjOwogCiAJLyogUlggZGV2aWNlIGJ1ZmZlciAmIGxvY2sgKi8KIAlzdHJ1Y3QgbGlyY19idWZmZXIgYnVmOwogCXN0cnVjdCBtdXRleCBidWZfbG9jazsKIAogCS8qIFJYIHBvbGxpbmcgdGhyZWFkIGRhdGEgKi8KLQlzdHJ1Y3QgY29tcGxldGlvbiAqdF9ub3RpZnk7Ci0Jc3RydWN0IGNvbXBsZXRpb24gKnRfbm90aWZ5MjsKLQlpbnQgc2h1dGRvd247CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCiAJLyogUlggcmVhZCBkYXRhICovCiAJdW5zaWduZWQgY2hhciBiWzNdOworCWJvb2wgaGRwdnJfZGF0YV9mbXQ7Cit9OwogCitzdHJ1Y3QgSVJfdHggewogCS8qIFRYIGRldmljZSAqLwotCXN0cnVjdCBpMmNfY2xpZW50IGNfdHg7CisJc3RydWN0IGkyY19jbGllbnQgKmM7CisKKwkvKiBUWCBhZGRpdGlvbmFsIGFjdGlvbnMgbmVlZGVkICovCiAJaW50IG5lZWRfYm9vdDsKLQlpbnQgaGF2ZV90eDsKKwlib29sIHBvc3RfdHhfcmVhZHlfcG9sbDsKK307CisKK3N0cnVjdCBJUiB7CisJc3RydWN0IGxpcmNfZHJpdmVyIGw7CisKKwlzdHJ1Y3QgbXV0ZXggaXJfbG9jazsKKwlpbnQgb3BlbjsKKworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgSVJfcnggKnJ4OworCXN0cnVjdCBJUl90eCAqdHg7CiB9OwogCiAvKiBNaW5vciAtPiBkYXRhIG1hcHBpbmcgKi8KK3N0YXRpYyBzdHJ1Y3QgbXV0ZXggaXJfZGV2aWNlc19sb2NrOwogc3RhdGljIHN0cnVjdCBJUiAqaXJfZGV2aWNlc1tNQVhfSVJDVExfREVWSUNFU107CiAKIC8qIEJsb2NrIHNpemUgZm9yIElSIHRyYW5zbWl0dGVyICovCkBAIC0xMjQsMTQgKzEzMywxMSBAQAogI2RlZmluZSB6aWxvZ19ub3RpZnkocywgYXJncy4uLikgcHJpbnRrKEtFUk5fTk9USUNFIEtCVUlMRF9NT0ROQU1FICI6ICIgcywgXAogCQkJCQkjIyBhcmdzKQogI2RlZmluZSB6aWxvZ19lcnJvcihzLCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUgIjogIiBzLCAjIyBhcmdzKQotCi0jZGVmaW5lIFpJTE9HX0hBVVBQQVVHRV9JUl9SWF9OQU1FICJaaWxvZy9IYXVwcGF1Z2UgSVIgUlgiCi0jZGVmaW5lIFpJTE9HX0hBVVBQQVVHRV9JUl9UWF9OQU1FICJaaWxvZy9IYXVwcGF1Z2UgSVIgVFgiCisjZGVmaW5lIHppbG9nX2luZm8ocywgYXJncy4uLikgcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIHMsICMjIGFyZ3MpCiAKIC8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCiBzdGF0aWMgaW50IGRlYnVnOwkvKiBkZWJ1ZyBvdXRwdXQgKi8KLXN0YXRpYyBpbnQgZGlzYWJsZV9yeDsJLyogZGlzYWJsZSBSWCBkZXZpY2UgKi8KLXN0YXRpYyBpbnQgZGlzYWJsZV90eDsJLyogZGlzYWJsZSBUWCBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgdHhfb25seTsJLyogb25seSBoYW5kbGUgdGhlIElSIFR4IGZ1bmN0aW9uICovCiBzdGF0aWMgaW50IG1pbm9yID0gLTE7CS8qIG1pbm9yIG51bWJlciAqLwogCiAjZGVmaW5lIGRwcmludGsoZm10LCBhcmdzLi4uKQkJCQkJCVwKQEAgLTE1MCw4ICsxNTYsMTIgQEAKIAlpbnQgcmV0OwogCWludCBmYWlsdXJlcyA9IDA7CiAJdW5zaWduZWQgY2hhciBzZW5kYnVmWzFdID0geyAwIH07CisJc3RydWN0IElSX3J4ICpyeCA9IGlyLT5yeDsKIAotCWlmIChsaXJjX2J1ZmZlcl9mdWxsKCZpci0+YnVmKSkgeworCWlmIChyeCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOWElPOworCisJaWYgKGxpcmNfYnVmZmVyX2Z1bGwoJnJ4LT5idWYpKSB7CiAJCWRwcmludGsoImJ1ZmZlciBvdmVyZmxvd1xuIik7CiAJCXJldHVybiAtRU9WRVJGTE9XOwogCX0KQEAgLTE2MSwxNyArMTcxLDI1IEBACiAJICogZGF0YSBhbmQgd2UgaGF2ZSBzcGFjZQogCSAqLwogCWRvIHsKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCXJldHVybiAtRU5PREFUQTsKKwogCQkvKgogCQkgKiBMb2NrIGkyYyBidXMgZm9yIHRoZSBkdXJhdGlvbi4gIFJYL1RYIGNoaXBzIGludGVyZmVyZSBzbwogCQkgKiB0aGlzIGlzIHdvcnRoIGl0CiAJCSAqLwogCQltdXRleF9sb2NrKCZpci0+aXJfbG9jayk7CiAKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZpci0+aXJfbG9jayk7CisJCQlyZXR1cm4gLUVOT0RBVEE7CisJCX0KKwogCQkvKgogCQkgKiBTZW5kIHJhbmRvbSAicG9sbCBjb21tYW5kIiAoPykgIFdpbmRvd3MgZHJpdmVyIGRvZXMgdGhpcwogCQkgKiBhbmQgaXQgaXMgYSBnb29kIHBvaW50IHRvIGRldGVjdCBjaGlwIGZhaWx1cmUuCiAJCSAqLwotCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoJmlyLT5jX3J4LCBzZW5kYnVmLCAxKTsKKwkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKHJ4LT5jLCBzZW5kYnVmLCAxKTsKIAkJaWYgKHJldCAhPSAxKSB7CiAJCQl6aWxvZ19lcnJvcigiaTJjX21hc3Rlcl9zZW5kIGZhaWxlZCB3aXRoICVkXG4iLAlyZXQpOwogCQkJaWYgKGZhaWx1cmVzID49IDMpIHsKQEAgLTE4Niw0NSArMjA0LDUzIEBACiAJCQkJICAgICJ0cnlpbmcgcmVzZXRcbiIpOwogCiAJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZpci0+aXJfbG9jayk7CisJCQkJcmV0dXJuIC1FTk9EQVRBOworCQkJfQogCQkJc2NoZWR1bGVfdGltZW91dCgoMTAwICogSFogKyA5OTkpIC8gMTAwMCk7Ci0JCQlpci0+bmVlZF9ib290ID0gMTsKKwkJCWlyLT50eC0+bmVlZF9ib290ID0gMTsKIAogCQkJKytmYWlsdXJlczsKIAkJCW11dGV4X3VubG9jaygmaXItPmlyX2xvY2spOwogCQkJY29udGludWU7CiAJCX0KIAotCQlyZXQgPSBpMmNfbWFzdGVyX3JlY3YoJmlyLT5jX3J4LCBrZXlidWYsIHNpemVvZihrZXlidWYpKTsKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZpci0+aXJfbG9jayk7CisJCQlyZXR1cm4gLUVOT0RBVEE7CisJCX0KKwkJcmV0ID0gaTJjX21hc3Rlcl9yZWN2KHJ4LT5jLCBrZXlidWYsIHNpemVvZihrZXlidWYpKTsKIAkJbXV0ZXhfdW5sb2NrKCZpci0+aXJfbG9jayk7CiAJCWlmIChyZXQgIT0gc2l6ZW9mKGtleWJ1ZikpIHsKIAkJCXppbG9nX2Vycm9yKCJpMmNfbWFzdGVyX3JlY3YgZmFpbGVkIHdpdGggJWQgLS0gIgogCQkJCSAgICAia2VlcGluZyBsYXN0IHJlYWQgYnVmZmVyXG4iLCByZXQpOwogCQl9IGVsc2UgewotCQkJaXItPmJbMF0gPSBrZXlidWZbM107Ci0JCQlpci0+YlsxXSA9IGtleWJ1Zls0XTsKLQkJCWlyLT5iWzJdID0ga2V5YnVmWzVdOwotCQkJZHByaW50aygia2V5ICgweCUwMngvMHglMDJ4KVxuIiwgaXItPmJbMF0sIGlyLT5iWzFdKTsKKwkJCXJ4LT5iWzBdID0ga2V5YnVmWzNdOworCQkJcngtPmJbMV0gPSBrZXlidWZbNF07CisJCQlyeC0+YlsyXSA9IGtleWJ1Zls1XTsKKwkJCWRwcmludGsoImtleSAoMHglMDJ4LzB4JTAyeClcbiIsIHJ4LT5iWzBdLCByeC0+YlsxXSk7CiAJCX0KIAogCQkvKiBrZXkgcHJlc3NlZCA/ICovCi0JCWlmIChpci0+aXNfaGRwdnIpIHsKKwkJaWYgKHJ4LT5oZHB2cl9kYXRhX2ZtdCkgewogCQkJaWYgKGdvdF9kYXRhICYmIChrZXlidWZbMF0gPT0gMHg4MCkpCiAJCQkJcmV0dXJuIDA7CiAJCQllbHNlIGlmIChnb3RfZGF0YSAmJiAoa2V5YnVmWzBdID09IDB4MDApKQogCQkJCXJldHVybiAtRU5PREFUQTsKLQkJfSBlbHNlIGlmICgoaXItPmJbMF0gJiAweDgwKSA9PSAwKQorCQl9IGVsc2UgaWYgKChyeC0+YlswXSAmIDB4ODApID09IDApCiAJCQlyZXR1cm4gZ290X2RhdGEgPyAwIDogLUVOT0RBVEE7CiAKIAkJLyogbG9vayB3aGF0IHdlIGhhdmUgKi8KLQkJY29kZSA9ICgoKF9fdTE2KWlyLT5iWzBdICYgMHg3ZikgPDwgNikgfCAoaXItPmJbMV0gPj4gMik7CisJCWNvZGUgPSAoKChfX3UxNilyeC0+YlswXSAmIDB4N2YpIDw8IDYpIHwgKHJ4LT5iWzFdID4+IDIpOwogCiAJCWNvZGVzWzBdID0gKGNvZGUgPj4gOCkgJiAweGZmOwogCQljb2Rlc1sxXSA9IGNvZGUgJiAweGZmOwogCiAJCS8qIHJldHVybiBpdCAqLwotCQlsaXJjX2J1ZmZlcl93cml0ZSgmaXItPmJ1ZiwgY29kZXMpOworCQlsaXJjX2J1ZmZlcl93cml0ZSgmcngtPmJ1ZiwgY29kZXMpOwogCQkrK2dvdF9kYXRhOwotCX0gd2hpbGUgKCFsaXJjX2J1ZmZlcl9mdWxsKCZpci0+YnVmKSk7CisJfSB3aGlsZSAoIWxpcmNfYnVmZmVyX2Z1bGwoJnJ4LT5idWYpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjQyLDQ2ICsyNjgsMzUgQEAKIHN0YXRpYyBpbnQgbGlyY190aHJlYWQodm9pZCAqYXJnKQogewogCXN0cnVjdCBJUiAqaXIgPSBhcmc7Ci0KLQlpZiAoaXItPnRfbm90aWZ5ICE9IE5VTEwpCi0JCWNvbXBsZXRlKGlyLT50X25vdGlmeSk7CisJc3RydWN0IElSX3J4ICpyeCA9IGlyLT5yeDsKIAogCWRwcmludGsoInBvbGwgdGhyZWFkIHN0YXJ0ZWRcbiIpOwogCi0JZG8gewotCQlpZiAoaXItPm9wZW4pIHsKLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAotCQkJLyoKLQkJCSAqIFRoaXMgaXMgfjExMyoyICsgMjQgKyBqaXR0ZXIgKDIqcmVwZWF0IGdhcCArCi0JCQkgKiBjb2RlIGxlbmd0aCkuICBXZSB1c2UgdGhpcyBpbnRlcnZhbCBhcyB0aGUgY2hpcAotCQkJICogcmVzZXRzIGV2ZXJ5IHRpbWUgeW91IHBvbGwgaXQgKGJhZCEpLiAgVGhpcyBpcwotCQkJICogdGhlcmVmb3JlIGp1c3Qgc3VmZmljaWVudCB0byBjYXRjaCBhbGwgb2YgdGhlCi0JCQkgKiBidXR0b24gcHJlc3Nlcy4gIEl0IG1ha2VzIHRoZSByZW1vdGUgbXVjaCBtb3JlCi0JCQkgKiByZXNwb25zaXZlLiAgWW91IGNhbiBzZWUgdGhlIGRpZmZlcmVuY2UgYnkKLQkJCSAqIHJ1bm5pbmcgaXJ3IGFuZCBob2xkaW5nIGRvd24gYSBidXR0b24uICBXaXRoCi0JCQkgKiAxMDBtcywgdGhlIG9sZCBwb2xsaW5nIGludGVydmFsLCB5b3UnbGwgbm90aWNlCi0JCQkgKiBicmVha3MgaW4gdGhlIHJlcGVhdCBzZXF1ZW5jZSBjb3JyZXNwb25kaW5nIHRvCi0JCQkgKiBsb3N0IGtleXByZXNzZXMuCi0JCQkgKi8KLQkJCXNjaGVkdWxlX3RpbWVvdXQoKDI2MCAqIEhaKSAvIDEwMDApOwotCQkJaWYgKGlyLT5zaHV0ZG93bikKLQkJCQlicmVhazsKLQkJCWlmICghYWRkX3RvX2J1ZihpcikpCi0JCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpci0+YnVmLndhaXRfcG9sbCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBpZiBkZXZpY2Ugbm90IG9wZW5lZCBzbyB3ZSBjYW4gc2xlZXAgaGFsZiBhIHNlY29uZCAqLwotCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJLyogaWYgZGV2aWNlIG5vdCBvcGVuZWQsIHdlIGNhbiBzbGVlcCBoYWxmIGEgc2Vjb25kICovCisJCWlmICghaXItPm9wZW4pIHsKIAkJCXNjaGVkdWxlX3RpbWVvdXQoSFovMik7CisJCQljb250aW51ZTsKIAkJfQotCX0gd2hpbGUgKCFpci0+c2h1dGRvd24pOwogCi0JaWYgKGlyLT50X25vdGlmeTIgIT0gTlVMTCkKLQkJd2FpdF9mb3JfY29tcGxldGlvbihpci0+dF9ub3RpZnkyKTsKLQotCWlyLT50YXNrID0gTlVMTDsKLQlpZiAoaXItPnRfbm90aWZ5ICE9IE5VTEwpCi0JCWNvbXBsZXRlKGlyLT50X25vdGlmeSk7CisJCS8qCisJCSAqIFRoaXMgaXMgfjExMyoyICsgMjQgKyBqaXR0ZXIgKDIqcmVwZWF0IGdhcCArIGNvZGUgbGVuZ3RoKS4KKwkJICogV2UgdXNlIHRoaXMgaW50ZXJ2YWwgYXMgdGhlIGNoaXAgcmVzZXRzIGV2ZXJ5IHRpbWUgeW91IHBvbGwKKwkJICogaXQgKGJhZCEpLiAgVGhpcyBpcyB0aGVyZWZvcmUganVzdCBzdWZmaWNpZW50IHRvIGNhdGNoIGFsbAorCQkgKiBvZiB0aGUgYnV0dG9uIHByZXNzZXMuICBJdCBtYWtlcyB0aGUgcmVtb3RlIG11Y2ggbW9yZQorCQkgKiByZXNwb25zaXZlLiAgWW91IGNhbiBzZWUgdGhlIGRpZmZlcmVuY2UgYnkgcnVubmluZyBpcncgYW5kCisJCSAqIGhvbGRpbmcgZG93biBhIGJ1dHRvbi4gIFdpdGggMTAwbXMsIHRoZSBvbGQgcG9sbGluZworCQkgKiBpbnRlcnZhbCwgeW91J2xsIG5vdGljZSBicmVha3MgaW4gdGhlIHJlcGVhdCBzZXF1ZW5jZQorCQkgKiBjb3JyZXNwb25kaW5nIHRvIGxvc3Qga2V5cHJlc3Nlcy4KKwkJICovCisJCXNjaGVkdWxlX3RpbWVvdXQoKDI2MCAqIEhaKSAvIDEwMDApOworCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQkJYnJlYWs7CisJCWlmICghYWRkX3RvX2J1ZihpcikpCisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnJ4LT5idWYud2FpdF9wb2xsKTsKKwl9CiAKIAlkcHJpbnRrKCJwb2xsIHRocmVhZCBlbmRlZFxuIik7CiAJcmV0dXJuIDA7CkBAIC0yOTksMTAgKzMxNCwxMCBAQAogCSAqIHRoaXMgaXMgY29tcGxldGVseSBicm9rZW4gY29kZS4gbGlyY191bnJlZ2lzdGVyX2RyaXZlcigpCiAJICogbXVzdCBiZSBwb3NzaWJsZSBldmVuIHdoZW4gdGhlIGRldmljZSBpcyBvcGVuCiAJICovCi0JaWYgKGlyLT5jX3J4LmFkZHIpCi0JCWkyY191c2VfY2xpZW50KCZpci0+Y19yeCk7Ci0JaWYgKGlyLT5jX3R4LmFkZHIpCi0JCWkyY191c2VfY2xpZW50KCZpci0+Y190eCk7CisJaWYgKGlyLT5yeCAhPSBOVUxMKQorCQlpMmNfdXNlX2NsaWVudChpci0+cngtPmMpOworCWlmIChpci0+dHggIT0gTlVMTCkKKwkJaTJjX3VzZV9jbGllbnQoaXItPnR4LT5jKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzExLDEwICszMjYsMTAgQEAKIHsKIAlzdHJ1Y3QgSVIgKmlyID0gZGF0YTsKIAotCWlmIChpci0+Y19yeC5hZGRyKQotCQlpMmNfcmVsZWFzZV9jbGllbnQoJmlyLT5jX3J4KTsKLQlpZiAoaXItPmNfdHguYWRkcikKLQkJaTJjX3JlbGVhc2VfY2xpZW50KCZpci0+Y190eCk7CisJaWYgKGlyLT5yeCkKKwkJaTJjX3JlbGVhc2VfY2xpZW50KGlyLT5yeC0+Yyk7CisJaWYgKGlyLT50eCkKKwkJaTJjX3JlbGVhc2VfY2xpZW50KGlyLT50eC0+Yyk7CiAJaWYgKGlyLT5sLm93bmVyICE9IE5VTEwpCiAJCW1vZHVsZV9wdXQoaXItPmwub3duZXIpOwogfQpAQCAtNDUzLDcgKzQ2OCw3IEBACiB9CiAKIC8qIHNlbmQgYSBibG9jayBvZiBkYXRhIHRvIHRoZSBJUiBUWCBkZXZpY2UgKi8KLXN0YXRpYyBpbnQgc2VuZF9kYXRhX2Jsb2NrKHN0cnVjdCBJUiAqaXIsIHVuc2lnbmVkIGNoYXIgKmRhdGFfYmxvY2spCitzdGF0aWMgaW50IHNlbmRfZGF0YV9ibG9jayhzdHJ1Y3QgSVJfdHggKnR4LCB1bnNpZ25lZCBjaGFyICpkYXRhX2Jsb2NrKQogewogCWludCBpLCBqLCByZXQ7CiAJdW5zaWduZWQgY2hhciBidWZbNV07CkBAIC00NjcsNyArNDgyLDcgQEAKIAkJCWJ1ZlsxICsgal0gPSBkYXRhX2Jsb2NrW2kgKyBqXTsKIAkJZHByaW50aygiJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IiwKIAkJCWJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwgYnVmWzRdKTsKLQkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKCZpci0+Y190eCwgYnVmLCB0b3NlbmQgKyAxKTsKKwkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKHR4LT5jLCBidWYsIHRvc2VuZCArIDEpOwogCQlpZiAocmV0ICE9IHRvc2VuZCArIDEpIHsKIAkJCXppbG9nX2Vycm9yKCJpMmNfbWFzdGVyX3NlbmQgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CiAJCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IC1FRkFVTFQ7CkBAIC00NzgsMzggKzQ5Myw1MCBAQAogfQogCiAvKiBzZW5kIGJvb3QgZGF0YSB0byB0aGUgSVIgVFggZGV2aWNlICovCi1zdGF0aWMgaW50IHNlbmRfYm9vdF9kYXRhKHN0cnVjdCBJUiAqaXIpCitzdGF0aWMgaW50IHNlbmRfYm9vdF9kYXRhKHN0cnVjdCBJUl90eCAqdHgpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpOwogCXVuc2lnbmVkIGNoYXIgYnVmWzRdOwogCiAJLyogc2VuZCB0aGUgYm9vdCBibG9jayAqLwotCXJldCA9IHNlbmRfZGF0YV9ibG9jayhpciwgdHhfZGF0YS0+Ym9vdF9kYXRhKTsKKwlyZXQgPSBzZW5kX2RhdGFfYmxvY2sodHgsIHR4X2RhdGEtPmJvb3RfZGF0YSk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCi0JLyoga2ljayBpdCBvZmY/ICovCisJLyogSGl0IHRoZSBnbyBidXR0b24gdG8gYWN0aXZhdGUgdGhlIG5ldyBib290IGRhdGEgKi8KIAlidWZbMF0gPSAweDAwOwogCWJ1ZlsxXSA9IDB4MjA7Ci0JcmV0ID0gaTJjX21hc3Rlcl9zZW5kKCZpci0+Y190eCwgYnVmLCAyKTsKKwlyZXQgPSBpMmNfbWFzdGVyX3NlbmQodHgtPmMsIGJ1ZiwgMik7CiAJaWYgKHJldCAhPSAyKSB7CiAJCXppbG9nX2Vycm9yKCJpMmNfbWFzdGVyX3NlbmQgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQgPCAwID8gcmV0IDogLUVGQVVMVDsKIAl9Ci0JcmV0ID0gaTJjX21hc3Rlcl9zZW5kKCZpci0+Y190eCwgYnVmLCAxKTsKKworCS8qCisJICogV2FpdCBmb3Igemlsb2cgdG8gc2V0dGxlIGFmdGVyIGhpdHRpbmcgZ28gcG9zdCBib290IGJsb2NrIHVwbG9hZC4KKwkgKiBXaXRob3V0IHRoaXMgZGVsYXksIHRoZSBIRC1QVlIgYW5kIEhWUi0xOTUwIGJvdGggcmV0dXJuIGFuIC1FSU8KKwkgKiB1cG9uIGF0dGVtcHRpbmcgdG8gZ2V0IGZpcm13YXJlIHJldmlzaW9uLCBhbmQgdHggcHJvYmUgdGh1cyBmYWlscy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQodHgtPmMsIGJ1ZiwgMSk7CisJCWlmIChyZXQgPT0gMSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTAwKTsKKwl9CisKIAlpZiAocmV0ICE9IDEpIHsKIAkJemlsb2dfZXJyb3IoImkyY19tYXN0ZXJfc2VuZCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUZBVUxUOwogCX0KIAogCS8qIEhlcmUgY29tZXMgdGhlIGZpcm13YXJlIHZlcnNpb24uLi4gKGhvcGVmdWxseSkgKi8KLQlyZXQgPSBpMmNfbWFzdGVyX3JlY3YoJmlyLT5jX3R4LCBidWYsIDQpOworCXJldCA9IGkyY19tYXN0ZXJfcmVjdih0eC0+YywgYnVmLCA0KTsKIAlpZiAocmV0ICE9IDQpIHsKIAkJemlsb2dfZXJyb3IoImkyY19tYXN0ZXJfcmVjdiBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmIChidWZbMF0gIT0gMHg4MCkgewotCQl6aWxvZ19lcnJvcigidW5leHBlY3RlZCBJUiBUWCByZXNwb25zZTogJTAyeFxuIiwgYnVmWzBdKTsKKwlpZiAoKGJ1ZlswXSAhPSAweDgwKSAmJiAoYnVmWzBdICE9IDB4YTApKSB7CisJCXppbG9nX2Vycm9yKCJ1bmV4cGVjdGVkIElSIFRYIGluaXQgcmVzcG9uc2U6ICUwMnhcbiIsIGJ1ZlswXSk7CiAJCXJldHVybiAwOwogCX0KIAl6aWxvZ19ub3RpZnkoIlppbG9nL0hhdXBwYXVnZSBJUiBibGFzdGVyIGZpcm13YXJlIHZlcnNpb24gIgpAQCAtNTQzLDcgKzU3MCw3IEBACiB9CiAKIC8qIGxvYWQgImZpcm13YXJlIiBmb3IgdGhlIElSIFRYIGRldmljZSAqLwotc3RhdGljIGludCBmd19sb2FkKHN0cnVjdCBJUiAqaXIpCitzdGF0aWMgaW50IGZ3X2xvYWQoc3RydWN0IElSX3R4ICp0eCkKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGludCBpOwpAQCAtNTU4LDcgKzU4NSw3IEBACiAJfQogCiAJLyogUmVxdWVzdCBjb2Rlc2V0IGRhdGEgZmlsZSAqLwotCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCAiaGF1cC1pci1ibGFzdGVyLmJpbiIsICZpci0+Y190eC5kZXYpOworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCAiaGF1cC1pci1ibGFzdGVyLmJpbiIsICZ0eC0+Yy0+ZGV2KTsKIAlpZiAocmV0ICE9IDApIHsKIAkJemlsb2dfZXJyb3IoImZpcm13YXJlIGhhdXAtaXItYmxhc3Rlci5iaW4gbm90IGF2YWlsYWJsZSAiCiAJCQkgICAgIiglZClcbiIsIHJldCk7CkBAIC02ODUsMjAgKzcxMiwyMCBAQAogfQogCiAvKiBpbml0aWFsaXNlIHRoZSBJUiBUWCBkZXZpY2UgKi8KLXN0YXRpYyBpbnQgdHhfaW5pdChzdHJ1Y3QgSVIgKmlyKQorc3RhdGljIGludCB0eF9pbml0KHN0cnVjdCBJUl90eCAqdHgpCiB7CiAJaW50IHJldDsKIAogCS8qIExvYWQgJ2Zpcm13YXJlJyAqLwotCXJldCA9IGZ3X2xvYWQoaXIpOworCXJldCA9IGZ3X2xvYWQodHgpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIFNlbmQgYm9vdCBibG9jayAqLwotCXJldCA9IHNlbmRfYm9vdF9kYXRhKGlyKTsKKwlyZXQgPSBzZW5kX2Jvb3RfZGF0YSh0eCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwotCWlyLT5uZWVkX2Jvb3QgPSAwOworCXR4LT5uZWVkX2Jvb3QgPSAwOwogCiAJLyogTG9va3MgZ29vZCAqLwogCXJldHVybiAwOwpAQCAtNzE0LDIwICs3NDEsMjAgQEAKIHN0YXRpYyBzc2l6ZV90IHJlYWQoc3RydWN0IGZpbGUgKmZpbGVwLCBjaGFyICpvdXRidWYsIHNpemVfdCBuLCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IElSICppciA9IGZpbGVwLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgY2hhciBidWZbaXItPmJ1Zi5jaHVua19zaXplXTsKKwlzdHJ1Y3QgSVJfcnggKnJ4ID0gaXItPnJ4OwogCWludCByZXQgPSAwLCB3cml0dGVuID0gMDsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAogCWRwcmludGsoInJlYWQgY2FsbGVkXG4iKTsKLQlpZiAoaXItPmNfcnguYWRkciA9PSAwKQorCWlmIChyeCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlyLT5idWZfbG9jaykpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcngtPmJ1Zl9sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAotCWlmIChuICUgaXItPmJ1Zi5jaHVua19zaXplKSB7CisJaWYgKG4gJSByeC0+YnVmLmNodW5rX3NpemUpIHsKIAkJZHByaW50aygicmVhZCByZXN1bHQgPSAtRUlOVkFMXG4iKTsKLQkJbXV0ZXhfdW5sb2NrKCZpci0+YnVmX2xvY2spOworCQltdXRleF91bmxvY2soJnJ4LT5idWZfbG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNzM2LDcgKzc2Myw3IEBACiAJICogdG8gYXZvaWQgbG9zaW5nIHNjYW4gY29kZSAoaW4gY2FzZSB3aGVuIHF1ZXVlIGlzIGF3YWtlbiBzb21ld2hlcmUKIAkgKiBiZXR3ZWVuIHdoaWxlIGNvbmRpdGlvbiBjaGVja2luZyBhbmQgc2NoZWR1bGluZykKIAkgKi8KLQlhZGRfd2FpdF9xdWV1ZSgmaXItPmJ1Zi53YWl0X3BvbGwsICZ3YWl0KTsKKwlhZGRfd2FpdF9xdWV1ZSgmcngtPmJ1Zi53YWl0X3BvbGwsICZ3YWl0KTsKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCiAJLyoKQEAgLTc0NCw3ICs3NzEsNyBAQAogCSAqIG1vZGUgYW5kICdjb3B5X3RvX3VzZXInIGlzIGhhcHB5LCB3YWl0IGZvciBkYXRhLgogCSAqLwogCXdoaWxlICh3cml0dGVuIDwgbiAmJiByZXQgPT0gMCkgewotCQlpZiAobGlyY19idWZmZXJfZW1wdHkoJmlyLT5idWYpKSB7CisJCWlmIChsaXJjX2J1ZmZlcl9lbXB0eSgmcngtPmJ1ZikpIHsKIAkJCS8qCiAJCQkgKiBBY2NvcmRpbmcgdG8gdGhlIHJlYWQoMikgbWFuIHBhZ2UsICd3cml0dGVuJyBjYW4gYmUKIAkJCSAqIHJldHVybmVkIGFzIGxlc3MgdGhhbiAnbicsIGluc3RlYWQgb2YgYmxvY2tpbmcKQEAgLTc2NCwxNiArNzkxLDE3IEBACiAJCQlzY2hlZHVsZSgpOwogCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJfSBlbHNlIHsKLQkJCWxpcmNfYnVmZmVyX3JlYWQoJmlyLT5idWYsIGJ1Zik7CisJCQl1bnNpZ25lZCBjaGFyIGJ1ZltyeC0+YnVmLmNodW5rX3NpemVdOworCQkJbGlyY19idWZmZXJfcmVhZCgmcngtPmJ1ZiwgYnVmKTsKIAkJCXJldCA9IGNvcHlfdG9fdXNlcigodm9pZCAqKW91dGJ1Zit3cml0dGVuLCBidWYsCi0JCQkJCSAgIGlyLT5idWYuY2h1bmtfc2l6ZSk7Ci0JCQl3cml0dGVuICs9IGlyLT5idWYuY2h1bmtfc2l6ZTsKKwkJCQkJICAgcngtPmJ1Zi5jaHVua19zaXplKTsKKwkJCXdyaXR0ZW4gKz0gcngtPmJ1Zi5jaHVua19zaXplOwogCQl9CiAJfQogCi0JcmVtb3ZlX3dhaXRfcXVldWUoJmlyLT5idWYud2FpdF9wb2xsLCAmd2FpdCk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJnJ4LT5idWYud2FpdF9wb2xsLCAmd2FpdCk7CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQltdXRleF91bmxvY2soJmlyLT5idWZfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZyeC0+YnVmX2xvY2spOwogCiAJZHByaW50aygicmVhZCByZXN1bHQgPSAlcyAoJWQpXG4iLAogCQlyZXQgPyAiLUVGQVVMVCIgOiAiT0siLCByZXQpOwpAQCAtNzgyLDcgKzgxMCw3IEBACiB9CiAKIC8qIHNlbmQgYSBrZXlwcmVzcyB0byB0aGUgSVIgVFggZGV2aWNlICovCi1zdGF0aWMgaW50IHNlbmRfY29kZShzdHJ1Y3QgSVIgKmlyLCB1bnNpZ25lZCBpbnQgY29kZSwgdW5zaWduZWQgaW50IGtleSkKK3N0YXRpYyBpbnQgc2VuZF9jb2RlKHN0cnVjdCBJUl90eCAqdHgsIHVuc2lnbmVkIGludCBjb2RlLCB1bnNpZ25lZCBpbnQga2V5KQogewogCXVuc2lnbmVkIGNoYXIgZGF0YV9ibG9ja1tUWF9CTE9DS19TSVpFXTsKIAl1bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKQEAgLTc5OSwyNiArODI3LDM0IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBTZW5kIHRoZSBkYXRhIGJsb2NrICovCi0JcmV0ID0gc2VuZF9kYXRhX2Jsb2NrKGlyLCBkYXRhX2Jsb2NrKTsKKwlyZXQgPSBzZW5kX2RhdGFfYmxvY2sodHgsIGRhdGFfYmxvY2spOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIFNlbmQgZGF0YSBibG9jayBsZW5ndGg/ICovCiAJYnVmWzBdID0gMHgwMDsKIAlidWZbMV0gPSAweDQwOwotCXJldCA9IGkyY19tYXN0ZXJfc2VuZCgmaXItPmNfdHgsIGJ1ZiwgMik7CisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKHR4LT5jLCBidWYsIDIpOwogCWlmIChyZXQgIT0gMikgewogCQl6aWxvZ19lcnJvcigiaTJjX21hc3Rlcl9zZW5kIGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IC1FRkFVTFQ7CiAJfQotCXJldCA9IGkyY19tYXN0ZXJfc2VuZCgmaXItPmNfdHgsIGJ1ZiwgMSk7CisKKwkvKiBHaXZlIHRoZSB6OCBhIG1vbWVudCB0byBwcm9jZXNzIGRhdGEgYmxvY2sgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQodHgtPmMsIGJ1ZiwgMSk7CisJCWlmIChyZXQgPT0gMSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTAwKTsKKwl9CisKIAlpZiAocmV0ICE9IDEpIHsKIAkJemlsb2dfZXJyb3IoImkyY19tYXN0ZXJfc2VuZCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUZBVUxUOwogCX0KIAogCS8qIFNlbmQgZmluaXNoZWQgZG93bmxvYWQ/ICovCi0JcmV0ID0gaTJjX21hc3Rlcl9yZWN2KCZpci0+Y190eCwgYnVmLCAxKTsKKwlyZXQgPSBpMmNfbWFzdGVyX3JlY3YodHgtPmMsIGJ1ZiwgMSk7CiAJaWYgKHJldCAhPSAxKSB7CiAJCXppbG9nX2Vycm9yKCJpMmNfbWFzdGVyX3JlY3YgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQgPCAwID8gcmV0IDogLUVGQVVMVDsKQEAgLTgzMiw3ICs4NjgsNyBAQAogCS8qIFNlbmQgcHJlcGFyZSBjb21tYW5kPyAqLwogCWJ1ZlswXSA9IDB4MDA7CiAJYnVmWzFdID0gMHg4MDsKLQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoJmlyLT5jX3R4LCBidWYsIDIpOworCXJldCA9IGkyY19tYXN0ZXJfc2VuZCh0eC0+YywgYnVmLCAyKTsKIAlpZiAocmV0ICE9IDIpIHsKIAkJemlsb2dfZXJyb3IoImkyY19tYXN0ZXJfc2VuZCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUZBVUxUOwpAQCAtODQzLDcgKzg3OSw3IEBACiAJICogbGFzdCBpMmNfbWFzdGVyX3JlY3YgYWx3YXlzIGZhaWxzIHdpdGggYSAtNSwgc28gZm9yIG5vdywgd2UncmUKIAkgKiBnb2luZyB0byBza2lwIHRoaXMgd2hvbGUgbWVzcyBhbmQgc2F5IHdlJ3JlIGRvbmUgb24gdGhlIEhEIFBWUgogCSAqLwotCWlmIChpci0+aXNfaGRwdnIpIHsKKwlpZiAoIXR4LT5wb3N0X3R4X3JlYWR5X3BvbGwpIHsKIAkJZHByaW50aygic2VudCBjb2RlICV1LCBrZXkgJXVcbiIsIGNvZGUsIGtleSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTg1Nyw3ICs4OTMsNyBAQAogCWZvciAoaSA9IDA7IGkgPCAyMDsgKytpKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJc2NoZWR1bGVfdGltZW91dCgoNTAgKiBIWiArIDk5OSkgLyAxMDAwKTsKLQkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKCZpci0+Y190eCwgYnVmLCAxKTsKKwkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKHR4LT5jLCBidWYsIDEpOwogCQlpZiAocmV0ID09IDEpCiAJCQlicmVhazsKIAkJZHByaW50aygiTkFLIGV4cGVjdGVkOiBpMmNfbWFzdGVyX3NlbmQgIgpAQCAtODcwLDcgKzkwNiw3IEBACiAJfQogCiAJLyogU2VlbXMgdG8gYmUgYW4gJ29rJyByZXNwb25zZSAqLwotCWkgPSBpMmNfbWFzdGVyX3JlY3YoJmlyLT5jX3R4LCBidWYsIDEpOworCWkgPSBpMmNfbWFzdGVyX3JlY3YodHgtPmMsIGJ1ZiwgMSk7CiAJaWYgKGkgIT0gMSkgewogCQl6aWxvZ19lcnJvcigiaTJjX21hc3Rlcl9yZWN2IGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOwogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTg5NSwxMCArOTMxLDExIEBACiAJCQkgIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgSVIgKmlyID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgSVJfdHggKnR4ID0gaXItPnR4OwogCXNpemVfdCBpOwogCWludCBmYWlsdXJlcyA9IDA7CiAKLQlpZiAoaXItPmNfdHguYWRkciA9PSAwKQorCWlmICh0eCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIFZhbGlkYXRlIHVzZXIgcGFyYW1ldGVycyAqLwpAQCAtOTE5LDE1ICs5NTYsMTUgQEAKIAkJfQogCiAJCS8qIFNlbmQgYm9vdCBkYXRhIGZpcnN0IGlmIHJlcXVpcmVkICovCi0JCWlmIChpci0+bmVlZF9ib290ID09IDEpIHsKLQkJCXJldCA9IHNlbmRfYm9vdF9kYXRhKGlyKTsKKwkJaWYgKHR4LT5uZWVkX2Jvb3QgPT0gMSkgeworCQkJcmV0ID0gc2VuZF9ib290X2RhdGEodHgpOwogCQkJaWYgKHJldCA9PSAwKQotCQkJCWlyLT5uZWVkX2Jvb3QgPSAwOworCQkJCXR4LT5uZWVkX2Jvb3QgPSAwOwogCQl9CiAKIAkJLyogU2VuZCB0aGUgY29kZSAqLwogCQlpZiAocmV0ID09IDApIHsKLQkJCXJldCA9IHNlbmRfY29kZShpciwgKHVuc2lnbmVkKWNvbW1hbmQgPj4gMTYsCisJCQlyZXQgPSBzZW5kX2NvZGUodHgsICh1bnNpZ25lZCljb21tYW5kID4+IDE2LAogCQkJCQkgICAgKHVuc2lnbmVkKWNvbW1hbmQgJiAweEZGRkYpOwogCQkJaWYgKHJldCA9PSAtRVBST1RPKSB7CiAJCQkJbXV0ZXhfdW5sb2NrKCZpci0+aXJfbG9jayk7CkBAIC05NTIsNyArOTg5LDcgQEAKIAkJCX0KIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJCXNjaGVkdWxlX3RpbWVvdXQoKDEwMCAqIEhaICsgOTk5KSAvIDEwMDApOwotCQkJaXItPm5lZWRfYm9vdCA9IDE7CisJCQl0eC0+bmVlZF9ib290ID0gMTsKIAkJCSsrZmFpbHVyZXM7CiAJCX0gZWxzZQogCQkJaSArPSBzaXplb2YoaW50KTsKQEAgLTk2OSwyMiArMTAwNiwyMyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBwb2xsKHN0cnVjdCBmaWxlICpmaWxlcCwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlzdHJ1Y3QgSVIgKmlyID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgSVJfcnggKnJ4ID0gaXItPnJ4OwogCXVuc2lnbmVkIGludCByZXQ7CiAKIAlkcHJpbnRrKCJwb2xsIGNhbGxlZFxuIik7Ci0JaWYgKGlyLT5jX3J4LmFkZHIgPT0gMCkKKwlpZiAocnggPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQltdXRleF9sb2NrKCZpci0+YnVmX2xvY2spOworCW11dGV4X2xvY2soJnJ4LT5idWZfbG9jayk7CiAKLQlwb2xsX3dhaXQoZmlsZXAsICZpci0+YnVmLndhaXRfcG9sbCwgd2FpdCk7CisJcG9sbF93YWl0KGZpbGVwLCAmcngtPmJ1Zi53YWl0X3BvbGwsIHdhaXQpOwogCiAJZHByaW50aygicG9sbCByZXN1bHQgPSAlc1xuIiwKLQkJbGlyY19idWZmZXJfZW1wdHkoJmlyLT5idWYpID8gIjAiIDogIlBPTExJTnxQT0xMUkROT1JNIik7CisJCWxpcmNfYnVmZmVyX2VtcHR5KCZyeC0+YnVmKSA/ICIwIiA6ICJQT0xMSU58UE9MTFJETk9STSIpOwogCi0JcmV0ID0gbGlyY19idWZmZXJfZW1wdHkoJmlyLT5idWYpID8gMCA6IChQT0xMSU58UE9MTFJETk9STSk7CisJcmV0ID0gbGlyY19idWZmZXJfZW1wdHkoJnJ4LT5idWYpID8gMCA6IChQT0xMSU58UE9MTFJETk9STSk7CiAKLQltdXRleF91bmxvY2soJmlyLT5idWZfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZyeC0+YnVmX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTk5NCwxMCArMTAzMiw5IEBACiAJaW50IHJlc3VsdDsKIAl1bnNpZ25lZCBsb25nIG1vZGUsIGZlYXR1cmVzID0gMDsKIAotCWlmIChpci0+Y19yeC5hZGRyICE9IDApCisJZmVhdHVyZXMgfD0gTElSQ19DQU5fU0VORF9QVUxTRTsKKwlpZiAoaXItPnJ4ICE9IE5VTEwpCiAJCWZlYXR1cmVzIHw9IExJUkNfQ0FOX1JFQ19MSVJDQ09ERTsKLQlpZiAoaXItPmNfdHguYWRkciAhPSAwKQotCQlmZWF0dXJlcyB8PSBMSVJDX0NBTl9TRU5EX1BVTFNFOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIExJUkNfR0VUX0xFTkdUSDoKQEAgLTEwMjQsMTUgKzEwNjEsOSBAQAogCQkJcmVzdWx0ID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJY2FzZSBMSVJDX0dFVF9TRU5EX01PREU6Ci0JCWlmICghKGZlYXR1cmVzJkxJUkNfQ0FOX1NFTkRfTUFTSykpCi0JCQlyZXR1cm4gLUVOT1NZUzsKLQogCQlyZXN1bHQgPSBwdXRfdXNlcihMSVJDX01PREVfUFVMU0UsICh1bnNpZ25lZCBsb25nICopIGFyZyk7CiAJCWJyZWFrOwogCWNhc2UgTElSQ19TRVRfU0VORF9NT0RFOgotCQlpZiAoIShmZWF0dXJlcyZMSVJDX0NBTl9TRU5EX01BU0spKQotCQkJcmV0dXJuIC1FTk9TWVM7Ci0KIAkJcmVzdWx0ID0gZ2V0X3VzZXIobW9kZSwgKHVuc2lnbmVkIGxvbmcgKikgYXJnKTsKIAkJaWYgKCFyZXN1bHQgJiYgbW9kZSAhPSBMSVJDX01PREVfUFVMU0UpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwNDMsNiArMTA3NCwxNSBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qIGlyX2RldmljZXNfbG9jayBtdXN0IGJlIGhlbGQgKi8KK3N0YXRpYyBzdHJ1Y3QgSVIgKmZpbmRfaXJfZGV2aWNlX2J5X21pbm9yKHVuc2lnbmVkIGludCBtaW5vcikKK3sKKwlpZiAobWlub3IgPj0gTUFYX0lSQ1RMX0RFVklDRVMpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGlyX2RldmljZXNbbWlub3JdOworfQorCiAvKgogICogT3BlbiB0aGUgSVIgZGV2aWNlLiAgR2V0IGhvbGQgb2Ygb3VyIElSIHN0cnVjdHVyZSBhbmQKICAqIHN0YXNoIGl0IGluIHByaXZhdGVfZGF0YSBmb3IgdGhlIGZpbGUKQEAgLTEwNTEsMTUgKzEwOTEsMTUgQEAKIHsKIAlzdHJ1Y3QgSVIgKmlyOwogCWludCByZXQ7CisJdW5zaWduZWQgaW50IG1pbm9yID0gTUlOT1Iobm9kZS0+aV9yZGV2KTsKIAogCS8qIGZpbmQgb3VyIElSIHN0cnVjdCAqLwotCXVuc2lnbmVkIG1pbm9yID0gTUlOT1Iobm9kZS0+aV9yZGV2KTsKLQlpZiAobWlub3IgPj0gTUFYX0lSQ1RMX0RFVklDRVMpIHsKLQkJZHByaW50aygibWlub3IgJWQ6IG9wZW4gcmVzdWx0ID0gLUVOT0RFVlxuIiwKLQkJCW1pbm9yKTsKKwltdXRleF9sb2NrKCZpcl9kZXZpY2VzX2xvY2spOworCWlyID0gZmluZF9pcl9kZXZpY2VfYnlfbWlub3IobWlub3IpOworCW11dGV4X3VubG9jaygmaXJfZGV2aWNlc19sb2NrKTsKKworCWlmIChpciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JaXIgPSBpcl9kZXZpY2VzW21pbm9yXTsKIAogCS8qIGluY3JlbWVudCBpbiB1c2UgY291bnQgKi8KIAltdXRleF9sb2NrKCZpci0+aXJfbG9jayk7CkBAIC0xMTA2LDcgKzExNDYsNiBAQAogCiBzdGF0aWMgaW50IGlyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIHN0YXRpYyBpbnQgaXJfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKLXN0YXRpYyBpbnQgaXJfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogCiAjZGVmaW5lIElEX0ZMQUdfVFgJMHgwMQogI2RlZmluZSBJRF9GTEFHX0hEUFZSCTB4MDIKQEAgLTExMjYsNyArMTE2NSw2IEBACiAJfSwKIAkucHJvYmUJCT0gaXJfcHJvYmUsCiAJLnJlbW92ZQkJPSBpcl9yZW1vdmUsCi0JLmNvbW1hbmQJPSBpcl9jb21tYW5kLAogCS5pZF90YWJsZQk9IGlyX3RyYW5zY2VpdmVyX2lkLAogfTsKIApAQCAtMTE0NCwyMTQgKzExODIsMjUzIEBACiAJLnJlbGVhc2UJPSBjbG9zZQogfTsKIAorc3RhdGljIHZvaWQgZGVzdHJveV9yeF9rdGhyZWFkKHN0cnVjdCBJUl9yeCAqcngpCit7CisJLyogZW5kIHVwIHBvbGxpbmcgdGhyZWFkICovCisJaWYgKHJ4ICE9IE5VTEwgJiYgIUlTX0VSUl9PUl9OVUxMKHJ4LT50YXNrKSkgeworCQlrdGhyZWFkX3N0b3AocngtPnRhc2spOworCQlyeC0+dGFzayA9IE5VTEw7CisJfQorfQorCisvKiBpcl9kZXZpY2VzX2xvY2sgbXVzdCBiZSBoZWxkICovCitzdGF0aWMgaW50IGFkZF9pcl9kZXZpY2Uoc3RydWN0IElSICppcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfSVJDVExfREVWSUNFUzsgaSsrKQorCQlpZiAoaXJfZGV2aWNlc1tpXSA9PSBOVUxMKSB7CisJCQlpcl9kZXZpY2VzW2ldID0gaXI7CisJCQlicmVhazsKKwkJfQorCisJcmV0dXJuIGkgPT0gTUFYX0lSQ1RMX0RFVklDRVMgPyAtRU5PTUVNIDogaTsKK30KKworLyogaXJfZGV2aWNlc19sb2NrIG11c3QgYmUgaGVsZCAqLworc3RhdGljIHZvaWQgZGVsX2lyX2RldmljZShzdHJ1Y3QgSVIgKmlyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9JUkNUTF9ERVZJQ0VTOyBpKyspCisJCWlmIChpcl9kZXZpY2VzW2ldID09IGlyKSB7CisJCQlpcl9kZXZpY2VzW2ldID0gTlVMTDsKKwkJCWJyZWFrOworCQl9Cit9CisKIHN0YXRpYyBpbnQgaXJfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IElSICppciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi0JbXV0ZXhfbG9jaygmaXItPmlyX2xvY2spOworCW11dGV4X2xvY2soJmlyX2RldmljZXNfbG9jayk7CiAKLQlpZiAoaXItPmhhdmVfcnggfHwgaXItPmhhdmVfdHgpIHsKLQkJREVDTEFSRV9DT01QTEVUSU9OKHRuKTsKLQkJREVDTEFSRV9DT01QTEVUSU9OKHRuMik7Ci0KLQkJLyogZW5kIHVwIHBvbGxpbmcgdGhyZWFkICovCi0JCWlmIChpci0+dGFzayAmJiAhSVNfRVJSKGlyLT50YXNrKSkgewotCQkJaXItPnRfbm90aWZ5ID0gJnRuOwotCQkJaXItPnRfbm90aWZ5MiA9ICZ0bjI7Ci0JCQlpci0+c2h1dGRvd24gPSAxOwotCQkJd2FrZV91cF9wcm9jZXNzKGlyLT50YXNrKTsKLQkJCWNvbXBsZXRlKCZ0bjIpOwotCQkJd2FpdF9mb3JfY29tcGxldGlvbigmdG4pOwotCQkJaXItPnRfbm90aWZ5ID0gTlVMTDsKLQkJCWlyLT50X25vdGlmeTIgPSBOVUxMOwotCQl9Ci0KLQl9IGVsc2UgewotCQltdXRleF91bmxvY2soJmlyLT5pcl9sb2NrKTsKLQkJemlsb2dfZXJyb3IoIiVzOiBkZXRhY2hlZCBmcm9tIHNvbWV0aGluZyB3ZSBkaWRuJ3QgIgotCQkJICAgICJhdHRhY2ggdG9cbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGlyID09IE5VTEwpIHsKKwkJLyogV2UgZGVzdHJveWVkIGV2ZXJ5dGhpbmcgd2hlbiB0aGUgZmlyc3QgY2xpZW50IGNhbWUgdGhyb3VnaCAqLworCQltdXRleF91bmxvY2soJmlyX2RldmljZXNfbG9jayk7CisJCXJldHVybiAwOwogCX0KIAotCS8qIHVucmVnaXN0ZXIgbGlyYyBkcml2ZXIgKi8KLQlpZiAoaXItPmwubWlub3IgPj0gMCAmJiBpci0+bC5taW5vciA8IE1BWF9JUkNUTF9ERVZJQ0VTKSB7Ci0JCWxpcmNfdW5yZWdpc3Rlcl9kcml2ZXIoaXItPmwubWlub3IpOwotCQlpcl9kZXZpY2VzW2lyLT5sLm1pbm9yXSA9IE5VTEw7CisJLyogR29vZC1ieWUgTElSQyAqLworCWxpcmNfdW5yZWdpc3Rlcl9kcml2ZXIoaXItPmwubWlub3IpOworCisJLyogR29vZC1ieWUgUnggKi8KKwlkZXN0cm95X3J4X2t0aHJlYWQoaXItPnJ4KTsKKwlpZiAoaXItPnJ4ICE9IE5VTEwpIHsKKwkJaWYgKGlyLT5yeC0+YnVmLmZpZm9faW5pdGlhbGl6ZWQpCisJCQlsaXJjX2J1ZmZlcl9mcmVlKCZpci0+cngtPmJ1Zik7CisJCWkyY19zZXRfY2xpZW50ZGF0YShpci0+cngtPmMsIE5VTEwpOworCQlrZnJlZShpci0+cngpOwogCX0KIAotCS8qIGZyZWUgbWVtb3J5ICovCi0JbGlyY19idWZmZXJfZnJlZSgmaXItPmJ1Zik7Ci0JbXV0ZXhfdW5sb2NrKCZpci0+aXJfbG9jayk7CisJLyogR29vZC1ieWUgVHggKi8KKwlpMmNfc2V0X2NsaWVudGRhdGEoaXItPnR4LT5jLCBOVUxMKTsKKwlrZnJlZShpci0+dHgpOworCisJLyogR29vZC1ieWUgSVIgKi8KKwlkZWxfaXJfZGV2aWNlKGlyKTsKIAlrZnJlZShpcik7CiAKKwltdXRleF91bmxvY2soJmlyX2RldmljZXNfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKKworLyogaXJfZGV2aWNlc19sb2NrIG11c3QgYmUgaGVsZCAqLworc3RhdGljIHN0cnVjdCBJUiAqZmluZF9pcl9kZXZpY2VfYnlfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisJc3RydWN0IElSICppciA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0lSQ1RMX0RFVklDRVM7IGkrKykKKwkJaWYgKGlyX2RldmljZXNbaV0gIT0gTlVMTCAmJgorCQkgICAgaXJfZGV2aWNlc1tpXS0+YWRhcHRlciA9PSBhZGFwdGVyKSB7CisJCQlpciA9IGlyX2RldmljZXNbaV07CisJCQlicmVhazsKKwkJfQorCisJcmV0dXJuIGlyOworfQorCiBzdGF0aWMgaW50IGlyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQlzdHJ1Y3QgSVIgKmlyID0gTlVMTDsKKwlzdHJ1Y3QgSVIgKmlyOwogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGNsaWVudC0+YWRhcHRlcjsKLQljaGFyIGJ1ZjsKIAlpbnQgcmV0OwotCWludCBoYXZlX3J4ID0gMCwgaGF2ZV90eCA9IDA7CisJYm9vbCB0eF9wcm9iZSA9IGZhbHNlOwogCi0JZHByaW50aygiJXM6IGFkYXB0ZXIgbmFtZSAoJXMpIG5yICVkLCBpMmNfZGV2aWNlX2lkIG5hbWUgKCVzKSwgIgotCQkiY2xpZW50IGFkZHI9MHglMDJ4XG4iLAotCQlfX2Z1bmNfXywgYWRhcC0+bmFtZSwgYWRhcC0+bnIsIGlkLT5uYW1lLCBjbGllbnQtPmFkZHIpOworCWRwcmludGsoIiVzOiAlcyBvbiBpMmMtJWQgKCVzKSwgY2xpZW50IGFkZHI9MHglMDJ4XG4iLAorCQlfX2Z1bmNfXywgaWQtPm5hbWUsIGFkYXAtPm5yLCBhZGFwLT5uYW1lLCBjbGllbnQtPmFkZHIpOwogCiAJLyoKLQkgKiBGSVhNRSAtIFRoaXMgcHJvYmUgZnVuY3Rpb24gcHJvYmVzIGJvdGggdGhlIFR4IGFuZCBSeAotCSAqIGFkZHJlc3NlcyBvZiB0aGUgSVIgbWljcm9jb250cm9sbGVyLgotCSAqCi0JICogSG93ZXZlciwgdGhlIEkyQyBzdWJzeXN0ZW0gaXMgcGFzc2luZyBhbG9uZyBvbmUgSTJDIGNsaWVudCBhdCBhCi0JICogdGltZSwgYmFzZWQgb24gbWF0Y2hlcyB0byB0aGUgaXJfdHJhbnNjZWl2ZXJfaWRbXSB0YWJsZSBhYm92ZS4KLQkgKiBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCBlYWNoIGkyY19jbGllbnQgYWRkcmVzcyB3aWxsIGJlIHByb2JlZAotCSAqIGluZGl2aWR1YWxseSBieSBkcml2ZXJzIHNvIHRoZSBJMkMgc3Vic3lzdGVtIGNhbiBtYXJrIGFsbCBjbGllbnQKLQkgKiBhZGRyZXNzZXMgYXMgY2xhaW1lZCBvciBub3QuCi0JICoKLQkgKiBUaGlzIHByb2JlIHJvdXRpbmUgY2F1c2VzIG9ubHkgb25lIG9mIHRoZSBjbGllbnQgYWRkcmVzc2VzLCBUWCBvciBSWCwKLQkgKiB0byBiZSBjbGFpbWVkLiAgVGhpcyB3aWxsIGNhdXNlIGEgcHJvYmxlbSBpZiB0aGUgSTJDIHN1YnN5c3RlbSBpcwotCSAqIHN1YnNlcXVlbnRseSB0cmlnZ2VyZWQgdG8gcHJvYmUgdW5jbGFpbWVkIGNsaWVudHMgYWdhaW4uCisJICogVGhlIElSIHJlY2VpdmVyICAgIGlzIGF0IGkyYyBhZGRyZXNzIDB4NzEuCisJICogVGhlIElSIHRyYW5zbWl0dGVyIGlzIGF0IGkyYyBhZGRyZXNzIDB4NzAuCiAJICovCi0JLyoKLQkgKiBUaGUgZXh0ZXJuYWwgSVIgcmVjZWl2ZXIgaXMgYXQgaTJjIGFkZHJlc3MgMHg3MS4KLQkgKiBUaGUgSVIgdHJhbnNtaXR0ZXIgaXMgYXQgMHg3MC4KLQkgKi8KLQljbGllbnQtPmFkZHIgPSAweDcwOwogCi0JaWYgKCFkaXNhYmxlX3R4KSB7Ci0JCWlmIChpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCAmYnVmLCAxKSA9PSAxKQotCQkJaGF2ZV90eCA9IDE7Ci0JCWRwcmludGsoInByb2JlIDB4NzAgQCAlczogJXNcbiIsCi0JCQlhZGFwLT5uYW1lLCBoYXZlX3R4ID8gInN1Y2Nlc3MiIDogImZhaWxlZCIpOworCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBJRF9GTEFHX1RYKQorCQl0eF9wcm9iZSA9IHRydWU7CisJZWxzZSBpZiAodHhfb25seSkgLyogbW9kdWxlIG9wdGlvbiAqLworCQlyZXR1cm4gLUVOWElPOworCisJemlsb2dfaW5mbygicHJvYmluZyBJUiAlcyBvbiAlcyAoaTJjLSVkKVxuIiwKKwkJICAgdHhfcHJvYmUgPyAiVHgiIDogIlJ4IiwgYWRhcC0+bmFtZSwgYWRhcC0+bnIpOworCisJbXV0ZXhfbG9jaygmaXJfZGV2aWNlc19sb2NrKTsKKworCS8qIFVzZSBhIHNpbmdsZSBzdHJ1Y3QgSVIgaW5zdGFuY2UgZm9yIGJvdGggdGhlIFJ4IGFuZCBUeCBmdW5jdGlvbnMgKi8KKwlpciA9IGZpbmRfaXJfZGV2aWNlX2J5X2FkYXB0ZXIoYWRhcCk7CisJaWYgKGlyID09IE5VTEwpIHsKKwkJaXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgSVIpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGlyID09IE5VTEwpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dF9ub19pcjsKKwkJfQorCQkvKiBzdG9yZSBmb3IgdXNlIGluIGlyX3Byb2JlKCkgYWdhaW4sIGFuZCBvcGVuKCkgbGF0ZXIgb24gKi8KKwkJcmV0ID0gYWRkX2lyX2RldmljZShpcik7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9mcmVlX2lyOworCisJCWlyLT5hZGFwdGVyID0gYWRhcDsKKwkJbXV0ZXhfaW5pdCgmaXItPmlyX2xvY2spOworCisJCS8qIHNldCBsaXJjX2RldiBzdHVmZiAqLworCQltZW1jcHkoJmlyLT5sLCAmbGlyY190ZW1wbGF0ZSwgc2l6ZW9mKHN0cnVjdCBsaXJjX2RyaXZlcikpOworCQlpci0+bC5taW5vciAgICAgICA9IG1pbm9yOyAvKiBtb2R1bGUgb3B0aW9uICovCisJCWlyLT5sLmNvZGVfbGVuZ3RoID0gMTM7CisJCWlyLT5sLnJidWYJICA9IE5VTEw7CisJCWlyLT5sLmZvcHMJICA9ICZsaXJjX2ZvcHM7CisJCWlyLT5sLmRhdGEJICA9IGlyOworCQlpci0+bC5kZXYgICAgICAgICA9ICZhZGFwLT5kZXY7CisJCWlyLT5sLnNhbXBsZV9yYXRlID0gMDsKIAl9CiAKLQlpZiAoIWRpc2FibGVfcngpIHsKLQkJY2xpZW50LT5hZGRyID0gMHg3MTsKLQkJaWYgKGkyY19tYXN0ZXJfcmVjdihjbGllbnQsICZidWYsIDEpID09IDEpCi0JCQloYXZlX3J4ID0gMTsKLQkJZHByaW50aygicHJvYmUgMHg3MSBAICVzOiAlc1xuIiwKLQkJCWFkYXAtPm5hbWUsIGhhdmVfcnggPyAic3VjY2VzcyIgOiAiZmFpbGVkIik7CisJaWYgKHR4X3Byb2JlKSB7CisJCS8qIFNldCB1cCBhIHN0cnVjdCBJUl90eCBpbnN0YW5jZSAqLworCQlpci0+dHggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgSVJfdHgpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGlyLT50eCA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXRfZnJlZV94eDsKKwkJfQorCisJCWlyLT50eC0+YyA9IGNsaWVudDsKKwkJaXItPnR4LT5uZWVkX2Jvb3QgPSAxOworCQlpci0+dHgtPnBvc3RfdHhfcmVhZHlfcG9sbCA9CisJCQkgICAgICAgKGlkLT5kcml2ZXJfZGF0YSAmIElEX0ZMQUdfSERQVlIpID8gZmFsc2UgOiB0cnVlOworCX0gZWxzZSB7CisJCS8qIFNldCB1cCBhIHN0cnVjdCBJUl9yeCBpbnN0YW5jZSAqLworCQlpci0+cnggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgSVJfcngpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGlyLT5yeCA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXRfZnJlZV94eDsKKwkJfQorCisJCXJldCA9IGxpcmNfYnVmZmVyX2luaXQoJmlyLT5yeC0+YnVmLCAyLCBCVUZMRU4gLyAyKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2ZyZWVfeHg7CisKKwkJbXV0ZXhfaW5pdCgmaXItPnJ4LT5idWZfbG9jayk7CisJCWlyLT5yeC0+YyA9IGNsaWVudDsKKwkJaXItPnJ4LT5oZHB2cl9kYXRhX2ZtdCA9CisJCQkgICAgICAgKGlkLT5kcml2ZXJfZGF0YSAmIElEX0ZMQUdfSERQVlIpID8gdHJ1ZSA6IGZhbHNlOworCisJCS8qIHNldCBsaXJjX2RldiBzdHVmZiAqLworCQlpci0+bC5yYnVmID0gJmlyLT5yeC0+YnVmOwogCX0KIAotCWlmICghKGhhdmVfcnggfHwgaGF2ZV90eCkpIHsKLQkJemlsb2dfZXJyb3IoIiVzOiBubyBkZXZpY2VzIGZvdW5kXG4iLCBhZGFwLT5uYW1lKTsKLQkJZ290byBvdXRfbm9kZXY7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAibGlyY196aWxvZzogY2hpcCBmb3VuZCB3aXRoICVzXG4iLAotCQloYXZlX3J4ICYmIGhhdmVfdHggPyAiUlggYW5kIFRYIiA6Ci0JCQloYXZlX3J4ID8gIlJYIG9ubHkiIDogIlRYIG9ubHkiKTsKLQotCWlyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IElSKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWlyKQotCQlnb3RvIG91dF9ub21lbTsKLQotCXJldCA9IGxpcmNfYnVmZmVyX2luaXQoJmlyLT5idWYsIDIsIEJVRkxFTiAvIDIpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X25vbWVtOwotCi0JbXV0ZXhfaW5pdCgmaXItPmlyX2xvY2spOwotCW11dGV4X2luaXQoJmlyLT5idWZfbG9jayk7Ci0JaXItPm5lZWRfYm9vdCA9IDE7Ci0JaXItPmlzX2hkcHZyID0gKGlkLT5kcml2ZXJfZGF0YSAmIElEX0ZMQUdfSERQVlIpID8gdHJ1ZSA6IGZhbHNlOwotCi0JbWVtY3B5KCZpci0+bCwgJmxpcmNfdGVtcGxhdGUsIHNpemVvZihzdHJ1Y3QgbGlyY19kcml2ZXIpKTsKLQlpci0+bC5taW5vciA9IC0xOwotCi0JLyogSTJDIGF0dGFjaCB0byBkZXZpY2UgKi8KIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBpcik7CiAKKwkvKiBQcm9jZWVkIG9ubHkgaWYgd2UgaGF2ZSB0aGUgcmVxdWlyZWQgVHggYW5kIFJ4IGNsaWVudHMgcmVhZHkgdG8gZ28gKi8KKwlpZiAoaXItPnR4ID09IE5VTEwgfHwKKwkgICAgKGlyLT5yeCA9PSBOVUxMICYmICF0eF9vbmx5KSkgeworCQl6aWxvZ19pbmZvKCJwcm9iZSBvZiBJUiAlcyBvbiAlcyAoaTJjLSVkKSBkb25lLiBXYWl0aW5nIG9uICIKKwkJCSAgICJJUiAlcy5cbiIsIHR4X3Byb2JlID8gIlR4IiA6ICJSeCIsIGFkYXAtPm5hbWUsCisJCQkgICBhZGFwLT5uciwgdHhfcHJvYmUgPyAiUngiIDogIlR4Iik7CisJCWdvdG8gb3V0X29rOworCX0KKwogCS8qIGluaXRpYWxpc2UgUlggZGV2aWNlICovCi0JaWYgKGhhdmVfcngpIHsKLQkJREVDTEFSRV9DT01QTEVUSU9OKHRuKTsKLQkJbWVtY3B5KCZpci0+Y19yeCwgY2xpZW50LCBzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKLQotCQlpci0+Y19yeC5hZGRyID0gMHg3MTsKLQkJc3RybGNweShpci0+Y19yeC5uYW1lLCBaSUxPR19IQVVQUEFVR0VfSVJfUlhfTkFNRSwKLQkJCUkyQ19OQU1FX1NJWkUpOwotCisJaWYgKGlyLT5yeCAhPSBOVUxMKSB7CiAJCS8qIHRyeSB0byBmaXJlIHVwIHBvbGxpbmcgdGhyZWFkICovCi0JCWlyLT50X25vdGlmeSA9ICZ0bjsKLQkJaXItPnRhc2sgPSBrdGhyZWFkX3J1bihsaXJjX3RocmVhZCwgaXIsICJsaXJjX3ppbG9nIik7Ci0JCWlmIChJU19FUlIoaXItPnRhc2spKSB7Ci0JCQlyZXQgPSBQVFJfRVJSKGlyLT50YXNrKTsKLQkJCXppbG9nX2Vycm9yKCJsaXJjX3JlZ2lzdGVyX2RyaXZlcjogY2Fubm90IHJ1biAiCi0JCQkJICAgICJwb2xsIHRocmVhZCAlZFxuIiwgcmV0KTsKLQkJCWdvdG8gZXJyOworCQlpci0+cngtPnRhc2sgPSBrdGhyZWFkX3J1bihsaXJjX3RocmVhZCwgaXIsCisJCQkJCSAgICJ6aWxvZy1yeC1pMmMtJWQiLCBhZGFwLT5ucik7CisJCWlmIChJU19FUlIoaXItPnJ4LT50YXNrKSkgeworCQkJcmV0ID0gUFRSX0VSUihpci0+cngtPnRhc2spOworCQkJemlsb2dfZXJyb3IoIiVzOiBjb3VsZCBub3Qgc3RhcnQgSVIgUnggcG9sbGluZyB0aHJlYWQiCisJCQkJICAgICJcbiIsIF9fZnVuY19fKTsKKwkJCWdvdG8gb3V0X2ZyZWVfeHg7CiAJCX0KLQkJd2FpdF9mb3JfY29tcGxldGlvbigmdG4pOwotCQlpci0+dF9ub3RpZnkgPSBOVUxMOwotCQlpci0+aGF2ZV9yeCA9IDE7CiAJfQogCi0JLyogaW5pdGlhbGlzZSBUWCBkZXZpY2UgKi8KLQlpZiAoaGF2ZV90eCkgewotCQltZW1jcHkoJmlyLT5jX3R4LCBjbGllbnQsIHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOwotCQlpci0+Y190eC5hZGRyID0gMHg3MDsKLQkJc3RybGNweShpci0+Y190eC5uYW1lLCBaSUxPR19IQVVQUEFVR0VfSVJfVFhfTkFNRSwKLQkJCUkyQ19OQU1FX1NJWkUpOwotCQlpci0+aGF2ZV90eCA9IDE7Ci0JfQotCi0JLyogc2V0IGxpcmNfZGV2IHN0dWZmICovCi0JaXItPmwuY29kZV9sZW5ndGggPSAxMzsKLQlpci0+bC5yYnVmCSAgPSAmaXItPmJ1ZjsKLQlpci0+bC5mb3BzCSAgPSAmbGlyY19mb3BzOwotCWlyLT5sLmRhdGEJICA9IGlyOwotCWlyLT5sLm1pbm9yICAgICAgID0gbWlub3I7Ci0JaXItPmwuZGV2ICAgICAgICAgPSAmYWRhcC0+ZGV2OwotCWlyLT5sLnNhbXBsZV9yYXRlID0gMDsKLQogCS8qIHJlZ2lzdGVyIHdpdGggbGlyYyAqLwogCWlyLT5sLm1pbm9yID0gbGlyY19yZWdpc3Rlcl9kcml2ZXIoJmlyLT5sKTsKIAlpZiAoaXItPmwubWlub3IgPCAwIHx8IGlyLT5sLm1pbm9yID49IE1BWF9JUkNUTF9ERVZJQ0VTKSB7Ci0JCXppbG9nX2Vycm9yKCJpcl9hdHRhY2g6IFwibWlub3JcIiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJWQgIgotCQkJICAgICIoJWQpIVxuIiwgTUFYX0lSQ1RMX0RFVklDRVMtMSwgaXItPmwubWlub3IpOworCQl6aWxvZ19lcnJvcigiJXM6IFwibWlub3JcIiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJWQgKCVkKSFcbiIsCisJCQkgICAgX19mdW5jX18sIE1BWF9JUkNUTF9ERVZJQ0VTLTEsIGlyLT5sLm1pbm9yKTsKIAkJcmV0ID0gLUVCQURSUUM7Ci0JCWdvdG8gZXJyOworCQlnb3RvIG91dF9mcmVlX3RocmVhZDsKIAl9CiAKLQkvKiBzdG9yZSB0aGlzIGZvciBnZXR0aW5nIGJhY2sgaW4gb3BlbigpIGxhdGVyIG9uICovCi0JaXJfZGV2aWNlc1tpci0+bC5taW5vcl0gPSBpcjsKLQogCS8qCiAJICogaWYgd2UgaGF2ZSB0aGUgdHggZGV2aWNlLCBsb2FkIHRoZSAnZmlybXdhcmUnLiAgV2UgZG8gdGhpcwogCSAqIGFmdGVyIHJlZ2lzdGVyaW5nIHdpdGggbGlyYyBhcyBvdGhlcndpc2UgaG90cGx1ZyBzZWVtcyB0byB0YWtlCiAJICogMTBzIHRvIGNyZWF0ZSB0aGUgbGlyYyBkZXZpY2UuCiAJICovCi0JaWYgKGhhdmVfdHgpIHsKLQkJLyogU3BlY2lhbCBUWCBpbml0ICovCi0JCXJldCA9IHR4X2luaXQoaXIpOwotCQlpZiAocmV0ICE9IDApCi0JCQlnb3RvIGVycjsKKwlyZXQgPSB0eF9pbml0KGlyLT50eCk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIG91dF91bnJlZ2lzdGVyOworCisJemlsb2dfaW5mbygicHJvYmUgb2YgSVIgJXMgb24gJXMgKGkyYy0lZCkgZG9uZS4gSVIgdW5pdCByZWFkeS5cbiIsCisJCSAgIHR4X3Byb2JlID8gIlR4IiA6ICJSeCIsIGFkYXAtPm5hbWUsIGFkYXAtPm5yKTsKK291dF9vazoKKwltdXRleF91bmxvY2soJmlyX2RldmljZXNfbG9jayk7CisJcmV0dXJuIDA7CisKK291dF91bnJlZ2lzdGVyOgorCWxpcmNfdW5yZWdpc3Rlcl9kcml2ZXIoaXItPmwubWlub3IpOworb3V0X2ZyZWVfdGhyZWFkOgorCWRlc3Ryb3lfcnhfa3RocmVhZChpci0+cngpOworb3V0X2ZyZWVfeHg6CisJaWYgKGlyLT5yeCAhPSBOVUxMKSB7CisJCWlmIChpci0+cngtPmJ1Zi5maWZvX2luaXRpYWxpemVkKQorCQkJbGlyY19idWZmZXJfZnJlZSgmaXItPnJ4LT5idWYpOworCQlpZiAoaXItPnJ4LT5jICE9IE5VTEwpCisJCQlpMmNfc2V0X2NsaWVudGRhdGEoaXItPnJ4LT5jLCBOVUxMKTsKKwkJa2ZyZWUoaXItPnJ4KTsKIAl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyOgotCS8qIHVuZG8gZXZlcnl0aGluZywgaG9wZWZ1bGx5Li4uICovCi0JaWYgKGlyLT5jX3J4LmFkZHIpCi0JCWlyX3JlbW92ZSgmaXItPmNfcngpOwotCWlmIChpci0+Y190eC5hZGRyKQotCQlpcl9yZW1vdmUoJmlyLT5jX3R4KTsKLQlyZXR1cm4gcmV0OwotCi1vdXRfbm9kZXY6Ci0Jemlsb2dfZXJyb3IoIm5vIGRldmljZSBmb3VuZFxuIik7Ci0JcmV0dXJuIC1FTk9ERVY7Ci0KLW91dF9ub21lbToKLQl6aWxvZ19lcnJvcigibWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7CisJaWYgKGlyLT50eCAhPSBOVUxMKSB7CisJCWlmIChpci0+dHgtPmMgIT0gTlVMTCkKKwkJCWkyY19zZXRfY2xpZW50ZGF0YShpci0+dHgtPmMsIE5VTEwpOworCQlrZnJlZShpci0+dHgpOworCX0KK291dF9mcmVlX2lyOgorCWRlbF9pcl9kZXZpY2UoaXIpOwogCWtmcmVlKGlyKTsKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotc3RhdGljIGludCBpcl9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQkvKiBub3RoaW5nICovCi0JcmV0dXJuIDA7CitvdXRfbm9faXI6CisJemlsb2dfZXJyb3IoIiVzOiBwcm9iaW5nIElSICVzIG9uICVzIChpMmMtJWQpIGZhaWxlZCB3aXRoICVkXG4iLAorCQkgICAgX19mdW5jX18sIHR4X3Byb2JlID8gIlR4IiA6ICJSeCIsIGFkYXAtPm5hbWUsIGFkYXAtPm5yLAorCQkgICByZXQpOworCW11dGV4X3VubG9jaygmaXJfZGV2aWNlc19sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IF9faW5pdCB6aWxvZ19pbml0KHZvaWQpCkBAIC0xMzYxLDYgKzE0MzgsNyBAQAogCXppbG9nX25vdGlmeSgiWmlsb2cvSGF1cHBhdWdlIElSIGRyaXZlciBpbml0aWFsaXppbmdcbiIpOwogCiAJbXV0ZXhfaW5pdCgmdHhfZGF0YV9sb2NrKTsKKwltdXRleF9pbml0KCZpcl9kZXZpY2VzX2xvY2spOwogCiAJcmVxdWVzdF9tb2R1bGUoImZpcm13YXJlX2NsYXNzIik7CiAKQEAgLTEzODYsNyArMTQ2NCw4IEBACiAKIE1PRFVMRV9ERVNDUklQVElPTigiWmlsb2cvSGF1cHBhdWdlIGluZnJhcmVkIHRyYW5zbWl0dGVyIGRyaXZlciAoaTJjIHN0YWNrKSIpOwogTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciwgTWljaGFsIEtvY2hhbm93aWN6LCBDaHJpc3RvcGggQmFydGVsbXVzLCAiCi0JICAgICAgIlVscmljaCBNdWVsbGVyLCBTdGVmYW4gSmFobiwgSmVyb21lIEJyb2NrLCBNYXJrIFdlYXZlciIpOworCSAgICAgICJVbHJpY2ggTXVlbGxlciwgU3RlZmFuIEphaG4sIEplcm9tZSBCcm9jaywgTWFyayBXZWF2ZXIsICIKKwkgICAgICAiQW5keSBXYWxscyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogLyogZm9yIGNvbXBhdCB3aXRoIG9sZCBuYW1lLCB3aGljaCBpc24ndCBhbGwgdGhhdCBhY2N1cmF0ZSBhbnltb3JlICovCiBNT0RVTEVfQUxJQVMoImxpcmNfcHZyMTUwIik7CkBAIC0xMzk3LDggKzE0NzYsNSBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIik7CiAKLW1vZHVsZV9wYXJhbShkaXNhYmxlX3J4LCBib29sLCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9yeCwgIkRpc2FibGUgdGhlIElSIHJlY2VpdmVyIGRldmljZSIpOwotCi1tb2R1bGVfcGFyYW0oZGlzYWJsZV90eCwgYm9vbCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfdHgsICJEaXNhYmxlIHRoZSBJUiB0cmFuc21pdHRlciBkZXZpY2UiKTsKK21vZHVsZV9wYXJhbSh0eF9vbmx5LCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModHhfb25seSwgIk9ubHkgaGFuZGxlIHRoZSBJUiB0cmFuc21pdCBmdW5jdGlvbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21zbS9tc21fZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vbXNtX2ZiLmMKaW5kZXggMjNmYTA0OS4uYTJmMjlkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21zbS9tc21fZmIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL21zbV9mYi5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAlpZiAoKCFtZmQpIHx8IChtZmQtPmtleSAhPSBNRkRfS0VZKSkKIAkJcmV0dXJuIDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQobWZkLT5mYmksIDEpOwogCiAJcmV0ID0gbXNtX2ZiX3N1c3BlbmRfc3ViKG1mZCk7CkBAIC0zNTgsNyArMzU4LDcgQEAKIAkJcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gc3RhdGU7CiAJfQogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KICNlbHNlCkBAIC00MzEsMTEgKzQzMSwxMSBAQAogCWlmICgoIW1mZCkgfHwgKG1mZC0+a2V5ICE9IE1GRF9LRVkpKQogCQlyZXR1cm4gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlyZXQgPSBtc21fZmJfcmVzdW1lX3N1YihtZmQpOwogCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CiAJZmJfc2V0X3N1c3BlbmQobWZkLT5mYmksIDEpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbi5jCmluZGV4IDlmMjZkYzkuLjU2YTI4M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb24uYwpAQCAtMzczLDE3ICszNzMsMTcgQEAKIAkJICoKIAkJICogRm9yIG5vdywgd2UganVzdCBob3BlLi4KIAkJICovCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCWlnbm9yZV9mYl9ldmVudHMgPSAxOwogCQlpZiAoZmJfYmxhbmsoZmJpbmZvLCBGQl9CTEFOS19VTkJMQU5LKSkgewogCQkJaWdub3JlX2ZiX2V2ZW50cyA9IDA7Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQkJcHJpbnRrKEtFUk5fRVJSICJvbHBjLWRjb246ICBGYWlsZWQgdG8gZW50ZXIgQ1BVIG1vZGVcbiIpOwogCQkJZGNvbl9wZW5kaW5nID0gRENPTl9TT1VSQ0VfRENPTjsKIAkJCXJldHVybjsKIAkJfQogCQlpZ25vcmVfZmJfZXZlbnRzID0gMDsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCiAJCS8qIEFuZCB0dXJuIG9mZiB0aGUgRENPTiAqLwogCQlwZGF0YS0+c2V0X2Rjb25sb2FkKDEpOwpAQCAtNDM1LDEyICs0MzUsMTIgQEAKIAkJCX0KIAkJfQogCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCWlnbm9yZV9mYl9ldmVudHMgPSAxOwogCQlpZiAoZmJfYmxhbmsoZmJpbmZvLCBGQl9CTEFOS19QT1dFUkRPV04pKQogCQkJcHJpbnRrKEtFUk5fRVJSICJvbHBjLWRjb246ICBjb3VsZG4ndCBibGFuayBmYiFcbiIpOwogCQlpZ25vcmVfZmJfZXZlbnRzID0gMDsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCiAJCXByaW50ayhLRVJOX0lORk8gIm9scGMtZGNvbjogVGhlIERDT04gaGFzIGNvbnRyb2xcbiIpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbWFpbl9kZXYuYwppbmRleCA3MDE1NjFkLi4yMzZkZDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X21haW5fZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jCkBAIC00ODQsOCArNDg0LDYgQEAKIAluZXRfZGV2LT5tbF9wcml2ID0gKHZvaWQgKilwQWQ7CiAJcEFkLT5uZXRfZGV2ID0gbmV0X2RldjsKIAotCW5ldGlmX3N0b3BfcXVldWUobmV0X2Rldik7Ci0KIAlyZXR1cm4gbmV0X2RldjsKIAogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC91c2JfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvdXNiX21haW5fZGV2LmMKaW5kZXggZWU2OGQ1MS4uMzIyYmY0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC91c2JfbWFpbl9kZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3VzYl9tYWluX2Rldi5jCkBAIC0xMDYsNiArMTA2LDcgQEAKIAl7VVNCX0RFVklDRSgweDA0MTEsIDB4MDE2Zil9LAkvKiBNZWxDby4sSW5jLiBXTEktVUMtRzMwMU4gKi8KIAl7VVNCX0RFVklDRSgweDE3MzcsIDB4MDA3MCl9LAkvKiBMaW5rc3lzIFdVU0IxMDAgKi8KIAl7VVNCX0RFVklDRSgweDE3MzcsIDB4MDA3MSl9LAkvKiBMaW5rc3lzIFdVU0I2MDBOICovCisJe1VTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzgpfSwJLyogTGlua3N5cyBXVVNCMTAwdjIgKi8KIAl7VVNCX0RFVklDRSgweDA0MTEsIDB4MDBlOCl9LAkvKiBCdWZmYWxvIFdMSS1VQy1HMzAwTiAqLwogCXtVU0JfREVWSUNFKDB4MDUwZCwgMHg4MTVjKX0sCS8qIEJlbGtpbiBGNUQ4MDUzICovCiAJe1VTQl9ERVZJQ0UoMHgxMDBELCAweDkwMzEpfSwJLyogTW90b3JvbGEgMjc3MCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvaGFsX2luaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL2hhbF9pbml0LmMKaW5kZXggMzIwODhhNi4uODRiZTM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvaGFsX2luaXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9oYWxfaW5pdC5jCkBAIC0xMjgsMTIgKzEyOCwxMyBAQAogCXU4ICpwdG1wY2hhciA9IE5VTEwsICpwcGF5bG9hZCwgKnB0cjsKIAlzdHJ1Y3QgdHhfZGVzYyAqcHR4X2Rlc2M7CiAJdTMyIHR4ZHNjcF9zeiA9IHNpemVvZihzdHJ1Y3QgdHhfZGVzYyk7CisJdTggcmV0ID0gX0ZBSUw7CiAKIAl1bGZpbGVsZW5ndGggPSBydGw4NzF4X29wZW5fZncocGFkYXB0ZXIsICZwaGZ3ZmlsZV9oZGwsICZwbWFwcGVkZncpOwogCWlmIChwbWFwcGVkZncgJiYgKHVsZmlsZWxlbmd0aCA+IDApKSB7CiAJCXVwZGF0ZV9md2hkcigmZndoZHIsIHBtYXBwZWRmdyk7CiAJCWlmIChjaGtfZndoZHIoJmZ3aGRyLCB1bGZpbGVsZW5ndGgpID09IF9GQUlMKQotCQkJZ290byBleGl0X2ZhaWw7CisJCQlnb3RvIGZpcm13YXJlX3JlbDsKIAkJZmlsbF9md3ByaXYocGFkYXB0ZXIsICZmd2hkci5md3ByaXYpOwogCQkvKiBmaXJtd2FyZSBjaGVjayBvayAqLwogCQltYXhsZW4gPSAoZndoZHIuaW1nX0lNRU1fc2l6ZSA+IGZ3aGRyLmltZ19TUkFNX3NpemUpID8KQEAgLTE0MSw3ICsxNDIsNyBAQAogCQltYXhsZW4gKz0gdHhkc2NwX3N6OwogCQlwdG1wY2hhciA9IF9tYWxsb2MobWF4bGVuICsgRldCVUZGX0FMSUdOX1NaKTsKIAkJaWYgKHB0bXBjaGFyID09IE5VTEwpCi0JCQlyZXR1cm4gX0ZBSUw7CisJCQlnb3RvIGZpcm13YXJlX3JlbDsKIAogCQlwdHhfZGVzYyA9IChzdHJ1Y3QgdHhfZGVzYyAqKShwdG1wY2hhciArIEZXQlVGRl9BTElHTl9TWiAtCiAJCQkgICAgKChhZGRyX3QpKHB0bXBjaGFyKSAmIChGV0JVRkZfQUxJR05fU1ogLSAxKSkpOwpAQCAtMjczLDExICsyNzQsMTMgQEAKIAkJCWdvdG8gZXhpdF9mYWlsOwogCX0gZWxzZQogCQlnb3RvIGV4aXRfZmFpbDsKLQlyZXR1cm4gX1NVQ0NFU1M7CisJcmV0ID0gX1NVQ0NFU1M7CiAKIGV4aXRfZmFpbDoKIAlrZnJlZShwdG1wY2hhcik7Ci0JcmV0dXJuIF9GQUlMOworZmlybXdhcmVfcmVsOgorCXJlbGVhc2VfZmlybXdhcmUoKHN0cnVjdCBmaXJtd2FyZSAqKXBoZndmaWxlX2hkbCk7CisJcmV0dXJuIHJldDsKIH0KIAogdWludCBydGw4NzEyX2hhbF9pbml0KHN0cnVjdCBfYWRhcHRlciAqcGFkYXB0ZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi91c2JfaW50Zi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvdXNiX2ludGYuYwppbmRleCBhNjkyZWU4Li4yMWNlMmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi91c2JfaW50Zi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3VzYl9pbnRmLmMKQEAgLTQ3LDU0ICs0NywxMjMgQEAKIHN0YXRpYyB2b2lkIHI4NzF4dV9kZXZfcmVtb3ZlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICpwdXNiX2ludGYpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcnRsODcxeF91c2JfaWRfdGJsW10gPSB7Ci0JLyo5MlNVCi0JICogUmVhbHRlayAqLwotCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTcxKX0sCi0Je1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxNzIpfSwKKworLyogUlRMODE4OFNVICovCisJLyogUmVhbHRlayAqLworCXtVU0JfREVWSUNFKDB4MEJEQSwgMHg4MTcxKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxNzMpfSwKLQl7VVNCX0RFVklDRSgweDBiZGEsIDB4ODE3NCl9LAogCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4NzEyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDg3MTMpfSwKIAl7VVNCX0RFVklDRSgweDBiZGEsIDB4QzUxMil9LAotCS8qIEFib2NvbSAgKi8KKwkvKiBBYm9jb20gKi8KIAl7VVNCX0RFVklDRSgweDA3QjgsIDB4ODE4OCl9LAotCS8qIENvcmVnYSAqLwotCXtVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDQ3KX0sCi0JLyogRGxpbmsgKi8KLQl7VVNCX0RFVklDRSgweDA3ZDEsIDB4MzMwMyl9LAotCXtVU0JfREVWSUNFKDB4MDdkMSwgMHgzMzAyKX0sCi0Je1VTQl9ERVZJQ0UoMHgwN2QxLCAweDMzMDApfSwKLQkvKiBEbGluayBmb3IgU2t5d29ydGggKi8KLQl7VVNCX0RFVklDRSgweDE0YjIsIDB4MzMwMCl9LAotCXtVU0JfREVWSUNFKDB4MTRiMiwgMHgzMzAxKX0sCi0Je1VTQl9ERVZJQ0UoMHgxNGIyLCAweDMzMDIpfSwKLQkvKiBFbkdlbml1cyAqLwotCXtVU0JfREVWSUNFKDB4MTc0MCwgMHg5NjAzKX0sCi0Je1VTQl9ERVZJQ0UoMHgxNzQwLCAweDk2MDUpfSwKKwkvKiBBU1VTICovCisJe1VTQl9ERVZJQ0UoMHgwQjA1LCAweDE3ODYpfSwKKwl7VVNCX0RFVklDRSgweDBCMDUsIDB4MTc5MSl9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCiAJLyogQmVsa2luICovCi0Je1VTQl9ERVZJQ0UoMHgwNTBkLCAweDgxNUYpfSwKLQl7VVNCX0RFVklDRSgweDA1MGQsIDB4OTQ1QSl9LAotCXtVU0JfREVWSUNFKDB4MDUwZCwgMHg4NDVBKX0sCi0JLyogR3VpbGxlbW90ICovCi0Je1VTQl9ERVZJQ0UoMHgwNmY4LCAweGUwMzEpfSwKKwl7VVNCX0RFVklDRSgweDA1MEQsIDB4OTQ1QSl9LAorCS8qIENvcmVnYSAqLworCXtVU0JfREVWSUNFKDB4MDdBQSwgMHgwMDQ3KX0sCisJLyogRC1MaW5rICovCisJe1VTQl9ERVZJQ0UoMHgyMDAxLCAweDMzMDYpfSwKKwl7VVNCX0RFVklDRSgweDA3RDEsIDB4MzMwNil9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCiAJLyogRWRpbWF4ICovCiAJe1VTQl9ERVZJQ0UoMHg3MzkyLCAweDc2MTEpfSwKLQl7VVNCX0RFVklDRSgweDczOTIsIDB4NzYxMil9LAotCXtVU0JfREVWSUNFKDB4NzM5MiwgMHg3NjIyKX0sCisJLyogRW5HZW5pdXMgKi8KKwl7VVNCX0RFVklDRSgweDE3NDAsIDB4OTYwMyl9LAorCS8qIEhhd2tpbmcgKi8KKwl7VVNCX0RFVklDRSgweDBFNjYsIDB4MDAxNil9LAorCS8qIEhlcmN1bGVzICovCisJe1VTQl9ERVZJQ0UoMHgwNkY4LCAweEUwMzQpfSwKKwl7VVNCX0RFVklDRSgweDA2RjgsIDB4RTAzMil9LAorCS8qIExvZ2l0ZWMgKi8KKwl7VVNCX0RFVklDRSgweDA3ODksIDB4MDE2Nyl9LAorCS8qIFBDSSAqLworCXtVU0JfREVWSUNFKDB4MjAxOSwgMHhBQjI4KX0sCisJe1VTQl9ERVZJQ0UoMHgyMDE5LCAweEVEMTYpfSwKIAkvKiBTaXRlY29tICovCisJe1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwNTcpfSwKIAl7VVNCX0RFVklDRSgweDBERjYsIDB4MDA0NSl9LAorCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDU5KX0sIC8qIDExbiBtb2RlIGRpc2FibGUgKi8KKwl7VVNCX0RFVklDRSgweDBERjYsIDB4MDA0Qil9LAorCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDYzKX0sCisJLyogU3dlZXggKi8KKwl7VVNCX0RFVklDRSgweDE3N0YsIDB4MDE1NCl9LAorCS8qIFRoaW5rd2FyZSAqLworCXtVU0JfREVWSUNFKDB4MEJEQSwgMHg1MDc3KX0sCisJLyogVG9zaGliYSAqLworCXtVU0JfREVWSUNFKDB4MTY5MCwgMHgwNzUyKX0sCisJLyogLSAqLworCXtVU0JfREVWSUNFKDB4MjBGNCwgMHg2NDZCKX0sCisJe1VTQl9ERVZJQ0UoMHgwODNBLCAweEM1MTIpfSwKKworLyogUlRMODE5MVNVICovCisJLyogUmVhbHRlayAqLworCXtVU0JfREVWSUNFKDB4MEJEQSwgMHg4MTcyKX0sCisJLyogQW1pZ28gKi8KKwl7VVNCX0RFVklDRSgweDBFQjAsIDB4OTA2MSl9LAorCS8qIEFTVVMvRUtCICovCisJe1VTQl9ERVZJQ0UoMHgwQkRBLCAweDgxNzIpfSwKKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMyMyl9LAorCXtVU0JfREVWSUNFKDB4MTNEMywgMHgzMzExKX0sIC8qIDExbiBtb2RlIGRpc2FibGUgKi8KKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzM0Mil9LAorCS8qIEFTVVMvRUtCTGVub3ZvICovCisJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMzMpfSwKKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMzNCl9LAorCXtVU0JfREVWSUNFKDB4MTNEMywgMHgzMzM1KX0sIC8qIDExbiBtb2RlIGRpc2FibGUgKi8KKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMzNil9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCisJLyogQVNVUy9NZWRpYSBCT1ggKi8KKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMwOSl9LAorCS8qIEJlbGtpbiAqLworCXtVU0JfREVWSUNFKDB4MDUwRCwgMHg4MTVGKX0sCisJLyogRC1MaW5rICovCisJe1VTQl9ERVZJQ0UoMHgwN0QxLCAweDMzMDIpfSwKKwl7VVNCX0RFVklDRSgweDA3RDEsIDB4MzMwMCl9LAorCXtVU0JfREVWSUNFKDB4MDdEMSwgMHgzMzAzKX0sCisJLyogRWRpbWF4ICovCisJe1VTQl9ERVZJQ0UoMHg3MzkyLCAweDc2MTIpfSwKKwkvKiBFbkdlbml1cyAqLworCXtVU0JfREVWSUNFKDB4MTc0MCwgMHg5NjA1KX0sCisJLyogR3VpbGxlbW90ICovCisJe1VTQl9ERVZJQ0UoMHgwNkY4LCAweEUwMzEpfSwKIAkvKiBIYXdraW5nICovCiAJe1VTQl9ERVZJQ0UoMHgwRTY2LCAweDAwMTUpfSwKLQl7VVNCX0RFVklDRSgweDBFNjYsIDB4MDAxNil9LAotCXtVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzg2KX0sCi0Je1VTQl9ERVZJQ0UoMHgwYjA1LCAweDE3OTEpfSwgICAgLyogMTFuIG1vZGUgZGlzYWJsZSAqLwotCisJLyogTWVkaWFvICovCiAJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMDYpfSwKLQl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMwOSl9LAorCS8qIFBDSSAqLworCXtVU0JfREVWSUNFKDB4MjAxOSwgMHhFRDE4KX0sCisJe1VTQl9ERVZJQ0UoMHgyMDE5LCAweDQ5MDEpfSwKKwkvKiBTaXRlY29tICovCisJe1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwNTgpfSwKKwl7VVNCX0RFVklDRSgweDBERjYsIDB4MDA0OSl9LAorCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDRDKX0sCisJe1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwNjQpfSwKKwkvKiBTa3l3b3J0aCAqLworCXtVU0JfREVWSUNFKDB4MTRiMiwgMHgzMzAwKX0sCisJe1VTQl9ERVZJQ0UoMHgxNGIyLCAweDMzMDEpfSwKKwl7VVNCX0RFVklDRSgweDE0QjIsIDB4MzMwMil9LAorCS8qIC0gKi8KKwl7VVNCX0RFVklDRSgweDA0RjIsIDB4QUZGMil9LAorCXtVU0JfREVWSUNFKDB4MDRGMiwgMHhBRkY1KX0sCisJe1VTQl9ERVZJQ0UoMHgwNEYyLCAweEFGRjYpfSwKKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMzOSl9LAorCXtVU0JfREVWSUNFKDB4MTNEMywgMHgzMzQwKX0sIC8qIDExbiBtb2RlIGRpc2FibGUgKi8KKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzM0MSl9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCiAJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMTApfSwKLQl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMxMSl9LCAgICAvKiAxMW4gbW9kZSBkaXNhYmxlICovCiAJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMjUpfSwKLQl7VVNCX0RFVklDRSgweDA4M0EsIDB4QzUxMil9LAorCisvKiBSVEw4MTkyU1UgKi8KKwkvKiBSZWFsdGVrICovCisJe1VTQl9ERVZJQ0UoMHgwQkRBLCAweDgxNzQpfSwKKwl7VVNCX0RFVklDRSgweDBCREEsIDB4ODE3NCl9LAorCS8qIEJlbGtpbiAqLworCXtVU0JfREVWSUNFKDB4MDUwRCwgMHg4NDVBKX0sCisJLyogQ29yZWdhICovCisJe1VTQl9ERVZJQ0UoMHgwN0FBLCAweDAwNTEpfSwKKwkvKiBFZGltYXggKi8KKwl7VVNCX0RFVklDRSgweDczOTIsIDB4NzYyMil9LAorCS8qIE5FQyAqLworCXtVU0JfREVWSUNFKDB4MDQwOSwgMHgwMkI2KX0sCiAJe30KIH07CiAKQEAgLTEwMyw4ICsxNzIsMjAgQEAKIHN0YXRpYyBzdHJ1Y3Qgc3BlY2lmaWNfZGV2aWNlX2lkIHNwZWNpZmljX2RldmljZV9pZF90YmxbXSA9IHsKIAl7LmlkVmVuZG9yID0gMHgwYjA1LCAuaWRQcm9kdWN0ID0gMHgxNzkxLAogCQkgLmZsYWdzID0gU1BFQ19ERVZfSURfRElTQUJMRV9IVH0sCisJey5pZFZlbmRvciA9IDB4MGRmNiwgLmlkUHJvZHVjdCA9IDB4MDA1OSwKKwkJIC5mbGFncyA9IFNQRUNfREVWX0lEX0RJU0FCTEVfSFR9LAorCXsuaWRWZW5kb3IgPSAweDEzZDMsIC5pZFByb2R1Y3QgPSAweDMzMDYsCisJCSAuZmxhZ3MgPSBTUEVDX0RFVl9JRF9ESVNBQkxFX0hUfSwKIAl7LmlkVmVuZG9yID0gMHgxM0QzLCAuaWRQcm9kdWN0ID0gMHgzMzExLAogCQkgLmZsYWdzID0gU1BFQ19ERVZfSURfRElTQUJMRV9IVH0sCisJey5pZFZlbmRvciA9IDB4MTNkMywgLmlkUHJvZHVjdCA9IDB4MzMzNSwKKwkJIC5mbGFncyA9IFNQRUNfREVWX0lEX0RJU0FCTEVfSFR9LAorCXsuaWRWZW5kb3IgPSAweDEzZDMsIC5pZFByb2R1Y3QgPSAweDMzMzYsCisJCSAuZmxhZ3MgPSBTUEVDX0RFVl9JRF9ESVNBQkxFX0hUfSwKKwl7LmlkVmVuZG9yID0gMHgxM2QzLCAuaWRQcm9kdWN0ID0gMHgzMzQwLAorCQkgLmZsYWdzID0gU1BFQ19ERVZfSURfRElTQUJMRV9IVH0sCisJey5pZFZlbmRvciA9IDB4MTNkMywgLmlkUHJvZHVjdCA9IDB4MzM0MSwKKwkJIC5mbGFncyA9IFNQRUNfREVWX0lEX0RJU0FCTEVfSFR9LAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMKaW5kZXggMGJjMTEzYy4uZDAwN2U0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYwpAQCAtMTA0NCw5ICsxMDQ0LDkgQEAKIAogCS8qIHdoZW4gZG9pbmcgc3VzcGVuZCwgY2FsbCBmYiBhcGlzIGFuZCBwY2kgYXBpcyAqLwogCWlmIChtc2cuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgewotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQlmYl9zZXRfc3VzcGVuZCgmc2ZiLT5mYiwgMSk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0diA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJCXJldHYgPSBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIG1zZyk7CkBAIC0xMTA1LDkgKzExMDUsOSBAQAogCiAJc210Y2ZiX3NldG1vZGUoc2ZiKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9zZXRfc3VzcGVuZCgmc2ZiLT5mYiwgMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL2tvYmplY3RzLmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9rb2JqZWN0cy5jCmluZGV4IDQwOGJiOWIuLjA3YTdmNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL2tvYmplY3RzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAva29iamVjdHMuYwpAQCAtMzMyLDcgKzMzMiw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxlbiA9IHN0cmxlbihidWYpOwotCWlmIChsZW4gPiAwIHx8IGxlbiA8IDMpIHsKKwlpZiAobGVuID4gMCAmJiBsZW4gPCAzKSB7CiAJCWNoID0gYnVmWzBdOwogCQlpZiAoY2ggPT0gJ1xuJykKIAkJCWNoID0gJzAnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0ZV9ybWk0L3N5bmFwdGljc19pMmNfcm1pNC5jIGIvZHJpdmVycy9zdGFnaW5nL3N0ZV9ybWk0L3N5bmFwdGljc19pMmNfcm1pNC5jCmluZGV4IGU4ZjA0N2UuLjgwMTgzYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zdGVfcm1pNC9zeW5hcHRpY3NfaTJjX3JtaTQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3RlX3JtaTQvc3luYXB0aWNzX2kyY19ybWk0LmMKQEAgLTk4NiwxMiArOTg2LDYgQEAKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhybWk0X2RhdGEtPmlucHV0X2RldiwgQUJTX01UX1RPVUNIX01BSk9SLCAwLAogCQkJCQkJTUFYX1RPVUNIX01BSk9SLCAwLCAwKTsKIAotCXJldHZhbCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShybWk0X2RhdGEtPmlucHV0X2Rldik7Ci0JaWYgKHJldHZhbCkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOmlucHV0IHJlZ2lzdGVyIGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQlnb3RvIGVycl9pbnB1dF9yZWdpc3RlcjsKLQl9Ci0KIAkvKiBDbGVhciBpbnRlcnJ1cHRzICovCiAJc3luYXB0aWNzX3JtaTRfaTJjX2Jsb2NrX3JlYWQocm1pNF9kYXRhLAogCQkJcm1pNF9kYXRhLT5mbjAxX2RhdGFfYmFzZV9hZGRyICsgMSwgaW50cl9zdGF0dXMsCkBAIC0xMDAzLDE1ICs5OTcsMjAgQEAKIAlpZiAocmV0dmFsKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6VW5hYmxlIHRvIGdldCBhdHRuIGlycSAlZFxuIiwKIAkJCQlfX2Z1bmNfXywgcGxhdGZvcm1kYXRhLT5pcnFfbnVtYmVyKTsKLQkJZ290byBlcnJfcmVxdWVzdF9pcnE7CisJCWdvdG8gZXJyX3Vuc2V0X2NsaWVudGRhdGE7CisJfQorCisJcmV0dmFsID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHJtaTRfZGF0YS0+aW5wdXRfZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6aW5wdXQgcmVnaXN0ZXIgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyX2ZyZWVfaXJxOwogCX0KIAogCXJldHVybiByZXR2YWw7CiAKLWVycl9yZXF1ZXN0X2lycToKK2Vycl9mcmVlX2lycToKIAlmcmVlX2lycShwbGF0Zm9ybWRhdGEtPmlycV9udW1iZXIsIHJtaTRfZGF0YSk7Ci0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2Uocm1pNF9kYXRhLT5pbnB1dF9kZXYpOwotZXJyX2lucHV0X3JlZ2lzdGVyOgorZXJyX3Vuc2V0X2NsaWVudGRhdGE6CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CiBlcnJfcXVlcnlfZGV2OgogCWlmIChwbGF0Zm9ybWRhdGEtPnJlZ3VsYXRvcl9lbikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvaW9fc20uYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2lvX3NtLmMKaW5kZXggNTcxODY0NS4uMjdlMGFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvaW9fc20uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9pb19zbS5jCkBAIC05NDksNyArOTQ5LDcgQEAKICAqICAgICAgQ2FsbHMgdGhlIEJyaWRnZSdzIENITkxfSVNSIHRvIGRldGVybWluZSBpZiB0aGlzIGludGVycnVwdCBpcyBvdXJzLCB0aGVuCiAgKiAgICAgIHNjaGVkdWxlcyBhIERQQyB0byBkaXNwYXRjaCBJL08uCiAgKi8KLXZvaWQgaW9fbWJveF9tc2codTMyIG1zZykKK2ludCBpb19tYm94X21zZyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgbGVuLCB2b2lkICptc2cpCiB7CiAJc3RydWN0IGlvX21nciAqcGlvX21ncjsKIAlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iajsKQEAgLTk1OSw5ICs5NTksOSBAQAogCWRldl9nZXRfaW9fbWdyKGRldl9vYmosICZwaW9fbWdyKTsKIAogCWlmICghcGlvX21ncikKLQkJcmV0dXJuOworCQlyZXR1cm4gTk9USUZZX0JBRDsKIAotCXBpb19tZ3ItPmludHJfdmFsID0gKHUxNiltc2c7CisJcGlvX21nci0+aW50cl92YWwgPSAodTE2KSgodTMyKW1zZyk7CiAJaWYgKHBpb19tZ3ItPmludHJfdmFsICYgTUJYX1BNX0NMQVNTKQogCQlpb19kaXNwYXRjaF9wbShwaW9fbWdyKTsKIApAQCAtOTczLDcgKzk3Myw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBpb19tZ3ItPmRwY19sb2NrLCBmbGFncyk7CiAJCXRhc2tsZXRfc2NoZWR1bGUoJnBpb19tZ3ItPmRwY190YXNrbGV0KTsKIAl9Ci0JcmV0dXJuOworCXJldHVybiBOT1RJRllfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXAzNDMwLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXAzNDMwLmMKaW5kZXggYTNiMGExOC4uYTNmNjlmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwMzQzMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3Rpb21hcDM0MzAuYwpAQCAtMjIzLDYgKzIyMywxMCBAQAogCWJyaWRnZV9tc2dfc2V0X3F1ZXVlX2lkLAogfTsKIAorc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkc3BfbWJveF9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGlvX21ib3hfbXNnLAorfTsKKwogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2FsbChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCkKIHsKIAlpZiAoZGV2X2NvbnRleHQtPmR3X2JyZF9zdGF0ZSA9PSBCUkRfRFNQX0hJQkVSTkFUSU9OIHx8CkBAIC01NTMsNyArNTU3LDcgQEAKIAkJICogRW5hYmxlIE1haWxib3ggZXZlbnRzIGFuZCBhbHNvIGRyYWluIGFueSBwZW5kaW5nCiAJCSAqIHN0YWxlIG1lc3NhZ2VzLgogCQkgKi8KLQkJZGV2X2NvbnRleHQtPm1ib3ggPSBvbWFwX21ib3hfZ2V0KCJkc3AiKTsKKwkJZGV2X2NvbnRleHQtPm1ib3ggPSBvbWFwX21ib3hfZ2V0KCJkc3AiLCAmZHNwX21ib3hfbm90aWZpZXIpOwogCQlpZiAoSVNfRVJSKGRldl9jb250ZXh0LT5tYm94KSkgewogCQkJZGV2X2NvbnRleHQtPm1ib3ggPSBOVUxMOwogCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGdldCBkc3AgbWFpbGJveCBoYW5kbGVcbiIsCkBAIC01NjMsOCArNTY3LDYgQEAKIAogCX0KIAlpZiAoIXN0YXR1cykgewotCQlkZXZfY29udGV4dC0+bWJveC0+cnhxLT5jYWxsYmFjayA9IChpbnQgKCopKHZvaWQgKikpaW9fbWJveF9tc2c7Ci0KIC8qUE1fSVZBMkdSUFNFTF9QRVIgPSAweEMwOyovCiAJCXRlbXAgPSByZWFkbChyZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBOCk7CiAJCXRlbXAgPSAodGVtcCAmIDB4RkZGRkZGMzApIHwgMHhDMDsKQEAgLTY4NSw3ICs2ODcsNyBAQAogCS8qIERpc2FibGUgdGhlIG1haWxib3ggaW50ZXJydXB0cyAqLwogCWlmIChkZXZfY29udGV4dC0+bWJveCkgewogCQlvbWFwX21ib3hfZGlzYWJsZV9pcnEoZGV2X2NvbnRleHQtPm1ib3gsIElSUV9SWCk7Ci0JCW9tYXBfbWJveF9wdXQoZGV2X2NvbnRleHQtPm1ib3gpOworCQlvbWFwX21ib3hfcHV0KGRldl9jb250ZXh0LT5tYm94LCAmZHNwX21ib3hfbm90aWZpZXIpOwogCQlkZXZfY29udGV4dC0+bWJveCA9IE5VTEw7CiAJfQogCS8qIFJlc2V0IElWQTIgY2xvY2tzKi8KQEAgLTc4NiwxMCArNzg4LDcgQEAKIAogCXB0X2F0dHJzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBnX3RhYmxlX2F0dHJzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHB0X2F0dHJzICE9IE5VTEwpIHsKLQkJLyogQXNzdW1pbmcgdGhhdCB3ZSB1c2Ugb25seSBEU1AncyBtZW1vcnkgbWFwCi0JCSAqIHVudGlsIDB4NDAwMDowMDAwICwgd2Ugd291bGQgbmVlZCBvbmx5IDEwMjQKLQkJICogTDEgZW50aWVzIGkuZSBMMSBzaXplID0gNEsgKi8KLQkJcHRfYXR0cnMtPmwxX3NpemUgPSAweDEwMDA7CisJCXB0X2F0dHJzLT5sMV9zaXplID0gU1pfMTZLOyAvKiA0MDk2IGVudHJpZXMgb2YgMzIgYml0cyAqLwogCQlhbGlnbl9zaXplID0gcHRfYXR0cnMtPmwxX3NpemU7CiAJCS8qIEFsaWduIHNpemVzIGFyZSBleHBlY3RlZCB0byBiZSBwb3dlciBvZiAyICovCiAJCS8qIHdlIGxpa2UgdG8gZ2V0IGFsaWduZWQgb24gTDEgdGFibGUgc2l6ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvX3NtLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvaW9fc20uaAppbmRleCAxOGFlYzU1Li44MjQyYzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvaW9fc20uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvaW9fc20uaApAQCAtNzIsMjIgKzcyLDE3IEBACiAvKgogICogID09PT09PT09IGlvX21ib3hfbXNnID09PT09PT09CiAgKiAgUHVycG9zZToKLSAqICAgICAgTWFpbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIHNoYXJlZCBtZW1vcnkgQnJpZGdlIGNoYW5uZWwgbWFuYWdlci4KLSAqICAgICAgQ2FsbHMgdGhlIEJyaWRnZSdzIGNobmxzbV9pc3IgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaW50ZXJydXB0IGlzIG91cnMsCi0gKiAgICAgIHRoZW4gc2NoZWR1bGVzIGEgRFBDIHRvIGRpc3BhdGNoIEkvTy4KKyAqCU1haW4gbWVzc2FnZSBoYW5kbGVyIGZvciB0aGUgc2hhcmVkIG1lbW9yeSBCcmlkZ2UgY2hhbm5lbCBtYW5hZ2VyLgorICoJRGV0ZXJtaW5lIGlmIHRoaXMgbWVzc2FnZSBpcyBvdXJzLCB0aGVuIHNjaGVkdWxlcyBhIERQQyB0bworICoJZGlzcGF0Y2ggSS9PLgogICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIHJlZl9kYXRhOiAgIFBvaW50ZXIgdG8gdGhlIGNoYW5uZWwgbWFuYWdlciBvYmplY3QgZm9yIHRoaXMgYm9hcmQuCi0gKiAgICAgICAgICAgICAgICAgIFNldCBpbiBhbiBpbml0aWFsIGNhbGwgdG8gSVNSX0luc3RhbGwoKS4KKyAqCXNlbGY6CVBvaW50ZXIgdG8gaXRzIG93biBub3RpZmllcl9ibG9jayBzdHJ1Y3QuCisgKglsZW46CUxlbmd0aCBvZiBtZXNzYWdlLgorICoJbXNnOglNZXNzYWdlIGNvZGUgcmVjZWl2ZWQuCiAgKiAgUmV0dXJuczoKLSAqICAgICAgVFJVRSBpZiBpbnRlcnJ1cHQgaGFuZGxlZDsgRkFMU0Ugb3RoZXJ3aXNlLgotICogIFJlcXVpcmVzOgotICogICAgICBNdXN0IGJlIGluIGxvY2tlZCBtZW1vcnkgaWYgZXhlY3V0aW5nIGluIGtlcm5lbCBtb2RlLgotICogICAgICBNdXN0IG9ubHkgY2FsbCBmdW5jdGlvbnMgd2hpY2ggYXJlIGluIGxvY2tlZCBtZW1vcnkgaWYgS2VybmVsIG1vZGUuCi0gKiAgICAgIE11c3Qgb25seSBjYWxsIGFzeW5jaHJvbm91cyBzZXJ2aWNlcy4KLSAqICAgICAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgYW5kIEVPSSBmb3IgdGhpcyBpbnRlcnJ1cHQgaGFzIGJlZW4gc2VudC4KLSAqICBFbnN1cmVzOgorICoJTk9USUZZX09LIGlmIGhhbmRsZWQ7IE5PVElGWV9CQUQgb3RoZXJ3aXNlLgogICovCi12b2lkIGlvX21ib3hfbXNnKHUzMiBtc2cpOworaW50IGlvX21ib3hfbXNnKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBsZW4sIHZvaWQgKm1zZyk7CiAKIC8qCiAgKiAgPT09PT09PT0gaW9fcmVxdWVzdF9jaG5sID09PT09PT09CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC12aWRlby5jIGIvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtdmlkZW8uYwppbmRleCA4ZmUwMTdjLi5lYjliOWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC12aWRlby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLXZpZGVvLmMKQEAgLTE0NTAsMjkgKzE0NTAsNTUgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLWludCB0bTYwMDBfdjRsMl9yZWdpc3RlcihzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldikKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2X2luaXQoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYsCisJCWNvbnN0IHN0cnVjdCB2aWRlb19kZXZpY2UKKwkJKnRlbXBsYXRlLCBjb25zdCBjaGFyICp0eXBlX25hbWUpCiB7Ci0JaW50IHJldCA9IC0xOwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZDsKIAogCXZmZCA9IHZpZGVvX2RldmljZV9hbGxvYygpOwotCWlmKCF2ZmQpIHsKKwlpZiAoTlVMTCA9PSB2ZmQpCisJCXJldHVybiBOVUxMOworCisJKnZmZCA9ICp0ZW1wbGF0ZTsKKwl2ZmQtPnY0bDJfZGV2ID0gJmRldi0+djRsMl9kZXY7CisJdmZkLT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisJdmZkLT5kZWJ1ZyA9IHRtNjAwMF9kZWJ1ZzsKKwl2ZmQtPmxvY2sgPSAmZGV2LT5sb2NrOworCisJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwgIiVzICVzIiwgZGV2LT5uYW1lLCB0eXBlX25hbWUpOworCisJdmlkZW9fc2V0X2RydmRhdGEodmZkLCBkZXYpOworCXJldHVybiB2ZmQ7Cit9CisKK2ludCB0bTYwMDBfdjRsMl9yZWdpc3RlcihzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldikKK3sKKwlpbnQgcmV0ID0gLTE7CisKKwlkZXYtPnZmZCA9IHZkZXZfaW5pdChkZXYsICZ0bTYwMDBfdGVtcGxhdGUsICJ2aWRlbyIpOworCisJaWYgKCFkZXYtPnZmZCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FuJ3QgcmVnaXN0ZXIgdmlkZW8gZGV2aWNlXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWRldi0+dmZkID0gdmZkOwogCiAJLyogaW5pdCB2aWRlbyBkbWEgcXVldWVzICovCiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkcS5hY3RpdmUpOwogCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZpZHEucXVldWVkKTsKIAotCW1lbWNweShkZXYtPnZmZCwgJnRtNjAwMF90ZW1wbGF0ZSwgc2l6ZW9mKCooZGV2LT52ZmQpKSk7Ci0JZGV2LT52ZmQtPmRlYnVnID0gdG02MDAwX2RlYnVnOwotCWRldi0+dmZkLT5sb2NrID0gJmRldi0+bG9jazsKLQotCXZmZC0+djRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKLQl2aWRlb19zZXRfZHJ2ZGF0YSh2ZmQsIGRldik7Ci0KIAlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZmQsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYW4ndCByZWdpc3RlciB2aWRlbyBkZXZpY2VcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlyZXR1cm4gcmV0OworCX0KKworCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWdpc3RlcmVkIGRldmljZSAlc1xuIiwKKwkgICAgICAgZGV2LT5uYW1lLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGRldi0+dmZkKSk7CisKIAlwcmludGsoS0VSTl9JTkZPICJUcmlkZW50IFRWTWFzdGVyIFRNNTYwMC9UTTYwMDAvVE02MDEwIFVTQjIgYm9hcmQgKExvYWQgc3RhdHVzOiAlZClcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViLmggYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yi5oCmluZGV4IDMwZGJmYjYuLmQ3MzI2NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWIuaApAQCAtMzIsNiArMzIsNyBAQAogCiBzdHJ1Y3Qgc3R1Yl9kZXZpY2UgewogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCiAJc3RydWN0IHVzYmlwX2RldmljZSB1ZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKaW5kZXggYjE4NmI1Zi4uYTdjZTUxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKQEAgLTI1OCwxMCArMjU4LDExIEBACiBzdGF0aWMgdm9pZCBzdHViX2RldmljZV9yZXNldChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCkKIHsKIAlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYgPSBjb250YWluZXJfb2YodWQsIHN0cnVjdCBzdHViX2RldmljZSwgdWQpOwotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihzZGV2LT5pbnRlcmZhY2UpOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gc2Rldi0+dWRldjsKIAlpbnQgcmV0OwogCiAJdXNiaXBfdWRiZygiZGV2aWNlIHJlc2V0Iik7CisKIAlyZXQgPSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KHVkZXYsIHNkZXYtPmludGVyZmFjZSk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycigmdWRldi0+ZGV2LCAibG9jayBmb3IgcmVzZXRcbiIpOwpAQCAtMzA5LDcgKzMxMCw4IEBACiAgKgogICogQWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBhIG5ldyBzdHViX2RldmljZSBzdHJ1Y3QuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnN0dWJfZGV2aWNlX2FsbG9jKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCitzdGF0aWMgc3RydWN0IHN0dWJfZGV2aWNlICpzdHViX2RldmljZV9hbGxvYyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCQkJICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQogewogCXN0cnVjdCBzdHViX2RldmljZSAqc2RldjsKIAlpbnQgYnVzbnVtID0gaW50ZXJmYWNlX3RvX2J1c251bShpbnRlcmZhY2UpOwpAQCAtMzI0LDcgKzMyNiw4IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCXNkZXYtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKwlzZGV2LT5pbnRlcmZhY2UgPSB1c2JfZ2V0X2ludGYoaW50ZXJmYWNlKTsKKwlzZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYodWRldik7CiAKIAkvKgogCSAqIGRldmlkIGlzIGRlZmluZWQgd2l0aCBkZXZudW0gd2hlbiB0aGlzIGRyaXZlciBpcyBmaXJzdCBhbGxvY2F0ZWQuCkBAIC00NTAsMTEgKzQ1MywxMiBAQAogCQkJcmV0dXJuIGVycjsKIAkJfQogCisJCXVzYl9nZXRfaW50ZihpbnRlcmZhY2UpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBvay4gdGhpcyBpcyBteSBkZXZpY2UuICovCi0Jc2RldiA9IHN0dWJfZGV2aWNlX2FsbG9jKGludGVyZmFjZSk7CisJc2RldiA9IHN0dWJfZGV2aWNlX2FsbG9jKHVkZXYsIGludGVyZmFjZSk7CiAJaWYgKCFzZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNDc2LDYgKzQ4MCw4IEBACiAJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiY3JlYXRlIHN5c2ZzIGZpbGVzIGZvciAlc1xuIiwKIAkJCXVkZXZfYnVzaWQpOwogCQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJCXVzYl9wdXRfaW50ZihpbnRlcmZhY2UpOworCiAJCWJ1c2lkX3ByaXYtPmludGVyZl9jb3VudCA9IDA7CiAKIAkJYnVzaWRfcHJpdi0+c2RldiA9IE5VTEw7CkBAIC01NDUsNiArNTUxLDcgQEAKIAlpZiAoYnVzaWRfcHJpdi0+aW50ZXJmX2NvdW50ID4gMSkgewogCQlidXNpZF9wcml2LT5pbnRlcmZfY291bnQtLTsKIAkJc2h1dGRvd25fYnVzaWQoYnVzaWRfcHJpdik7CisJCXVzYl9wdXRfaW50ZihpbnRlcmZhY2UpOwogCQlyZXR1cm47CiAJfQogCkBAIC01NTQsNiArNTYxLDkgQEAKIAkvKiAxLiBzaHV0ZG93biB0aGUgY3VycmVudCBjb25uZWN0aW9uICovCiAJc2h1dGRvd25fYnVzaWQoYnVzaWRfcHJpdik7CiAKKwl1c2JfcHV0X2RldihzZGV2LT51ZGV2KTsKKwl1c2JfcHV0X2ludGYoaW50ZXJmYWNlKTsKKwogCS8qIDMuIGZyZWUgc2RldiAqLwogCWJ1c2lkX3ByaXYtPnNkZXYgPSBOVUxMOwogCXN0dWJfZGV2aWNlX2ZyZWUoc2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYwppbmRleCAzZGU2ZmQyLi5hZTZhYzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKQEAgLTM2NCw3ICszNjQsNyBAQAogCiBzdGF0aWMgaW50IGdldF9waXBlKHN0cnVjdCBzdHViX2RldmljZSAqc2RldiwgaW50IGVwbnVtLCBpbnQgZGlyKQogewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihzZGV2LT5pbnRlcmZhY2UpOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gc2Rldi0+dWRldjsKIAlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOwogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkID0gTlVMTDsKIApAQCAtNDg0LDcgKzQ4NCw3IEBACiAJaW50IHJldDsKIAlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2OwogCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gJnNkZXYtPnVkOwotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihzZGV2LT5pbnRlcmZhY2UpOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gc2Rldi0+dWRldjsKIAlpbnQgcGlwZSA9IGdldF9waXBlKHNkZXYsIHBkdS0+YmFzZS5lcCwgcGR1LT5iYXNlLmRpcmVjdGlvbik7CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2kuaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpLmgKaW5kZXggNDFhMWZlNS4uYWZjM2IxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2kuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaS5oCkBAIC0xMDAsOSArMTAwLDYgQEAKIAkgKiBCdXQsIHRoZSBpbmRleCBvZiB0aGlzIGFycmF5IGJlZ2lucyBmcm9tIDAuCiAJICovCiAJc3RydWN0IHZoY2lfZGV2aWNlIHZkZXZbVkhDSV9OUE9SVFNdOwotCi0JLyogdmhjaV9kZXZpY2Ugd2hpY2ggaGFzIG5vdCBiZWVuIGFzc2lnZWQgaXRzIGFkZHJlc3MgeWV0ICovCi0JaW50IHBlbmRpbmdfcG9ydDsKIH07CiAKIApAQCAtMTE5LDYgKzExNiw5IEBACiB2b2lkIHZoY2lfcnhfbG9vcChzdHJ1Y3QgdXNiaXBfdGFzayAqdXQpOwogdm9pZCB2aGNpX3R4X2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKnV0KTsKIAorc3RydWN0IHVyYiAqcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKKwkJCQkJICAgIF9fdTMyIHNlcW51bSk7CisKICNkZWZpbmUgaGFyZHdhcmUJCSgmdGhlX2NvbnRyb2xsZXItPnBkZXYuZGV2KQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2aGNpX2RldmljZSAqcG9ydF90b192ZGV2KF9fdTMyIHBvcnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9oY2QuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX2hjZC5jCmluZGV4IDA4YmQyNmEuLmEzNWZlNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX2hjZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX2hjZC5jCkBAIC0xMzgsOCArMTM4LDYgQEAKIAkgKiB0aGVfY29udHJvbGxlci0+dmRldltyaHBvcnRdLnVkLnN0YXR1cyA9IFZERVZfQ09OTkVDVDsKIAkgKiBzcGluX3VubG9jaygmdGhlX2NvbnRyb2xsZXItPnZkZXZbcmhwb3J0XS51ZC5sb2NrKTsgKi8KIAotCXRoZV9jb250cm9sbGVyLT5wZW5kaW5nX3BvcnQgPSByaHBvcnQ7Ci0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOwogCiAJdXNiX2hjZF9wb2xsX3JoX3N0YXR1cyh2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlcikpOwpAQCAtNTU5LDYgKzU1Nyw3IEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnVyYi0+ZGV2LT5kZXY7CiAJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXY7CiAKIAl1c2JpcF9kYmdfdmhjaV9oYygiZW50ZXIsIHVzYl9oY2QgJXAgdXJiICVwIG1lbV9mbGFncyAlZFxuIiwKIAkJICAgIGhjZCwgdXJiLCBtZW1fZmxhZ3MpOwpAQCAtNTc0LDYgKzU3MywxOCBAQAogCQlyZXR1cm4gdXJiLT5zdGF0dXM7CiAJfQogCisJdmRldiA9IHBvcnRfdG9fdmRldih1cmItPmRldi0+cG9ydG51bS0xKTsKKworCS8qIHJlZnVzZSBlbnF1ZXVlIGZvciBkZWFkIGNvbm5lY3Rpb24gKi8KKwlzcGluX2xvY2soJnZkZXYtPnVkLmxvY2spOworCWlmICh2ZGV2LT51ZC5zdGF0dXMgPT0gVkRFVl9TVF9OVUxMIHx8IHZkZXYtPnVkLnN0YXR1cyA9PSBWREVWX1NUX0VSUk9SKSB7CisJCXVzYmlwX3VlcnIoImVucXVldWUgZm9yIGluYWN0aXZlIHBvcnQgJWRcbiIsIHZkZXYtPnJocG9ydCk7CisJCXNwaW5fdW5sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXNwaW5fdW5sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKKwogCXJldCA9IHVzYl9oY2RfbGlua191cmJfdG9fZXAoaGNkLCB1cmIpOwogCWlmIChyZXQpCiAJCWdvdG8gbm9fbmVlZF91bmxpbms7CkBAIC01OTIsOCArNjAzLDYgQEAKIAkJX191OCB0eXBlID0gdXNiX3BpcGV0eXBlKHVyYi0+cGlwZSk7CiAJCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmxyZXEgPQogCQkJCShzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIHVyYi0+c2V0dXBfcGFja2V0OwotCQlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYgPQotCQkJCXBvcnRfdG9fdmRldih0aGVfY29udHJvbGxlci0+cGVuZGluZ19wb3J0KTsKIAogCQlpZiAodHlwZSAhPSBQSVBFX0NPTlRST0wgfHwgIWN0cmxyZXEpIHsKIAkJCWRldl9lcnIoZGV2LCAiaW52YWxpZCByZXF1ZXN0IHRvIGRldm51bSAwXG4iKTsKQEAgLTYwNyw3ICs2MTYsOSBAQAogCQkJZGV2X2luZm8oZGV2LCAiU2V0QWRkcmVzcyBSZXF1ZXN0ICglZCkgdG8gcG9ydCAlZFxuIiwKIAkJCQkgY3RybHJlcS0+d1ZhbHVlLCB2ZGV2LT5yaHBvcnQpOwogCi0JCQl2ZGV2LT51ZGV2ID0gdXJiLT5kZXY7CisJCQlpZiAodmRldi0+dWRldikKKwkJCQl1c2JfcHV0X2Rldih2ZGV2LT51ZGV2KTsKKwkJCXZkZXYtPnVkZXYgPSB1c2JfZ2V0X2Rldih1cmItPmRldik7CiAKIAkJCXNwaW5fbG9jaygmdmRldi0+dWQubG9jayk7CiAJCQl2ZGV2LT51ZC5zdGF0dXMgPSBWREVWX1NUX1VTRUQ7CkBAIC02MjcsOCArNjM4LDkgQEAKIAkJCQkJCSJHZXRfRGVzY3JpcHRvciB0byBkZXZpY2UgMCAiCiAJCQkJCQkiKGdldCBtYXggcGlwZSBzaXplKVxuIik7CiAKLQkJCS8qIEZJWE1FOiByZWZlcmVuY2UgY291bnQ/ICh1c2JfZ2V0X2RldigpKSAqLwotCQkJdmRldi0+dWRldiA9IHVyYi0+ZGV2OworCQkJaWYgKHZkZXYtPnVkZXYpCisJCQkJdXNiX3B1dF9kZXYodmRldi0+dWRldik7CisJCQl2ZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYodXJiLT5kZXYpOwogCQkJZ290byBvdXQ7CiAKIAkJZGVmYXVsdDoKQEAgLTgwNSw3ICs4MTcsNiBAQAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyB2b2lkIHZoY2lfZGV2aWNlX3VubGlua19jbGVhbnVwKHN0cnVjdCB2aGNpX2RldmljZSAqdmRldikKIHsKIAlzdHJ1Y3QgdmhjaV91bmxpbmsgKnVubGluaywgKnRtcDsKQEAgLTgxMywxMSArODI0LDM0IEBACiAJc3Bpbl9sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCAmdmRldi0+dW5saW5rX3R4LCBsaXN0KSB7CisJCXVzYmlwX3VpbmZvKCJ1bmxpbmsgY2xlYW51cCB0eCAlbHVcbiIsIHVubGluay0+dW5saW5rX3NlcW51bSk7CiAJCWxpc3RfZGVsKCZ1bmxpbmstPmxpc3QpOwogCQlrZnJlZSh1bmxpbmspOwogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bmxpbmssIHRtcCwgJnZkZXYtPnVubGlua19yeCwgbGlzdCkgeworCQlzdHJ1Y3QgdXJiICp1cmI7CisKKwkJLyogZ2l2ZSBiYWNrIFVSQiBvZiB1bmFuc3dlcmVkIHVubGluayByZXF1ZXN0ICovCisJCXVzYmlwX3VpbmZvKCJ1bmxpbmsgY2xlYW51cCByeCAlbHVcbiIsIHVubGluay0+dW5saW5rX3NlcW51bSk7CisKKwkJdXJiID0gcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHZkZXYsIHVubGluay0+dW5saW5rX3NlcW51bSk7CisJCWlmICghdXJiKSB7CisJCQl1c2JpcF91aW5mbygidGhlIHVyYiAoc2VxbnVtICVsdSkgd2FzIGFscmVhZHkgZ2l2ZW4gYmFja1xuIiwKKwkJCQkJCQl1bmxpbmstPnVubGlua19zZXFudW0pOworCQkJbGlzdF9kZWwoJnVubGluay0+bGlzdCk7CisJCQlrZnJlZSh1bmxpbmspOworCQkJY29udGludWU7CisJCX0KKworCQl1cmItPnN0YXR1cyA9IC1FTk9ERVY7CisKKwkJc3Bpbl9sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfdG9faGNkKHRoZV9jb250cm9sbGVyKSwgdXJiKTsKKwkJc3Bpbl91bmxvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKKworCQl1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlciksIHVyYiwgdXJiLT5zdGF0dXMpOworCiAJCWxpc3RfZGVsKCZ1bmxpbmstPmxpc3QpOwogCQlrZnJlZSh1bmxpbmspOwogCX0KQEAgLTg4Nyw2ICs5MjEsMTAgQEAKIAl2ZGV2LT5zcGVlZCAgPSAwOwogCXZkZXYtPmRldmlkICA9IDA7CiAKKwlpZiAodmRldi0+dWRldikKKwkJdXNiX3B1dF9kZXYodmRldi0+dWRldik7CisJdmRldi0+dWRldiA9IE5VTEw7CisKIAl1ZC0+dGNwX3NvY2tldCA9IE5VTEw7CiAKIAl1ZC0+c3RhdHVzID0gVkRFVl9TVF9OVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3J4LmMKaW5kZXggODE0N2Q3Mi4uYmY2OTkxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9yeC5jCkBAIC0yMywxNiArMjMsMTQgQEAKICNpbmNsdWRlICJ2aGNpLmgiCiAKIAotLyogZ2V0IFVSQiBmcm9tIHRyYW5zbWl0dGVkIHVyYiBxdWV1ZSAqLwotc3RhdGljIHN0cnVjdCB1cmIgKnBpY2t1cF91cmJfYW5kX2ZyZWVfcHJpdihzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsCisvKiBnZXQgVVJCIGZyb20gdHJhbnNtaXR0ZWQgdXJiIHF1ZXVlLiBjYWxsZXIgbXVzdCBob2xkIHZkZXYtPnByaXZfbG9jayAqLworc3RydWN0IHVyYiAqcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKIAkJCQkJICAgIF9fdTMyIHNlcW51bSkKIHsKIAlzdHJ1Y3QgdmhjaV9wcml2ICpwcml2LCAqdG1wOwogCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7CiAJaW50IHN0YXR1czsKIAotCXNwaW5fbG9jaygmdmRldi0+cHJpdl9sb2NrKTsKLQogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2LCB0bXAsICZ2ZGV2LT5wcml2X3J4LCBsaXN0KSB7CiAJCWlmIChwcml2LT5zZXFudW0gPT0gc2VxbnVtKSB7CiAJCQl1cmIgPSBwcml2LT51cmI7CkBAIC02Myw4ICs2MSw2IEBACiAJCX0KIAl9CiAKLQlzcGluX3VubG9jaygmdmRldi0+cHJpdl9sb2NrKTsKLQogCXJldHVybiB1cmI7CiB9CiAKQEAgLTc0LDkgKzcwLDExIEBACiAJc3RydWN0IHVzYmlwX2RldmljZSAqdWQgPSAmdmRldi0+dWQ7CiAJc3RydWN0IHVyYiAqdXJiOwogCisJc3Bpbl9sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOwogCiAJdXJiID0gcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHZkZXYsIHBkdS0+YmFzZS5zZXFudW0pOwogCisJc3Bpbl91bmxvY2soJnZkZXYtPnByaXZfbG9jayk7CiAKIAlpZiAoIXVyYikgewogCQl1c2JpcF91ZXJyKCJjYW5ub3QgZmluZCBhIHVyYiBvZiBzZXFudW0gJXVcbiIsCkBAIC0xNjEsNyArMTU5LDEyIEBACiAJCXJldHVybjsKIAl9CiAKKwlzcGluX2xvY2soJnZkZXYtPnByaXZfbG9jayk7CisKIAl1cmIgPSBwaWNrdXBfdXJiX2FuZF9mcmVlX3ByaXYodmRldiwgdW5saW5rLT51bmxpbmtfc2VxbnVtKTsKKworCXNwaW5fdW5sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOworCiAJaWYgKCF1cmIpIHsKIAkJLyoKIAkJICogSSBnZXQgdGhlIHJlc3VsdCBvZiBhIHVubGluayByZXF1ZXN0LiBCdXQsIGl0IHNlZW1zIHRoYXQgSQpAQCAtMTkwLDYgKzE5MywxOSBAQAogCXJldHVybjsKIH0KIAorc3RhdGljIGludCB2aGNpX3ByaXZfdHhfZW1wdHkoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2KQoreworCWludCBlbXB0eSA9IDA7CisKKwlzcGluX2xvY2soJnZkZXYtPnByaXZfbG9jayk7CisKKwllbXB0eSA9IGxpc3RfZW1wdHkoJnZkZXYtPnByaXZfcngpOworCisJc3Bpbl91bmxvY2soJnZkZXYtPnByaXZfbG9jayk7CisKKwlyZXR1cm4gZW1wdHk7Cit9CisKIC8qIHJlY3YgYSBwZHUgKi8KIHN0YXRpYyB2b2lkIHZoY2lfcnhfcGR1KHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQogewpAQCAtMjAyLDExICsyMTgsMjkgQEAKIAogCW1lbXNldCgmcGR1LCAwLCBzaXplb2YocGR1KSk7CiAKLQogCS8qIDEuIHJlY2VpdmUgYSBwZHUgaGVhZGVyICovCiAJcmV0ID0gdXNiaXBfeG1pdCgwLCB1ZC0+dGNwX3NvY2tldCwgKGNoYXIgKikgJnBkdSwgc2l6ZW9mKHBkdSksIDApOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChyZXQgPT0gLUVDT05OUkVTRVQpCisJCQl1c2JpcF91aW5mbygiY29ubmVjdGlvbiByZXNldCBieSBwZWVyXG4iKTsKKwkJZWxzZSBpZiAocmV0ID09IC1FQUdBSU4pIHsKKwkJCS8qIGlnbm9yZSBpZiBjb25uZWN0aW9uIHdhcyBpZGxlICovCisJCQlpZiAodmhjaV9wcml2X3R4X2VtcHR5KHZkZXYpKQorCQkJCXJldHVybjsKKwkJCXVzYmlwX3VpbmZvKCJjb25uZWN0aW9uIHRpbWVkIG91dCB3aXRoIHBlbmRpbmcgdXJic1xuIik7CisJCX0gZWxzZSBpZiAocmV0ICE9IC1FUkVTVEFSVFNZUykKKwkJCXVzYmlwX3VpbmZvKCJ4bWl0IGZhaWxlZCAlZFxuIiwgcmV0KTsKKworCQl1c2JpcF9ldmVudF9hZGQodWQsIFZERVZfRVZFTlRfRVJST1JfVENQKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocmV0ID09IDApIHsKKwkJdXNiaXBfdWluZm8oImNvbm5lY3Rpb24gY2xvc2VkIik7CisJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9ET1dOKTsKKwkJcmV0dXJuOworCX0KIAlpZiAocmV0ICE9IHNpemVvZihwZHUpKSB7Ci0JCXVzYmlwX3VlcnIoInJlY2VpdmluZyBwZHUgZmFpbGVkISBzaXplIGlzICVkLCBzaG91bGQgYmUgJWRcbiIsCisJCXVzYmlwX3VlcnIoInJlY2VpdmVkIHBkdSBzaXplIGlzICVkLCBzaG91bGQgYmUgJWRcbiIsCiAJCQkJCXJldCwgKHVuc2lnbmVkIGludClzaXplb2YocGR1KSk7CiAJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvTW9kdWxlLnN5bXZlcnMgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvTW9kdWxlLnN5bXZlcnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL01vZHVsZS5zeW12ZXJzCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmMgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5jCmluZGV4IDcwMTZmZGQuLmUxOWI5MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3NldG1vZGUuYwpAQCAtMzk1NCw4ICszOTU0LDggQEAKIHVuc2lnbmVkIGNoYXIgWEdJX0lzTENERHVhbExpbmsoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCi0JaWYgKCgoKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb0xDRCkgfCBTZXRDUlQyVG9MQ0RBKSkKLQkJCSYmIChwVkJJbmZvLT5MQ0RJbmZvICYgU2V0TENERHVhbExpbmspKSAvKiBzaGFtcG9vMDEyOSAqLworCWlmICgocFZCSW5mby0+VkJJbmZvICYgKFNldENSVDJUb0xDRCB8IFNldENSVDJUb0xDREEpKSAmJgorCQkJKHBWQkluZm8tPkxDREluZm8gJiBTZXRMQ0REdWFsTGluaykpIC8qIHNoYW1wb28wMTI5ICovCiAJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CkBAIC04NzczLDcgKzg3NzMsNyBAQAogCiAJaWYgKHBWQkluZm8tPklGX0RFRl9MVkRTID09IDApIHsKIAkJQ1JUMkluZGV4ID0gQ1JUMkluZGV4ID4+IDY7IC8qICBmb3IgTENEICovCi0JCWlmICgoKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb0xDRCkgfCBTZXRDUlQyVG9MQ0RBKSkgeyAvKjMwMWIqLworCQlpZiAocFZCSW5mby0+VkJJbmZvICYgKFNldENSVDJUb0xDRCB8IFNldENSVDJUb0xDREEpKSB7IC8qMzAxYiovCiAJCQlpZiAocFZCSW5mby0+TENEUmVzSW5mbyAhPSBQYW5lbDEwMjR4NzY4KQogCQkJCVZDTEtJbmRleCA9IExDRFhsYXQyVkNMS1tDUlQySW5kZXhdOwogCQkJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy96cmFtL3pyYW1fZHJ2LmMKaW5kZXggNTQxNTcxMi4uNGJkOGNiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3pyYW0venJhbV9kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvenJhbS96cmFtX2Rydi5jCkBAIC0yMjcsNiArMjI3LDcgQEAKIAogCQlpZiAoenJhbV90ZXN0X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fWkVSTykpIHsKIAkJCWhhbmRsZV96ZXJvX3BhZ2UocGFnZSk7CisJCQlpbmRleCsrOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMjM1LDEyICsyMzYsMTQgQEAKIAkJCXByX2RlYnVnKCJSZWFkIGJlZm9yZSB3cml0ZTogc2VjdG9yPSVsdSwgc2l6ZT0ldSIsCiAJCQkJKHVsb25nKShiaW8tPmJpX3NlY3RvciksIGJpby0+Ymlfc2l6ZSk7CiAJCQkvKiBEbyBub3RoaW5nICovCisJCQlpbmRleCsrOwogCQkJY29udGludWU7CiAJCX0KIAogCQkvKiBQYWdlIGlzIHN0b3JlZCB1bmNvbXByZXNzZWQgc2luY2UgaXQncyBpbmNvbXByZXNzaWJsZSAqLwogCQlpZiAodW5saWtlbHkoenJhbV90ZXN0X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fVU5DT01QUkVTU0VEKSkpIHsKIAkJCWhhbmRsZV91bmNvbXByZXNzZWRfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7CisJCQlpbmRleCsrOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMzIwLDYgKzMyMyw3IEBACiAJCQltdXRleF91bmxvY2soJnpyYW0tPmxvY2spOwogCQkJenJhbV9zdGF0X2luYygmenJhbS0+c3RhdHMucGFnZXNfemVybyk7CiAJCQl6cmFtX3NldF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1pFUk8pOworCQkJaW5kZXgrKzsKIAkJCWNvbnRpbnVlOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L01ha2VmaWxlIGIvZHJpdmVycy90YXJnZXQvTWFrZWZpbGUKaW5kZXggNWNmZDcwOC4uOTczYmIxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy90YXJnZXQvTWFrZWZpbGUKQEAgLTEzLDggKzEzLDcgQEAKIAkJCQkgICB0YXJnZXRfY29yZV90cmFuc3BvcnQubyBcCiAJCQkJICAgdGFyZ2V0X2NvcmVfY2RiLm8gXAogCQkJCSAgIHRhcmdldF9jb3JlX3VhLm8gXAotCQkJCSAgIHRhcmdldF9jb3JlX3JkLm8gXAotCQkJCSAgIHRhcmdldF9jb3JlX21pYi5vCisJCQkJICAgdGFyZ2V0X2NvcmVfcmQubwogCiBvYmotJChDT05GSUdfVEFSR0VUX0NPUkUpCSs9IHRhcmdldF9jb3JlX21vZC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2NvbmZpZ2ZzLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9jb25maWdmcy5jCmluZGV4IDI3NjQ1MTAuLmNhZjhkYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2NvbmZpZ2ZzLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuYwpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAKICNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oPgogI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9kZXZpY2UuaD4KQEAgLTE5NzEsMTMgKzE5NzAsMzUgQEAKIHsKIAlzdHJ1Y3Qgc2Vfc3Vic3lzdGVtX2RldiAqc2VfZGV2ID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKIAkJCQlzdHJ1Y3Qgc2Vfc3Vic3lzdGVtX2Rldiwgc2VfZGV2X2dyb3VwKTsKLQlzdHJ1Y3QgY29uZmlnX2dyb3VwICpkZXZfY2c7CisJc3RydWN0IHNlX2hiYSAqaGJhID0gaXRlbV90b19oYmEoJnNlX2Rldi0+c2VfZGV2X2hiYS0+aGJhX2dyb3VwLmNnX2l0ZW0pOworCXN0cnVjdCBzZV9zdWJzeXN0ZW1fYXBpICp0ID0gaGJhLT50cmFuc3BvcnQ7CisJc3RydWN0IGNvbmZpZ19ncm91cCAqZGV2X2NnID0gJnNlX2Rldi0+c2VfZGV2X2dyb3VwOwogCi0JaWYgKCEoc2VfZGV2KSkKLQkJcmV0dXJuOwotCi0JZGV2X2NnID0gJnNlX2Rldi0+c2VfZGV2X2dyb3VwOwogCWtmcmVlKGRldl9jZy0+ZGVmYXVsdF9ncm91cHMpOworCS8qCisJICogVGhpcyBwb2ludGVyIHdpbGwgc2V0IHdoZW4gdGhlIHN0b3JhZ2UgaXMgZW5hYmxlZCB3aXRoOgorCSAqYGVjaG8gMSA+ICRDT05GSUdGUy9jb3JlLyRIQkEvJERFVi9kZXZfZW5hYmxlYAorCSAqLworCWlmIChzZV9kZXYtPnNlX2Rldl9wdHIpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVGFyZ2V0X0NvcmVfQ29uZmlnRlM6IENhbGxpbmcgc2VfZnJlZV8iCisJCQkidmlydHVhbF9kZXZpY2UoKSBmb3Igc2VfZGV2X3B0cjogJXBcbiIsCisJCQlzZV9kZXYtPnNlX2Rldl9wdHIpOworCisJCXNlX2ZyZWVfdmlydHVhbF9kZXZpY2Uoc2VfZGV2LT5zZV9kZXZfcHRyLCBoYmEpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFJlbGVhc2Ugc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYtPnNlX2Rldl9zdV9wdHIuLgorCQkgKi8KKwkJcHJpbnRrKEtFUk5fSU5GTyAiVGFyZ2V0X0NvcmVfQ29uZmlnRlM6IENhbGxpbmcgdC0+ZnJlZV8iCisJCQkiZGV2aWNlKCkgZm9yIHNlX2Rldl9zdV9wdHI6ICVwXG4iLAorCQkJc2VfZGV2LT5zZV9kZXZfc3VfcHRyKTsKKworCQl0LT5mcmVlX2RldmljZShzZV9kZXYtPnNlX2Rldl9zdV9wdHIpOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIlRhcmdldF9Db3JlX0NvbmZpZ0ZTOiBEZWFsbG9jYXRpbmcgc2Vfc3Vic3lzdGVtIgorCQkJIl9kZXZfdDogJXBcbiIsIHNlX2Rldik7CisJa2ZyZWUoc2VfZGV2KTsKIH0KIAogc3RhdGljIHNzaXplX3QgdGFyZ2V0X2NvcmVfZGV2X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLApAQCAtMjE0MCw3ICsyMTYxLDE2IEBACiAJTlVMTCwKIH07CiAKK3N0YXRpYyB2b2lkIHRhcmdldF9jb3JlX2FsdWFfbHVfZ3BfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJc3RydWN0IHQxMF9hbHVhX2x1X2dwICpsdV9ncCA9IGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAoaXRlbSksCisJCQlzdHJ1Y3QgdDEwX2FsdWFfbHVfZ3AsIGx1X2dwX2dyb3VwKTsKKworCWNvcmVfYWx1YV9mcmVlX2x1X2dwKGx1X2dwKTsKK30KKwogc3RhdGljIHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdGFyZ2V0X2NvcmVfYWx1YV9sdV9ncF9vcHMgPSB7CisJLnJlbGVhc2UJCT0gdGFyZ2V0X2NvcmVfYWx1YV9sdV9ncF9yZWxlYXNlLAogCS5zaG93X2F0dHJpYnV0ZQkJPSB0YXJnZXRfY29yZV9hbHVhX2x1X2dwX2F0dHJfc2hvdywKIAkuc3RvcmVfYXR0cmlidXRlCT0gdGFyZ2V0X2NvcmVfYWx1YV9sdV9ncF9hdHRyX3N0b3JlLAogfTsKQEAgLTIxOTEsOSArMjIyMSwxMSBAQAogCXByaW50ayhLRVJOX0lORk8gIlRhcmdldF9Db3JlX0NvbmZpZ0ZTOiBSZWxlYXNpbmcgQUxVQSBMb2dpY2FsIFVuaXQiCiAJCSIgR3JvdXA6IGNvcmUvYWx1YS9sdV9ncHMvJXMsIElEOiAlaHVcbiIsCiAJCWNvbmZpZ19pdGVtX25hbWUoaXRlbSksIGx1X2dwLT5sdV9ncF9pZCk7Ci0KKwkvKgorCSAqIGNvcmVfYWx1YV9mcmVlX2x1X2dwKCkgaXMgY2FsbGVkIGZyb20gdGFyZ2V0X2NvcmVfYWx1YV9sdV9ncF9vcHMtPnJlbGVhc2UoKQorCSAqIC0+IHRhcmdldF9jb3JlX2FsdWFfbHVfZ3BfcmVsZWFzZSgpCisJICovCiAJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwotCWNvcmVfYWx1YV9mcmVlX2x1X2dwKGx1X2dwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHRhcmdldF9jb3JlX2FsdWFfbHVfZ3BzX2dyb3VwX29wcyA9IHsKQEAgLTI1NDksNyArMjU4MSwxNiBAQAogCU5VTEwsCiB9OwogCitzdGF0aWMgdm9pZCB0YXJnZXRfY29yZV9hbHVhX3RnX3B0X2dwX3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQoreworCXN0cnVjdCB0MTBfYWx1YV90Z19wdF9ncCAqdGdfcHRfZ3AgPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAorCQkJc3RydWN0IHQxMF9hbHVhX3RnX3B0X2dwLCB0Z19wdF9ncF9ncm91cCk7CisKKwljb3JlX2FsdWFfZnJlZV90Z19wdF9ncCh0Z19wdF9ncCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIHRhcmdldF9jb3JlX2FsdWFfdGdfcHRfZ3Bfb3BzID0geworCS5yZWxlYXNlCQk9IHRhcmdldF9jb3JlX2FsdWFfdGdfcHRfZ3BfcmVsZWFzZSwKIAkuc2hvd19hdHRyaWJ1dGUJCT0gdGFyZ2V0X2NvcmVfYWx1YV90Z19wdF9ncF9hdHRyX3Nob3csCiAJLnN0b3JlX2F0dHJpYnV0ZQk9IHRhcmdldF9jb3JlX2FsdWFfdGdfcHRfZ3BfYXR0cl9zdG9yZSwKIH07CkBAIC0yNjAyLDkgKzI2NDMsMTEgQEAKIAlwcmludGsoS0VSTl9JTkZPICJUYXJnZXRfQ29yZV9Db25maWdGUzogUmVsZWFzaW5nIEFMVUEgVGFyZ2V0IFBvcnQiCiAJCSIgR3JvdXA6IGFsdWEvdGdfcHRfZ3BzLyVzLCBJRDogJWh1XG4iLAogCQljb25maWdfaXRlbV9uYW1lKGl0ZW0pLCB0Z19wdF9ncC0+dGdfcHRfZ3BfaWQpOwotCisJLyoKKwkgKiBjb3JlX2FsdWFfZnJlZV90Z19wdF9ncCgpIGlzIGNhbGxlZCBmcm9tIHRhcmdldF9jb3JlX2FsdWFfdGdfcHRfZ3Bfb3BzLT5yZWxlYXNlKCkKKwkgKiAtPiB0YXJnZXRfY29yZV9hbHVhX3RnX3B0X2dwX3JlbGVhc2UoKS4KKwkgKi8KIAljb25maWdfaXRlbV9wdXQoaXRlbSk7Ci0JY29yZV9hbHVhX2ZyZWVfdGdfcHRfZ3AodGdfcHRfZ3ApOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdGFyZ2V0X2NvcmVfYWx1YV90Z19wdF9ncHNfZ3JvdXBfb3BzID0gewpAQCAtMjc3MSwxMyArMjgxNCwxMSBAQAogCXN0cnVjdCBzZV9zdWJzeXN0ZW1fYXBpICp0OwogCXN0cnVjdCBjb25maWdfaXRlbSAqZGZfaXRlbTsKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwICpkZXZfY2csICp0Z19wdF9ncF9jZzsKLQlpbnQgaSwgcmV0OworCWludCBpOwogCiAJaGJhID0gaXRlbV90b19oYmEoJnNlX2Rldi0+c2VfZGV2X2hiYS0+aGJhX2dyb3VwLmNnX2l0ZW0pOwogCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaGJhLT5oYmFfYWNjZXNzX211dGV4KSkKLQkJZ290byBvdXQ7Ci0KKwltdXRleF9sb2NrKCZoYmEtPmhiYV9hY2Nlc3NfbXV0ZXgpOwogCXQgPSBoYmEtPnRyYW5zcG9ydDsKIAogCXNwaW5fbG9jaygmc2VfZ2xvYmFsLT5nX2RldmljZV9sb2NrKTsKQEAgLTI3OTEsNyArMjgzMiwxMCBAQAogCQljb25maWdfaXRlbV9wdXQoZGZfaXRlbSk7CiAJfQogCWtmcmVlKHRnX3B0X2dwX2NnLT5kZWZhdWx0X2dyb3Vwcyk7Ci0JY29yZV9hbHVhX2ZyZWVfdGdfcHRfZ3AoVDEwX0FMVUEoc2VfZGV2KS0+ZGVmYXVsdF90Z19wdF9ncCk7CisJLyoKKwkgKiBjb3JlX2FsdWFfZnJlZV90Z19wdF9ncCgpIGlzIGNhbGxlZCBmcm9tIC0+ZGVmYXVsdF90Z19wdF9ncAorCSAqIGRpcmVjdGx5IGZyb20gdGFyZ2V0X2NvcmVfYWx1YV90Z19wdF9ncF9yZWxlYXNlKCkuCisJICovCiAJVDEwX0FMVUEoc2VfZGV2KS0+ZGVmYXVsdF90Z19wdF9ncCA9IE5VTEw7CiAKIAlkZXZfY2cgPSAmc2VfZGV2LT5zZV9kZXZfZ3JvdXA7CkBAIC0yODAwLDM4ICsyODQ0LDEyIEBACiAJCWRldl9jZy0+ZGVmYXVsdF9ncm91cHNbaV0gPSBOVUxMOwogCQljb25maWdfaXRlbV9wdXQoZGZfaXRlbSk7CiAJfQotCi0JY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwogCS8qCi0JICogVGhpcyBwb2ludGVyIHdpbGwgc2V0IHdoZW4gdGhlIHN0b3JhZ2UgaXMgZW5hYmxlZCB3aXRoOgotCSAqIGBlY2hvIDEgPiAkQ09ORklHRlMvY29yZS8kSEJBLyRERVYvZGV2X2VuYWJsZWAKKwkgKiBUaGUgcmVsZWFzaW5nIG9mIHNlX2RldiBhbmQgYXNzb2NpYXRlZCBzZV9kZXYtPnNlX2Rldl9wdHIgaXMgZG9uZQorCSAqIGZyb20gdGFyZ2V0X2NvcmVfZGV2X2l0ZW1fb3BzLT5yZWxlYXNlKCkgLT50YXJnZXRfY29yZV9kZXZfcmVsZWFzZSgpLgogCSAqLwotCWlmIChzZV9kZXYtPnNlX2Rldl9wdHIpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiVGFyZ2V0X0NvcmVfQ29uZmlnRlM6IENhbGxpbmcgc2VfZnJlZV8iCi0JCQkidmlydHVhbF9kZXZpY2UoKSBmb3Igc2VfZGV2X3B0cjogJXBcbiIsCi0JCQkJc2VfZGV2LT5zZV9kZXZfcHRyKTsKLQotCQlyZXQgPSBzZV9mcmVlX3ZpcnR1YWxfZGV2aWNlKHNlX2Rldi0+c2VfZGV2X3B0ciwgaGJhKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGhiYV9vdXQ7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogUmVsZWFzZSBzdHJ1Y3Qgc2Vfc3Vic3lzdGVtX2Rldi0+c2VfZGV2X3N1X3B0ci4uCi0JCSAqLwotCQlwcmludGsoS0VSTl9JTkZPICJUYXJnZXRfQ29yZV9Db25maWdGUzogQ2FsbGluZyB0LT5mcmVlXyIKLQkJCSJkZXZpY2UoKSBmb3Igc2VfZGV2X3N1X3B0cjogJXBcbiIsCi0JCQlzZV9kZXYtPnNlX2Rldl9zdV9wdHIpOwotCi0JCXQtPmZyZWVfZGV2aWNlKHNlX2Rldi0+c2VfZGV2X3N1X3B0cik7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiVGFyZ2V0X0NvcmVfQ29uZmlnRlM6IERlYWxsb2NhdGluZyBzZV9zdWJzeXN0ZW0iCi0JCSJfZGV2X3Q6ICVwXG4iLCBzZV9kZXYpOwotCi1oYmFfb3V0OgorCWNvbmZpZ19pdGVtX3B1dChpdGVtKTsKIAltdXRleF91bmxvY2soJmhiYS0+aGJhX2FjY2Vzc19tdXRleCk7Ci1vdXQ6Ci0Ja2ZyZWUoc2VfZGV2KTsKIH0KIAogc3RhdGljIHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHRhcmdldF9jb3JlX2hiYV9ncm91cF9vcHMgPSB7CkBAIC0yOTE0LDYgKzI5MzIsMTMgQEAKIAogQ09ORklHRlNfRUFUVFJfT1BTKHRhcmdldF9jb3JlX2hiYSwgc2VfaGJhLCBoYmFfZ3JvdXApOwogCitzdGF0aWMgdm9pZCB0YXJnZXRfY29yZV9oYmFfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJc3RydWN0IHNlX2hiYSAqaGJhID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKKwkJCQlzdHJ1Y3Qgc2VfaGJhLCBoYmFfZ3JvdXApOworCWNvcmVfZGVsZXRlX2hiYShoYmEpOworfQorCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqdGFyZ2V0X2NvcmVfaGJhX2F0dHJzW10gPSB7CiAJJnRhcmdldF9jb3JlX2hiYV9oYmFfaW5mby5hdHRyLAogCSZ0YXJnZXRfY29yZV9oYmFfaGJhX21vZGUuYXR0ciwKQEAgLTI5MjEsNiArMjk0Niw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyB0YXJnZXRfY29yZV9oYmFfaXRlbV9vcHMgPSB7CisJLnJlbGVhc2UJCT0gdGFyZ2V0X2NvcmVfaGJhX3JlbGVhc2UsCiAJLnNob3dfYXR0cmlidXRlCQk9IHRhcmdldF9jb3JlX2hiYV9hdHRyX3Nob3csCiAJLnN0b3JlX2F0dHJpYnV0ZQk9IHRhcmdldF9jb3JlX2hiYV9hdHRyX3N0b3JlLAogfTsKQEAgLTI5OTcsMTAgKzMwMjMsMTEgQEAKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiB7Ci0Jc3RydWN0IHNlX2hiYSAqaGJhID0gaXRlbV90b19oYmEoaXRlbSk7Ci0KKwkvKgorCSAqIGNvcmVfZGVsZXRlX2hiYSgpIGlzIGNhbGxlZCBmcm9tIHRhcmdldF9jb3JlX2hiYV9pdGVtX29wcy0+cmVsZWFzZSgpCisJICogLT4gdGFyZ2V0X2NvcmVfaGJhX3JlbGVhc2UoKQorCSAqLwogCWNvbmZpZ19pdGVtX3B1dChpdGVtKTsKLQljb3JlX2RlbGV0ZV9oYmEoaGJhKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHRhcmdldF9jb3JlX2dyb3VwX29wcyA9IHsKQEAgLTMwMjIsNyArMzA0OSw2IEBACiAJc3RydWN0IGNvbmZpZ19ncm91cCAqdGFyZ2V0X2NnLCAqaGJhX2NnID0gTlVMTCwgKmFsdWFfY2cgPSBOVUxMOwogCXN0cnVjdCBjb25maWdfZ3JvdXAgKmx1X2dwX2NnID0gTlVMTDsKIAlzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXM7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzY3NpX3RhcmdldF9wcm9jID0gTlVMTDsKIAlzdHJ1Y3QgdDEwX2FsdWFfbHVfZ3AgKmx1X2dwOwogCWludCByZXQ7CiAKQEAgLTMxMjgsMjEgKzMxNTQsMTAgQEAKIAlpZiAoY29yZV9kZXZfc2V0dXBfdmlydHVhbF9sdW4wKCkgPCAwKQogCQlnb3RvIG91dDsKIAotCXNjc2lfdGFyZ2V0X3Byb2MgPSBwcm9jX21rZGlyKCJzY3NpX3RhcmdldCIsIDApOwotCWlmICghKHNjc2lfdGFyZ2V0X3Byb2MpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicHJvY19ta2RpcihzY3NpX3RhcmdldCwgMCkgZmFpbGVkXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCXJldCA9IGluaXRfc2NzaV90YXJnZXRfbWliKCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCiAJcmV0dXJuIDA7CiAKIG91dDoKIAljb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShzdWJzeXMpOwotCWlmIChzY3NpX3RhcmdldF9wcm9jKQotCQlyZW1vdmVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQiLCAwKTsKIAljb3JlX2Rldl9yZWxlYXNlX3ZpcnR1YWxfbHVuMCgpOwogCXJkX21vZHVsZV9leGl0KCk7CiBvdXRfZ2xvYmFsOgpAQCAtMzE3OCw4ICszMTkzLDcgQEAKIAkJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwogCX0KIAlrZnJlZShsdV9ncF9jZy0+ZGVmYXVsdF9ncm91cHMpOwotCWNvcmVfYWx1YV9mcmVlX2x1X2dwKHNlX2dsb2JhbC0+ZGVmYXVsdF9sdV9ncCk7Ci0Jc2VfZ2xvYmFsLT5kZWZhdWx0X2x1X2dwID0gTlVMTDsKKwlsdV9ncF9jZy0+ZGVmYXVsdF9ncm91cHMgPSBOVUxMOwogCiAJYWx1YV9jZyA9ICZzZV9nbG9iYWwtPmFsdWFfZ3JvdXA7CiAJZm9yIChpID0gMDsgYWx1YV9jZy0+ZGVmYXVsdF9ncm91cHNbaV07IGkrKykgewpAQCAtMzE4OCw2ICszMjAyLDcgQEAKIAkJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwogCX0KIAlrZnJlZShhbHVhX2NnLT5kZWZhdWx0X2dyb3Vwcyk7CisJYWx1YV9jZy0+ZGVmYXVsdF9ncm91cHMgPSBOVUxMOwogCiAJaGJhX2NnID0gJnNlX2dsb2JhbC0+dGFyZ2V0X2NvcmVfaGJhZ3JvdXA7CiAJZm9yIChpID0gMDsgaGJhX2NnLT5kZWZhdWx0X2dyb3Vwc1tpXTsgaSsrKSB7CkBAIC0zMTk2LDIwICszMjExLDIwIEBACiAJCWNvbmZpZ19pdGVtX3B1dChpdGVtKTsKIAl9CiAJa2ZyZWUoaGJhX2NnLT5kZWZhdWx0X2dyb3Vwcyk7Ci0KLQlmb3IgKGkgPSAwOyBzdWJzeXMtPnN1X2dyb3VwLmRlZmF1bHRfZ3JvdXBzW2ldOyBpKyspIHsKLQkJaXRlbSA9ICZzdWJzeXMtPnN1X2dyb3VwLmRlZmF1bHRfZ3JvdXBzW2ldLT5jZ19pdGVtOwotCQlzdWJzeXMtPnN1X2dyb3VwLmRlZmF1bHRfZ3JvdXBzW2ldID0gTlVMTDsKLQkJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwotCX0KKwloYmFfY2ctPmRlZmF1bHRfZ3JvdXBzID0gTlVMTDsKKwkvKgorCSAqIFdlIGV4cGVjdCBzdWJzeXMtPnN1X2dyb3VwLmRlZmF1bHRfZ3JvdXBzIHRvIGJlIHJlbGVhc2VkCisJICogYnkgY29uZmlnZnMgc3Vic3lzdGVtIHByb3ZpZGVyIGxvZ2ljLi4KKwkgKi8KKwljb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShzdWJzeXMpOwogCWtmcmVlKHN1YnN5cy0+c3VfZ3JvdXAuZGVmYXVsdF9ncm91cHMpOwogCi0JY29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oc3Vic3lzKTsKKwljb3JlX2FsdWFfZnJlZV9sdV9ncChzZV9nbG9iYWwtPmRlZmF1bHRfbHVfZ3ApOworCXNlX2dsb2JhbC0+ZGVmYXVsdF9sdV9ncCA9IE5VTEw7CisKIAlwcmludGsoS0VSTl9JTkZPICJUQVJHRVRfQ09SRVswXTogUmVsZWFzZWQgQ29uZmlnRlMgRmFicmljIgogCQkJIiBJbmZyYXN0cnVjdHVyZVxuIik7CiAKLQlyZW1vdmVfc2NzaV90YXJnZXRfbWliKCk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0IiwgMCk7CiAJY29yZV9kZXZfcmVsZWFzZV92aXJ0dWFsX2x1bjAoKTsKIAlyZF9tb2R1bGVfZXhpdCgpOwogCXJlbGVhc2Vfc2VfZ2xvYmFsKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9kZXZpY2UuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5jCmluZGV4IDMxN2NlNTguLjVkYTA1MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5jCkBAIC0zNzMsMTEgKzM3MywxMSBAQAogCQkvKgogCQkgKiBkZXZlLT5zZV9sdW5fYWNsIHdpbGwgYmUgTlVMTCBmb3IgZGVtby1tb2RlIGNyZWF0ZWQgTFVOcwogCQkgKiB0aGF0IGhhdmUgbm90IGJlZW4gZXhwbGljdGx5IGNvbmNlcnRlZCB0byBNYXBwZWRMVU5zIC0+Ci0JCSAqIHN0cnVjdCBzZV9sdW5fYWNsLgorCQkgKiBzdHJ1Y3Qgc2VfbHVuX2FjbCwgYnV0IHdlIHJlbW92ZSBkZXZlLT5hbHVhX3BvcnRfbGlzdCBmcm9tCisJCSAqIHBvcnQtPnNlcF9hbHVhX2xpc3QuIFRoaXMgYWxzbyBtZWFucyB0aGF0IGFjdGl2ZSBVQXMgYW5kCisJCSAqIE5vZGVBQ0wgY29udGV4dCBzcGVjaWZpYyBQUiBtZXRhZGF0YSBmb3IgZGVtby1tb2RlCisJCSAqIE1hcHBlZExVTiAqZGV2ZSB3aWxsIGJlIHJlbGVhc2VkIGJlbG93Li4KIAkJICovCi0JCWlmICghKGRldmUtPnNlX2x1bl9hY2wpKQotCQkJcmV0dXJuIDA7Ci0KIAkJc3Bpbl9sb2NrX2JoKCZwb3J0LT5zZXBfYWx1YV9sb2NrKTsKIAkJbGlzdF9kZWwoJmRldmUtPmFsdWFfcG9ydF9saXN0KTsKIAkJc3Bpbl91bmxvY2tfYmgoJnBvcnQtPnNlcF9hbHVhX2xvY2spOwpAQCAtMzk1LDEyICszOTUsMTQgQEAKIAkJCQlwcmludGsoS0VSTl9FUlIgInN0cnVjdCBzZV9kZXZfZW50cnktPnNlX2x1bl9hY2wiCiAJCQkJCSIgYWxyZWFkeSBzZXQgZm9yIGRlbW8gbW9kZSAtPiBleHBsaWN0IgogCQkJCQkiIExVTiBBQ0wgdHJhbnNpdGlvblxuIik7CisJCQkJc3Bpbl91bmxvY2tfaXJxKCZuYWNsLT5kZXZpY2VfbGlzdF9sb2NrKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCQlpZiAoZGV2ZS0+c2VfbHVuICE9IGx1bikgewogCQkJCXByaW50ayhLRVJOX0VSUiAic3RydWN0IHNlX2Rldl9lbnRyeS0+c2VfbHVuIGRvZXMiCiAJCQkJCSIgbWF0Y2ggcGFzc2VkIHN0cnVjdCBzZV9sdW4gZm9yIGRlbW8gbW9kZSIKIAkJCQkJIiAtPiBleHBsaWN0IExVTiBBQ0wgdHJhbnNpdGlvblxuIik7CisJCQkJc3Bpbl91bmxvY2tfaXJxKCZuYWNsLT5kZXZpY2VfbGlzdF9sb2NrKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCQlkZXZlLT5zZV9sdW5fYWNsID0gbHVuX2FjbDsKQEAgLTg2NSw5ICs4NjcsNiBAQAogCQl9CiAJfQogCXNwaW5fdW5sb2NrKCZoYmEtPmRldmljZV9sb2NrKTsKLQotCXdoaWxlIChhdG9taWNfcmVhZCgmaGJhLT5kZXZfbWliX2FjY2Vzc19jb3VudCkpCi0JCWNwdV9yZWxheCgpOwogfQogCiBpbnQgc2VfZGV2X2NoZWNrX29ubGluZShzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9mYWJyaWNfY29uZmlnZnMuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZhYnJpY19jb25maWdmcy5jCmluZGV4IDMyYjE0OGQuLmI2NWQxYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZhYnJpY19jb25maWdmcy5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZhYnJpY19jb25maWdmcy5jCkBAIC0yMTQsMTIgKzIxNCwyMiBAQAogCiBDT05GSUdGU19FQVRUUl9PUFModGFyZ2V0X2ZhYnJpY19tYXBwZWRsdW4sIHNlX2x1bl9hY2wsIHNlX2x1bl9ncm91cCk7CiAKK3N0YXRpYyB2b2lkIHRhcmdldF9mYWJyaWNfbWFwcGVkbHVuX3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQoreworCXN0cnVjdCBzZV9sdW5fYWNsICpsYWNsID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKKwkJCQlzdHJ1Y3Qgc2VfbHVuX2FjbCwgc2VfbHVuX2dyb3VwKTsKKwlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcgPSBsYWNsLT5zZV9sdW5fbmFjbC0+c2VfdHBnOworCisJY29yZV9kZXZfZnJlZV9pbml0aWF0b3Jfbm9kZV9sdW5fYWNsKHNlX3RwZywgbGFjbCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICp0YXJnZXRfZmFicmljX21hcHBlZGx1bl9hdHRyc1tdID0gewogCSZ0YXJnZXRfZmFicmljX21hcHBlZGx1bl93cml0ZV9wcm90ZWN0LmF0dHIsCiAJTlVMTCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIHRhcmdldF9mYWJyaWNfbWFwcGVkbHVuX2l0ZW1fb3BzID0geworCS5yZWxlYXNlCQk9IHRhcmdldF9mYWJyaWNfbWFwcGVkbHVuX3JlbGVhc2UsCiAJLnNob3dfYXR0cmlidXRlCQk9IHRhcmdldF9mYWJyaWNfbWFwcGVkbHVuX2F0dHJfc2hvdywKIAkuc3RvcmVfYXR0cmlidXRlCT0gdGFyZ2V0X2ZhYnJpY19tYXBwZWRsdW5fYXR0cl9zdG9yZSwKIAkuYWxsb3dfbGluawkJPSB0YXJnZXRfZmFicmljX21hcHBlZGx1bl9saW5rLApAQCAtMzM3LDE1ICszNDcsMjEgQEAKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiB7Ci0Jc3RydWN0IHNlX2x1bl9hY2wgKmxhY2wgPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAotCQkJc3RydWN0IHNlX2x1bl9hY2wsIHNlX2x1bl9ncm91cCk7Ci0Jc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnID0gbGFjbC0+c2VfbHVuX25hY2wtPnNlX3RwZzsKLQogCWNvbmZpZ19pdGVtX3B1dChpdGVtKTsKLQljb3JlX2Rldl9mcmVlX2luaXRpYXRvcl9ub2RlX2x1bl9hY2woc2VfdHBnLCBsYWNsKTsKK30KKworc3RhdGljIHZvaWQgdGFyZ2V0X2ZhYnJpY19uYWNsX2Jhc2VfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJc3RydWN0IHNlX25vZGVfYWNsICpzZV9uYWNsID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKKwkJCXN0cnVjdCBzZV9ub2RlX2FjbCwgYWNsX2dyb3VwKTsKKwlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcgPSBzZV9uYWNsLT5zZV90cGc7CisJc3RydWN0IHRhcmdldF9mYWJyaWNfY29uZmlnZnMgKnRmID0gc2VfdHBnLT5zZV90cGdfd3duLT53d25fdGY7CisKKwl0Zi0+dGZfb3BzLmZhYnJpY19kcm9wX25vZGVhY2woc2VfbmFjbCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIHRhcmdldF9mYWJyaWNfbmFjbF9iYXNlX2l0ZW1fb3BzID0geworCS5yZWxlYXNlCQk9IHRhcmdldF9mYWJyaWNfbmFjbF9iYXNlX3JlbGVhc2UsCiAJLnNob3dfYXR0cmlidXRlCQk9IHRhcmdldF9mYWJyaWNfbmFjbF9iYXNlX2F0dHJfc2hvdywKIAkuc3RvcmVfYXR0cmlidXRlCT0gdGFyZ2V0X2ZhYnJpY19uYWNsX2Jhc2VfYXR0cl9zdG9yZSwKIH07CkBAIC00MDQsOSArNDIwLDYgQEAKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiB7Ci0Jc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnID0gY29udGFpbmVyX29mKGdyb3VwLAotCQkJc3RydWN0IHNlX3BvcnRhbF9ncm91cCwgdHBnX2FjbF9ncm91cCk7Ci0Jc3RydWN0IHRhcmdldF9mYWJyaWNfY29uZmlnZnMgKnRmID0gc2VfdHBnLT5zZV90cGdfd3duLT53d25fdGY7CiAJc3RydWN0IHNlX25vZGVfYWNsICpzZV9uYWNsID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKIAkJCXN0cnVjdCBzZV9ub2RlX2FjbCwgYWNsX2dyb3VwKTsKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKmRmX2l0ZW07CkBAIC00MTksOSArNDMyLDEwIEBACiAJCW5hY2xfY2ctPmRlZmF1bHRfZ3JvdXBzW2ldID0gTlVMTDsKIAkJY29uZmlnX2l0ZW1fcHV0KGRmX2l0ZW0pOwogCX0KLQorCS8qCisJICogc3RydWN0IHNlX25vZGVfYWNsIGZyZWUgaXMgZG9uZSBpbiB0YXJnZXRfZmFicmljX25hY2xfYmFzZV9yZWxlYXNlKCkKKwkgKi8KIAljb25maWdfaXRlbV9wdXQoaXRlbSk7Ci0JdGYtPnRmX29wcy5mYWJyaWNfZHJvcF9ub2RlYWNsKHNlX25hY2wpOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdGFyZ2V0X2ZhYnJpY19uYWNsX2dyb3VwX29wcyA9IHsKQEAgLTQzNyw3ICs0NTEsMTggQEAKIAogQ09ORklHRlNfRUFUVFJfT1BTKHRhcmdldF9mYWJyaWNfbnBfYmFzZSwgc2VfdHBnX25wLCB0cGdfbnBfZ3JvdXApOwogCitzdGF0aWMgdm9pZCB0YXJnZXRfZmFicmljX25wX2Jhc2VfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJc3RydWN0IHNlX3RwZ19ucCAqc2VfdHBnX25wID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKKwkJCQlzdHJ1Y3Qgc2VfdHBnX25wLCB0cGdfbnBfZ3JvdXApOworCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyA9IHNlX3RwZ19ucC0+dHBnX25wX3BhcmVudDsKKwlzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcyAqdGYgPSBzZV90cGctPnNlX3RwZ193d24tPnd3bl90ZjsKKworCXRmLT50Zl9vcHMuZmFicmljX2Ryb3BfbnAoc2VfdHBnX25wKTsKK30KKwogc3RhdGljIHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdGFyZ2V0X2ZhYnJpY19ucF9iYXNlX2l0ZW1fb3BzID0geworCS5yZWxlYXNlCQk9IHRhcmdldF9mYWJyaWNfbnBfYmFzZV9yZWxlYXNlLAogCS5zaG93X2F0dHJpYnV0ZQkJPSB0YXJnZXRfZmFicmljX25wX2Jhc2VfYXR0cl9zaG93LAogCS5zdG9yZV9hdHRyaWJ1dGUJPSB0YXJnZXRfZmFicmljX25wX2Jhc2VfYXR0cl9zdG9yZSwKIH07CkBAIC00NjYsNiArNDkxLDcgQEAKIAlpZiAoIShzZV90cGdfbnApIHx8IElTX0VSUihzZV90cGdfbnApKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAorCXNlX3RwZ19ucC0+dHBnX25wX3BhcmVudCA9IHNlX3RwZzsKIAljb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoJnNlX3RwZ19ucC0+dHBnX25wX2dyb3VwLCBuYW1lLAogCQkJJlRGX0NJVF9UTVBMKHRmKS0+dGZjX3RwZ19ucF9iYXNlX2NpdCk7CiAKQEAgLTQ3NiwxNCArNTAyLDEwIEBACiAJc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsCiAJc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQogewotCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyA9IGNvbnRhaW5lcl9vZihncm91cCwKLQkJCQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwLCB0cGdfbnBfZ3JvdXApOwotCXN0cnVjdCB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzICp0ZiA9IHNlX3RwZy0+c2VfdHBnX3d3bi0+d3duX3RmOwotCXN0cnVjdCBzZV90cGdfbnAgKnNlX3RwZ19ucCA9IGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAoaXRlbSksCi0JCQkJc3RydWN0IHNlX3RwZ19ucCwgdHBnX25wX2dyb3VwKTsKLQorCS8qCisJICogc3RydWN0IHNlX3RwZ19ucCBpcyByZWxlYXNlZCB2aWEgdGFyZ2V0X2ZhYnJpY19ucF9iYXNlX3JlbGVhc2UoKQorCSAqLwogCWNvbmZpZ19pdGVtX3B1dChpdGVtKTsKLQl0Zi0+dGZfb3BzLmZhYnJpY19kcm9wX25wKHNlX3RwZ19ucCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfZ3JvdXBfb3BlcmF0aW9ucyB0YXJnZXRfZmFicmljX25wX2dyb3VwX29wcyA9IHsKQEAgLTgxNCw3ICs4MzYsMTggQEAKICAqLwogQ09ORklHRlNfRUFUVFJfT1BTKHRhcmdldF9mYWJyaWNfdHBnLCBzZV9wb3J0YWxfZ3JvdXAsIHRwZ19ncm91cCk7CiAKK3N0YXRpYyB2b2lkIHRhcmdldF9mYWJyaWNfdHBnX3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQoreworCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyA9IGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAoaXRlbSksCisJCQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwLCB0cGdfZ3JvdXApOworCXN0cnVjdCBzZV93d24gKnd3biA9IHNlX3RwZy0+c2VfdHBnX3d3bjsKKwlzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcyAqdGYgPSB3d24tPnd3bl90ZjsKKworCXRmLT50Zl9vcHMuZmFicmljX2Ryb3BfdHBnKHNlX3RwZyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIHRhcmdldF9mYWJyaWNfdHBnX2Jhc2VfaXRlbV9vcHMgPSB7CisJLnJlbGVhc2UJCT0gdGFyZ2V0X2ZhYnJpY190cGdfcmVsZWFzZSwKIAkuc2hvd19hdHRyaWJ1dGUJCT0gdGFyZ2V0X2ZhYnJpY190cGdfYXR0cl9zaG93LAogCS5zdG9yZV9hdHRyaWJ1dGUJPSB0YXJnZXRfZmFicmljX3RwZ19hdHRyX3N0b3JlLAogfTsKQEAgLTg3Miw4ICs5MDUsNiBAQAogCXN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAogCXN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKIHsKLQlzdHJ1Y3Qgc2Vfd3duICp3d24gPSBjb250YWluZXJfb2YoZ3JvdXAsIHN0cnVjdCBzZV93d24sIHd3bl9ncm91cCk7Ci0Jc3RydWN0IHRhcmdldF9mYWJyaWNfY29uZmlnZnMgKnRmID0gd3duLT53d25fdGY7CiAJc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKIAkJCQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwLCB0cGdfZ3JvdXApOwogCXN0cnVjdCBjb25maWdfZ3JvdXAgKnRwZ19jZyA9ICZzZV90cGctPnRwZ19ncm91cDsKQEAgLTg5MCwxNSArOTIxLDI4IEBACiAJfQogCiAJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwotCXRmLT50Zl9vcHMuZmFicmljX2Ryb3BfdHBnKHNlX3RwZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHRhcmdldF9mYWJyaWNfcmVsZWFzZV93d24oc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQoreworCXN0cnVjdCBzZV93d24gKnd3biA9IGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAoaXRlbSksCisJCQkJc3RydWN0IHNlX3d3biwgd3duX2dyb3VwKTsKKwlzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcyAqdGYgPSB3d24tPnd3bl90ZjsKKworCXRmLT50Zl9vcHMuZmFicmljX2Ryb3Bfd3duKHd3bik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIHRhcmdldF9mYWJyaWNfdHBnX2l0ZW1fb3BzID0geworCS5yZWxlYXNlCT0gdGFyZ2V0X2ZhYnJpY19yZWxlYXNlX3d3biwKK307CisKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfZ3JvdXBfb3BlcmF0aW9ucyB0YXJnZXRfZmFicmljX3RwZ19ncm91cF9vcHMgPSB7CiAJLm1ha2VfZ3JvdXAJPSB0YXJnZXRfZmFicmljX21ha2VfdHBnLAogCS5kcm9wX2l0ZW0JPSB0YXJnZXRfZmFicmljX2Ryb3BfdHBnLAogfTsKIAotVEZfQ0lUX1NFVFVQKHRwZywgTlVMTCwgJnRhcmdldF9mYWJyaWNfdHBnX2dyb3VwX29wcywgTlVMTCk7CitURl9DSVRfU0VUVVAodHBnLCAmdGFyZ2V0X2ZhYnJpY190cGdfaXRlbV9vcHMsICZ0YXJnZXRfZmFicmljX3RwZ19ncm91cF9vcHMsCisJCU5VTEwpOwogCiAvKiBFbmQgb2YgdGZjX3RwZ19jaXQgKi8KIApAQCAtOTMyLDEzICs5NzYsNyBAQAogCXN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAogCXN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKIHsKLQlzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcyAqdGYgPSBjb250YWluZXJfb2YoZ3JvdXAsCi0JCQkJc3RydWN0IHRhcmdldF9mYWJyaWNfY29uZmlnZnMsIHRmX2dyb3VwKTsKLQlzdHJ1Y3Qgc2Vfd3duICp3d24gPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAotCQkJCXN0cnVjdCBzZV93d24sIHd3bl9ncm91cCk7Ci0KIAljb25maWdfaXRlbV9wdXQoaXRlbSk7Ci0JdGYtPnRmX29wcy5mYWJyaWNfZHJvcF93d24od3duKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHRhcmdldF9mYWJyaWNfd3duX2dyb3VwX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2libG9jay5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfaWJsb2NrLmMKaW5kZXggYzZlMGQ3NS4uNjdmMGMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfaWJsb2NrLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfaWJsb2NrLmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCiAJYmQgPSBibGtkZXZfZ2V0X2J5X3BhdGgoaWJfZGV2LT5pYmRfdWRldl9wYXRoLAogCQkJCUZNT0RFX1dSSVRFfEZNT0RFX1JFQUR8Rk1PREVfRVhDTCwgaWJfZGV2KTsKLQlpZiAoIShiZCkpCisJaWYgKElTX0VSUihiZCkpCiAJCWdvdG8gZmFpbGVkOwogCS8qCiAJICogU2V0dXAgdGhlIGxvY2FsIHNjb3BlIHF1ZXVlX2xpbWl0cyBmcm9tIHN0cnVjdCByZXF1ZXN0X3F1ZXVlLT5saW1pdHMKQEAgLTIyMCw4ICsyMjAsMTAgQEAKIHsKIAlzdHJ1Y3QgaWJsb2NrX2RldiAqaWJfZGV2ID0gcDsKIAotCWJsa2Rldl9wdXQoaWJfZGV2LT5pYmRfYmQsIEZNT0RFX1dSSVRFfEZNT0RFX1JFQUR8Rk1PREVfRVhDTCk7Ci0JYmlvc2V0X2ZyZWUoaWJfZGV2LT5pYmRfYmlvX3NldCk7CisJaWYgKGliX2Rldi0+aWJkX2JkICE9IE5VTEwpCisJCWJsa2Rldl9wdXQoaWJfZGV2LT5pYmRfYmQsIEZNT0RFX1dSSVRFfEZNT0RFX1JFQUR8Rk1PREVfRVhDTCk7CisJaWYgKGliX2Rldi0+aWJkX2Jpb19zZXQgIT0gTlVMTCkKKwkJYmlvc2V0X2ZyZWUoaWJfZGV2LT5pYmRfYmlvX3NldCk7CiAJa2ZyZWUoaWJfZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfbWliLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9taWIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVhNDhhYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9taWIuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEZpbGVuYW1lOiAgdGFyZ2V0X2NvcmVfbWliLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBTQkUsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBSaXNpbmcgVGlkZSBTeXN0ZW1zCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMCBMaW51eC1pU0NTSS5vcmcKLSAqCi0gKiBOaWNob2xhcyBBLiBCZWxsaW5nZXIgPG5hYkBsaW51eC1pc2NzaS5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2luY2x1ZGUgPGdlbmVyYXRlZC91dHNyZWxlYXNlLmg+Ci0jaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgotCi0jaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2Jhc2UuaD4KLSNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0Lmg+Ci0jaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2ZhYnJpY19vcHMuaD4KLSNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuaD4KLQotI2luY2x1ZGUgInRhcmdldF9jb3JlX2hiYS5oIgotI2luY2x1ZGUgInRhcmdldF9jb3JlX21pYi5oIgotCi0vKiBTQ1NJIG1pYiB0YWJsZSBpbmRleCAqLwotc3RhdGljIHN0cnVjdCBzY3NpX2luZGV4X3RhYmxlIHNjc2lfaW5kZXhfdGFibGU7Ci0KLSNpZm5kZWYgSU5JVElBTF9KSUZGSUVTCi0jZGVmaW5lIElOSVRJQUxfSklGRklFUyAoKHVuc2lnbmVkIGxvbmcpKHVuc2lnbmVkIGludCkgKC0zMDAqSFopKQotI2VuZGlmCi0KLS8qIFNDU0kgSW5zdGFuY2UgVGFibGUgKi8KLSNkZWZpbmUgU0NTSV9JTlNUX1NXX0lOREVYCQkxCi0jZGVmaW5lIFNDU0lfVFJBTlNQT1JUX0lOREVYCQkxCi0KLSNkZWZpbmUgTk9ORQkJIk5vbmUiCi0jZGVmaW5lIElTUFJJTlQoYSkgICAoKGEgPj0gJyAnKSAmJiAoYSA8PSAnficpKQotCi1zdGF0aWMgaW5saW5lIGludCBsaXN0X2lzX2ZpcnN0KGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCi0JCQkJY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKLXsKLQlyZXR1cm4gbGlzdC0+cHJldiA9PSBoZWFkOwotfQotCi1zdGF0aWMgdm9pZCAqbG9jYXRlX2hiYV9zdGFydCgKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKLQlsb2ZmX3QgKnBvcykKLXsKLQlzcGluX2xvY2soJnNlX2dsb2JhbC0+Z19kZXZpY2VfbG9jayk7Ci0JcmV0dXJuIHNlcV9saXN0X3N0YXJ0KCZzZV9nbG9iYWwtPmdfc2VfZGV2X2xpc3QsICpwb3MpOwotfQotCi1zdGF0aWMgdm9pZCAqbG9jYXRlX2hiYV9uZXh0KAotCXN0cnVjdCBzZXFfZmlsZSAqc2VxLAotCXZvaWQgKnYsCi0JbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIHNlcV9saXN0X25leHQodiwgJnNlX2dsb2JhbC0+Z19zZV9kZXZfbGlzdCwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgbG9jYXRlX2hiYV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCXNwaW5fdW5sb2NrKCZzZV9nbG9iYWwtPmdfZGV2aWNlX2xvY2spOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogU0NTSSBNSUIgVGFibGVzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFNDU0kgSW5zdGFuY2UgVGFibGUKLSAqLwotc3RhdGljIHZvaWQgKnNjc2lfaW5zdF9zZXFfc3RhcnQoCi0Jc3RydWN0IHNlcV9maWxlICpzZXEsCi0JbG9mZl90ICpwb3MpCi17Ci0Jc3Bpbl9sb2NrKCZzZV9nbG9iYWwtPmhiYV9sb2NrKTsKLQlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJnNlX2dsb2JhbC0+Z19oYmFfbGlzdCwgKnBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkICpzY3NpX2luc3Rfc2VxX25leHQoCi0Jc3RydWN0IHNlcV9maWxlICpzZXEsCi0Jdm9pZCAqdiwKLQlsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmc2VfZ2xvYmFsLT5nX2hiYV9saXN0LCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCBzY3NpX2luc3Rfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3Bpbl91bmxvY2soJnNlX2dsb2JhbC0+aGJhX2xvY2spOwotfQotCi1zdGF0aWMgaW50IHNjc2lfaW5zdF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2VfaGJhICpoYmEgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBzZV9oYmEsIGhiYV9saXN0KTsKLQotCWlmIChsaXN0X2lzX2ZpcnN0KCZoYmEtPmhiYV9saXN0LCAmc2VfZ2xvYmFsLT5nX2hiYV9saXN0KSkKLQkJc2VxX3B1dHMoc2VxLCAiaW5zdCBzd19pbmR4XG4iKTsKLQotCXNlcV9wcmludGYoc2VxLCAiJXUgJXVcbiIsIGhiYS0+aGJhX2luZGV4LCBTQ1NJX0lOU1RfU1dfSU5ERVgpOwotCXNlcV9wcmludGYoc2VxLCAicGx1Z2luOiAlcyB2ZXJzaW9uOiAlc1xuIiwKLQkJCWhiYS0+dHJhbnNwb3J0LT5uYW1lLCBUQVJHRVRfQ09SRV9WRVJTSU9OKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNjc2lfaW5zdF9zZXFfb3BzID0gewotCS5zdGFydAk9IHNjc2lfaW5zdF9zZXFfc3RhcnQsCi0JLm5leHQJPSBzY3NpX2luc3Rfc2VxX25leHQsCi0JLnN0b3AJPSBzY3NpX2luc3Rfc2VxX3N0b3AsCi0JLnNob3cJPSBzY3NpX2luc3Rfc2VxX3Nob3cKLX07Ci0KLXN0YXRpYyBpbnQgc2NzaV9pbnN0X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmc2NzaV9pbnN0X3NlcV9vcHMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY3NpX2luc3Rfc2VxX2ZvcHMgPSB7Ci0JLm93bmVyCSA9IFRISVNfTU9EVUxFLAotCS5vcGVuCSA9IHNjc2lfaW5zdF9zZXFfb3BlbiwKLQkucmVhZAkgPSBzZXFfcmVhZCwKLQkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAotfTsKLQotLyoKLSAqIFNDU0kgRGV2aWNlIFRhYmxlCi0gKi8KLXN0YXRpYyB2b2lkICpzY3NpX2Rldl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBsb2NhdGVfaGJhX3N0YXJ0KHNlcSwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgKnNjc2lfZGV2X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gbG9jYXRlX2hiYV9uZXh0KHNlcSwgdiwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgc2NzaV9kZXZfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0JbG9jYXRlX2hiYV9zdG9wKHNlcSwgdik7Ci19Ci0KLXN0YXRpYyBpbnQgc2NzaV9kZXZfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IHNlX2hiYSAqaGJhOwotCXN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2ICpzZV9kZXYgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2LAotCQkJCQkJZ19zZV9kZXZfbGlzdCk7Ci0Jc3RydWN0IHNlX2RldmljZSAqZGV2ID0gc2VfZGV2LT5zZV9kZXZfcHRyOwotCWNoYXIgc3RyWzI4XTsKLQlpbnQgazsKLQotCWlmIChsaXN0X2lzX2ZpcnN0KCZzZV9kZXYtPmdfc2VfZGV2X2xpc3QsICZzZV9nbG9iYWwtPmdfc2VfZGV2X2xpc3QpKQotCQlzZXFfcHV0cyhzZXEsICJpbnN0IGluZHggcm9sZSBwb3J0c1xuIik7Ci0KLQlpZiAoIShkZXYpKQotCQlyZXR1cm4gMDsKLQotCWhiYSA9IGRldi0+c2VfaGJhOwotCWlmICghKGhiYSkpIHsKLQkJLyogTG9nIGVycm9yID8gKi8KLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc2VxX3ByaW50ZihzZXEsICIldSAldSAlcyAldVxuIiwgaGJhLT5oYmFfaW5kZXgsCi0JCSAgIGRldi0+ZGV2X2luZGV4LCAiVGFyZ2V0IiwgZGV2LT5kZXZfcG9ydF9jb3VudCk7Ci0KLQltZW1jcHkoJnN0clswXSwgKHZvaWQgKilERVZfVDEwX1dXTihkZXYpLCAyOCk7Ci0KLQkvKiB2ZW5kb3IgKi8KLQlmb3IgKGsgPSAwOyBrIDwgODsgaysrKQotCQlzdHJba10gPSBJU1BSSU5UKERFVl9UMTBfV1dOKGRldiktPnZlbmRvcltrXSkgPwotCQkJCURFVl9UMTBfV1dOKGRldiktPnZlbmRvcltrXSA6IDB4MjA7Ci0Jc3RyW2tdID0gMHgyMDsKLQotCS8qIG1vZGVsICovCi0JZm9yIChrID0gMDsgayA8IDE2OyBrKyspCi0JCXN0cltrKzldID0gSVNQUklOVChERVZfVDEwX1dXTihkZXYpLT5tb2RlbFtrXSkgPwotCQkJCURFVl9UMTBfV1dOKGRldiktPm1vZGVsW2tdIDogMHgyMDsKLQlzdHJbayArIDldID0gMDsKLQotCXNlcV9wcmludGYoc2VxLCAiZGV2X2FsaWFzOiAlc1xuIiwgc3RyKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNjc2lfZGV2X3NlcV9vcHMgPSB7Ci0JLnN0YXJ0ICA9IHNjc2lfZGV2X3NlcV9zdGFydCwKLQkubmV4dCAgID0gc2NzaV9kZXZfc2VxX25leHQsCi0JLnN0b3AgICA9IHNjc2lfZGV2X3NlcV9zdG9wLAotCS5zaG93ICAgPSBzY3NpX2Rldl9zZXFfc2hvdwotfTsKLQotc3RhdGljIGludCBzY3NpX2Rldl9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnNjc2lfZGV2X3NlcV9vcHMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY3NpX2Rldl9zZXFfZm9wcyA9IHsKLQkub3duZXIJID0gVEhJU19NT0RVTEUsCi0JLm9wZW4JID0gc2NzaV9kZXZfc2VxX29wZW4sCi0JLnJlYWQJID0gc2VxX3JlYWQsCi0JLmxsc2VlawkgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKLX07Ci0KLS8qCi0gKiBTQ1NJIFBvcnQgVGFibGUKLSAqLwotc3RhdGljIHZvaWQgKnNjc2lfcG9ydF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBsb2NhdGVfaGJhX3N0YXJ0KHNlcSwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgKnNjc2lfcG9ydF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIGxvY2F0ZV9oYmFfbmV4dChzZXEsIHYsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjc2lfcG9ydF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlsb2NhdGVfaGJhX3N0b3Aoc2VxLCB2KTsKLX0KLQotc3RhdGljIGludCBzY3NpX3BvcnRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IHNlX2hiYSAqaGJhOwotCXN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2ICpzZV9kZXYgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2LAotCQkJCQkJZ19zZV9kZXZfbGlzdCk7Ci0Jc3RydWN0IHNlX2RldmljZSAqZGV2ID0gc2VfZGV2LT5zZV9kZXZfcHRyOwotCXN0cnVjdCBzZV9wb3J0ICpzZXAsICpzZXBfdG1wOwotCi0JaWYgKGxpc3RfaXNfZmlyc3QoJnNlX2Rldi0+Z19zZV9kZXZfbGlzdCwgJnNlX2dsb2JhbC0+Z19zZV9kZXZfbGlzdCkpCi0JCXNlcV9wdXRzKHNlcSwgImluc3QgZGV2aWNlIGluZHggcm9sZSBidXN5X2NvdW50XG4iKTsKLQotCWlmICghKGRldikpCi0JCXJldHVybiAwOwotCi0JaGJhID0gZGV2LT5zZV9oYmE7Ci0JaWYgKCEoaGJhKSkgewotCQkvKiBMb2cgZXJyb3IgPyAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBGSVhNRTogc2NzaVBvcnRCdXN5U3RhdHVzZXMgY291bnQgKi8KLQlzcGluX2xvY2soJmRldi0+c2VfcG9ydF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2VwLCBzZXBfdG1wLCAmZGV2LT5kZXZfc2VwX2xpc3QsIHNlcF9saXN0KSB7Ci0JCXNlcV9wcmludGYoc2VxLCAiJXUgJXUgJXUgJXMldSAldVxuIiwgaGJhLT5oYmFfaW5kZXgsCi0JCQlkZXYtPmRldl9pbmRleCwgc2VwLT5zZXBfaW5kZXgsICJEZXZpY2UiLAotCQkJZGV2LT5kZXZfaW5kZXgsIDApOwotCX0KLQlzcGluX3VubG9jaygmZGV2LT5zZV9wb3J0X2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NzaV9wb3J0X3NlcV9vcHMgPSB7Ci0JLnN0YXJ0ICA9IHNjc2lfcG9ydF9zZXFfc3RhcnQsCi0JLm5leHQgICA9IHNjc2lfcG9ydF9zZXFfbmV4dCwKLQkuc3RvcCAgID0gc2NzaV9wb3J0X3NlcV9zdG9wLAotCS5zaG93ICAgPSBzY3NpX3BvcnRfc2VxX3Nob3cKLX07Ci0KLXN0YXRpYyBpbnQgc2NzaV9wb3J0X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmc2NzaV9wb3J0X3NlcV9vcHMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY3NpX3BvcnRfc2VxX2ZvcHMgPSB7Ci0JLm93bmVyCSA9IFRISVNfTU9EVUxFLAotCS5vcGVuCSA9IHNjc2lfcG9ydF9zZXFfb3BlbiwKLQkucmVhZAkgPSBzZXFfcmVhZCwKLQkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAotfTsKLQotLyoKLSAqIFNDU0kgVHJhbnNwb3J0IFRhYmxlCi0gKi8KLXN0YXRpYyB2b2lkICpzY3NpX3RyYW5zcG9ydF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBsb2NhdGVfaGJhX3N0YXJ0KHNlcSwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgKnNjc2lfdHJhbnNwb3J0X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gbG9jYXRlX2hiYV9uZXh0KHNlcSwgdiwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgc2NzaV90cmFuc3BvcnRfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0JbG9jYXRlX2hiYV9zdG9wKHNlcSwgdik7Ci19Ci0KLXN0YXRpYyBpbnQgc2NzaV90cmFuc3BvcnRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IHNlX2hiYSAqaGJhOwotCXN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2ICpzZV9kZXYgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2LAotCQkJCQkJZ19zZV9kZXZfbGlzdCk7Ci0Jc3RydWN0IHNlX2RldmljZSAqZGV2ID0gc2VfZGV2LT5zZV9kZXZfcHRyOwotCXN0cnVjdCBzZV9wb3J0ICpzZSwgKnNlX3RtcDsKLQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICp0cGc7Ci0Jc3RydWN0IHQxMF93d24gKnd3bjsKLQljaGFyIGJ1Zls2NF07Ci0KLQlpZiAobGlzdF9pc19maXJzdCgmc2VfZGV2LT5nX3NlX2Rldl9saXN0LCAmc2VfZ2xvYmFsLT5nX3NlX2Rldl9saXN0KSkKLQkJc2VxX3B1dHMoc2VxLCAiaW5zdCBkZXZpY2UgaW5keCBkZXZfbmFtZVxuIik7Ci0KLQlpZiAoIShkZXYpKQotCQlyZXR1cm4gMDsKLQotCWhiYSA9IGRldi0+c2VfaGJhOwotCWlmICghKGhiYSkpIHsKLQkJLyogTG9nIGVycm9yID8gKi8KLQkJcmV0dXJuIDA7Ci0JfQotCi0Jd3duID0gREVWX1QxMF9XV04oZGV2KTsKLQotCXNwaW5fbG9jaygmZGV2LT5zZV9wb3J0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZSwgc2VfdG1wLCAmZGV2LT5kZXZfc2VwX2xpc3QsIHNlcF9saXN0KSB7Ci0JCXRwZyA9IHNlLT5zZXBfdHBnOwotCQlzcHJpbnRmKGJ1ZiwgInNjc2lUcmFuc3BvcnQlcyIsCi0JCQkJVFBHX1RGTyh0cGcpLT5nZXRfZmFicmljX25hbWUoKSk7Ci0KLQkJc2VxX3ByaW50ZihzZXEsICIldSAlcyAldSAlcyslc1xuIiwKLQkJCWhiYS0+aGJhX2luZGV4LCAvKiBzY3NpVHJhbnNwb3J0SW5kZXggKi8KLQkJCWJ1ZiwgIC8qIHNjc2lUcmFuc3BvcnRUeXBlICovCi0JCQkoVFBHX1RGTyh0cGcpLT50cGdfZ2V0X2luc3RfaW5kZXggIT0gTlVMTCkgPwotCQkJVFBHX1RGTyh0cGcpLT50cGdfZ2V0X2luc3RfaW5kZXgodHBnKSA6Ci0JCQkwLAotCQkJVFBHX1RGTyh0cGcpLT50cGdfZ2V0X3d3bih0cGcpLAotCQkJKHN0cmxlbih3d24tPnVuaXRfc2VyaWFsKSkgPwotCQkJLyogc2NzaVRyYW5zcG9ydERldk5hbWUgKi8KLQkJCXd3bi0+dW5pdF9zZXJpYWwgOiB3d24tPnZlbmRvcik7Ci0JfQotCXNwaW5fdW5sb2NrKCZkZXYtPnNlX3BvcnRfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzY3NpX3RyYW5zcG9ydF9zZXFfb3BzID0gewotCS5zdGFydCAgPSBzY3NpX3RyYW5zcG9ydF9zZXFfc3RhcnQsCi0JLm5leHQgICA9IHNjc2lfdHJhbnNwb3J0X3NlcV9uZXh0LAotCS5zdG9wICAgPSBzY3NpX3RyYW5zcG9ydF9zZXFfc3RvcCwKLQkuc2hvdyAgID0gc2NzaV90cmFuc3BvcnRfc2VxX3Nob3cKLX07Ci0KLXN0YXRpYyBpbnQgc2NzaV90cmFuc3BvcnRfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZzY3NpX3RyYW5zcG9ydF9zZXFfb3BzKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2NzaV90cmFuc3BvcnRfc2VxX2ZvcHMgPSB7Ci0JLm93bmVyCSA9IFRISVNfTU9EVUxFLAotCS5vcGVuCSA9IHNjc2lfdHJhbnNwb3J0X3NlcV9vcGVuLAotCS5yZWFkCSA9IHNlcV9yZWFkLAotCS5sbHNlZWsJID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCi19OwotCi0vKgotICogU0NTSSBUYXJnZXQgRGV2aWNlIFRhYmxlCi0gKi8KLXN0YXRpYyB2b2lkICpzY3NpX3RndF9kZXZfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gbG9jYXRlX2hiYV9zdGFydChzZXEsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkICpzY3NpX3RndF9kZXZfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBsb2NhdGVfaGJhX25leHQoc2VxLCB2LCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCBzY3NpX3RndF9kZXZfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0JbG9jYXRlX2hiYV9zdG9wKHNlcSwgdik7Ci19Ci0KLQotI2RlZmluZSBMVV9DT1VOVAkxICAvKiBmb3Igbm93ICovCi1zdGF0aWMgaW50IHNjc2lfdGd0X2Rldl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2VfaGJhICpoYmE7Ci0Jc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYgKnNlX2RldiA9IGxpc3RfZW50cnkodiwgc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYsCi0JCQkJCQlnX3NlX2Rldl9saXN0KTsKLQlzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYgPSBzZV9kZXYtPnNlX2Rldl9wdHI7Ci0JaW50IG5vbl9hY2Nlc3NpYmxlX2x1cyA9IDA7Ci0JY2hhciBzdGF0dXNbMTZdOwotCi0JaWYgKGxpc3RfaXNfZmlyc3QoJnNlX2Rldi0+Z19zZV9kZXZfbGlzdCwgJnNlX2dsb2JhbC0+Z19zZV9kZXZfbGlzdCkpCi0JCXNlcV9wdXRzKHNlcSwgImluc3QgaW5keCBudW1fTFVzIHN0YXR1cyBub25fYWNjZXNzX0xVcyIKLQkJCSIgcmVzZXRzXG4iKTsKLQotCWlmICghKGRldikpCi0JCXJldHVybiAwOwotCi0JaGJhID0gZGV2LT5zZV9oYmE7Ci0JaWYgKCEoaGJhKSkgewotCQkvKiBMb2cgZXJyb3IgPyAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzd2l0Y2ggKGRldi0+ZGV2X3N0YXR1cykgewotCWNhc2UgVFJBTlNQT1JUX0RFVklDRV9BQ1RJVkFURUQ6Ci0JCXN0cmNweShzdGF0dXMsICJhY3RpdmF0ZWQiKTsKLQkJYnJlYWs7Ci0JY2FzZSBUUkFOU1BPUlRfREVWSUNFX0RFQUNUSVZBVEVEOgotCQlzdHJjcHkoc3RhdHVzLCAiZGVhY3RpdmF0ZWQiKTsKLQkJbm9uX2FjY2Vzc2libGVfbHVzID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBUUkFOU1BPUlRfREVWSUNFX1NIVVRET1dOOgotCQlzdHJjcHkoc3RhdHVzLCAic2h1dGRvd24iKTsKLQkJbm9uX2FjY2Vzc2libGVfbHVzID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBUUkFOU1BPUlRfREVWSUNFX09GRkxJTkVfQUNUSVZBVEVEOgotCWNhc2UgVFJBTlNQT1JUX0RFVklDRV9PRkZMSU5FX0RFQUNUSVZBVEVEOgotCQlzdHJjcHkoc3RhdHVzLCAib2ZmbGluZSIpOwotCQlub25fYWNjZXNzaWJsZV9sdXMgPSAxOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzcHJpbnRmKHN0YXR1cywgInVua25vd24oJWQpIiwgZGV2LT5kZXZfc3RhdHVzKTsKLQkJbm9uX2FjY2Vzc2libGVfbHVzID0gMTsKLQl9Ci0KLQlzZXFfcHJpbnRmKHNlcSwgIiV1ICV1ICV1ICVzICV1ICV1XG4iLAotCQkgICBoYmEtPmhiYV9pbmRleCwgZGV2LT5kZXZfaW5kZXgsIExVX0NPVU5ULAotCQkgICBzdGF0dXMsIG5vbl9hY2Nlc3NpYmxlX2x1cywgZGV2LT5udW1fcmVzZXRzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNjc2lfdGd0X2Rldl9zZXFfb3BzID0gewotCS5zdGFydCAgPSBzY3NpX3RndF9kZXZfc2VxX3N0YXJ0LAotCS5uZXh0ICAgPSBzY3NpX3RndF9kZXZfc2VxX25leHQsCi0JLnN0b3AgICA9IHNjc2lfdGd0X2Rldl9zZXFfc3RvcCwKLQkuc2hvdyAgID0gc2NzaV90Z3RfZGV2X3NlcV9zaG93Ci19OwotCi1zdGF0aWMgaW50IHNjc2lfdGd0X2Rldl9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnNjc2lfdGd0X2Rldl9zZXFfb3BzKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2NzaV90Z3RfZGV2X3NlcV9mb3BzID0gewotCS5vd25lcgkgPSBUSElTX01PRFVMRSwKLQkub3BlbgkgPSBzY3NpX3RndF9kZXZfc2VxX29wZW4sCi0JLnJlYWQJID0gc2VxX3JlYWQsCi0JLmxsc2VlawkgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKLX07Ci0KLS8qCi0gKiBTQ1NJIFRhcmdldCBQb3J0IFRhYmxlCi0gKi8KLXN0YXRpYyB2b2lkICpzY3NpX3RndF9wb3J0X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIGxvY2F0ZV9oYmFfc3RhcnQoc2VxLCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCAqc2NzaV90Z3RfcG9ydF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIGxvY2F0ZV9oYmFfbmV4dChzZXEsIHYsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjc2lfdGd0X3BvcnRfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0JbG9jYXRlX2hiYV9zdG9wKHNlcSwgdik7Ci19Ci0KLXN0YXRpYyBpbnQgc2NzaV90Z3RfcG9ydF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2VfaGJhICpoYmE7Ci0Jc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYgKnNlX2RldiA9IGxpc3RfZW50cnkodiwgc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYsCi0JCQkJCQlnX3NlX2Rldl9saXN0KTsKLQlzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYgPSBzZV9kZXYtPnNlX2Rldl9wdHI7Ci0Jc3RydWN0IHNlX3BvcnQgKnNlcCwgKnNlcF90bXA7Ci0Jc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqdHBnOwotCXUzMiByeF9tYnl0ZXMsIHR4X21ieXRlczsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbnVtX2NtZHM7Ci0JY2hhciBidWZbNjRdOwotCi0JaWYgKGxpc3RfaXNfZmlyc3QoJnNlX2Rldi0+Z19zZV9kZXZfbGlzdCwgJnNlX2dsb2JhbC0+Z19zZV9kZXZfbGlzdCkpCi0JCXNlcV9wdXRzKHNlcSwgImluc3QgZGV2aWNlIGluZHggbmFtZSBwb3J0X2luZGV4IGluX2NtZHMiCi0JCQkiIHdyaXRlX21ieXRlcyByZWFkX21ieXRlcyBoc19pbl9jbWRzXG4iKTsKLQotCWlmICghKGRldikpCi0JCXJldHVybiAwOwotCi0JaGJhID0gZGV2LT5zZV9oYmE7Ci0JaWYgKCEoaGJhKSkgewotCQkvKiBMb2cgZXJyb3IgPyAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzcGluX2xvY2soJmRldi0+c2VfcG9ydF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2VwLCBzZXBfdG1wLCAmZGV2LT5kZXZfc2VwX2xpc3QsIHNlcF9saXN0KSB7Ci0JCXRwZyA9IHNlcC0+c2VwX3RwZzsKLQkJc3ByaW50ZihidWYsICIlc1BvcnQjIiwKLQkJCVRQR19URk8odHBnKS0+Z2V0X2ZhYnJpY19uYW1lKCkpOwotCi0JCXNlcV9wcmludGYoc2VxLCAiJXUgJXUgJXUgJXMlZCAlcyVzJWQgIiwKLQkJICAgICBoYmEtPmhiYV9pbmRleCwKLQkJICAgICBkZXYtPmRldl9pbmRleCwKLQkJICAgICBzZXAtPnNlcF9pbmRleCwKLQkJICAgICBidWYsIHNlcC0+c2VwX2luZGV4LAotCQkgICAgIFRQR19URk8odHBnKS0+dHBnX2dldF93d24odHBnKSwgIit0KyIsCi0JCSAgICAgVFBHX1RGTyh0cGcpLT50cGdfZ2V0X3RhZyh0cGcpKTsKLQotCQlzcGluX2xvY2soJnNlcC0+c2VwX2x1bi0+bHVuX3NlcF9sb2NrKTsKLQkJbnVtX2NtZHMgPSBzZXAtPnNlcF9zdGF0cy5jbWRfcGR1czsKLQkJcnhfbWJ5dGVzID0gKHNlcC0+c2VwX3N0YXRzLnJ4X2RhdGFfb2N0ZXRzID4+IDIwKTsKLQkJdHhfbWJ5dGVzID0gKHNlcC0+c2VwX3N0YXRzLnR4X2RhdGFfb2N0ZXRzID4+IDIwKTsKLQkJc3Bpbl91bmxvY2soJnNlcC0+c2VwX2x1bi0+bHVuX3NlcF9sb2NrKTsKLQotCQlzZXFfcHJpbnRmKHNlcSwgIiVsbHUgJXUgJXUgJXVcbiIsIG51bV9jbWRzLAotCQkJcnhfbWJ5dGVzLCB0eF9tYnl0ZXMsIDApOwotCX0KLQlzcGluX3VubG9jaygmZGV2LT5zZV9wb3J0X2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NzaV90Z3RfcG9ydF9zZXFfb3BzID0gewotCS5zdGFydCAgPSBzY3NpX3RndF9wb3J0X3NlcV9zdGFydCwKLQkubmV4dCAgID0gc2NzaV90Z3RfcG9ydF9zZXFfbmV4dCwKLQkuc3RvcCAgID0gc2NzaV90Z3RfcG9ydF9zZXFfc3RvcCwKLQkuc2hvdyAgID0gc2NzaV90Z3RfcG9ydF9zZXFfc2hvdwotfTsKLQotc3RhdGljIGludCBzY3NpX3RndF9wb3J0X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmc2NzaV90Z3RfcG9ydF9zZXFfb3BzKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2NzaV90Z3RfcG9ydF9zZXFfZm9wcyA9IHsKLQkub3duZXIJID0gVEhJU19NT0RVTEUsCi0JLm9wZW4JID0gc2NzaV90Z3RfcG9ydF9zZXFfb3BlbiwKLQkucmVhZAkgPSBzZXFfcmVhZCwKLQkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAotfTsKLQotLyoKLSAqIFNDU0kgQXV0aG9yaXplZCBJbml0aWF0b3IgVGFibGU6Ci0gKiBJdCBjb250YWlucyB0aGUgU0NTSSBJbml0aWF0b3JzIGF1dGhvcml6ZWQgdG8gYmUgYXR0YWNoZWQgdG8gb25lIG9mIHRoZQotICogbG9jYWwgVGFyZ2V0IHBvcnRzLgotICogSXRlcmF0ZXMgdGhyb3VnaCBhbGwgYWN0aXZlIFRQR3MgYW5kIGV4dHJhY3RzIHRoZSBpbmZvIGZyb20gdGhlIEFDTHMKLSAqLwotc3RhdGljIHZvaWQgKnNjc2lfYXV0aF9pbnRyX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi17Ci0Jc3Bpbl9sb2NrX2JoKCZzZV9nbG9iYWwtPnNlX3RwZ19sb2NrKTsKLQlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJnNlX2dsb2JhbC0+Z19zZV90cGdfbGlzdCwgKnBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkICpzY3NpX2F1dGhfaW50cl9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwKLQkJCQkJIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBzZXFfbGlzdF9uZXh0KHYsICZzZV9nbG9iYWwtPmdfc2VfdHBnX2xpc3QsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjc2lfYXV0aF9pbnRyX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCXNwaW5fdW5sb2NrX2JoKCZzZV9nbG9iYWwtPnNlX3RwZ19sb2NrKTsKLX0KLQotc3RhdGljIGludCBzY3NpX2F1dGhfaW50cl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAsCi0JCQkJCQlzZV90cGdfbGlzdCk7Ci0Jc3RydWN0IHNlX2Rldl9lbnRyeSAqZGV2ZTsKLQlzdHJ1Y3Qgc2VfbHVuICpsdW47Ci0Jc3RydWN0IHNlX25vZGVfYWNsICpzZV9uYWNsOwotCWludCBqOwotCi0JaWYgKGxpc3RfaXNfZmlyc3QoJnNlX3RwZy0+c2VfdHBnX2xpc3QsCi0JCQkgICZzZV9nbG9iYWwtPmdfc2VfdHBnX2xpc3QpKQotCQlzZXFfcHV0cyhzZXEsICJpbnN0IGRldiBwb3J0IGluZHggZGV2X29yX3BvcnQgaW50cl9uYW1lICIKLQkJCSAibWFwX2luZHggYXR0X2NvdW50IG51bV9jbWRzIHJlYWRfbWJ5dGVzICIKLQkJCSAid3JpdGVfbWJ5dGVzIGhzX251bV9jbWRzIGNyZWF0aW9uX3RpbWUgcm93X3N0YXR1c1xuIik7Ci0KLQlpZiAoIShzZV90cGcpKQotCQlyZXR1cm4gMDsKLQotCXNwaW5fbG9jaygmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlX25hY2wsICZzZV90cGctPmFjbF9ub2RlX2xpc3QsIGFjbF9saXN0KSB7Ci0KLQkJYXRvbWljX2luYygmc2VfbmFjbC0+bWliX3JlZl9jb3VudCk7Ci0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOwotCQlzcGluX3VubG9jaygmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKLQotCQlzcGluX2xvY2tfaXJxKCZzZV9uYWNsLT5kZXZpY2VfbGlzdF9sb2NrKTsKLQkJZm9yIChqID0gMDsgaiA8IFRSQU5TUE9SVF9NQVhfTFVOU19QRVJfVFBHOyBqKyspIHsKLQkJCWRldmUgPSAmc2VfbmFjbC0+ZGV2aWNlX2xpc3Rbal07Ci0JCQlpZiAoIShkZXZlLT5sdW5fZmxhZ3MgJgotCQkJCQlUUkFOU1BPUlRfTFVORkxBR1NfSU5JVElBVE9SX0FDQ0VTUykgfHwKLQkJCSAgICAoIWRldmUtPnNlX2x1bikpCi0JCQkJY29udGludWU7Ci0JCQlsdW4gPSBkZXZlLT5zZV9sdW47Ci0JCQlpZiAoIWx1bi0+bHVuX3NlX2RldikKLQkJCQljb250aW51ZTsKLQotCQkJc2VxX3ByaW50ZihzZXEsICIldSAldSAldSAldSAldSAlcyAldSAldSAldSAldSAldSAldSIKLQkJCQkJIiAldSAlc1xuIiwKLQkJCQkvKiBzY3NpSW5zdEluZGV4ICovCi0JCQkJKFRQR19URk8oc2VfdHBnKS0+dHBnX2dldF9pbnN0X2luZGV4ICE9IE5VTEwpID8KLQkJCQlUUEdfVEZPKHNlX3RwZyktPnRwZ19nZXRfaW5zdF9pbmRleChzZV90cGcpIDoKLQkJCQkwLAotCQkJCS8qIHNjc2lEZXZpY2VJbmRleCAqLwotCQkJCWx1bi0+bHVuX3NlX2Rldi0+ZGV2X2luZGV4LAotCQkJCS8qIHNjc2lBdXRoSW50clRndFBvcnRJbmRleCAqLwotCQkJCVRQR19URk8oc2VfdHBnKS0+dHBnX2dldF90YWcoc2VfdHBnKSwKLQkJCQkvKiBzY3NpQXV0aEludHJJbmRleCAqLwotCQkJCXNlX25hY2wtPmFjbF9pbmRleCwKLQkJCQkvKiBzY3NpQXV0aEludHJEZXZPclBvcnQgKi8KLQkJCQkxLAotCQkJCS8qIHNjc2lBdXRoSW50ck5hbWUgKi8KLQkJCQlzZV9uYWNsLT5pbml0aWF0b3JuYW1lWzBdID8KLQkJCQkJc2VfbmFjbC0+aW5pdGlhdG9ybmFtZSA6IE5PTkUsCi0JCQkJLyogRklYTUU6IHNjc2lBdXRoSW50ckx1bk1hcEluZGV4ICovCi0JCQkJMCwKLQkJCQkvKiBzY3NpQXV0aEludHJBdHRhY2hlZFRpbWVzICovCi0JCQkJZGV2ZS0+YXR0YWNoX2NvdW50LAotCQkJCS8qIHNjc2lBdXRoSW50ck91dENvbW1hbmRzICovCi0JCQkJZGV2ZS0+dG90YWxfY21kcywKLQkJCQkvKiBzY3NpQXV0aEludHJSZWFkTWVnYUJ5dGVzICovCi0JCQkJKHUzMikoZGV2ZS0+cmVhZF9ieXRlcyA+PiAyMCksCi0JCQkJLyogc2NzaUF1dGhJbnRyV3JpdHRlbk1lZ2FCeXRlcyAqLwotCQkJCSh1MzIpKGRldmUtPndyaXRlX2J5dGVzID4+IDIwKSwKLQkJCQkvKiBGSVhNRTogc2NzaUF1dGhJbnRySFNPdXRDb21tYW5kcyAqLwotCQkJCTAsCi0JCQkJLyogc2NzaUF1dGhJbnRyTGFzdENyZWF0aW9uICovCi0JCQkJKHUzMikoKCh1MzIpZGV2ZS0+Y3JlYXRpb25fdGltZSAtCi0JCQkJCSAgICBJTklUSUFMX0pJRkZJRVMpICogMTAwIC8gSFopLAotCQkJCS8qIEZJWE1FOiBzY3NpQXV0aEludHJSb3dTdGF0dXMgKi8KLQkJCQkiUmVhZHkiKTsKLQkJfQotCQlzcGluX3VubG9ja19pcnEoJnNlX25hY2wtPmRldmljZV9saXN0X2xvY2spOwotCi0JCXNwaW5fbG9jaygmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKLQkJYXRvbWljX2RlYygmc2VfbmFjbC0+bWliX3JlZl9jb3VudCk7Ci0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOwotCX0KLQlzcGluX3VubG9jaygmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNjc2lfYXV0aF9pbnRyX3NlcV9vcHMgPSB7Ci0JLnN0YXJ0CT0gc2NzaV9hdXRoX2ludHJfc2VxX3N0YXJ0LAotCS5uZXh0CT0gc2NzaV9hdXRoX2ludHJfc2VxX25leHQsCi0JLnN0b3AJPSBzY3NpX2F1dGhfaW50cl9zZXFfc3RvcCwKLQkuc2hvdwk9IHNjc2lfYXV0aF9pbnRyX3NlcV9zaG93Ci19OwotCi1zdGF0aWMgaW50IHNjc2lfYXV0aF9pbnRyX3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmc2NzaV9hdXRoX2ludHJfc2VxX29wcyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjc2lfYXV0aF9pbnRyX3NlcV9mb3BzID0gewotCS5vd25lcgkgPSBUSElTX01PRFVMRSwKLQkub3BlbgkgPSBzY3NpX2F1dGhfaW50cl9zZXFfb3BlbiwKLQkucmVhZAkgPSBzZXFfcmVhZCwKLQkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAotfTsKLQotLyoKLSAqIFNDU0kgQXR0YWNoZWQgSW5pdGlhdG9yIFBvcnQgVGFibGU6Ci0gKiBJdCBsaXN0cyB0aGUgU0NTSSBJbml0aWF0b3JzIGF0dGFjaGVkIHRvIG9uZSBvZiB0aGUgbG9jYWwgVGFyZ2V0IHBvcnRzLgotICogSXRlcmF0ZXMgdGhyb3VnaCBhbGwgYWN0aXZlIFRQR3MgYW5kIHVzZSBhY3RpdmUgc2Vzc2lvbnMgZnJvbSBlYWNoIFRQRwotICogdG8gbGlzdCB0aGUgaW5mbyBmbyB0aGlzIHRhYmxlLgotICovCi1zdGF0aWMgdm9pZCAqc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi17Ci0Jc3Bpbl9sb2NrX2JoKCZzZV9nbG9iYWwtPnNlX3RwZ19sb2NrKTsKLQlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJnNlX2dsb2JhbC0+Z19zZV90cGdfbGlzdCwgKnBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkICpzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsCi0JCQkJCSBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmc2VfZ2xvYmFsLT5nX3NlX3RwZ19saXN0LCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCBzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3Bpbl91bmxvY2tfYmgoJnNlX2dsb2JhbC0+c2VfdHBnX2xvY2spOwotfQotCi1zdGF0aWMgaW50IHNjc2lfYXR0X2ludHJfcG9ydF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAsCi0JCQkJCQlzZV90cGdfbGlzdCk7Ci0Jc3RydWN0IHNlX2Rldl9lbnRyeSAqZGV2ZTsKLQlzdHJ1Y3Qgc2VfbHVuICpsdW47Ci0Jc3RydWN0IHNlX25vZGVfYWNsICpzZV9uYWNsOwotCXN0cnVjdCBzZV9zZXNzaW9uICpzZV9zZXNzOwotCXVuc2lnbmVkIGNoYXIgYnVmWzY0XTsKLQlpbnQgajsKLQotCWlmIChsaXN0X2lzX2ZpcnN0KCZzZV90cGctPnNlX3RwZ19saXN0LAotCQkJICAmc2VfZ2xvYmFsLT5nX3NlX3RwZ19saXN0KSkKLQkJc2VxX3B1dHMoc2VxLCAiaW5zdCBkZXYgcG9ydCBpbmR4IHBvcnRfYXV0aF9pbmR4IHBvcnRfbmFtZSIKLQkJCSIgcG9ydF9pZGVudFxuIik7Ci0KLQlpZiAoIShzZV90cGcpKQotCQlyZXR1cm4gMDsKLQotCXNwaW5fbG9jaygmc2VfdHBnLT5zZXNzaW9uX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2Vfc2VzcywgJnNlX3RwZy0+dHBnX3Nlc3NfbGlzdCwgc2Vzc19saXN0KSB7Ci0JCWlmICgoVFBHX1RGTyhzZV90cGcpLT5zZXNzX2xvZ2dlZF9pbihzZV9zZXNzKSkgfHwKLQkJICAgICghc2Vfc2Vzcy0+c2Vfbm9kZV9hY2wpIHx8Ci0JCSAgICAoIXNlX3Nlc3MtPnNlX25vZGVfYWNsLT5kZXZpY2VfbGlzdCkpCi0JCQljb250aW51ZTsKLQotCQlhdG9taWNfaW5jKCZzZV9zZXNzLT5taWJfcmVmX2NvdW50KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7Ci0JCXNlX25hY2wgPSBzZV9zZXNzLT5zZV9ub2RlX2FjbDsKLQkJYXRvbWljX2luYygmc2VfbmFjbC0+bWliX3JlZl9jb3VudCk7Ci0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOwotCQlzcGluX3VubG9jaygmc2VfdHBnLT5zZXNzaW9uX2xvY2spOwotCi0JCXNwaW5fbG9ja19pcnEoJnNlX25hY2wtPmRldmljZV9saXN0X2xvY2spOwotCQlmb3IgKGogPSAwOyBqIDwgVFJBTlNQT1JUX01BWF9MVU5TX1BFUl9UUEc7IGorKykgewotCQkJZGV2ZSA9ICZzZV9uYWNsLT5kZXZpY2VfbGlzdFtqXTsKLQkJCWlmICghKGRldmUtPmx1bl9mbGFncyAmCi0JCQkJCVRSQU5TUE9SVF9MVU5GTEFHU19JTklUSUFUT1JfQUNDRVNTKSB8fAotCQkJICAgKCFkZXZlLT5zZV9sdW4pKQotCQkJCWNvbnRpbnVlOwotCi0JCQlsdW4gPSBkZXZlLT5zZV9sdW47Ci0JCQlpZiAoIWx1bi0+bHVuX3NlX2RldikKLQkJCQljb250aW51ZTsKLQotCQkJbWVtc2V0KGJ1ZiwgMCwgNjQpOwotCQkJaWYgKFRQR19URk8oc2VfdHBnKS0+c2Vzc19nZXRfaW5pdGlhdG9yX3NpZCAhPSBOVUxMKQotCQkJCVRQR19URk8oc2VfdHBnKS0+c2Vzc19nZXRfaW5pdGlhdG9yX3NpZCgKLQkJCQkJc2Vfc2VzcywgKHVuc2lnbmVkIGNoYXIgKikmYnVmWzBdLCA2NCk7Ci0KLQkJCXNlcV9wcmludGYoc2VxLCAiJXUgJXUgJXUgJXUgJXUgJXMraSslc1xuIiwKLQkJCQkvKiBzY3NpSW5zdEluZGV4ICovCi0JCQkJKFRQR19URk8oc2VfdHBnKS0+dHBnX2dldF9pbnN0X2luZGV4ICE9IE5VTEwpID8KLQkJCQlUUEdfVEZPKHNlX3RwZyktPnRwZ19nZXRfaW5zdF9pbmRleChzZV90cGcpIDoKLQkJCQkwLAotCQkJCS8qIHNjc2lEZXZpY2VJbmRleCAqLwotCQkJCWx1bi0+bHVuX3NlX2Rldi0+ZGV2X2luZGV4LAotCQkJCS8qIHNjc2lQb3J0SW5kZXggKi8KLQkJCQlUUEdfVEZPKHNlX3RwZyktPnRwZ19nZXRfdGFnKHNlX3RwZyksCi0JCQkJLyogc2NzaUF0dEludHJQb3J0SW5kZXggKi8KLQkJCQkoVFBHX1RGTyhzZV90cGcpLT5zZXNzX2dldF9pbmRleCAhPSBOVUxMKSA/Ci0JCQkJVFBHX1RGTyhzZV90cGcpLT5zZXNzX2dldF9pbmRleChzZV9zZXNzKSA6Ci0JCQkJMCwKLQkJCQkvKiBzY3NpQXR0SW50clBvcnRBdXRoSW50cklkeCAqLwotCQkJCXNlX25hY2wtPmFjbF9pbmRleCwKLQkJCQkvKiBzY3NpQXR0SW50clBvcnROYW1lICovCi0JCQkJc2VfbmFjbC0+aW5pdGlhdG9ybmFtZVswXSA/Ci0JCQkJCXNlX25hY2wtPmluaXRpYXRvcm5hbWUgOiBOT05FLAotCQkJCS8qIHNjc2lBdHRJbnRyUG9ydElkZW50aWZpZXIgKi8KLQkJCQlidWYpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycSgmc2VfbmFjbC0+ZGV2aWNlX2xpc3RfbG9jayk7Ci0KLQkJc3Bpbl9sb2NrKCZzZV90cGctPnNlc3Npb25fbG9jayk7Ci0JCWF0b21pY19kZWMoJnNlX25hY2wtPm1pYl9yZWZfY291bnQpOwotCQlzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKTsKLQkJYXRvbWljX2RlYygmc2Vfc2Vzcy0+bWliX3JlZl9jb3VudCk7Ci0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOwotCX0KLQlzcGluX3VubG9jaygmc2VfdHBnLT5zZXNzaW9uX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9vcHMgPSB7Ci0JLnN0YXJ0CT0gc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9zdGFydCwKLQkubmV4dAk9IHNjc2lfYXR0X2ludHJfcG9ydF9zZXFfbmV4dCwKLQkuc3RvcAk9IHNjc2lfYXR0X2ludHJfcG9ydF9zZXFfc3RvcCwKLQkuc2hvdwk9IHNjc2lfYXR0X2ludHJfcG9ydF9zZXFfc2hvdwotfTsKLQotc3RhdGljIGludCBzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX29wcyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjc2lfYXR0X2ludHJfcG9ydF9zZXFfZm9wcyA9IHsKLQkub3duZXIJID0gVEhJU19NT0RVTEUsCi0JLm9wZW4JID0gc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9vcGVuLAotCS5yZWFkCSA9IHNlcV9yZWFkLAotCS5sbHNlZWsJID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCi19OwotCi0vKgotICogU0NTSSBMb2dpY2FsIFVuaXQgVGFibGUKLSAqLwotc3RhdGljIHZvaWQgKnNjc2lfbHVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gbG9jYXRlX2hiYV9zdGFydChzZXEsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkICpzY3NpX2x1X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gbG9jYXRlX2hiYV9uZXh0KHNlcSwgdiwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgc2NzaV9sdV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlsb2NhdGVfaGJhX3N0b3Aoc2VxLCB2KTsKLX0KLQotI2RlZmluZSBTQ1NJX0xVX0lOREVYCQkxCi1zdGF0aWMgaW50IHNjc2lfbHVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IHNlX2hiYSAqaGJhOwotCXN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2ICpzZV9kZXYgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2LAotCQkJCQkJZ19zZV9kZXZfbGlzdCk7Ci0Jc3RydWN0IHNlX2RldmljZSAqZGV2ID0gc2VfZGV2LT5zZV9kZXZfcHRyOwotCWludCBqOwotCWNoYXIgc3RyWzI4XTsKLQotCWlmIChsaXN0X2lzX2ZpcnN0KCZzZV9kZXYtPmdfc2VfZGV2X2xpc3QsICZzZV9nbG9iYWwtPmdfc2VfZGV2X2xpc3QpKQotCQlzZXFfcHV0cyhzZXEsICJpbnN0IGRldiBpbmR4IExVTiBsdV9uYW1lIHZlbmQgcHJvZCByZXYiCi0JCSIgZGV2X3R5cGUgc3RhdHVzIHN0YXRlLWJpdCBudW1fY21kcyByZWFkX21ieXRlcyIKLQkJIiB3cml0ZV9tYnl0ZXMgcmVzZXRzIGZ1bGxfc3RhdCBoc19udW1fY21kcyBjcmVhdGlvbl90aW1lXG4iKTsKLQotCWlmICghKGRldikpCi0JCXJldHVybiAwOwotCi0JaGJhID0gZGV2LT5zZV9oYmE7Ci0JaWYgKCEoaGJhKSkgewotCQkvKiBMb2cgZXJyb3IgPyAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBGaXggTFUgc3RhdGUsIGlmIHdlIGNhbiByZWFkIGl0IGZyb20gdGhlIGRldmljZSAqLwotCXNlcV9wcmludGYoc2VxLCAiJXUgJXUgJXUgJWxsdSAlcyIsIGhiYS0+aGJhX2luZGV4LAotCQkJZGV2LT5kZXZfaW5kZXgsIFNDU0lfTFVfSU5ERVgsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKTAsIC8qIEZJWE1FOiBzY3NpTHVEZWZhdWx0THVuICovCi0JCQkoc3RybGVuKERFVl9UMTBfV1dOKGRldiktPnVuaXRfc2VyaWFsKSkgPwotCQkJLyogc2NzaUx1V3duTmFtZSAqLwotCQkJKGNoYXIgKikmREVWX1QxMF9XV04oZGV2KS0+dW5pdF9zZXJpYWxbMF0gOgotCQkJIk5vbmUiKTsKLQotCW1lbWNweSgmc3RyWzBdLCAodm9pZCAqKURFVl9UMTBfV1dOKGRldiksIDI4KTsKLQkvKiBzY3NpTHVWZW5kb3JJZCAqLwotCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCi0JCXN0cltqXSA9IElTUFJJTlQoREVWX1QxMF9XV04oZGV2KS0+dmVuZG9yW2pdKSA/Ci0JCQlERVZfVDEwX1dXTihkZXYpLT52ZW5kb3Jbal0gOiAweDIwOwotCXN0cls4XSA9IDA7Ci0Jc2VxX3ByaW50ZihzZXEsICIgJXMiLCBzdHIpOwotCi0JLyogc2NzaUx1UHJvZHVjdElkICovCi0JZm9yIChqID0gMDsgaiA8IDE2OyBqKyspCi0JCXN0cltqXSA9IElTUFJJTlQoREVWX1QxMF9XV04oZGV2KS0+bW9kZWxbal0pID8KLQkJCURFVl9UMTBfV1dOKGRldiktPm1vZGVsW2pdIDogMHgyMDsKLQlzdHJbMTZdID0gMDsKLQlzZXFfcHJpbnRmKHNlcSwgIiAlcyIsIHN0cik7Ci0KLQkvKiBzY3NpTHVSZXZpc2lvbklkICovCi0JZm9yIChqID0gMDsgaiA8IDQ7IGorKykKLQkJc3RyW2pdID0gSVNQUklOVChERVZfVDEwX1dXTihkZXYpLT5yZXZpc2lvbltqXSkgPwotCQkJREVWX1QxMF9XV04oZGV2KS0+cmV2aXNpb25bal0gOiAweDIwOwotCXN0cls0XSA9IDA7Ci0Jc2VxX3ByaW50ZihzZXEsICIgJXMiLCBzdHIpOwotCi0Jc2VxX3ByaW50ZihzZXEsICIgJXUgJXMgJXMgJWxsdSAldSAldSAldSAldSAldSAldVxuIiwKLQkJLyogc2NzaUx1UGVyaXBoZXJhbFR5cGUgKi8KLQkJICAgVFJBTlNQT1JUKGRldiktPmdldF9kZXZpY2VfdHlwZShkZXYpLAotCQkgICAoZGV2LT5kZXZfc3RhdHVzID09IFRSQU5TUE9SVF9ERVZJQ0VfQUNUSVZBVEVEKSA/Ci0JCSJhdmFpbGFibGUiIDogIm5vdGF2YWlsYWJsZSIsIC8qIHNjc2lMdVN0YXR1cyAqLwotCQkiZXhwb3NlZCIsIAkvKiBzY3NpTHVTdGF0ZSAqLwotCQkodW5zaWduZWQgbG9uZyBsb25nKWRldi0+bnVtX2NtZHMsCi0JCS8qIHNjc2lMdVJlYWRNZWdhQnl0ZXMgKi8KLQkJKHUzMikoZGV2LT5yZWFkX2J5dGVzID4+IDIwKSwKLQkJLyogc2NzaUx1V3JpdHRlbk1lZ2FCeXRlcyAqLwotCQkodTMyKShkZXYtPndyaXRlX2J5dGVzID4+IDIwKSwKLQkJZGV2LT5udW1fcmVzZXRzLCAvKiBzY3NpTHVJblJlc2V0cyAqLwotCQkwLCAvKiBzY3NpTHVPdXRUYXNrU2V0RnVsbFN0YXR1cyAqLwotCQkwLCAvKiBzY3NpTHVIU0luQ29tbWFuZHMgKi8KLQkJKHUzMikoKCh1MzIpZGV2LT5jcmVhdGlvbl90aW1lIC0gSU5JVElBTF9KSUZGSUVTKSAqCi0JCQkJCQkJMTAwIC8gSFopKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNjc2lfbHVfc2VxX29wcyA9IHsKLQkuc3RhcnQgID0gc2NzaV9sdV9zZXFfc3RhcnQsCi0JLm5leHQgICA9IHNjc2lfbHVfc2VxX25leHQsCi0JLnN0b3AgICA9IHNjc2lfbHVfc2VxX3N0b3AsCi0JLnNob3cgICA9IHNjc2lfbHVfc2VxX3Nob3cKLX07Ci0KLXN0YXRpYyBpbnQgc2NzaV9sdV9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnNjc2lfbHVfc2VxX29wcyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjc2lfbHVfc2VxX2ZvcHMgPSB7Ci0JLm93bmVyCSA9IFRISVNfTU9EVUxFLAotCS5vcGVuCSA9IHNjc2lfbHVfc2VxX29wZW4sCi0JLnJlYWQJID0gc2VxX3JlYWQsCi0JLmxsc2VlawkgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogUmVtb3ZlIHByb2MgZnMgZW50cmllcwotICovCi12b2lkIHJlbW92ZV9zY3NpX3RhcmdldF9taWIodm9pZCkKLXsKLQlyZW1vdmVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfaW5zdCIsIE5VTEwpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9kZXYiLCBOVUxMKTsKLQlyZW1vdmVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfcG9ydCIsIE5VTEwpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV90cmFuc3BvcnQiLCBOVUxMKTsKLQlyZW1vdmVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfdGd0X2RldiIsIE5VTEwpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV90Z3RfcG9ydCIsIE5VTEwpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9hdXRoX2ludHIiLCBOVUxMKTsKLQlyZW1vdmVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfYXR0X2ludHJfcG9ydCIsIE5VTEwpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9sdSIsIE5VTEwpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIiLCBOVUxMKTsKLX0KLQotLyoKLSAqIENyZWF0ZSBwcm9jIGZzIGVudHJpZXMgZm9yIHRoZSBtaWIgdGFibGVzCi0gKi8KLWludCBpbml0X3Njc2lfdGFyZ2V0X21pYih2b2lkKQotewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyX2VudHJ5OwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc2NzaV9pbnN0X2VudHJ5OwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc2NzaV9kZXZfZW50cnk7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzY3NpX3BvcnRfZW50cnk7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzY3NpX3RyYW5zcG9ydF9lbnRyeTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNjc2lfdGd0X2Rldl9lbnRyeTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNjc2lfdGd0X3BvcnRfZW50cnk7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzY3NpX2F1dGhfaW50cl9lbnRyeTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNjc2lfYXR0X2ludHJfcG9ydF9lbnRyeTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNjc2lfbHVfZW50cnk7Ci0KLQlkaXJfZW50cnkgPSBwcm9jX21rZGlyKCJzY3NpX3RhcmdldC9taWIiLCBOVUxMKTsKLQlpZiAoIShkaXJfZW50cnkpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicHJvY19ta2RpcigpIGZhaWxlZC5cbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0Jc2NzaV9pbnN0X2VudHJ5ID0KLQkJY3JlYXRlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX2luc3QiLCAwLCBOVUxMKTsKLQlpZiAoc2NzaV9pbnN0X2VudHJ5KQotCQlzY3NpX2luc3RfZW50cnktPnByb2NfZm9wcyA9ICZzY3NpX2luc3Rfc2VxX2ZvcHM7Ci0JZWxzZQotCQlnb3RvIGVycm9yOwotCi0Jc2NzaV9kZXZfZW50cnkgPQotCQljcmVhdGVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfZGV2IiwgMCwgTlVMTCk7Ci0JaWYgKHNjc2lfZGV2X2VudHJ5KQotCQlzY3NpX2Rldl9lbnRyeS0+cHJvY19mb3BzID0gJnNjc2lfZGV2X3NlcV9mb3BzOwotCWVsc2UKLQkJZ290byBlcnJvcjsKLQotCXNjc2lfcG9ydF9lbnRyeSA9Ci0JCWNyZWF0ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9wb3J0IiwgMCwgTlVMTCk7Ci0JaWYgKHNjc2lfcG9ydF9lbnRyeSkKLQkJc2NzaV9wb3J0X2VudHJ5LT5wcm9jX2ZvcHMgPSAmc2NzaV9wb3J0X3NlcV9mb3BzOwotCWVsc2UKLQkJZ290byBlcnJvcjsKLQotCXNjc2lfdHJhbnNwb3J0X2VudHJ5ID0KLQkJY3JlYXRlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX3RyYW5zcG9ydCIsIDAsIE5VTEwpOwotCWlmIChzY3NpX3RyYW5zcG9ydF9lbnRyeSkKLQkJc2NzaV90cmFuc3BvcnRfZW50cnktPnByb2NfZm9wcyA9ICZzY3NpX3RyYW5zcG9ydF9zZXFfZm9wczsKLQllbHNlCi0JCWdvdG8gZXJyb3I7Ci0KLQlzY3NpX3RndF9kZXZfZW50cnkgPQotCQljcmVhdGVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfdGd0X2RldiIsIDAsIE5VTEwpOwotCWlmIChzY3NpX3RndF9kZXZfZW50cnkpCi0JCXNjc2lfdGd0X2Rldl9lbnRyeS0+cHJvY19mb3BzID0gJnNjc2lfdGd0X2Rldl9zZXFfZm9wczsKLQllbHNlCi0JCWdvdG8gZXJyb3I7Ci0KLQlzY3NpX3RndF9wb3J0X2VudHJ5ID0KLQkJY3JlYXRlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX3RndF9wb3J0IiwgMCwgTlVMTCk7Ci0JaWYgKHNjc2lfdGd0X3BvcnRfZW50cnkpCi0JCXNjc2lfdGd0X3BvcnRfZW50cnktPnByb2NfZm9wcyA9ICZzY3NpX3RndF9wb3J0X3NlcV9mb3BzOwotCWVsc2UKLQkJZ290byBlcnJvcjsKLQotCXNjc2lfYXV0aF9pbnRyX2VudHJ5ID0KLQkJY3JlYXRlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX2F1dGhfaW50ciIsIDAsIE5VTEwpOwotCWlmIChzY3NpX2F1dGhfaW50cl9lbnRyeSkKLQkJc2NzaV9hdXRoX2ludHJfZW50cnktPnByb2NfZm9wcyA9ICZzY3NpX2F1dGhfaW50cl9zZXFfZm9wczsKLQllbHNlCi0JCWdvdG8gZXJyb3I7Ci0KLQlzY3NpX2F0dF9pbnRyX3BvcnRfZW50cnkgPQotCSAgICAgIGNyZWF0ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9hdHRfaW50cl9wb3J0IiwgMCwgTlVMTCk7Ci0JaWYgKHNjc2lfYXR0X2ludHJfcG9ydF9lbnRyeSkKLQkJc2NzaV9hdHRfaW50cl9wb3J0X2VudHJ5LT5wcm9jX2ZvcHMgPQotCQkJCSZzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX2ZvcHM7Ci0JZWxzZQotCQlnb3RvIGVycm9yOwotCi0Jc2NzaV9sdV9lbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9sdSIsIDAsIE5VTEwpOwotCWlmIChzY3NpX2x1X2VudHJ5KQotCQlzY3NpX2x1X2VudHJ5LT5wcm9jX2ZvcHMgPSAmc2NzaV9sdV9zZXFfZm9wczsKLQllbHNlCi0JCWdvdG8gZXJyb3I7Ci0KLQlyZXR1cm4gMDsKLQotZXJyb3I6Ci0JcHJpbnRrKEtFUk5fRVJSICJjcmVhdGVfcHJvY19lbnRyeSgpIGZhaWxlZC5cbiIpOwotCXJlbW92ZV9zY3NpX3RhcmdldF9taWIoKTsKLQlyZXR1cm4gLTE7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIHRoZSBpbmRleCB0YWJsZSBmb3IgYWxsb2NhdGluZyB1bmlxdWUgcm93IGluZGV4ZXMgdG8gdmFyaW91cyBtaWIKLSAqIHRhYmxlcwotICovCi12b2lkIGluaXRfc2NzaV9pbmRleF90YWJsZSh2b2lkKQotewotCW1lbXNldCgmc2NzaV9pbmRleF90YWJsZSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3NpX2luZGV4X3RhYmxlKSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnNjc2lfaW5kZXhfdGFibGUubG9jayk7Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSBhIG5ldyByb3cgaW5kZXggZm9yIHRoZSBlbnRyeSB0eXBlIHNwZWNpZmllZAotICovCi11MzIgc2NzaV9nZXRfbmV3X2luZGV4KHNjc2lfaW5kZXhfdCB0eXBlKQotewotCXUzMiBuZXdfaW5kZXg7Ci0KLQlpZiAoKHR5cGUgPCAwKSB8fCAodHlwZSA+PSBTQ1NJX0lOREVYX1RZUEVfTUFYKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgaW5kZXggdHlwZSAlZFxuIiwgdHlwZSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlzcGluX2xvY2soJnNjc2lfaW5kZXhfdGFibGUubG9jayk7Ci0JbmV3X2luZGV4ID0gKytzY3NpX2luZGV4X3RhYmxlLnNjc2lfbWliX2luZGV4W3R5cGVdOwotCWlmIChuZXdfaW5kZXggPT0gMCkKLQkJbmV3X2luZGV4ID0gKytzY3NpX2luZGV4X3RhYmxlLnNjc2lfbWliX2luZGV4W3R5cGVdOwotCXNwaW5fdW5sb2NrKCZzY3NpX2luZGV4X3RhYmxlLmxvY2spOwotCi0JcmV0dXJuIG5ld19pbmRleDsKLX0KLUVYUE9SVF9TWU1CT0woc2NzaV9nZXRfbmV3X2luZGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX21pYi5oIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfbWliLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NzIwNDYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfbWliLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jaWZuZGVmIFRBUkdFVF9DT1JFX01JQl9ICi0jZGVmaW5lIFRBUkdFVF9DT1JFX01JQl9ICi0KLXR5cGVkZWYgZW51bSB7Ci0JU0NTSV9JTlNUX0lOREVYLAotCVNDU0lfREVWSUNFX0lOREVYLAotCVNDU0lfQVVUSF9JTlRSX0lOREVYLAotCVNDU0lfSU5ERVhfVFlQRV9NQVgKLX0gc2NzaV9pbmRleF90OwotCi1zdHJ1Y3Qgc2NzaV9pbmRleF90YWJsZSB7Ci0Jc3BpbmxvY2tfdAlsb2NrOwotCXUzMiAJCXNjc2lfbWliX2luZGV4W1NDU0lfSU5ERVhfVFlQRV9NQVhdOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7Ci0KLS8qIFNDU0kgUG9ydCBzdGF0cyAqLwotc3RydWN0IHNjc2lfcG9ydF9zdGF0cyB7Ci0JdTY0CWNtZF9wZHVzOwotCXU2NAl0eF9kYXRhX29jdGV0czsKLQl1NjQJcnhfZGF0YV9vY3RldHM7Ci19IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKLQotZXh0ZXJuIGludCBpbml0X3Njc2lfdGFyZ2V0X21pYih2b2lkKTsKLWV4dGVybiB2b2lkIHJlbW92ZV9zY3NpX3RhcmdldF9taWIodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0X3Njc2lfaW5kZXhfdGFibGUodm9pZCk7Ci1leHRlcm4gdTMyIHNjc2lfZ2V0X25ld19pbmRleChzY3NpX2luZGV4X3QpOwotCi0jZW5kaWYgICAvKioqIFRBUkdFVF9DT1JFX01JQl9IICoqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3BzY3NpLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9wc2NzaS5jCmluZGV4IDc0MmQyNDYuLmYyYTA4NDc3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcHNjc2kuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9wc2NzaS5jCkBAIC00NjIsOCArNDYyLDggQEAKIAkgKi8KIAliZCA9IGJsa2Rldl9nZXRfYnlfcGF0aChzZV9kZXYtPnNlX2Rldl91ZGV2X3BhdGgsCiAJCQkJRk1PREVfV1JJVEV8Rk1PREVfUkVBRHxGTU9ERV9FWENMLCBwZHYpOwotCWlmICghKGJkKSkgewotCQlwcmludGsoInBTQ1NJOiBibGtkZXZfZ2V0X2J5X3BhdGgoKSBmYWlsZWRcbiIpOworCWlmIChJU19FUlIoYmQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAicFNDU0k6IGJsa2Rldl9nZXRfYnlfcGF0aCgpIGZhaWxlZFxuIik7CiAJCXNjc2lfZGV2aWNlX3B1dChzZCk7CiAJCXJldHVybiBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RwZy5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHBnLmMKaW5kZXggYWJmYTgxYS4uYzI2ZjY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHBnLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHBnLmMKQEAgLTI3NSw3ICsyNzUsNiBAQAogCXNwaW5fbG9ja19pbml0KCZhY2wtPmRldmljZV9saXN0X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZhY2wtPm5hY2xfc2Vzc19sb2NrKTsKIAlhdG9taWNfc2V0KCZhY2wtPmFjbF9wcl9yZWZfY291bnQsIDApOwotCWF0b21pY19zZXQoJmFjbC0+bWliX3JlZl9jb3VudCwgMCk7CiAJYWNsLT5xdWV1ZV9kZXB0aCA9IFRQR19URk8odHBnKS0+dHBnX2dldF9kZWZhdWx0X2RlcHRoKHRwZyk7CiAJc25wcmludGYoYWNsLT5pbml0aWF0b3JuYW1lLCBUUkFOU1BPUlRfSVFOX0xFTiwgIiVzIiwgaW5pdGlhdG9ybmFtZSk7CiAJYWNsLT5zZV90cGcgPSB0cGc7CkBAIC0zMTgsMTIgKzMxNyw2IEBACiAJCWNwdV9yZWxheCgpOwogfQogCi12b2lkIGNvcmVfdHBnX3dhaXRfZm9yX21pYl9yZWYoc3RydWN0IHNlX25vZGVfYWNsICpuYWNsKQotewotCXdoaWxlIChhdG9taWNfcmVhZCgmbmFjbC0+bWliX3JlZl9jb3VudCkgIT0gMCkKLQkJY3B1X3JlbGF4KCk7Ci19Ci0KIHZvaWQgY29yZV90cGdfY2xlYXJfb2JqZWN0X2x1bnMoc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqdHBnKQogewogCWludCBpLCByZXQ7CkBAIC00ODAsNyArNDczLDYgQEAKIAlzcGluX3VubG9ja19iaCgmdHBnLT5zZXNzaW9uX2xvY2spOwogCiAJY29yZV90cGdfd2FpdF9mb3JfbmFjbF9wcl9yZWYoYWNsKTsKLQljb3JlX3RwZ193YWl0X2Zvcl9taWJfcmVmKGFjbCk7CiAJY29yZV9jbGVhcl9pbml0aWF0b3Jfbm9kZV9mcm9tX3RwZyhhY2wsIHRwZyk7CiAJY29yZV9mcmVlX2RldmljZV9saXN0X2Zvcl9ub2RlKGFjbCwgdHBnKTsKIApAQCAtNzAxLDYgKzY5Myw4IEBACiAKIGludCBjb3JlX3RwZ19kZXJlZ2lzdGVyKHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZykKIHsKKwlzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKm5hY2wsICpuYWNsX3RtcDsKKwogCXByaW50ayhLRVJOX0lORk8gIlRBUkdFVF9DT1JFWyVzXTogRGVhbGxvY2F0aW5nICVzIHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAiCiAJCSIgZm9yIGVuZHBvaW50OiAlcyBQb3J0YWwgVGFnICV1XG4iLAogCQkoc2VfdHBnLT5zZV90cGdfdHlwZSA9PSBUUkFOU1BPUlRfVFBHX1RZUEVfTk9STUFMKSA/CkBAIC03MTQsNiArNzA4LDI1IEBACiAKIAl3aGlsZSAoYXRvbWljX3JlYWQoJnNlX3RwZy0+dHBnX3ByX3JlZl9jb3VudCkgIT0gMCkKIAkJY3B1X3JlbGF4KCk7CisJLyoKKwkgKiBSZWxlYXNlIGFueSByZW1haW5pbmcgZGVtby1tb2RlIGdlbmVyYXRlZCBzZV9ub2RlX2FjbCB0aGF0IGhhdmUKKwkgKiBub3QgYmVlbiByZWxlYXNlZCBiZWNhdXNlIG9mIFRGTy0+dHBnX2NoZWNrX2RlbW9fbW9kZV9jYWNoZSgpID09IDEKKwkgKiBpbiB0cmFuc3BvcnRfZGVyZWdpc3Rlcl9zZXNzaW9uKCkuCisJICovCisJc3Bpbl9sb2NrX2JoKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuYWNsLCBuYWNsX3RtcCwgJnNlX3RwZy0+YWNsX25vZGVfbGlzdCwKKwkJCWFjbF9saXN0KSB7CisJCWxpc3RfZGVsKCZuYWNsLT5hY2xfbGlzdCk7CisJCXNlX3RwZy0+bnVtX25vZGVfYWNscy0tOworCQlzcGluX3VubG9ja19iaCgmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKKworCQljb3JlX3RwZ193YWl0X2Zvcl9uYWNsX3ByX3JlZihuYWNsKTsKKwkJY29yZV9mcmVlX2RldmljZV9saXN0X2Zvcl9ub2RlKG5hY2wsIHNlX3RwZyk7CisJCVRQR19URk8oc2VfdHBnKS0+dHBnX3JlbGVhc2VfZmFicmljX2FjbChzZV90cGcsIG5hY2wpOworCisJCXNwaW5fbG9ja19iaCgmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNlX3RwZy0+YWNsX25vZGVfbG9jayk7CiAKIAlpZiAoc2VfdHBnLT5zZV90cGdfdHlwZSA9PSBUUkFOU1BPUlRfVFBHX1RZUEVfTk9STUFMKQogCQljb3JlX3RwZ19yZWxlYXNlX3ZpcnR1YWxfbHVuMChzZV90cGcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0LmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuYwppbmRleCAyOGI2MjkyLi4yMzZlMjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuYwpAQCAtMzc5LDYgKzM3OSw0MCBAQAogCXNlX2dsb2JhbCA9IE5VTEw7CiB9CiAKKy8qIFNDU0kgc3RhdGlzdGljcyB0YWJsZSBpbmRleCAqLworc3RhdGljIHN0cnVjdCBzY3NpX2luZGV4X3RhYmxlIHNjc2lfaW5kZXhfdGFibGU7CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBpbmRleCB0YWJsZSBmb3IgYWxsb2NhdGluZyB1bmlxdWUgcm93IGluZGV4ZXMgdG8gdmFyaW91cyBtaWIKKyAqIHRhYmxlcy4KKyAqLwordm9pZCBpbml0X3Njc2lfaW5kZXhfdGFibGUodm9pZCkKK3sKKwltZW1zZXQoJnNjc2lfaW5kZXhfdGFibGUsIDAsIHNpemVvZihzdHJ1Y3Qgc2NzaV9pbmRleF90YWJsZSkpOworCXNwaW5fbG9ja19pbml0KCZzY3NpX2luZGV4X3RhYmxlLmxvY2spOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgcm93IGluZGV4IGZvciB0aGUgZW50cnkgdHlwZSBzcGVjaWZpZWQKKyAqLwordTMyIHNjc2lfZ2V0X25ld19pbmRleChzY3NpX2luZGV4X3QgdHlwZSkKK3sKKwl1MzIgbmV3X2luZGV4OworCisJaWYgKCh0eXBlIDwgMCkgfHwgKHR5cGUgPj0gU0NTSV9JTkRFWF9UWVBFX01BWCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGluZGV4IHR5cGUgJWRcbiIsIHR5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2soJnNjc2lfaW5kZXhfdGFibGUubG9jayk7CisJbmV3X2luZGV4ID0gKytzY3NpX2luZGV4X3RhYmxlLnNjc2lfbWliX2luZGV4W3R5cGVdOworCWlmIChuZXdfaW5kZXggPT0gMCkKKwkJbmV3X2luZGV4ID0gKytzY3NpX2luZGV4X3RhYmxlLnNjc2lfbWliX2luZGV4W3R5cGVdOworCXNwaW5fdW5sb2NrKCZzY3NpX2luZGV4X3RhYmxlLmxvY2spOworCisJcmV0dXJuIG5ld19pbmRleDsKK30KKwogdm9pZCB0cmFuc3BvcnRfaW5pdF9xdWV1ZV9vYmooc3RydWN0IHNlX3F1ZXVlX29iaiAqcW9iaikKIHsKIAlhdG9taWNfc2V0KCZxb2JqLT5xdWV1ZV9jbnQsIDApOwpAQCAtNDM3LDcgKzQ3MSw2IEBACiAJfQogCUlOSVRfTElTVF9IRUFEKCZzZV9zZXNzLT5zZXNzX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZzZV9zZXNzLT5zZXNzX2FjbF9saXN0KTsKLQlhdG9taWNfc2V0KCZzZV9zZXNzLT5taWJfcmVmX2NvdW50LCAwKTsKIAogCXJldHVybiBzZV9zZXNzOwogfQpAQCAtNTQ2LDEyICs1NzksNiBAQAogCQl0cmFuc3BvcnRfZnJlZV9zZXNzaW9uKHNlX3Nlc3MpOwogCQlyZXR1cm47CiAJfQotCS8qCi0JICogV2FpdCBmb3IgcG9zc2libGUgcmVmZXJlbmNlIGluIGRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX21pYi5jOgotCSAqIHNjc2lfYXR0X2ludHJfcG9ydF9zZXFfc2hvdygpCi0JICovCi0Jd2hpbGUgKGF0b21pY19yZWFkKCZzZV9zZXNzLT5taWJfcmVmX2NvdW50KSAhPSAwKQotCQljcHVfcmVsYXgoKTsKIAogCXNwaW5fbG9ja19iaCgmc2VfdHBnLT5zZXNzaW9uX2xvY2spOwogCWxpc3RfZGVsKCZzZV9zZXNzLT5zZXNzX2xpc3QpOwpAQCAtNTc0LDcgKzYwMSw2IEBACiAJCQkJc3Bpbl91bmxvY2tfYmgoJnNlX3RwZy0+YWNsX25vZGVfbG9jayk7CiAKIAkJCQljb3JlX3RwZ193YWl0X2Zvcl9uYWNsX3ByX3JlZihzZV9uYWNsKTsKLQkJCQljb3JlX3RwZ193YWl0X2Zvcl9taWJfcmVmKHNlX25hY2wpOwogCQkJCWNvcmVfZnJlZV9kZXZpY2VfbGlzdF9mb3Jfbm9kZShzZV9uYWNsLCBzZV90cGcpOwogCQkJCVRQR19URk8oc2VfdHBnKS0+dHBnX3JlbGVhc2VfZmFicmljX2FjbChzZV90cGcsCiAJCQkJCQlzZV9uYWNsKTsKQEAgLTQ4MjcsNiArNDg1Myw4IEBACiAKIAkJcmV0dXJuIHJldDsKIAl9CisKKwlCVUdfT04obGlzdF9lbXB0eShzZV9tZW1fbGlzdCkpOwogCS8qCiAJICogVGhpcyBpcyB0aGUgbm9ybWFsIHBhdGggZm9yIGFsbCBub3JtYWwgbm9uIEJJREkgYW5kIEJJREktQ09NTUFORAogCSAqIFdSSVRFIHBheWxvYWRzLi4gIElmIHdlIG5lZWQgdG8gZG8gQklESSBSRUFEIHBhc3N0aHJvdWdoIGZvcgpAQCAtNTAwOCw3ICs1MDM2LDkgQEAKIAkJc3RydWN0IHNlX21lbSAqc2VfbWVtID0gTlVMTCwgKnNlX21lbV9sb3V0ID0gTlVMTDsKIAkJdTMyIHNlX21lbV9jbnQgPSAwLCB0YXNrX29mZnNldCA9IDA7CiAKLQkJQlVHX09OKGxpc3RfZW1wdHkoY21kLT50X3Rhc2stPnRfbWVtX2xpc3QpKTsKKwkJaWYgKCFsaXN0X2VtcHR5KFRfVEFTSyhjbWQpLT50X21lbV9saXN0KSkKKwkJCXNlX21lbSA9IGxpc3RfZW50cnkoVF9UQVNLKGNtZCktPnRfbWVtX2xpc3QtPm5leHQsCisJCQkJCXN0cnVjdCBzZV9tZW0sIHNlX2xpc3QpOwogCiAJCXJldCA9IHRyYW5zcG9ydF9kb19zZV9tZW1fbWFwKGRldiwgdGFzaywKIAkJCQljbWQtPnRfdGFzay0+dF9tZW1fbGlzdCwgTlVMTCwgc2VfbWVtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvTWFrZWZpbGUgYi9kcml2ZXJzL3R0eS9NYWtlZmlsZQppbmRleCBjNDNlZjQ4Li4zOTYyNzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3R0eS9NYWtlZmlsZQpAQCAtOSwzICs5LDUgQEAKIG9iai0kKENPTkZJR19SMzk2NCkJCSs9IG5fcjM5NjQubwogCiBvYmoteQkJCQkrPSB2dC8KK29iai0kKENPTkZJR19IVkNfRFJJVkVSKQkrPSBodmMvCitvYmoteQkJCQkrPSBzZXJpYWwvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9odmMvTWFrZWZpbGUgYi9kcml2ZXJzL3R0eS9odmMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc5ZTdlOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdHR5L2h2Yy9NYWtlZmlsZQpAQCAtMCwwICsxLDEyIEBACitvYmotJChDT05GSUdfSFZDX0NPTlNPTEUpCSs9IGh2Y192aW8ubyBodnNpLm8KK29iai0kKENPTkZJR19IVkNfSVNFUklFUykJKz0gaHZjX2lzZXJpZXMubworb2JqLSQoQ09ORklHX0hWQ19SVEFTKQkJKz0gaHZjX3J0YXMubworb2JqLSQoQ09ORklHX0hWQ19USUxFKQkJKz0gaHZjX3RpbGUubworb2JqLSQoQ09ORklHX0hWQ19EQ0MpCQkrPSBodmNfZGNjLm8KK29iai0kKENPTkZJR19IVkNfQkVBVCkJCSs9IGh2Y19iZWF0Lm8KK29iai0kKENPTkZJR19IVkNfRFJJVkVSKQkrPSBodmNfY29uc29sZS5vCitvYmotJChDT05GSUdfSFZDX0lSUSkJCSs9IGh2Y19pcnEubworb2JqLSQoQ09ORklHX0hWQ19YRU4pCQkrPSBodmNfeGVuLm8KK29iai0kKENPTkZJR19IVkNfSVVDVikJCSs9IGh2Y19pdWN2Lm8KK29iai0kKENPTkZJR19IVkNfVURCRykJCSs9IGh2Y191ZGJnLm8KK29iai0kKENPTkZJR19IVkNTKQkJKz0gaHZjcy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2JlYXQuYyBiL2RyaXZlcnMvdHR5L2h2Yy9odmNfYmVhdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvaHZjX2JlYXQuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvaHZjL2h2Y19iZWF0LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jIGIvZHJpdmVycy90dHkvaHZjL2h2Y19jb25zb2xlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9odmMvaHZjX2NvbnNvbGUuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmggYi9kcml2ZXJzL3R0eS9odmMvaHZjX2NvbnNvbGUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmgKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L2h2Yy9odmNfY29uc29sZS5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2RjYy5jIGIvZHJpdmVycy90dHkvaHZjL2h2Y19kY2MuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL2h2Y19kY2MuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvaHZjL2h2Y19kY2MuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19pcnEuYyBiL2RyaXZlcnMvdHR5L2h2Yy9odmNfaXJxLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci9odmNfaXJxLmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L2h2Yy9odmNfaXJxLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfaXNlcmllcy5jIGIvZHJpdmVycy90dHkvaHZjL2h2Y19pc2VyaWVzLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci9odmNfaXNlcmllcy5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9odmMvaHZjX2lzZXJpZXMuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMgYi9kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX3J0YXMuYyBiL2RyaXZlcnMvdHR5L2h2Yy9odmNfcnRhcy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvaHZjX3J0YXMuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvaHZjL2h2Y19ydGFzLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfdGlsZS5jIGIvZHJpdmVycy90dHkvaHZjL2h2Y190aWxlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci9odmNfdGlsZS5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9odmMvaHZjX3RpbGUuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y191ZGJnLmMgYi9kcml2ZXJzL3R0eS9odmMvaHZjX3VkYmcuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL2h2Y191ZGJnLmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L2h2Yy9odmNfdWRiZy5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX3Zpby5jIGIvZHJpdmVycy90dHkvaHZjL2h2Y192aW8uYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL2h2Y192aW8uYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvaHZjL2h2Y192aW8uYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y194ZW4uYyBiL2RyaXZlcnMvdHR5L2h2Yy9odmNfeGVuLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci9odmNfeGVuLmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L2h2Yy9odmNfeGVuLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNzLmMgYi9kcml2ZXJzL3R0eS9odmMvaHZjcy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvaHZjcy5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9odmMvaHZjcy5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZzaS5jIGIvZHJpdmVycy90dHkvaHZjL2h2c2kuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL2h2c2kuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvaHZjL2h2c2kuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvbl9nc20uYyBiL2RyaXZlcnMvdHR5L25fZ3NtLmMKaW5kZXggNDRiODQxMi4uYWEyZTVkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvbl9nc20uYworKysgYi9kcml2ZXJzL3R0eS9uX2dzbS5jCkBAIC0yNDE0LDYgKzI0MTQsNyBAQAogCiAJZ3NtLT5pbml0aWF0b3IgPSBjLT5pbml0aWF0b3I7CiAJZ3NtLT5tcnUgPSBjLT5tcnU7CisJZ3NtLT5tdHUgPSBjLT5tdHU7CiAJZ3NtLT5lbmNvZGluZyA9IGMtPmVuY2Fwc3VsYXRpb247CiAJZ3NtLT5hZGFwdGlvbiA9IGMtPmFkYXB0aW9uOwogCWdzbS0+bjIgPSBjLT5uMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L25faGRsYy5jIGIvZHJpdmVycy90dHkvbl9oZGxjLmMKaW5kZXggNDdkMzIyOC4uNTJmYzBjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvbl9oZGxjLmMKKysrIGIvZHJpdmVycy90dHkvbl9oZGxjLmMKQEAgLTU4MSw4ICs1ODEsOSBAQAogCQkJICAgX191OCBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5yKQogewogCXN0cnVjdCBuX2hkbGMgKm5faGRsYyA9IHR0eTJuX2hkbGModHR5KTsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCXN0cnVjdCBuX2hkbGNfYnVmICpyYnVmOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCiAJaWYgKGRlYnVnbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykJCiAJCXByaW50aygiJXMoJWQpbl9oZGxjX3R0eV9yZWFkKCkgY2FsbGVkXG4iLF9fRklMRV9fLF9fTElORV9fKTsKQEAgLTU5OCw1NyArNTk5LDU1IEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXR0eV9sb2NrKCk7CisJYWRkX3dhaXRfcXVldWUoJnR0eS0+cmVhZF93YWl0LCAmd2FpdCk7CiAKIAlmb3IgKDs7KSB7CiAJCWlmICh0ZXN0X2JpdChUVFlfT1RIRVJfQ0xPU0VELCAmdHR5LT5mbGFncykpIHsKLQkJCXR0eV91bmxvY2soKTsKLQkJCXJldHVybiAtRUlPOworCQkJcmV0ID0gLUVJTzsKKwkJCWJyZWFrOwogCQl9CisJCWlmICh0dHlfaHVuZ191cF9wKGZpbGUpKQorCQkJYnJlYWs7CiAKLQkJbl9oZGxjID0gdHR5Mm5faGRsYyAodHR5KTsKLQkJaWYgKCFuX2hkbGMgfHwgbl9oZGxjLT5tYWdpYyAhPSBIRExDX01BR0lDIHx8Ci0JCQkgdHR5ICE9IG5faGRsYy0+dHR5KSB7Ci0JCQl0dHlfdW5sb2NrKCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCiAJCXJidWYgPSBuX2hkbGNfYnVmX2dldCgmbl9oZGxjLT5yeF9idWZfbGlzdCk7Ci0JCWlmIChyYnVmKQorCQlpZiAocmJ1ZikgeworCQkJaWYgKHJidWYtPmNvdW50ID4gbnIpIHsKKwkJCQkvKiB0b28gbGFyZ2UgZm9yIGNhbGxlcidzIGJ1ZmZlciAqLworCQkJCXJldCA9IC1FT1ZFUkZMT1c7CisJCQl9IGVsc2UgeworCQkJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCByYnVmLT5idWYsIHJidWYtPmNvdW50KSkKKwkJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQllbHNlCisJCQkJCXJldCA9IHJidWYtPmNvdW50OworCQkJfQorCisJCQlpZiAobl9oZGxjLT5yeF9mcmVlX2J1Zl9saXN0LmNvdW50ID4KKwkJCSAgICBERUZBVUxUX1JYX0JVRl9DT1VOVCkKKwkJCQlrZnJlZShyYnVmKTsKKwkJCWVsc2UKKwkJCQluX2hkbGNfYnVmX3B1dCgmbl9oZGxjLT5yeF9mcmVlX2J1Zl9saXN0LCByYnVmKTsKIAkJCWJyZWFrOworCQl9CiAJCQkKIAkJLyogbm8gZGF0YSAqLwogCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCXR0eV91bmxvY2soKTsKLQkJCXJldHVybiAtRUFHQUlOOworCQkJcmV0ID0gLUVBR0FJTjsKKwkJCWJyZWFrOwogCQl9Ci0JCQkKLQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbiAoJnR0eS0+cmVhZF93YWl0KTsKKworCQlzY2hlZHVsZSgpOworCiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJdHR5X3VubG9jaygpOwotCQkJcmV0dXJuIC1FSU5UUjsKKwkJCXJldCA9IC1FSU5UUjsKKwkJCWJyZWFrOwogCQl9CiAJfQotCQkKLQlpZiAocmJ1Zi0+Y291bnQgPiBucikKLQkJLyogZnJhbWUgdG9vIGxhcmdlIGZvciBjYWxsZXIncyBidWZmZXIgKGRpc2NhcmQgZnJhbWUpICovCi0JCXJldCA9IC1FT1ZFUkZMT1c7Ci0JZWxzZSB7Ci0JCS8qIENvcHkgdGhlIGRhdGEgdG8gdGhlIGNhbGxlcidzIGJ1ZmZlciAqLwotCQlpZiAoY29weV90b191c2VyKGJ1ZiwgcmJ1Zi0+YnVmLCByYnVmLT5jb3VudCkpCi0JCQlyZXQgPSAtRUZBVUxUOwotCQllbHNlCi0JCQlyZXQgPSByYnVmLT5jb3VudDsKLQl9Ci0JCi0JLyogcmV0dXJuIEhETEMgYnVmZmVyIHRvIGZyZWUgbGlzdCB1bmxlc3MgdGhlIGZyZWUgbGlzdCAqLwotCS8qIGNvdW50IGhhcyBleGNlZWRlZCB0aGUgZGVmYXVsdCB2YWx1ZSwgaW4gd2hpY2ggY2FzZSB0aGUgKi8KLQkvKiBidWZmZXIgaXMgZnJlZWQgYmFjayB0byB0aGUgT1MgdG8gY29uc2VydmUgbWVtb3J5ICovCi0JaWYgKG5faGRsYy0+cnhfZnJlZV9idWZfbGlzdC5jb3VudCA+IERFRkFVTFRfUlhfQlVGX0NPVU5UKQotCQlrZnJlZShyYnVmKTsKLQllbHNlCQotCQluX2hkbGNfYnVmX3B1dCgmbl9oZGxjLT5yeF9mcmVlX2J1Zl9saXN0LHJidWYpOwotCXR0eV91bmxvY2soKTsKKworCXJlbW92ZV93YWl0X3F1ZXVlKCZ0dHktPnJlYWRfd2FpdCwgJndhaXQpOworCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwogCXJldHVybiByZXQ7CiAJCiB9CS8qIGVuZCBvZiBuX2hkbGNfdHR5X3JlYWQoKSAqLwpAQCAtNjkxLDE0ICs2OTAsMTUgQEAKIAkJY291bnQgPSBtYXhmcmFtZTsKIAl9CiAJCi0JdHR5X2xvY2soKTsKLQogCWFkZF93YWl0X3F1ZXVlKCZ0dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCisJZm9yICg7OykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQotCS8qIEFsbG9jYXRlIHRyYW5zbWl0IGJ1ZmZlciAqLwotCS8qIHNsZWVwIHVudGlsIHRyYW5zbWl0IGJ1ZmZlciBhdmFpbGFibGUgKi8JCQotCXdoaWxlICghKHRidWYgPSBuX2hkbGNfYnVmX2dldCgmbl9oZGxjLT50eF9mcmVlX2J1Zl9saXN0KSkpIHsKKwkJdGJ1ZiA9IG5faGRsY19idWZfZ2V0KCZuX2hkbGMtPnR4X2ZyZWVfYnVmX2xpc3QpOworCQlpZiAodGJ1ZikKKwkJCWJyZWFrOworCiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewogCQkJZXJyb3IgPSAtRUFHQUlOOwogCQkJYnJlYWs7CkBAIC03MTksNyArNzE5LDcgQEAKIAkJfQogCX0KIAotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZ0dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKIAogCWlmICghZXJyb3IpIHsJCQpAQCAtNzMxLDcgKzczMSw3IEBACiAJCW5faGRsY19idWZfcHV0KCZuX2hkbGMtPnR4X2J1Zl9saXN0LHRidWYpOwogCQluX2hkbGNfc2VuZF9mcmFtZXMobl9oZGxjLHR0eSk7CiAJfQotCXR0eV91bmxvY2soKTsKKwogCXJldHVybiBlcnJvcjsKIAkKIH0JLyogZW5kIG9mIG5faGRsY190dHlfd3JpdGUoKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvMjEyODUuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC8yMTI4NS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC8yMTI4NS5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvMjEyODUuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvNjgzMjhzZXJpYWwuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC82ODMyOHNlcmlhbC5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC82ODMyOHNlcmlhbC5jCmluZGV4IGJlMGViY2UuLmRlMDE2MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzY4MzI4c2VyaWFsLmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogCiBzdGF0aWMgdm9pZCByZWNlaXZlX2NoYXJzKHN0cnVjdCBtNjhrX3NlcmlhbCAqaW5mbywgdW5zaWduZWQgc2hvcnQgcngpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT50dHk7CiAJbTY4MzI4X3VhcnQgKnVhcnQgPSAmdWFydF9hZGRyW2luZm8tPmxpbmVdOwogCXVuc2lnbmVkIGNoYXIgY2gsIGZsYWc7CiAKQEAgLTMyOSw3ICszMjksNyBAQAogCQlnb3RvIGNsZWFyX2FuZF9yZXR1cm47CiAJfQogCi0JaWYoKGluZm8tPnhtaXRfY250IDw9IDApIHx8IGluZm8tPnBvcnQudHR5LT5zdG9wcGVkKSB7CisJaWYoKGluZm8tPnhtaXRfY250IDw9IDApIHx8IGluZm8tPnR0eS0+c3RvcHBlZCkgewogCQkvKiBUaGF0J3MgcGVjdWxpYXIuLi4gVFggaW50cyBvZmYgKi8KIAkJdWFydC0+dXN0Y250ICY9IH5VU1RDTlRfVFhfSU5UUl9NQVNLOwogCQlnb3RvIGNsZWFyX2FuZF9yZXR1cm47CkBAIC0zODMsNyArMzgzLDcgQEAKIAlzdHJ1Y3QgbTY4a19zZXJpYWwJKmluZm8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG02OGtfc2VyaWFsLCB0cXVldWUpOwogCXN0cnVjdCB0dHlfc3RydWN0CSp0dHk7CiAJCi0JdHR5ID0gaW5mby0+cG9ydC50dHk7CisJdHR5ID0gaW5mby0+dHR5OwogCWlmICghdHR5KQogCQlyZXR1cm47CiAjaWYgMApAQCAtNDA3LDcgKzQwNyw3IEBACiAJc3RydWN0IG02OGtfc2VyaWFsCSppbmZvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtNjhrX3NlcmlhbCwgdHF1ZXVlX2hhbmd1cCk7CiAJc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKIAkKLQl0dHkgPSBpbmZvLT5wb3J0LnR0eTsKKwl0dHkgPSBpbmZvLT50dHk7CiAJaWYgKCF0dHkpCiAJCXJldHVybjsKIApAQCAtNDUxLDggKzQ1MSw4IEBACiAJdWFydC0+dXN0Y250ID0gVVNUQ05UX1VFTiB8IFVTVENOVF9SWEVOIHwgVVNUQ05UX1JYX0lOVFJfTUFTSzsKICNlbmRpZgogCi0JaWYgKGluZm8tPnBvcnQudHR5KQotCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKKwlpZiAoaW5mby0+dHR5KQorCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+dHR5LT5mbGFncyk7CiAJaW5mby0+eG1pdF9jbnQgPSBpbmZvLT54bWl0X2hlYWQgPSBpbmZvLT54bWl0X3RhaWwgPSAwOwogCiAJLyoKQEAgLTQ4Niw4ICs0ODYsOCBAQAogCQlpbmZvLT54bWl0X2J1ZiA9IDA7CiAJfQogCi0JaWYgKGluZm8tPnBvcnQudHR5KQotCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CisJaWYgKGluZm8tPnR0eSkKKwkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKIAkKIAlpbmZvLT5mbGFncyAmPSB+U19JTklUSUFMSVpFRDsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC01NTMsOSArNTUzLDkgQEAKIAl1bnNpZ25lZCBjZmxhZzsKIAlpbnQJaTsKIAotCWlmICghaW5mby0+cG9ydC50dHkgfHwgIWluZm8tPnBvcnQudHR5LT50ZXJtaW9zKQorCWlmICghaW5mby0+dHR5IHx8ICFpbmZvLT50dHktPnRlcm1pb3MpCiAJCXJldHVybjsKLQljZmxhZyA9IGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWNmbGFnID0gaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCWlmICghKHBvcnQgPSBpbmZvLT5wb3J0KSkKIAkJcmV0dXJuOwogCkBAIC05NzAsNyArOTcwLDYgQEAKIHN0YXRpYyBpbnQgcnNfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAogCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JaW50IGVycm9yOwogCXN0cnVjdCBtNjhrX3NlcmlhbCAqIGluZm8gPSAoc3RydWN0IG02OGtfc2VyaWFsICopdHR5LT5kcml2ZXJfZGF0YTsKIAlpbnQgcmV0dmFsOwogCkBAIC0xMTA0LDcgKzExMDMsNyBAQAogCXR0eV9sZGlzY19mbHVzaCh0dHkpOwogCXR0eS0+Y2xvc2luZyA9IDA7CiAJaW5mby0+ZXZlbnQgPSAwOwotCWluZm8tPnBvcnQudHR5ID0gTlVMTDsKKwlpbmZvLT50dHkgPSBOVUxMOwogI3dhcm5pbmcgIlRoaXMgaXMgbm90IGFuZCBoYXMgbmV2ZXIgYmVlbiB2YWxpZCBzbyBmaXggaXQiCQogI2lmIDAKIAlpZiAodHR5LT5sZGlzYy5udW0gIT0gbGRpc2NzW05fVFRZXS5udW0pIHsKQEAgLTExNDIsNyArMTE0MSw3IEBACiAJaW5mby0+ZXZlbnQgPSAwOwogCWluZm8tPmNvdW50ID0gMDsKIAlpbmZvLT5mbGFncyAmPSB+U19OT1JNQUxfQUNUSVZFOwotCWluZm8tPnBvcnQudHR5ID0gTlVMTDsKKwlpbmZvLT50dHkgPSBOVUxMOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKIH0KIApAQCAtMTI2MSw3ICsxMjYwLDcgQEAKIAogCWluZm8tPmNvdW50Kys7CiAJdHR5LT5kcml2ZXJfZGF0YSA9IGluZm87Ci0JaW5mby0+cG9ydC50dHkgPSB0dHk7CisJaW5mby0+dHR5ID0gdHR5OwogCiAJLyoKIAkgKiBTdGFydCB1cCBzZXJpYWwgcG9ydApAQCAtMTMzOCw3ICsxMzM3LDcgQEAKIAkgICAgaW5mbyA9ICZtNjhrX3NvZnRbaV07CiAJICAgIGluZm8tPm1hZ2ljID0gU0VSSUFMX01BR0lDOwogCSAgICBpbmZvLT5wb3J0ID0gKGludCkgJnVhcnRfYWRkcltpXTsKLQkgICAgaW5mby0+cG9ydC50dHkgPSBOVUxMOworCSAgICBpbmZvLT50dHkgPSBOVUxMOwogCSAgICBpbmZvLT5pcnEgPSB1YXJ0X2lycXNbaV07CiAJICAgIGluZm8tPmN1c3RvbV9kaXZpc29yID0gMTY7CiAJICAgIGluZm8tPmNsb3NlX2RlbGF5ID0gNTA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5oIGIvZHJpdmVycy90dHkvc2VyaWFsLzY4MzI4c2VyaWFsLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmgKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC82ODMyOHNlcmlhbC5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC82ODM2MHNlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsLzY4MzYwc2VyaWFsLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvNjgzNjBzZXJpYWwuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsLzY4MzYwc2VyaWFsLmMKaW5kZXggODhiMTMzNS4uYmMyMWVlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvNjgzNjBzZXJpYWwuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvNjgzNjBzZXJpYWwuYwpAQCAtMjQyOCw2ICsyNDI4LDcgQEAKIAkvKiAucmVhZF9wcm9jID0gcnNfMzYwX3JlYWRfcHJvYywgKi8KIAkudGlvY21nZXQgPSByc18zNjBfdGlvY21nZXQsCiAJLnRpb2Ntc2V0ID0gcnNfMzYwX3Rpb2Ntc2V0LAorCS5nZXRfaWNvdW50ID0gcnNfMzYwX2dldF9pY291bnQsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCByc18zNjBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MC5jIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAuYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC84MjUwLmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC84MjUwLmMKaW5kZXggYjI1ZTZlNC4uMzk3NWRmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLmMKQEAgLTIzNiw3ICsyMzYsOCBAQAogCQkuZmlmb19zaXplCT0gMTI4LAogCQkudHhfbG9hZHN6CT0gMTI4LAogCQkuZmNyCQk9IFVBUlRfRkNSX0VOQUJMRV9GSUZPIHwgVUFSVF9GQ1JfUl9UUklHXzEwLAotCQkuZmxhZ3MJCT0gVUFSVF9DQVBfRklGTyB8IFVBUlRfQ0FQX0VGUiB8IFVBUlRfQ0FQX1NMRUVQLAorCQkvKiBVQVJUX0NBUF9FRlIgYnJlYWtzIGJpbGxpb25vbiBDRiBibHVldG9vdGggY2FyZC4gKi8KKwkJLmZsYWdzCQk9IFVBUlRfQ0FQX0ZJRk8gfCBVQVJUX0NBUF9TTEVFUCwKIAl9LAogCVtQT1JUXzE2NjU0XSA9IHsKIAkJLm5hbWUJCT0gIlNUMTY2NTQiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MC5oIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvODI1MC5oCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvODI1MC5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwX2FjY2VudC5jIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfYWNjZW50LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsLzgyNTBfYWNjZW50LmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC84MjUwX2FjY2VudC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwX2Fjb3JuLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9hY29ybi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC84MjUwX2Fjb3JuLmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC84MjUwX2Fjb3JuLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfYm9jYS5jIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfYm9jYS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC84MjUwX2JvY2EuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfYm9jYS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwX2Vhcmx5LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9lYXJseS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC84MjUwX2Vhcmx5LmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC84MjUwX2Vhcmx5LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfZXhhcl9zdDE2YzU1NC5jIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfZXhhcl9zdDE2YzU1NC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC84MjUwX2V4YXJfc3QxNmM1NTQuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfZXhhcl9zdDE2YzU1NC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwX2ZvdXJwb3J0LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9mb3VycG9ydC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC84MjUwX2ZvdXJwb3J0LmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC84MjUwX2ZvdXJwb3J0LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfZ3NjLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9nc2MuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvODI1MF9nc2MuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfZ3NjLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfaHAzMDAuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX2hwMzAwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsLzgyNTBfaHAzMDAuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfaHAzMDAuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9odWI2LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9odWI2LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsLzgyNTBfaHViNi5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9odWI2LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfbWNhLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9tY2EuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvODI1MF9tY2EuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfbWNhLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9wY2kuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfcGNpLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfcG5wLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9wbnAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvODI1MF9wbnAuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfcG5wLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9LY29uZmlnCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZwppbmRleCBjMWRmNzY3Li4yYjgzMzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCkBAIC04MSw3ICs4MSw3IEBACiAJZGVmYXVsdCBTRVJJQUxfODI1MAogCiBjb25maWcgU0VSSUFMXzgyNTBfUENJCi0JdHJpc3RhdGUgIjgyNTAvMTY1NTAgUENJIGRldmljZSBzdXBwb3J0IiBpZiBFTUJFRERFRAorCXRyaXN0YXRlICI4MjUwLzE2NTUwIFBDSSBkZXZpY2Ugc3VwcG9ydCIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBTRVJJQUxfODI1MCAmJiBQQ0kKIAlkZWZhdWx0IFNFUklBTF84MjUwCiAJaGVscApAQCAtOTAsNyArOTAsNyBAQAogCSAgU2F2ZXMgYWJvdXQgOUsuCiAKIGNvbmZpZyBTRVJJQUxfODI1MF9QTlAKLQl0cmlzdGF0ZSAiODI1MC8xNjU1MCBQTlAgZGV2aWNlIHN1cHBvcnQiIGlmIEVNQkVEREVECisJdHJpc3RhdGUgIjgyNTAvMTY1NTAgUE5QIGRldmljZSBzdXBwb3J0IiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIFNFUklBTF84MjUwICYmIFBOUAogCWRlZmF1bHQgU0VSSUFMXzgyNTAKIAloZWxwCkBAIC0xNTE4LDYgKzE1MTgsNyBAQAogY29uZmlnIFNFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQKIAl0cmlzdGF0ZSAiR1JMSUIgQVBCVUFSVCBzZXJpYWwgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE9GCisJc2VsZWN0IFNFUklBTF9DT1JFCiAJLS0taGVscC0tLQogCUFkZCBzdXBwb3J0IGZvciB0aGUgR1JMSUIgQVBCVUFSVCBzZXJpYWwgcG9ydC4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL01ha2VmaWxlCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2FsdGVyYV9qdGFndWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2FsdGVyYV9qdGFndWFydC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9hbHRlcmFfanRhZ3VhcnQuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL2FsdGVyYV9qdGFndWFydC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hbHRlcmFfdWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2FsdGVyYV91YXJ0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL2FsdGVyYV91YXJ0LmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9hbHRlcmFfdWFydC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvYW1iYS1wbDAxMC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9hbWJhLXBsMDEwLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9hbWJhLXBsMDExLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL2FtYmEtcGwwMTEuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYXBidWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2FwYnVhcnQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvYXBidWFydC5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvYXBidWFydC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hcGJ1YXJ0LmggYi9kcml2ZXJzL3R0eS9zZXJpYWwvYXBidWFydC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9hcGJ1YXJ0LmgKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9hcGJ1YXJ0LmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9iY202M3h4X3VhcnQuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9iY202M3h4X3VhcnQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvYmNtNjN4eF91YXJ0LmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9iY202M3h4X3VhcnQuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYmZpbl81eHguYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9iZmluXzV4eC5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9iZmluXzV4eC5jCmluZGV4IGUzODFiODkuLjliMWZmMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL2JmaW5fNXh4LmMKQEAgLTM3MCwxMCArMzcwLDggQEAKIHsKIAlzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCA9IGRldl9pZDsKIAotCXNwaW5fbG9jaygmdWFydC0+cG9ydC5sb2NrKTsKIAl3aGlsZSAoVUFSVF9HRVRfTFNSKHVhcnQpICYgRFIpCiAJCWJmaW5fc2VyaWFsX3J4X2NoYXJzKHVhcnQpOwotCXNwaW5fdW5sb2NrKCZ1YXJ0LT5wb3J0LmxvY2spOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNDkwLDkgKzQ4OCw4IEBACiB7CiAJaW50IHhfcG9zLCBwb3M7CiAKLQlkbWFfZGlzYWJsZV9pcnEodWFydC0+dHhfZG1hX2NoYW5uZWwpOwotCWRtYV9kaXNhYmxlX2lycSh1YXJ0LT5yeF9kbWFfY2hhbm5lbCk7Ci0Jc3Bpbl9sb2NrX2JoKCZ1YXJ0LT5wb3J0LmxvY2spOworCWRtYV9kaXNhYmxlX2lycV9ub3N5bmModWFydC0+cnhfZG1hX2NoYW5uZWwpOworCXNwaW5fbG9ja19iaCgmdWFydC0+cnhfbG9jayk7CiAKIAkvKiAyRCBETUEgUlggYnVmZmVyIHJpbmcgaXMgdXNlZC4gQmVjYXVzZSBjdXJyX3lfY291bnQgYW5kCiAJICogY3Vycl94X2NvdW50IGNhbid0IGJlIHJlYWQgYXMgYW4gYXRvbWljIG9wZXJhdGlvbiwKQEAgLTUyMyw4ICs1MjAsNyBAQAogCQl1YXJ0LT5yeF9kbWFfYnVmLnRhaWwgPSB1YXJ0LT5yeF9kbWFfYnVmLmhlYWQ7CiAJfQogCi0Jc3Bpbl91bmxvY2tfYmgoJnVhcnQtPnBvcnQubG9jayk7Ci0JZG1hX2VuYWJsZV9pcnEodWFydC0+dHhfZG1hX2NoYW5uZWwpOworCXNwaW5fdW5sb2NrX2JoKCZ1YXJ0LT5yeF9sb2NrKTsKIAlkbWFfZW5hYmxlX2lycSh1YXJ0LT5yeF9kbWFfY2hhbm5lbCk7CiAKIAltb2RfdGltZXIoJih1YXJ0LT5yeF9kbWFfdGltZXIpLCBqaWZmaWVzICsgRE1BX1JYX0ZMVVNIX0pJRkZJRVMpOwpAQCAtNTcxLDcgKzU2Nyw3IEBACiAJdW5zaWduZWQgc2hvcnQgaXJxc3RhdDsKIAlpbnQgeF9wb3MsIHBvczsKIAotCXNwaW5fbG9jaygmdWFydC0+cG9ydC5sb2NrKTsKKwlzcGluX2xvY2soJnVhcnQtPnJ4X2xvY2spOwogCWlycXN0YXQgPSBnZXRfZG1hX2N1cnJfaXJxc3RhdCh1YXJ0LT5yeF9kbWFfY2hhbm5lbCk7CiAJY2xlYXJfZG1hX2lycXN0YXQodWFydC0+cnhfZG1hX2NoYW5uZWwpOwogCkBAIC01ODksNyArNTg1LDcgQEAKIAkJdWFydC0+cnhfZG1hX2J1Zi50YWlsID0gdWFydC0+cnhfZG1hX2J1Zi5oZWFkOwogCX0KIAotCXNwaW5fdW5sb2NrKCZ1YXJ0LT5wb3J0LmxvY2spOworCXNwaW5fdW5sb2NrKCZ1YXJ0LT5yeF9sb2NrKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTEzMzIsNiArMTMyOCw3IEBACiAJCX0KIAogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9ETUEKKwkJc3Bpbl9sb2NrX2luaXQoJnVhcnQtPnJ4X2xvY2spOwogCQl1YXJ0LT50eF9kb25lCSAgICA9IDE7CiAJCXVhcnQtPnR4X2NvdW50CSAgICA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2JmaW5fc3BvcnRfdWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2JmaW5fc3BvcnRfdWFydC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL2JmaW5fc3BvcnRfdWFydC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuaCBiL2RyaXZlcnMvdHR5L3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvYmZpbl9zcG9ydF91YXJ0LmgKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY2xwczcxMXguYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9jbHBzNzExeC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvY2xwczcxMXguYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvTWFrZWZpbGUgYi9kcml2ZXJzL3R0eS9zZXJpYWwvY3BtX3VhcnQvTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L01ha2VmaWxlCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvY3BtX3VhcnQvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0LmggYi9kcml2ZXJzL3R0eS9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnQuaApyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0LmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMS5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTEuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMS5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0xLmggYi9kcml2ZXJzL3R0eS9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0xLmgKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0xLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0yLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5oIGIvZHJpdmVycy90dHkvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5oCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvY3Jpc3YxMC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9jcmlzdjEwLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NyaXN2MTAuaCBiL2RyaXZlcnMvdHR5L3NlcmlhbC9jcmlzdjEwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL2NyaXN2MTAuaApyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL2NyaXN2MTAuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvZHouYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9kei5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9kei5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvZHouYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvZHouaCBiL2RyaXZlcnMvdHR5L3NlcmlhbC9kei5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9kei5oCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvZHouaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaWNvbS5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2ljb20uYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvaWNvbS5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvaWNvbS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pY29tLmggYi9kcml2ZXJzL3R0eS9zZXJpYWwvaWNvbS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9pY29tLmgKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9pY29tLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lmeDZ4NjAuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9pZng2eDYwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL2lmeDZ4NjAuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL2lmeDZ4NjAuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaWZ4Nng2MC5oIGIvZHJpdmVycy90dHkvc2VyaWFsL2lmeDZ4NjAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvaWZ4Nng2MC5oCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvaWZ4Nng2MC5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pbXguYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9pbXguYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvaW14LmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9pbXguYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW9jM19zZXJpYWwuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9pb2MzX3NlcmlhbC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9pb2MzX3NlcmlhbC5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvaW9jM19zZXJpYWwuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW9jNF9zZXJpYWwuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9pb2M0X3NlcmlhbC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvaW9jNF9zZXJpYWwuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaXAyMnppbG9nLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvaXAyMnppbG9nLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL2lwMjJ6aWxvZy5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvaXAyMnppbG9nLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lwMjJ6aWxvZy5oIGIvZHJpdmVycy90dHkvc2VyaWFsL2lwMjJ6aWxvZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9pcDIyemlsb2cuaApyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL2lwMjJ6aWxvZy5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9qc20vTWFrZWZpbGUgYi9kcml2ZXJzL3R0eS9zZXJpYWwvanNtL01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9qc20vTWFrZWZpbGUKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9qc20vTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc20uaCBiL2RyaXZlcnMvdHR5L3NlcmlhbC9qc20vanNtLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL2pzbS9qc20uaApyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL2pzbS9qc20uaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvanNtL2pzbV9kcml2ZXIuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9qc20vanNtX2RyaXZlci5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9qc20vanNtX2RyaXZlci5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvanNtL2pzbV9kcml2ZXIuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvanNtL2pzbV9uZW8uYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9qc20vanNtX25lby5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9qc20vanNtX25lby5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvanNtL2pzbV9uZW8uYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvanNtL2pzbV90dHkuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9qc20vanNtX3R0eS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9qc20vanNtX3R0eS5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvanNtL2pzbV90dHkuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwva2dkYm9jLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwva2dkYm9jLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL2tnZGJvYy5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwva2dkYm9jLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbTMycl9zaW8uYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL20zMnJfc2lvLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmggYi9kcml2ZXJzL3R0eS9zZXJpYWwvbTMycl9zaW8uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uaApyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL20zMnJfc2lvLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvX3JlZy5oIGIvZHJpdmVycy90dHkvc2VyaWFsL20zMnJfc2lvX3JlZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9tMzJyX3Npb19yZWcuaApyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL20zMnJfc2lvX3JlZy5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tYXgzMTAwLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbWF4MzEwMC5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL21heDMxMDAuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDAuYwppbmRleCBiZWIxYWZhLi43Yjk1MWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tYXgzMTAwLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDAuYwpAQCAtNjAxLDcgKzYwMSw3IEBACiAJcy0+cnRzID0gMDsKIAogCXNwcmludGYoYiwgIm1heDMxMDAtJWQiLCBzLT5taW5vcik7Ci0Jcy0+d29ya3F1ZXVlID0gY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKGIpOworCXMtPndvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKGIpOwogCWlmICghcy0+d29ya3F1ZXVlKSB7CiAJCWRldl93YXJuKCZzLT5zcGktPmRldiwgImNhbm5vdCBjcmVhdGUgd29ya3F1ZXVlXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21heDMxMDctYWF2YS5jIGIvZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDctYWF2YS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9tYXgzMTA3LWFhdmEuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDctYWF2YS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tYXgzMTA3LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbWF4MzEwNy5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL21heDMxMDcuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDcuYwppbmRleCA5MTA4NzBlLi43NTBiNGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tYXgzMTA3LmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDcuYwpAQCAtODMzLDcgKzgzMyw3IEBACiAJc3RydWN0IG1heDMxMDdfcG9ydCAqcyA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgbWF4MzEwN19wb3J0LCBwb3J0KTsKIAogCS8qIEluaXRpYWxpemUgd29yayBxdWV1ZSAqLwotCXMtPndvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZSgibWF4MzEwNyIpOworCXMtPndvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKCJtYXgzMTA3Iik7CiAJaWYgKCFzLT53b3JrcXVldWUpIHsKIAkJZGV2X2Vycigmcy0+c3BpLT5kZXYsICJXb3JrcXVldWUgY3JlYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21heDMxMDcuaCBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tYXgzMTA3LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL21heDMxMDcuaApyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDcuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbWNmLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbWNmLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL21jZi5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvbWNmLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21mZC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL21mZC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9tZmQuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL21mZC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXBzYy5jIGIvZHJpdmVycy90dHkvc2VyaWFsL21wc2MuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvbXBzYy5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvbXBzYy5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcnN0X21heDMxMTAuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tcnN0X21heDMxMTAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvbXJzdF9tYXgzMTEwLmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9tcnN0X21heDMxMTAuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXJzdF9tYXgzMTEwLmggYi9kcml2ZXJzL3R0eS9zZXJpYWwvbXJzdF9tYXgzMTEwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL21yc3RfbWF4MzExMC5oCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvbXJzdF9tYXgzMTEwLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21zbV9zZXJpYWwuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tc21fc2VyaWFsLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL21zbV9zZXJpYWwuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL21zbV9zZXJpYWwuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXNtX3NlcmlhbC5oIGIvZHJpdmVycy90dHkvc2VyaWFsL21zbV9zZXJpYWwuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvbXNtX3NlcmlhbC5oCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvbXNtX3NlcmlhbC5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tdXguYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tdXguYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvbXV4LmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9tdXguYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbmV0eC1zZXJpYWwuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9uZXR4LXNlcmlhbC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9uZXR4LXNlcmlhbC5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvbmV0eC1zZXJpYWwuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbndwc2VyaWFsLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbndwc2VyaWFsLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL253cHNlcmlhbC5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvbndwc2VyaWFsLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL29mX3NlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL29mX3NlcmlhbC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9vZl9zZXJpYWwuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL29mX3NlcmlhbC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9vbWFwLXNlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL29tYXAtc2VyaWFsLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL29tYXAtc2VyaWFsLmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9vbWFwLXNlcmlhbC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9wY2hfdWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3BjaF91YXJ0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL3BjaF91YXJ0LmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvcG1hY196aWxvZy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9wbWFjX3ppbG9nLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuaCBiL2RyaXZlcnMvdHR5L3NlcmlhbC9wbWFjX3ppbG9nLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuaApyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL3BtYWNfemlsb2cuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcG54OHh4eF91YXJ0LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvcG54OHh4eF91YXJ0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL3BueDh4eHhfdWFydC5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvcG54OHh4eF91YXJ0LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3B4YS5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3B4YS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9weGEuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL3B4YS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDAwLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvczNjMjQwMC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9zM2MyNDAwLmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9zM2MyNDAwLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zM2MyNDEwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL3MzYzI0MTAuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMi5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3MzYzI0MTIuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvczNjMjQxMi5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvczNjMjQxMi5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDQwLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvczNjMjQ0MC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9zM2MyNDQwLmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9zM2MyNDQwLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0YTAuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zM2MyNGEwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL3MzYzI0YTAuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL3MzYzI0YTAuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvczNjNjQwMC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3MzYzY0MDAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvczNjNjQwMC5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvczNjNjQwMC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zNXB2MjEwLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvczVwdjIxMC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9zNXB2MjEwLmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9zNXB2MjEwLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3NhMTEwMC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9zYTExMDAuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL3NhMTEwMC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zYW1zdW5nLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2Ftc3VuZy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9zYW1zdW5nLmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NhbXN1bmcuaCBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL3NhbXN1bmcuaApyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL3NhbXN1bmcuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2IxMjUwLWR1YXJ0LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2IxMjUwLWR1YXJ0LmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvc2IxMjUwLWR1YXJ0LmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9zYjEyNTAtZHVhcnQuYwppbmRleCBhMmYyYjMyLi42MDJkOTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zYjEyNTAtZHVhcnQuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2IxMjUwLWR1YXJ0LmMKQEAgLTgyOSw3ICs4MjksNyBAQAogI2lmZGVmIENPTkZJR19TRVJJQUxfU0IxMjUwX0RVQVJUX0NPTlNPTEUKIC8qCiAgKiBTZXJpYWwgY29uc29sZSBzdHVmZi4gIFZlcnkgYmFzaWMsIHBvbGxpbmcgZHJpdmVyIGZvciBkb2luZyBzZXJpYWwKLSAqIGNvbnNvbGUgb3V0cHV0LiAgVGhlIGNvbnNvbGVfc2VtIGlzIGhlbGQgYnkgdGhlIGNhbGxlciwgc28gd2UKKyAqIGNvbnNvbGUgb3V0cHV0LiAgVGhlIGNvbnNvbGVfbG9jayBpcyBoZWxkIGJ5IHRoZSBjYWxsZXIsIHNvIHdlCiAgKiBzaG91bGRuJ3QgYmUgaW50ZXJydXB0ZWQgZm9yIG1vcmUgY29uc29sZSBhY3Rpdml0eS4KICAqLwogc3RhdGljIHZvaWQgc2JkX2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCwgaW50IGNoKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2MyNnh4LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2MyNnh4LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL3NjMjZ4eC5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvc2MyNnh4LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2NvcmUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9jb3JlLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9jcy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9jcy5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfa3M4Njk1LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2tzODY5NS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9zZXJpYWxfa3M4Njk1LmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfa3M4Njk1LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX3R4eDkuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF90eHg5LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3NoLXNjaS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL3NoLXNjaS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaCBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zaC1zY2kuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9zaC1zY2kuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3NuX2NvbnNvbGUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvc25fY29uc29sZS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW5jb3JlLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc3VuY29yZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9zdW5jb3JlLmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9zdW5jb3JlLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bmNvcmUuaCBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zdW5jb3JlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL3N1bmNvcmUuaApyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL3N1bmNvcmUuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3VuaHYuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zdW5odi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9zdW5odi5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvc3VuaHYuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuc2FiLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc3Vuc2FiLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL3N1bnNhYi5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvc3Vuc2FiLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bnNhYi5oIGIvZHJpdmVycy90dHkvc2VyaWFsL3N1bnNhYi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC9zdW5zYWIuaApyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL3N1bnNhYi5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3N1bnN1LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL3N1bnN1LmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9zdW5zdS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3N1bnppbG9nLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9zdW56aWxvZy5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5oIGIvZHJpdmVycy90dHkvc2VyaWFsL3N1bnppbG9nLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmgKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC9zdW56aWxvZy5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC90aW1idWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3RpbWJ1YXJ0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL3RpbWJ1YXJ0LmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC90aW1idWFydC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC90aW1idWFydC5oIGIvZHJpdmVycy90dHkvc2VyaWFsL3RpbWJ1YXJ0LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL3RpbWJ1YXJ0LmgKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC90aW1idWFydC5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC91YXJ0bGl0ZS5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3VhcnRsaXRlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL3VhcnRsaXRlLmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC91YXJ0bGl0ZS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC91Y2NfdWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3VjY191YXJ0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL3VjY191YXJ0LmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC91Y2NfdWFydC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC92cjQxeHhfc2l1LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvdnI0MXh4X3NpdS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC92cjQxeHhfc2l1LmMKcmVuYW1lIHRvIGRyaXZlcnMvdHR5L3NlcmlhbC92cjQxeHhfc2l1LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3Z0ODUwMF9zZXJpYWwuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC92dDg1MDBfc2VyaWFsLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc2VyaWFsL3Z0ODUwMF9zZXJpYWwuYwpyZW5hbWUgdG8gZHJpdmVycy90dHkvc2VyaWFsL3Z0ODUwMF9zZXJpYWwuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvenMuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC96cy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC96cy5jCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvenMuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvenMuaCBiL2RyaXZlcnMvdHR5L3NlcmlhbC96cy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3NlcmlhbC96cy5oCnJlbmFtZSB0byBkcml2ZXJzL3R0eS9zZXJpYWwvenMuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc3lzcnEuYyBiL2RyaXZlcnMvdHR5L3N5c3JxLmMKaW5kZXggYzU1NmVkOS4uODFmMTM5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc3lzcnEuYworKysgYi9kcml2ZXJzL3R0eS9zeXNycS5jCkBAIC00Niw3ICs0Niw3IEBACiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CiAKIC8qIFdoZXRoZXIgd2UgcmVhY3Qgb24gc3lzcnEga2V5cyBvciBqdXN0IGlnbm9yZSB0aGVtICovCi1zdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkgc3lzcnFfZW5hYmxlZCA9IDE7CitzdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkgc3lzcnFfZW5hYmxlZCA9IFNZU1JRX0RFRkFVTFRfRU5BQkxFOwogc3RhdGljIGJvb2wgX19yZWFkX21vc3RseSBzeXNycV9hbHdheXNfZW5hYmxlZDsKIAogc3RhdGljIGJvb2wgc3lzcnFfb24odm9pZCkKQEAgLTU3MSw2ICs1NzEsNyBAQAogCXVuc2lnbmVkIGludCBhbHRfdXNlOwogCWJvb2wgYWN0aXZlOwogCWJvb2wgbmVlZF9yZWluamVjdDsKKwlib29sIHJlaW5qZWN0aW5nOwogfTsKIAogc3RhdGljIHZvaWQgc3lzcnFfcmVpbmplY3RfYWx0X3N5c3JxKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTU4MSw2ICs1ODIsMTAgQEAKIAl1bnNpZ25lZCBpbnQgYWx0X2NvZGUgPSBzeXNycS0+YWx0X3VzZTsKIAogCWlmIChzeXNycS0+bmVlZF9yZWluamVjdCkgeworCQkvKiB3ZSBkbyBub3Qgd2FudCB0aGUgYXNzaWdubWVudCB0byBiZSByZW9yZGVyZWQgKi8KKwkJc3lzcnEtPnJlaW5qZWN0aW5nID0gdHJ1ZTsKKwkJbWIoKTsKKwogCQkvKiBTaW11bGF0ZSBwcmVzcyBhbmQgcmVsZWFzZSBvZiBBbHQgKyBTeXNScSAqLwogCQlpbnB1dF9pbmplY3RfZXZlbnQoaGFuZGxlLCBFVl9LRVksIGFsdF9jb2RlLCAxKTsKIAkJaW5wdXRfaW5qZWN0X2V2ZW50KGhhbmRsZSwgRVZfS0VZLCBLRVlfU1lTUlEsIDEpOwpAQCAtNTg5LDYgKzU5NCw5IEBACiAJCWlucHV0X2luamVjdF9ldmVudChoYW5kbGUsIEVWX0tFWSwgS0VZX1NZU1JRLCAwKTsKIAkJaW5wdXRfaW5qZWN0X2V2ZW50KGhhbmRsZSwgRVZfS0VZLCBhbHRfY29kZSwgMCk7CiAJCWlucHV0X2luamVjdF9ldmVudChoYW5kbGUsIEVWX1NZTiwgU1lOX1JFUE9SVCwgMSk7CisKKwkJbWIoKTsKKwkJc3lzcnEtPnJlaW5qZWN0aW5nID0gZmFsc2U7CiAJfQogfQogCkBAIC01OTksNiArNjA3LDEzIEBACiAJYm9vbCB3YXNfYWN0aXZlID0gc3lzcnEtPmFjdGl2ZTsKIAlib29sIHN1cHByZXNzOwogCisJLyoKKwkgKiBEbyBub3QgZmlsdGVyIGFueXRoaW5nIGlmIHdlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiByZS1pbmplY3RpbmcKKwkgKiBBbHQrU3lzUnEgY29tYmluYXRpb24uCisJICovCisJaWYgKHN5c3JxLT5yZWluamVjdGluZykKKwkJcmV0dXJuIGZhbHNlOworCiAJc3dpdGNoICh0eXBlKSB7CiAKIAljYXNlIEVWX1NZTjoKQEAgLTYyOSw3ICs2NDQsNyBAQAogCQkJCXN5c3JxLT5hbHRfdXNlID0gc3lzcnEtPmFsdDsKIAkJCQkvKgogCQkJCSAqIElmIG5vdGhpbmcgZWxzZSB3aWxsIGJlIHByZXNzZWQgd2UnbGwgbmVlZAotCQkJCSAqIHRvICogcmUtaW5qZWN0IEFsdC1TeXNScSBrZXlzcm9rZS4KKwkJCQkgKiB0byByZS1pbmplY3QgQWx0LVN5c1JxIGtleXNyb2tlLgogCQkJCSAqLwogCQkJCXN5c3JxLT5uZWVkX3JlaW5qZWN0ID0gdHJ1ZTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9pby5jIGIvZHJpdmVycy90dHkvdHR5X2lvLmMKaW5kZXggNDY0ZDA5ZC4uMDA2NWRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdHR5X2lvLmMKKysrIGIvZHJpdmVycy90dHkvdHR5X2lvLmMKQEAgLTMyNTYsOCArMzI1Niw4IEBACiAJc3RydWN0IGNvbnNvbGUgKmM7CiAJc3NpemVfdCBjb3VudCA9IDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7Ci0JZm9yIChjID0gY29uc29sZV9kcml2ZXJzOyBjOyBjID0gYy0+bmV4dCkgeworCWNvbnNvbGVfbG9jaygpOworCWZvcl9lYWNoX2NvbnNvbGUoYykgewogCQlpZiAoIWMtPmRldmljZSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoIWMtPndyaXRlKQpAQCAtMzI3MSw3ICszMjcxLDcgQEAKIAl3aGlsZSAoaS0tKQogCQljb3VudCArPSBzcHJpbnRmKGJ1ZiArIGNvdW50LCAiJXMlZCVjIiwKIAkJCQkgY3NbaV0tPm5hbWUsIGNzW2ldLT5pbmRleCwgaSA/ICcgJzonXG4nKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTMzMDYsNyArMzMwNiw3IEBACiAJaWYgKElTX0VSUihjb25zZGV2KSkKIAkJY29uc2RldiA9IE5VTEw7CiAJZWxzZQotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoY29uc2RldiwgJmRldl9hdHRyX2FjdGl2ZSk7CisJCVdBUk5fT04oZGV2aWNlX2NyZWF0ZV9maWxlKGNvbnNkZXYsICZkZXZfYXR0cl9hY3RpdmUpIDwgMCk7CiAKICNpZmRlZiBDT05GSUdfVlQKIAl2dHlfaW5pdCgmY29uc29sZV9mb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3Z0L3NlbGVjdGlvbi5jIGIvZHJpdmVycy90dHkvdnQvc2VsZWN0aW9uLmMKaW5kZXggZWJhZTM0NC4uYzk1NmVkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdnQvc2VsZWN0aW9uLmMKKysrIGIvZHJpdmVycy90dHkvdnQvc2VsZWN0aW9uLmMKQEAgLTMxNiw5ICszMTYsOSBAQAogCS8qIGFsd2F5cyBjYWxsZWQgd2l0aCBCVE0gZnJvbSB2dF9pb2N0bCAqLwogCVdBUk5fT04oIXR0eV9sb2NrZWQoKSk7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcG9rZV9ibGFua2VkX2NvbnNvbGUoKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCWxkID0gdHR5X2xkaXNjX3JlZih0dHkpOwogCWlmICghbGQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3Z0L3ZjX3NjcmVlbi5jIGIvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMKaW5kZXggZWFiM2ExZi4uYTY3MmVkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMKKysrIGIvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogCS8qIFNlbGVjdCB0aGUgcHJvcGVyIGN1cnJlbnQgY29uc29sZSBhbmQgdmVyaWZ5CiAJICogc2FuaXR5IG9mIHRoZSBzaXR1YXRpb24gdW5kZXIgdGhlIGNvbnNvbGUgbG9jay4KIAkgKi8KLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlhdHRyID0gKGN1cnJjb25zICYgMTI4KTsKIAljdXJyY29ucyA9IChjdXJyY29ucyAmIDEyNyk7CkBAIC0zMzYsOSArMzM2LDkgQEAKIAkJICogdGhlIHBhZ2VmYXVsdCBoYW5kbGluZyBjb2RlIG1heSB3YW50IHRvIGNhbGwgcHJpbnRrKCkuCiAJCSAqLwogCi0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0ID0gY29weV90b191c2VyKGJ1ZiwgY29uX2J1Zl9zdGFydCwgb3JpZ19jb3VudCk7Ci0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAKIAkJaWYgKHJldCkgewogCQkJcmVhZCArPSAob3JpZ19jb3VudCAtIHJldCk7CkBAIC0zNTQsNyArMzU0LDcgQEAKIAlpZiAocmVhZCkKIAkJcmV0ID0gcmVhZDsKIHVubG9ja19vdXQ6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJbXV0ZXhfdW5sb2NrKCZjb25fYnVmX210eCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTM3OSw3ICszNzksNyBAQAogCS8qIFNlbGVjdCB0aGUgcHJvcGVyIGN1cnJlbnQgY29uc29sZSBhbmQgdmVyaWZ5CiAJICogc2FuaXR5IG9mIHRoZSBzaXR1YXRpb24gdW5kZXIgdGhlIGNvbnNvbGUgbG9jay4KIAkgKi8KLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlhdHRyID0gKGN1cnJjb25zICYgMTI4KTsKIAljdXJyY29ucyA9IChjdXJyY29ucyAmIDEyNyk7CkBAIC00MTQsOSArNDE0LDkgQEAKIAkJLyogVGVtcG9yYXJpbHkgZHJvcCB0aGUgY29uc29sZSBsb2NrIHNvIHRoYXQgd2UgY2FuIHJlYWQKIAkJICogaW4gdGhlIHdyaXRlIGRhdGEgZnJvbSB1c2Vyc3BhY2Ugc2FmZWx5LgogCQkgKi8KLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXQgPSBjb3B5X2Zyb21fdXNlcihjb25fYnVmLCBidWYsIHRoaXNfcm91bmQpOwotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCiAJCWlmIChyZXQpIHsKIAkJCXRoaXNfcm91bmQgLT0gcmV0OwpAQCAtNTQyLDcgKzU0Miw3IEBACiAJCXZjc19zY3JfdXBkYXRlZCh2Yyk7CiAKIHVubG9ja19vdXQ6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAltdXRleF91bmxvY2soJmNvbl9idWZfbXR4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdnQvdnQuYyBiL2RyaXZlcnMvdHR5L3Z0L3Z0LmMKaW5kZXggNzY0MDdlYy4uMTQ3ZWRlMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3Z0L3Z0LmMKKysrIGIvZHJpdmVycy90dHkvdnQvdnQuYwpAQCAtMTAwMyw5ICsxMDAzLDkgQEAKIAlzdHJ1Y3QgdmNfZGF0YSAqdmMgPSB0dHktPmRyaXZlcl9kYXRhOwogCWludCByZXQ7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcmV0ID0gdmNfZG9fcmVzaXplKHR0eSwgdmMsIHdzLT53c19jb2wsIHdzLT53c19yb3cpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyNzEsNyArMTI3MSw3IEBACiAJdmMtPnZjX2NvbG9yID0gdmMtPnZjX2RlZl9jb2xvcjsKIH0KIAotLyogY29uc29sZV9zZW0gaXMgaGVsZCAqLworLyogY29uc29sZV9sb2NrIGlzIGhlbGQgKi8KIHN0YXRpYyB2b2lkIGNzaV9tKHN0cnVjdCB2Y19kYXRhICp2YykKIHsKIAlpbnQgaTsKQEAgLTE0MTUsNyArMTQxNSw3IEBACiAJcmV0dXJuIHZjX2NvbnNbZmdfY29uc29sZV0uZC0+dmNfcmVwb3J0X21vdXNlOwogfQogCi0vKiBjb25zb2xlX3NlbSBpcyBoZWxkICovCisvKiBjb25zb2xlX2xvY2sgaXMgaGVsZCAqLwogc3RhdGljIHZvaWQgc2V0X21vZGUoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgb25fb2ZmKQogewogCWludCBpOwpAQCAtMTQ4NSw3ICsxNDg1LDcgQEAKIAkJfQogfQogCi0vKiBjb25zb2xlX3NlbSBpcyBoZWxkICovCisvKiBjb25zb2xlX2xvY2sgaXMgaGVsZCAqLwogc3RhdGljIHZvaWQgc2V0dGVybV9jb21tYW5kKHN0cnVjdCB2Y19kYXRhICp2YykKIHsKIAlzd2l0Y2godmMtPnZjX3BhclswXSkgewpAQCAtMTU0NSw3ICsxNTQ1LDcgQEAKIAl9CiB9CiAKLS8qIGNvbnNvbGVfc2VtIGlzIGhlbGQgKi8KKy8qIGNvbnNvbGVfbG9jayBpcyBoZWxkICovCiBzdGF0aWMgdm9pZCBjc2lfYXQoc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBpbnQgbnIpCiB7CiAJaWYgKG5yID4gdmMtPnZjX2NvbHMgLSB2Yy0+dmNfeCkKQEAgLTE1NTUsNyArMTU1NSw3IEBACiAJaW5zZXJ0X2NoYXIodmMsIG5yKTsKIH0KIAotLyogY29uc29sZV9zZW0gaXMgaGVsZCAqLworLyogY29uc29sZV9sb2NrIGlzIGhlbGQgKi8KIHN0YXRpYyB2b2lkIGNzaV9MKHN0cnVjdCB2Y19kYXRhICp2YywgdW5zaWduZWQgaW50IG5yKQogewogCWlmIChuciA+IHZjLT52Y19yb3dzIC0gdmMtPnZjX3kpCkBAIC0xNTY2LDcgKzE1NjYsNyBAQAogCXZjLT52Y19uZWVkX3dyYXAgPSAwOwogfQogCi0vKiBjb25zb2xlX3NlbSBpcyBoZWxkICovCisvKiBjb25zb2xlX2xvY2sgaXMgaGVsZCAqLwogc3RhdGljIHZvaWQgY3NpX1Aoc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBpbnQgbnIpCiB7CiAJaWYgKG5yID4gdmMtPnZjX2NvbHMgLSB2Yy0+dmNfeCkKQEAgLTE1NzYsNyArMTU3Niw3IEBACiAJZGVsZXRlX2NoYXIodmMsIG5yKTsKIH0KIAotLyogY29uc29sZV9zZW0gaXMgaGVsZCAqLworLyogY29uc29sZV9sb2NrIGlzIGhlbGQgKi8KIHN0YXRpYyB2b2lkIGNzaV9NKHN0cnVjdCB2Y19kYXRhICp2YywgdW5zaWduZWQgaW50IG5yKQogewogCWlmIChuciA+IHZjLT52Y19yb3dzIC0gdmMtPnZjX3kpCkBAIC0xNTg3LDcgKzE1ODcsNyBAQAogCXZjLT52Y19uZWVkX3dyYXAgPSAwOwogfQogCi0vKiBjb25zb2xlX3NlbSBpcyBoZWxkIChleGNlcHQgdmlhIHZjX2luaXQtPnJlc2V0X3Rlcm1pbmFsICovCisvKiBjb25zb2xlX2xvY2sgaXMgaGVsZCAoZXhjZXB0IHZpYSB2Y19pbml0LT5yZXNldF90ZXJtaW5hbCAqLwogc3RhdGljIHZvaWQgc2F2ZV9jdXIoc3RydWN0IHZjX2RhdGEgKnZjKQogewogCXZjLT52Y19zYXZlZF94CQk9IHZjLT52Y194OwpAQCAtMTYwMyw3ICsxNjAzLDcgQEAKIAl2Yy0+dmNfc2F2ZWRfRzEJCT0gdmMtPnZjX0cxX2NoYXJzZXQ7CiB9CiAKLS8qIGNvbnNvbGVfc2VtIGlzIGhlbGQgKi8KKy8qIGNvbnNvbGVfbG9jayBpcyBoZWxkICovCiBzdGF0aWMgdm9pZCByZXN0b3JlX2N1cihzdHJ1Y3QgdmNfZGF0YSAqdmMpCiB7CiAJZ290b3h5KHZjLCB2Yy0+dmNfc2F2ZWRfeCwgdmMtPnZjX3NhdmVkX3kpOwpAQCAtMTYyNSw3ICsxNjI1LDcgQEAKIAlFU2hhc2gsIEVTc2V0RzAsIEVTc2V0RzEsIEVTcGVyY2VudCwgRVNpZ25vcmUsIEVTbm9uc3RkLAogCUVTcGFsZXR0ZSB9OwogCi0vKiBjb25zb2xlX3NlbSBpcyBoZWxkIChleGNlcHQgdmlhIHZjX2luaXQoKSkgKi8KKy8qIGNvbnNvbGVfbG9jayBpcyBoZWxkIChleGNlcHQgdmlhIHZjX2luaXQoKSkgKi8KIHN0YXRpYyB2b2lkIHJlc2V0X3Rlcm1pbmFsKHN0cnVjdCB2Y19kYXRhICp2YywgaW50IGRvX2NsZWFyKQogewogCXZjLT52Y190b3AJCT0gMDsKQEAgLTE2ODUsNyArMTY4NSw3IEBACiAJICAgIGNzaV9KKHZjLCAyKTsKIH0KIAotLyogY29uc29sZV9zZW0gaXMgaGVsZCAqLworLyogY29uc29sZV9sb2NrIGlzIGhlbGQgKi8KIHN0YXRpYyB2b2lkIGRvX2Nvbl90cm9sKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB2Y19kYXRhICp2YywgaW50IGMpCiB7CiAJLyoKQEAgLTIxMTksNyArMjExOSw3IEBACiAJcmV0dXJuIGJpc2VhcmNoKHVjcywgZG91YmxlX3dpZHRoLCBBUlJBWV9TSVpFKGRvdWJsZV93aWR0aCkgLSAxKTsKIH0KIAotLyogYWNxdWlyZXMgY29uc29sZV9zZW0gKi8KKy8qIGFjcXVpcmVzIGNvbnNvbGVfbG9jayAqLwogc3RhdGljIGludCBkb19jb25fd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7CiAjaWZkZWYgVlRfQlVGX1ZSQU1fT05MWQpAQCAtMjE0NywxMSArMjE0NywxMSBAQAogCiAJbWlnaHRfc2xlZXAoKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAl2YyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKHZjID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ2dDogYXJnaCwgZHJpdmVyX2RhdGEgaXMgTlVMTCAhXG4iKTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTIxNTksNyArMjE1OSw3IEBACiAJaWYgKCF2Y19jb25zX2FsbG9jYXRlZChjdXJyY29ucykpIHsKIAkgICAgLyogY291bGQgdGhpcyBoYXBwZW4/ICovCiAJCXByaW50a19vbmNlKCJjb25fd3JpdGU6IHR0eSAlZCBub3QgYWxsb2NhdGVkXG4iLCBjdXJyY29ucysxKTsKLQkgICAgcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCSAgICBjb25zb2xlX3VubG9jaygpOwogCSAgICByZXR1cm4gMDsKIAl9CiAKQEAgLTIzNzUsNyArMjM3NSw3IEBACiAJfQogCUZMVVNICiAJY29uc29sZV9jb25kaXRpb25hbF9zY2hlZHVsZSgpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCW5vdGlmeV91cGRhdGUodmMpOwogCXJldHVybiBuOwogI3VuZGVmIEZMVVNICkBAIC0yMzg4LDExICsyMzg4LDExIEBACiAgKiB1cyB0byBkbyB0aGUgc3dpdGNoZXMgYXN5bmNocm9ub3VzbHkgKG5lZWRlZCB3aGVuIHdlIHdhbnQKICAqIHRvIHN3aXRjaCBkdWUgdG8gYSBrZXlib2FyZCBpbnRlcnJ1cHQpLiAgU3luY2hyb25pemF0aW9uCiAgKiB3aXRoIG90aGVyIGNvbnNvbGUgY29kZSBhbmQgcHJldmVudGlvbiBvZiByZS1lbnRyYW5jeSBpcwotICogZW5zdXJlZCB3aXRoIGNvbnNvbGVfc2VtLgorICogZW5zdXJlZCB3aXRoIGNvbnNvbGVfbG9jay4KICAqLwogc3RhdGljIHZvaWQgY29uc29sZV9jYWxsYmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpCiB7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCiAJaWYgKHdhbnRfY29uc29sZSA+PSAwKSB7CiAJCWlmICh3YW50X2NvbnNvbGUgIT0gZmdfY29uc29sZSAmJgpAQCAtMjQyMiw3ICsyNDIyLDcgQEAKIAl9CiAJbm90aWZ5X3VwZGF0ZSh2Y19jb25zW2ZnX2NvbnNvbGVdLmQpOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiAKIGludCBzZXRfY29uc29sZShpbnQgbnIpCkBAIC0yNjAzLDcgKzI2MDMsNyBAQAogICovCiAKIC8qCi0gKiBHZW5lcmFsbHkgYSBiaXQgcmFjeSB3aXRoIHJlc3BlY3QgdG8gY29uc29sZV9zZW0oKS4KKyAqIEdlbmVyYWxseSBhIGJpdCByYWN5IHdpdGggcmVzcGVjdCB0byBjb25zb2xlX2xvY2soKTsuCiAgKgogICogVGhlcmUgYXJlIHNvbWUgZnVuY3Rpb25zIHdoaWNoIGRvbid0IG5lZWQgaXQuCiAgKgpAQCAtMjYyOSwxNyArMjYyOSwxNyBAQAogCXN3aXRjaCAodHlwZSkKIAl7CiAJCWNhc2UgVElPQ0xfU0VUU0VMOgotCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV9sb2NrKCk7CiAJCQlyZXQgPSBzZXRfc2VsZWN0aW9uKChzdHJ1Y3QgdGlvY2xfc2VsZWN0aW9uIF9fdXNlciAqKShwKzEpLCB0dHkpOwotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV91bmxvY2soKTsKIAkJCWJyZWFrOwogCQljYXNlIFRJT0NMX1BBU1RFU0VMOgogCQkJcmV0ID0gcGFzdGVfc2VsZWN0aW9uKHR0eSk7CiAJCQlicmVhazsKIAkJY2FzZSBUSU9DTF9VTkJMQU5LU0NSRUVOOgotCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV9sb2NrKCk7CiAJCQl1bmJsYW5rX3NjcmVlbigpOwotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV91bmxvY2soKTsKIAkJCWJyZWFrOwogCQljYXNlIFRJT0NMX1NFTExPQURMVVQ6CiAJCQlyZXQgPSBzZWxfbG9hZGx1dChwKTsKQEAgLTI2ODgsMTAgKzI2ODgsMTAgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFRJT0NMX0JMQU5LU0NSRUVOOgkvKiB1bnRpbCBleHBsaWNpdGx5IHVuYmxhbmtlZCwgbm90IG9ubHkgcG9rZWQgKi8KLQkJCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJCWNvbnNvbGVfbG9jaygpOwogCQkJaWdub3JlX3Bva2UgPSAxOwogCQkJZG9fYmxhbmtfc2NyZWVuKDApOwotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV91bmxvY2soKTsKIAkJCWJyZWFrOwogCQljYXNlIFRJT0NMX0JMQU5LRURTQ1JFRU46CiAJCQlyZXQgPSBjb25zb2xlX2JsYW5rZWQ7CkBAIC0yNzkwLDExICsyNzkwLDExIEBACiAJCXJldHVybjsKIAogCS8qIGlmIHdlIHJhY2Ugd2l0aCBjb25fY2xvc2UoKSwgdnQgbWF5IGJlIG51bGwgKi8KLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJdmMgPSB0dHktPmRyaXZlcl9kYXRhOwogCWlmICh2YykKIAkJc2V0X2N1cnNvcih2Yyk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiAKIC8qCkBAIC0yODA1LDcgKzI4MDUsNyBAQAogCXVuc2lnbmVkIGludCBjdXJyY29ucyA9IHR0eS0+aW5kZXg7CiAJaW50IHJldCA9IDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWYgKHR0eS0+ZHJpdmVyX2RhdGEgPT0gTlVMTCkgewogCQlyZXQgPSB2Y19hbGxvY2F0ZShjdXJyY29ucyk7CiAJCWlmIChyZXQgPT0gMCkgewpAQCAtMjgxMyw3ICsyODEzLDcgQEAKIAogCQkJLyogU3RpbGwgYmVpbmcgZnJlZWQgKi8KIAkJCWlmICh2Yy0+cG9ydC50dHkpIHsKLQkJCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQkJY29uc29sZV91bmxvY2soKTsKIAkJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCQkJfQogCQkJdHR5LT5kcml2ZXJfZGF0YSA9IHZjOwpAQCAtMjgyNywxMSArMjgyNywxMSBAQAogCQkJCXR0eS0+dGVybWlvcy0+Y19pZmxhZyB8PSBJVVRGODsKIAkJCWVsc2UKIAkJCQl0dHktPnRlcm1pb3MtPmNfaWZsYWcgJj0gfklVVEY4OwotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV91bmxvY2soKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjg0NCw5ICsyODQ0LDkgQEAKIHsKIAlzdHJ1Y3QgdmNfZGF0YSAqdmMgPSB0dHktPmRyaXZlcl9kYXRhOwogCUJVR19PTih2YyA9PSBOVUxMKTsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJdmMtPnBvcnQudHR5ID0gTlVMTDsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAl0dHlfc2h1dGRvd24odHR5KTsKIH0KIApAQCAtMjg5MywxMyArMjg5MywxMyBAQAogCXN0cnVjdCB2Y19kYXRhICp2YzsKIAl1bnNpZ25lZCBpbnQgY3VycmNvbnMgPSAwLCBpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCiAJaWYgKGNvbnN3aXRjaHApCiAJCWRpc3BsYXlfZGVzYyA9IGNvbnN3aXRjaHAtPmNvbl9zdGFydHVwKCk7CiAJaWYgKCFkaXNwbGF5X2Rlc2MpIHsKIAkJZmdfY29uc29sZSA9IDA7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yOTQ2LDcgKzI5NDYsNyBAQAogCXByaW50YWJsZSA9IDE7CiAJcHJpbnRrKCJcbiIpOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKICNpZmRlZiBDT05GSUdfVlRfQ09OU09MRQogCXJlZ2lzdGVyX2NvbnNvbGUoJnZ0X2NvbnNvbGVfZHJpdmVyKTsKQEAgLTI5OTQsNyArMjk5NCw3IEBACiAJaWYgKElTX0VSUih0dHkwZGV2KSkKIAkJdHR5MGRldiA9IE5VTEw7CiAJZWxzZQotCQlkZXZpY2VfY3JlYXRlX2ZpbGUodHR5MGRldiwgJmRldl9hdHRyX2FjdGl2ZSk7CisJCVdBUk5fT04oZGV2aWNlX2NyZWF0ZV9maWxlKHR0eTBkZXYsICZkZXZfYXR0cl9hY3RpdmUpIDwgMCk7CiAKIAl2Y3NfaW5pdCgpOwogCkBAIC0zMDM3LDcgKzMwMzcsNyBAQAogCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCS8qIGNoZWNrIGlmIGRyaXZlciBpcyByZWdpc3RlcmVkICovCiAJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9DT05fRFJJVkVSOyBpKyspIHsKQEAgLTMxMjIsNyArMzEyMiw3IEBACiAKIAlyZXR2YWwgPSAwOwogZXJyOgotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCW1vZHVsZV9wdXQob3duZXIpOwogCXJldHVybiByZXR2YWw7CiB9OwpAQCAtMzE3MSw3ICszMTcxLDcgQEAKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KG93bmVyKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAkvKiBjaGVjayBpZiBkcml2ZXIgaXMgcmVnaXN0ZXJlZCBhbmQgaWYgaXQgaXMgdW5iaW5kYWJsZSAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfQ09OX0RSSVZFUjsgaSsrKSB7CkBAIC0zMTg1LDcgKzMxODUsNyBAQAogCX0KIAogCWlmIChyZXR2YWwpIHsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlnb3RvIGVycjsKIAl9CiAKQEAgLTMyMDQsMTIgKzMyMDQsMTIgQEAKIAl9CiAKIAlpZiAocmV0dmFsKSB7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJZ290byBlcnI7CiAJfQogCiAJaWYgKCFjb25faXNfYm91bmQoY3N3KSkgewotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCWdvdG8gZXJyOwogCX0KIApAQCAtMzIzOCw3ICszMjM4LDcgQEAKIAlpZiAoIWNvbl9pc19ib3VuZChjc3cpKQogCQljb25fZHJpdmVyLT5mbGFnICY9IH5DT05fRFJJVkVSX0ZMQUdfSU5JVDsKIAotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCS8qIGlnbm9yZSByZXR1cm4gdmFsdWUsIGJpbmRpbmcgc2hvdWxkIG5vdCBmYWlsICovCiAJYmluZF9jb25fZHJpdmVyKGRlZmNzdywgZmlyc3QsIGxhc3QsIGRlZmx0KTsKIGVycjoKQEAgLTM1MzgsMTQgKzM1MzgsMTQgQEAKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KG93bmVyKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX0NPTl9EUklWRVI7IGkrKykgewogCQljb25fZHJpdmVyID0gJnJlZ2lzdGVyZWRfY29uX2RyaXZlcltpXTsKIAogCQkvKiBhbHJlYWR5IHJlZ2lzdGVyZWQgKi8KIAkJaWYgKGNvbl9kcml2ZXItPmNvbiA9PSBjc3cpCi0JCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJcmV0dmFsID0gLUVCVVNZOwogCX0KIAogCWlmIChyZXR2YWwpCkBAIC0zNTkyLDcgKzM1OTIsNyBAQAogCX0KIAogZXJyOgotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCW1vZHVsZV9wdXQob3duZXIpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC0zNjEzLDcgKzM2MTMsNyBAQAogewogCWludCBpLCByZXR2YWwgPSAtRU5PREVWOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCiAJLyogY2Fubm90IHVucmVnaXN0ZXIgYSBib3VuZCBkcml2ZXIgKi8KIAlpZiAoY29uX2lzX2JvdW5kKGNzdykpCkBAIC0zNjM5LDcgKzM2MzksNyBAQAogCQl9CiAJfQogZXJyOgotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfY29uX2RyaXZlcik7CkBAIC0zNjU2LDcgKzM2NTYsMTIgQEAKIAlpbnQgZXJyOwogCiAJZXJyID0gcmVnaXN0ZXJfY29uX2RyaXZlcihjc3csIGZpcnN0LCBsYXN0KTsKLQorCS8qIGlmIHdlIGdldCBhbiBidXN5IGVycm9yIHdlIHN0aWxsIHdhbnQgdG8gYmluZCB0aGUgY29uc29sZSBkcml2ZXIKKwkgKiBhbmQgcmV0dXJuIHN1Y2Nlc3MsIGFzIHdlIG1heSBoYXZlIHVuYm91bmQgdGhlIGNvbnNvbGUgZHJpdmVyCisJwqAqIGJ1dCBub3QgdW5yZWdpc3RlcmVkIGl0LgorCSovCisJaWYgKGVyciA9PSAtRUJVU1kpCisJCWVyciA9IDA7CiAJaWYgKCFlcnIpCiAJCWJpbmRfY29uX2RyaXZlcihjc3csIGZpcnN0LCBsYXN0LCBkZWZsdCk7CiAKQEAgLTM5MzQsOSArMzkzOSw5IEBACiB7CiAJaW50IHJjOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCXJjID0gc2V0X2dldF9jbWFwIChhcmcsMSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0zOTQ1LDkgKzM5NTAsOSBAQAogewogCWludCByYzsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlyYyA9IHNldF9nZXRfY21hcCAoYXJnLDApOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMzk5NCwxMiArMzk5OSwxMiBAQAogCX0gZWxzZQogCQlmb250LmRhdGEgPSBOVUxMOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlmICh2Yy0+dmNfc3ctPmNvbl9mb250X2dldCkKIAkJcmMgPSB2Yy0+dmNfc3ctPmNvbl9mb250X2dldCh2YywgJmZvbnQpOwogCWVsc2UKIAkJcmMgPSAtRU5PU1lTOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJaWYgKHJjKQogCQlnb3RvIG91dDsKQEAgLTQwNzYsMTIgKzQwODEsMTIgQEAKIAlmb250LmRhdGEgPSBtZW1kdXBfdXNlcihvcC0+ZGF0YSwgc2l6ZSk7CiAJaWYgKElTX0VSUihmb250LmRhdGEpKQogCQlyZXR1cm4gUFRSX0VSUihmb250LmRhdGEpOwotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZiAodmMtPnZjX3N3LT5jb25fZm9udF9zZXQpCiAJCXJjID0gdmMtPnZjX3N3LT5jb25fZm9udF9zZXQodmMsICZmb250LCBvcC0+ZmxhZ3MpOwogCWVsc2UKIAkJcmMgPSAtRU5PU1lTOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCWtmcmVlKGZvbnQuZGF0YSk7CiAJcmV0dXJuIHJjOwogfQpAQCAtNDEwMywxMiArNDEwOCwxMiBAQAogCWVsc2UKIAkJbmFtZVtNQVhfRk9OVF9OQU1FIC0gMV0gPSAwOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlmICh2Yy0+dmNfc3ctPmNvbl9mb250X2RlZmF1bHQpCiAJCXJjID0gdmMtPnZjX3N3LT5jb25fZm9udF9kZWZhdWx0KHZjLCAmZm9udCwgcyk7CiAJZWxzZQogCQlyYyA9IC1FTk9TWVM7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJaWYgKCFyYykgewogCQlvcC0+d2lkdGggPSBmb250LndpZHRoOwogCQlvcC0+aGVpZ2h0ID0gZm9udC5oZWlnaHQ7CkBAIC00MTI0LDcgKzQxMjksNyBAQAogCWlmICh2Yy0+dmNfbW9kZSAhPSBLRF9URVhUKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZiAoIXZjLT52Y19zdy0+Y29uX2ZvbnRfY29weSkKIAkJcmMgPSAtRU5PU1lTOwogCWVsc2UgaWYgKGNvbiA8IDAgfHwgIXZjX2NvbnNfYWxsb2NhdGVkKGNvbikpCkBAIC00MTMzLDcgKzQxMzgsNyBAQAogCQlyYyA9IDA7CiAJZWxzZQogCQlyYyA9IHZjLT52Y19zdy0+Y29uX2ZvbnRfY29weSh2YywgY29uKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3Z0L3Z0X2lvY3RsLmMgYi9kcml2ZXJzL3R0eS92dC92dF9pb2N0bC5jCmluZGV4IDZiNjhhMGYuLjEyMzVlYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3Z0L3Z0X2lvY3RsLmMKKysrIGIvZHJpdmVycy90dHkvdnQvdnRfaW9jdGwuYwpAQCAtNjQ5LDEyICs2NDksMTIgQEAKIAkJLyoKIAkJICogZXhwbGljaXRseSBibGFuay91bmJsYW5rIHRoZSBzY3JlZW4gaWYgc3dpdGNoaW5nIG1vZGVzCiAJCSAqLwotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQlpZiAoYXJnID09IEtEX1RFWFQpCiAJCQlkb191bmJsYW5rX3NjcmVlbigxKTsKIAkJZWxzZQogCQkJZG9fYmxhbmtfc2NyZWVuKDEpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCWJyZWFrOwogCiAJY2FzZSBLREdFVE1PREU6CkBAIC04OTMsNyArODkzLDcgQEAKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQl2Yy0+dnRfbW9kZSA9IHRtcDsKIAkJLyogdGhlIGZyc2lnIGlzIGlnbm9yZWQsIHNvIHdlIHNldCBpdCB0byAwICovCiAJCXZjLT52dF9tb2RlLmZyc2lnID0gMDsKQEAgLTkwMSw3ICs5MDEsNyBAQAogCQl2Yy0+dnRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChjdXJyZW50KSk7CiAJCS8qIG5vIHN3aXRjaCBpcyByZXF1aXJlZCAtLSBzYXdAc2hhZGUubXN1LnJ1ICovCiAJCXZjLT52dF9uZXd2dCA9IC0xOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCWJyZWFrOwogCX0KIApAQCAtOTEwLDkgKzkxMCw5IEBACiAJCXN0cnVjdCB2dF9tb2RlIHRtcDsKIAkJaW50IHJjOwogCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCW1lbWNweSgmdG1wLCAmdmMtPnZ0X21vZGUsIHNpemVvZihzdHJ1Y3QgdnRfbW9kZSkpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAkJcmMgPSBjb3B5X3RvX3VzZXIodXAsICZ0bXAsIHNpemVvZihzdHJ1Y3QgdnRfbW9kZSkpOwogCQlpZiAocmMpCkBAIC05NjUsOSArOTY1LDkgQEAKIAkJCXJldCA9ICAtRU5YSU87CiAJCWVsc2UgewogCQkJYXJnLS07Ci0JCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX2xvY2soKTsKIAkJCXJldCA9IHZjX2FsbG9jYXRlKGFyZyk7Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQkJaWYgKHJldCkKIAkJCQlicmVhazsKIAkJCXNldF9jb25zb2xlKGFyZyk7CkBAIC05OTAsNyArOTkwLDcgQEAKIAkJCXJldCA9IC1FTlhJTzsKIAkJZWxzZSB7CiAJCQl2c2EuY29uc29sZS0tOwotCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV9sb2NrKCk7CiAJCQlyZXQgPSB2Y19hbGxvY2F0ZSh2c2EuY29uc29sZSk7CiAJCQlpZiAocmV0ID09IDApIHsKIAkJCQlzdHJ1Y3QgdmNfZGF0YSAqbnZjOwpAQCAtMTAwMyw3ICsxMDAzLDcgQEAKIAkJCQlwdXRfcGlkKG52Yy0+dnRfcGlkKTsKIAkJCQludmMtPnZ0X3BpZCA9IGdldF9waWQodGFza19waWQoY3VycmVudCkpOwogCQkJfQotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV91bmxvY2soKTsKIAkJCWlmIChyZXQpCiAJCQkJYnJlYWs7CiAJCQkvKiBDb21tZW5jZSBzd2l0Y2ggYW5kIGxvY2sgKi8KQEAgLTEwNDQsNyArMTA0NCw3IEBACiAJCS8qCiAJCSAqIFN3aXRjaGluZy1mcm9tIHJlc3BvbnNlCiAJCSAqLwotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQlpZiAodmMtPnZ0X25ld3Z0ID49IDApIHsKIAkJCWlmIChhcmcgPT0gMCkKIAkJCQkvKgpAQCAtMTA2Myw3ICsxMDYzLDcgQEAKIAkJCQl2Yy0+dnRfbmV3dnQgPSAtMTsKIAkJCQlyZXQgPSB2Y19hbGxvY2F0ZShuZXd2dCk7CiAJCQkJaWYgKHJldCkgewotCQkJCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQkJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQkvKgpAQCAtMTA4Myw3ICsxMDgzLDcgQEAKIAkJCWlmIChhcmcgIT0gVlRfQUNLQUNRKQogCQkJCXJldCA9IC1FSU5WQUw7CiAJCX0KLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlicmVhazsKIAogCSAvKgpAQCAtMTA5NiwyMCArMTA5NiwyMCBAQAogCQl9CiAJCWlmIChhcmcgPT0gMCkgewogCQkgICAgLyogZGVhbGxvY2F0ZSBhbGwgdW51c2VkIGNvbnNvbGVzLCBidXQgbGVhdmUgMCAqLwotCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV9sb2NrKCk7CiAJCQlmb3IgKGk9MTsgaTxNQVhfTlJfQ09OU09MRVM7IGkrKykKIAkJCQlpZiAoISBWVF9CVVNZKGkpKQogCQkJCQl2Y19kZWFsbG9jYXRlKGkpOwotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV91bmxvY2soKTsKIAkJfSBlbHNlIHsKIAkJCS8qIGRlYWxsb2NhdGUgYSBzaW5nbGUgY29uc29sZSwgaWYgcG9zc2libGUgKi8KIAkJCWFyZy0tOwogCQkJaWYgKFZUX0JVU1koYXJnKSkKIAkJCQlyZXQgPSAtRUJVU1k7CiAJCQllbHNlIGlmIChhcmcpIHsJCQkgICAgICAvKiBsZWF2ZSAwICovCi0JCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQkJCWNvbnNvbGVfbG9jaygpOwogCQkJCXZjX2RlYWxsb2NhdGUoYXJnKTsKLQkJCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQkJY29uc29sZV91bmxvY2soKTsKIAkJCX0KIAkJfQogCQlicmVhazsKQEAgLTExMjYsNyArMTEyNiw3IEBACiAJCSAgICBnZXRfdXNlcihjYywgJnZ0c2l6ZXMtPnZfY29scykpCiAJCQlyZXQgPSAtRUZBVUxUOwogCQllbHNlIHsKLQkJCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJCWNvbnNvbGVfbG9jaygpOwogCQkJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9DT05TT0xFUzsgaSsrKSB7CiAJCQkJdmMgPSB2Y19jb25zW2ldLmQ7CiAKQEAgLTExMzUsNyArMTEzNSw3IEBACiAJCQkJCXZjX3Jlc2l6ZSh2Y19jb25zW2ldLmQsIGNjLCBsbCk7CiAJCQkJfQogCQkJfQotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV91bmxvY2soKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC0xMTg3LDE0ICsxMTg3LDE0IEBACiAJCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfQ09OU09MRVM7IGkrKykgewogCQkJaWYgKCF2Y19jb25zW2ldLmQpCiAJCQkJY29udGludWU7Ci0JCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX2xvY2soKTsKIAkJCWlmICh2bGluKQogCQkJCXZjX2NvbnNbaV0uZC0+dmNfc2Nhbl9saW5lcyA9IHZsaW47CiAJCQlpZiAoY2xpbikKIAkJCQl2Y19jb25zW2ldLmQtPnZjX2ZvbnQuaGVpZ2h0ID0gY2xpbjsKIAkJCXZjX2NvbnNbaV0uZC0+dmNfcmVzaXplX3VzZXIgPSAxOwogCQkJdmNfcmVzaXplKHZjX2NvbnNbaV0uZCwgY2MsIGxsKTsKLQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMTM2Nyw3ICsxMzY3LDcgQEAKIAlzdHJ1Y3QgdmNfZGF0YSAqdmM7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAl2YyA9IHZjX2Nvbi0+ZDsKIAlpZiAodmMpIHsKIAkJdHR5ID0gdmMtPnBvcnQudHR5OwpAQCAtMTM3OSw3ICsxMzc5LDcgQEAKIAkJCV9fZG9fU0FLKHR0eSk7CiAJCXJlc2V0X3ZjKHZjKTsKIAl9Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCkBAIC0xNzM3LDEwICsxNzM3LDEwIEBACiB7CiAJaW50IHByZXY7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJLyogR3JhcGhpY3MgbW9kZSAtIHVwIHRvIFggKi8KIAlpZiAoZGlzYWJsZV92dF9zd2l0Y2gpIHsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm4gMDsKIAl9CiAJcHJldiA9IGZnX2NvbnNvbGU7CkBAIC0xNzQ4LDcgKzE3NDgsNyBAQAogCWlmIChhbGxvYyAmJiB2Y19hbGxvY2F0ZSh2dCkpIHsKIAkJLyogd2UgY2FuJ3QgaGF2ZSBhIGZyZWUgVkMgZm9yIG5vdy4gVG9vIGJhZCwKIAkJICogd2UgZG9uJ3Qgd2FudCB0byBtZXNzIHRoZSBzY3JlZW4gZm9yIG5vdy4gKi8KLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKQEAgLTE3NTgsMTAgKzE3NTgsMTAgQEAKIAkJICogTGV0IHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGtub3cgc28gaXQgY2FuIGRlY2lkZQogCQkgKiB3aGF0IHRvIGRvLgogCQkgKi8KLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJdHR5X2xvY2soKTsKIAlpZiAodnRfd2FpdGFjdGl2ZSh2dCArIDEpKSB7CiAJCXByX2RlYnVnKCJTdXNwZW5kOiBDYW4ndCBzd2l0Y2ggVkNzLiIpOwpAQCAtMTc4MSw4ICsxNzgxLDggQEAKICAqLwogdm9pZCBwbV9zZXRfdnRfc3dpdGNoKGludCBkb19zd2l0Y2gpCiB7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWRpc2FibGVfdnRfc3dpdGNoID0gIWRvX3N3aXRjaDsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIH0KIEVYUE9SVF9TWU1CT0wocG1fc2V0X3Z0X3N3aXRjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKaW5kZXggZDZlZGU5OC4uNGFiNDlkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwpAQCAtMTYwNyw2ICsxNjA3LDcgQEAKIAl7IE5PS0lBX1BDU1VJVEVfQUNNX0lORk8oMHgwMTU0KSwgfSwgLyogTm9raWEgNTgwMCBYcHJlc3NNdXNpYyAqLwogCXsgTk9LSUFfUENTVUlURV9BQ01fSU5GTygweDA0Y2UpLCB9LCAvKiBOb2tpYSBFOTAgKi8KIAl7IE5PS0lBX1BDU1VJVEVfQUNNX0lORk8oMHgwMWQ0KSwgfSwgLyogTm9raWEgRTU1ICovCisJeyBOT0tJQV9QQ1NVSVRFX0FDTV9JTkZPKDB4MDMwMiksIH0sIC8qIE5va2lhIE44ICovCiAJeyBTQU1TVU5HX1BDU1VJVEVfQUNNX0lORk8oMHg2NjUxKSwgfSwgLyogU2Ftc3VuZyBHVGk4NTEwIChJTk5PVjgpICovCiAKIAkvKiBOT1RFOiBub24tTm9raWEgQ09NTS9BQ00vMHhmZiBpcyBsaWtlbHkgTVNGVCBSTkRJUy4uLiBOT1QgYSBtb2RlbSEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYwppbmRleCA2ZWU0NDUxLi40NzA4NWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jCkBAIC0zNDIsNyArMzQyLDcgQEAKIAkJZ290byBvdXRucDsKIAl9CiAKLQlpZiAoIWZpbGUtPmZfZmxhZ3MgJiYgT19OT05CTE9DSykKKwlpZiAoIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpCiAJCXIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGVzYy0+d2FpdCwgIXRlc3RfYml0KFdETV9JTl9VU0UsCiAJCQkJCQkJCSZkZXNjLT5mbGFncykpOwogCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZwppbmRleCBiY2MyNDc3Li4xOGQwMmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCkBAIC0xMjMsOSArMTIzLDkgQEAKIAogY29uZmlnIFVTQl9PVEdfV0hJVEVMSVNUCiAJYm9vbCAiUmVseSBvbiBPVEcgVGFyZ2V0ZWQgUGVyaXBoZXJhbHMgTGlzdCIKLQlkZXBlbmRzIG9uIFVTQl9PVEcgfHwgRU1CRURERUQKKwlkZXBlbmRzIG9uIFVTQl9PVEcgfHwgRVhQRVJUCiAJZGVmYXVsdCB5IGlmIFVTQl9PVEcKLQlkZWZhdWx0IG4gaWYgRU1CRURERUQKKwlkZWZhdWx0IG4gaWYgRVhQRVJUCiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZSAib3RnX3doaXRlbGlzdC5oIiBmaWxlIHdpbGwgYmUgdXNlZCBhcyBhCiAJICBwcm9kdWN0IHdoaXRlbGlzdCwgc28gVVNCIHBlcmlwaGVyYWxzIG5vdCBsaXN0ZWQgdGhlcmUgd2lsbCBiZQpAQCAtMTQxLDcgKzE0MSw3IEBACiAKIGNvbmZpZyBVU0JfT1RHX0JMQUNLTElTVF9IVUIKIAlib29sICJEaXNhYmxlIGV4dGVybmFsIGh1YnMiCi0JZGVwZW5kcyBvbiBVU0JfT1RHIHx8IEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfT1RHIHx8IEVYUEVSVAogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIExpbnV4IHdpbGwgcmVmdXNlIHRvIGVudW1lcmF0ZQogCSAgZXh0ZXJuYWwgaHVicy4gIE9URyBob3N0cyBhcmUgYWxsb3dlZCB0byByZWR1Y2UgaGFyZHdhcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwppbmRleCA5ZGEyNTA1Li5kZjUwMmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCkBAIC0xOTIsMTIgKzE5MiwxMiBAQAogCWVwX2Rldi0+ZGV2LnBhcmVudCA9IHBhcmVudDsKIAllcF9kZXYtPmRldi5yZWxlYXNlID0gZXBfZGV2aWNlX3JlbGVhc2U7CiAJZGV2X3NldF9uYW1lKCZlcF9kZXYtPmRldiwgImVwXyUwMngiLCBlbmRwb2ludC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKLQlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJmVwX2Rldi0+ZGV2KTsKIAogCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcigmZXBfZGV2LT5kZXYpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZXJyb3JfcmVnaXN0ZXI7CiAKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJmVwX2Rldi0+ZGV2KTsKIAllbmRwb2ludC0+ZXBfZGV2ID0gZXBfZGV2OwogCXJldHVybiByZXR2YWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKaW5kZXggYjU1ZDQ2MC4uZjcxZThlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKQEAgLTQwNSw3ICs0MDUsMTIgQEAKIAkJCXJldHVybiByZXR2YWw7CiAJfQogCi0Jc3luY2hyb25pemVfaXJxKHBjaV9kZXYtPmlycSk7CisJLyogSWYgTVNJLVggaXMgZW5hYmxlZCwgdGhlIGRyaXZlciB3aWxsIGhhdmUgc3luY2hyb25pemVkIGFsbCB2ZWN0b3JzCisJICogaW4gcGNpX3N1c3BlbmQoKS4gSWYgTVNJIG9yIGxlZ2FjeSBQQ0kgaXMgZW5hYmxlZCwgdGhhdCB3aWxsIGJlCisJICogc3luY2hyb25pemVkIGhlcmUuCisJICovCisJaWYgKCFoY2QtPm1zaXhfZW5hYmxlZCkKKwkJc3luY2hyb25pemVfaXJxKHBjaV9kZXYtPmlycSk7CiAKIAkvKiBEb3duc3RyZWFtIHBvcnRzIGZyb20gdGhpcyByb290IGh1YiBzaG91bGQgYWxyZWFkeSBiZSBxdWllc2NlZCwgc28KIAkgKiB0aGVyZSB3aWxsIGJlIG5vIERNQSBhY3Rpdml0eS4gIE5vdyB3ZSBjYW4gc2h1dCBkb3duIHRoZSB1cHN0cmVhbQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKaW5kZXggNmE5NTAxNy4uZTkzNWY3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCkBAIC0xOTU1LDcgKzE5NTUsNiBAQAogCiAJZGV2X2RiZygmcmhkZXYtPmRldiwgInVzYiAlcyVzXG4iLAogCQkJKG1zZy5ldmVudCAmIFBNX0VWRU5UX0FVVE8gPyAiYXV0by0iIDogIiIpLCAicmVzdW1lIik7Ci0JY2xlYXJfYml0KEhDRF9GTEFHX1dBS0VVUF9QRU5ESU5HLCAmaGNkLT5mbGFncyk7CiAJaWYgKCFoY2QtPmRyaXZlci0+YnVzX3Jlc3VtZSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJaWYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfUlVOTklORykKQEAgLTE5NjMsNiArMTk2Miw3IEBACiAKIAloY2QtPnN0YXRlID0gSENfU1RBVEVfUkVTVU1JTkc7CiAJc3RhdHVzID0gaGNkLT5kcml2ZXItPmJ1c19yZXN1bWUoaGNkKTsKKwljbGVhcl9iaXQoSENEX0ZMQUdfV0FLRVVQX1BFTkRJTkcsICZoY2QtPmZsYWdzKTsKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJLyogVFJTTVJDWSA9IDEwIG1zZWMgKi8KIAkJbXNsZWVwKDEwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IGI5OGVmYWUuLjBmMjk5YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtNjc2LDYgKzY3Niw4IEBACiBzdGF0aWMgdm9pZCBodWJfYWN0aXZhdGUoc3RydWN0IHVzYl9odWIgKmh1YiwgZW51bSBodWJfYWN0aXZhdGlvbl90eXBlIHR5cGUpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYgPSBodWItPmhkZXY7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKwlpbnQgcmV0OwogCWludCBwb3J0MTsKIAlpbnQgc3RhdHVzOwogCWJvb2wgbmVlZF9kZWJvdW5jZV9kZWxheSA9IGZhbHNlOwpAQCAtNzE0LDYgKzcxNiwyNSBAQAogCQkJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX25vX3Jlc3VtZSgKIAkJCQkJdG9fdXNiX2ludGVyZmFjZShodWItPmludGZkZXYpKTsKIAkJCXJldHVybjsJCS8qIENvbnRpbnVlcyBhdCBpbml0MjogYmVsb3cgKi8KKwkJfSBlbHNlIGlmICh0eXBlID09IEhVQl9SRVNFVF9SRVNVTUUpIHsKKwkJCS8qIFRoZSBpbnRlcm5hbCBob3N0IGNvbnRyb2xsZXIgc3RhdGUgZm9yIHRoZSBodWIgZGV2aWNlCisJCQkgKiBtYXkgYmUgZ29uZSBhZnRlciBhIGhvc3QgcG93ZXIgbG9zcyBvbiBzeXN0ZW0gcmVzdW1lLgorCQkJICogVXBkYXRlIHRoZSBkZXZpY2UncyBpbmZvIHNvIHRoZSBIVyBrbm93cyBpdCdzIGEgaHViLgorCQkJICovCisJCQloY2QgPSBidXNfdG9faGNkKGhkZXYtPmJ1cyk7CisJCQlpZiAoaGNkLT5kcml2ZXItPnVwZGF0ZV9odWJfZGV2aWNlKSB7CisJCQkJcmV0ID0gaGNkLT5kcml2ZXItPnVwZGF0ZV9odWJfZGV2aWNlKGhjZCwgaGRldiwKKwkJCQkJCSZodWItPnR0LCBHRlBfTk9JTyk7CisJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJZGV2X2VycihodWItPmludGZkZXYsICJIb3N0IG5vdCAiCisJCQkJCQkJImFjY2VwdGluZyBodWIgaW5mbyAiCisJCQkJCQkJInVwZGF0ZS5cbiIpOworCQkJCQlkZXZfZXJyKGh1Yi0+aW50ZmRldiwgIkxTL0ZTIGRldmljZXMgIgorCQkJCQkJCSJhbmQgaHVicyBtYXkgbm90IHdvcmsgIgorCQkJCQkJCSJ1bmRlciB0aGlzIGh1YlxuLiIpOworCQkJCX0KKwkJCX0KKwkJCWh1Yl9wb3dlcl9vbihodWIsIHRydWUpOwogCQl9IGVsc2UgewogCQkJaHViX3Bvd2VyX29uKGh1YiwgdHJ1ZSk7CiAJCX0KQEAgLTI2NjAsMTcgKzI2ODEsMTMgQEAKIAogCW11dGV4X2xvY2soJnVzYl9hZGRyZXNzMF9tdXRleCk7CiAKLQlpZiAoIXVkZXYtPmNvbmZpZyAmJiBvbGRzcGVlZCA9PSBVU0JfU1BFRURfU1VQRVIpIHsKLQkJLyogRG9uJ3QgcmVzZXQgVVNCIDMuMCBkZXZpY2VzIGR1cmluZyBhbiBpbml0aWFsIHNldHVwICovCi0JCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVkZXYsIFVTQl9TVEFURV9ERUZBVUxUKTsKLQl9IGVsc2UgewotCQkvKiBSZXNldCB0aGUgZGV2aWNlOyBmdWxsIHNwZWVkIG1heSBtb3JwaCB0byBoaWdoIHNwZWVkICovCi0JCS8qIEZJWE1FIGEgVVNCIDIuMCBkZXZpY2UgbWF5IG1vcnBoIGludG8gU3VwZXJTcGVlZCBvbiByZXNldC4gKi8KLQkJcmV0dmFsID0gaHViX3BvcnRfcmVzZXQoaHViLCBwb3J0MSwgdWRldiwgZGVsYXkpOwotCQlpZiAocmV0dmFsIDwgMCkJCS8qIGVycm9yIG9yIGRpc2Nvbm5lY3QgKi8KLQkJCWdvdG8gZmFpbDsKLQkJLyogc3VjY2Vzcywgc3BlZWQgaXMga25vd24gKi8KLQl9CisJLyogUmVzZXQgdGhlIGRldmljZTsgZnVsbCBzcGVlZCBtYXkgbW9ycGggdG8gaGlnaCBzcGVlZCAqLworCS8qIEZJWE1FIGEgVVNCIDIuMCBkZXZpY2UgbWF5IG1vcnBoIGludG8gU3VwZXJTcGVlZCBvbiByZXNldC4gKi8KKwlyZXR2YWwgPSBodWJfcG9ydF9yZXNldChodWIsIHBvcnQxLCB1ZGV2LCBkZWxheSk7CisJaWYgKHJldHZhbCA8IDApCQkvKiBlcnJvciBvciBkaXNjb25uZWN0ICovCisJCWdvdG8gZmFpbDsKKwkvKiBzdWNjZXNzLCBzcGVlZCBpcyBrbm93biAqLworCiAJcmV0dmFsID0gLUVOT0RFVjsKIAogCWlmIChvbGRzcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTiAmJiBvbGRzcGVlZCAhPSB1ZGV2LT5zcGVlZCkgewpAQCAtMjczMiw2ICsyNzQ5LDExIEBACiAJCXVkZXYtPnR0cG9ydCA9IGhkZXYtPnR0cG9ydDsKIAl9IGVsc2UgaWYgKHVkZXYtPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdICiAJCQkmJiBoZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgeworCQlpZiAoIWh1Yi0+dHQuaHViKSB7CisJCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJwYXJlbnQgaHViIGhhcyBubyBUVFxuIik7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJZ290byBmYWlsOworCQl9CiAJCXVkZXYtPnR0ID0gJmh1Yi0+dHQ7CiAJCXVkZXYtPnR0cG9ydCA9IHBvcnQxOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCmluZGV4IDQ0YzU5NTQuLjgxY2U2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYwpAQCAtNDgsNiArNDgsMTAgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwNGI0LCAweDA1MjYpLCAuZHJpdmVyX2luZm8gPQogCQkJVVNCX1FVSVJLX0NPTkZJR19JTlRGX1NUUklOR1MgfSwKIAorCS8qIFNhbXN1bmcgQW5kcm9pZCBwaG9uZSBtb2RlbSAtIElEIGNvbmZsaWN0IHdpdGggU1BILUk1MDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGU4LCAweDY2MDEpLCAuZHJpdmVyX2luZm8gPQorCQkJVVNCX1FVSVJLX0NPTkZJR19JTlRGX1NUUklOR1MgfSwKKwogCS8qIFJvbGFuZCBTQy04ODIwICovCiAJeyBVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDA3KSwgLmRyaXZlcl9pbmZvID0gVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSB9LAogCkBAIC02OCw2ICs3MiwxMCBAQAogCS8qIE0tU3lzdGVtcyBGbGFzaCBEaXNrIFBpb25lZXJzICovCiAJeyBVU0JfREVWSUNFKDB4MDhlYywgMHgxMDAwKSwgLmRyaXZlcl9pbmZvID0gVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSB9LAogCisJLyogS2V5dG91Y2ggUVdFUlRZIFBhbmVsIGtleWJvYXJkICovCisJeyBVU0JfREVWSUNFKDB4MDkyNiwgMHgzMzMzKSwgLmRyaXZlcl9pbmZvID0KKwkJCVVTQl9RVUlSS19DT05GSUdfSU5URl9TVFJJTkdTIH0sCisKIAkvKiBYLVJpdGUvR3JldGFnLU1hY2JldGggRXllLU9uZSBQcm8gZGlzcGxheSBjb2xvcmltZXRlciAqLwogCXsgVVNCX0RFVklDRSgweDA5NzEsIDB4MjAwMCksIC5kcml2ZXJfaW5mbyA9IFVTQl9RVUlSS19OT19TRVRfSU5URiB9LAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCmluZGV4IDFkYzk3MzkuLmQ1MDA5OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCkBAIC01MDksNyArNTA5LDcgQEAKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCiBjb25maWcgVVNCX0dBREdFVF9FRzIwVAotCWJvb2xlYW4gIkludGVsIEVHMjBUKFRvcGNsaWZmKSBVU0IgRGV2aWNlIGNvbnRyb2xsZXIiCisJYm9vbGVhbiAiSW50ZWwgRUcyMFQgUENIL09LSSBTRU1JQ09ORFVDVE9SIE1MNzIxMyBJT0ggVURDIgogCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECiAJaGVscApAQCAtNTI1LDYgKzUyNSwxMSBAQAogCSAgVGhpcyBkcml2ZXIgZG9zZSBub3Qgc3VwcG9ydCBpbnRlcnJ1cHQgdHJhbnNmZXIgb3IgaXNvY2hyb25vdXMKIAkgIHRyYW5zZmVyIG1vZGVzLgogCisJICBUaGlzIGRyaXZlciBhbHNvIGNhbiBiZSB1c2VkIGZvciBPS0kgU0VNSUNPTkRVQ1RPUidzIE1MNzIxMyB3aGljaCBpcworCSAgZm9yIElWSShJbi1WZWhpY2xlIEluZm90YWlubWVudCkgdXNlLgorCSAgTUw3MjEzIGlzIGNvbXBhbmlvbiBjaGlwIGZvciBJbnRlbCBBdG9tIEU2eHggc2VyaWVzLgorCSAgTUw3MjEzIGlzIGNvbXBsZXRlbHkgY29tcGF0aWJsZSBmb3IgSW50ZWwgRUcyMFQgUENILgorCiBjb25maWcgVVNCX0VHMjBUCiAJdHJpc3RhdGUKIAlkZXBlbmRzIG9uIFVTQl9HQURHRVRfRUcyMFQKQEAgLTU0MSw2ICs1NDYsOCBAQAogCSAgY2kxM3h4eF91ZGMgY29yZS4KIAkgIFRoaXMgZHJpdmVyIGRlcGVuZHMgb24gT1RHIGRyaXZlciBmb3IgUEhZIGluaXRpYWxpemF0aW9uLAogCSAgY2xvY2sgbWFuYWdlbWVudCwgcG93ZXJpbmcgdXAgVkJVUywgYW5kIHBvd2VyIG1hbmFnZW1lbnQuCisJICBUaGlzIGRyaXZlciBpcyBub3Qgc3VwcG9ydGVkIG9uIGJvYXJkcyBsaWtlIHRyb3V0IHdoaWNoCisJICBoYXMgYW4gZXh0ZXJuYWwgUEhZLgogCiAJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQogCSAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImNpMTN4eHhfbXNtIiBhbmQgZm9yY2UgYWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCmluZGV4IDMxNjU2YTIuLmExYzY3YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCkBAIC03NiwxMCArNzYsMjEgQEAKIAogLyogY29udHJvbCBlbmRwb2ludCBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgotY3RybF9lbmRwdF9kZXNjID0geworY3RybF9lbmRwdF9vdXRfZGVzYyA9IHsKIAkuYkxlbmd0aCAgICAgICAgID0gVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9FTkRQT0lOVCwKIAorCS5iRW5kcG9pbnRBZGRyZXNzID0gVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcyAgICA9IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wsCisJLndNYXhQYWNrZXRTaXplICA9IGNwdV90b19sZTE2KENUUkxfUEFZTE9BRF9NQVgpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgorY3RybF9lbmRwdF9pbl9kZXNjID0geworCS5iTGVuZ3RoICAgICAgICAgPSBVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgICAgPSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MLAogCS53TWF4UGFja2V0U2l6ZSAgPSBjcHVfdG9fbGUxNihDVFJMX1BBWUxPQURfTUFYKSwKIH07CkBAIC0yNjUsMTAgKzI3NiwxMCBAQAogCWh3X2Jhbmsuc2l6ZSAvPSBzaXplb2YodTMyKTsKIAogCXJlZyA9IGh3X2FyZWFkKEFCU19EQ0NQQVJBTVMsIERDQ1BBUkFNU19ERU4pID4+IGZmc19ucihEQ0NQQVJBTVNfREVOKTsKLQlpZiAocmVnID09IDAgfHwgcmVnID4gRU5EUFRfTUFYKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlod19lcF9tYXggPSByZWcgKiAyOyAgIC8qIGNhY2hlIGh3IEVORFBUX01BWCAqLwogCi0JaHdfZXBfbWF4ID0gcmVnOyAgIC8qIGNhY2hlIGh3IEVORFBUX01BWCAqLworCWlmIChod19lcF9tYXggPT0gMCB8fCBod19lcF9tYXggPiBFTkRQVF9NQVgpCisJCXJldHVybiAtRU5PREVWOwogCiAJLyogc2V0dXAgbG9jayBtb2RlID8gKi8KIApAQCAtMTE5NywxNiArMTIwOCwxNyBAQAogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKHVkYy0+bG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IDA7IGkgPCBod19lcF9tYXg7IGkrKykgewotCQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwID0gJnVkYy0+Y2kxM3h4eF9lcFtpXTsKKwlmb3IgKGkgPSAwOyBpIDwgaHdfZXBfbWF4LzI7IGkrKykgeworCQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwUnggPSAmdWRjLT5jaTEzeHh4X2VwW2ldOworCQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwVHggPSAmdWRjLT5jaTEzeHh4X2VwW2kgKyBod19lcF9tYXgvMl07CiAJCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIFBBR0VfU0laRSAtIG4sCiAJCQkgICAgICAgIkVQPSUwMmk6IFJYPSUwOFggVFg9JTA4WFxuIiwKLQkJCSAgICAgICBpLCAodTMyKW1FcC0+cWhbUlhdLmRtYSwgKHUzMiltRXAtPnFoW1RYXS5kbWEpOworCQkJICAgICAgIGksICh1MzIpbUVwUngtPnFoLmRtYSwgKHUzMiltRXBUeC0+cWguZG1hKTsKIAkJZm9yIChqID0gMDsgaiA8IChzaXplb2Yoc3RydWN0IGNpMTN4eHhfcWgpL3NpemVvZih1MzIpKTsgaisrKSB7CiAJCQluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLAogCQkJCSAgICAgICAiICUwNFg6ICAgICUwOFggICAgJTA4WFxuIiwgaiwKLQkJCQkgICAgICAgKigodTMyICopbUVwLT5xaFtSWF0ucHRyICsgaiksCi0JCQkJICAgICAgICooKHUzMiAqKW1FcC0+cWhbVFhdLnB0ciArIGopKTsKKwkJCQkgICAgICAgKigodTMyICopbUVwUngtPnFoLnB0ciArIGopLAorCQkJCSAgICAgICAqKCh1MzIgKiltRXBUeC0+cWgucHRyICsgaikpOwogCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7CkBAIC0xMjkzLDcgKzEzMDUsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAgICpwdHIgPSBOVUxMOwogCXN0cnVjdCBjaTEzeHh4X3JlcSAqcmVxID0gTlVMTDsKLQl1bnNpZ25lZCBpLCBqLCBrLCBuID0gMCwgcVNpemUgPSBzaXplb2Yoc3RydWN0IGNpMTN4eHhfdGQpL3NpemVvZih1MzIpOworCXVuc2lnbmVkIGksIGosIG4gPSAwLCBxU2l6ZSA9IHNpemVvZihzdHJ1Y3QgY2kxM3h4eF90ZCkvc2l6ZW9mKHUzMik7CiAKIAlkYmdfdHJhY2UoIlslc10gJXBcbiIsIF9fZnVuY19fLCBidWYpOwogCWlmIChhdHRyID09IE5VTEwgfHwgYnVmID09IE5VTEwpIHsKQEAgLTEzMDMsMjIgKzEzMTUsMjAgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKHVkYy0+bG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBod19lcF9tYXg7IGkrKykKLQkJZm9yIChrID0gUlg7IGsgPD0gVFg7IGsrKykKLQkJCWxpc3RfZm9yX2VhY2gocHRyLCAmdWRjLT5jaTEzeHh4X2VwW2ldLnFoW2tdLnF1ZXVlKQotCQkJewotCQkJCXJlcSA9IGxpc3RfZW50cnkocHRyLAotCQkJCQkJIHN0cnVjdCBjaTEzeHh4X3JlcSwgcXVldWUpOworCQlsaXN0X2Zvcl9lYWNoKHB0ciwgJnVkYy0+Y2kxM3h4eF9lcFtpXS5xaC5xdWV1ZSkKKwkJeworCQkJcmVxID0gbGlzdF9lbnRyeShwdHIsIHN0cnVjdCBjaTEzeHh4X3JlcSwgcXVldWUpOwogCisJCQluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLAorCQkJCQkiRVA9JTAyaTogVEQ9JTA4WCAlc1xuIiwKKwkJCQkJaSAlIGh3X2VwX21heC8yLCAodTMyKXJlcS0+ZG1hLAorCQkJCQkoKGkgPCBod19lcF9tYXgvMikgPyAiUlgiIDogIlRYIikpOworCisJCQlmb3IgKGogPSAwOyBqIDwgcVNpemU7IGorKykKIAkJCQluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLAotCQkJCQkgICAgICAgIkVQPSUwMmk6IFREPSUwOFggJXNcbiIsCi0JCQkJCSAgICAgICBpLCAodTMyKXJlcS0+ZG1hLAotCQkJCQkgICAgICAgKChrID09IFJYKSA/ICJSWCIgOiAiVFgiKSk7Ci0KLQkJCQlmb3IgKGogPSAwOyBqIDwgcVNpemU7IGorKykKLQkJCQkJbiArPSBzY25wcmludGYoYnVmICsgbiwgUEFHRV9TSVpFIC0gbiwKLQkJCQkJCSAgICAgICAiICUwNFg6ICAgICUwOFhcbiIsIGosCi0JCQkJCQkgICAgICAgKigodTMyICopcmVxLT5wdHIgKyBqKSk7Ci0JCQl9CisJCQkJCQkiICUwNFg6ICAgICUwOFhcbiIsIGosCisJCQkJCQkqKCh1MzIgKilyZXEtPnB0ciArIGopKTsKKwkJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gbjsKQEAgLTE0NjcsMTIgKzE0NzcsMTIgQEAKIAkgKiAgQXQgdGhpcyBwb2ludCBpdCdzIGd1YXJhbnRlZWQgZXhjbHVzaXZlIGFjY2VzcyB0byBxaGVhZAogCSAqICAoZW5kcHQgaXMgbm90IHByaW1lZCkgc28gaXQncyBubyBuZWVkIHRvIHVzZSB0cmlwd2lyZQogCSAqLwotCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+dGQubmV4dCAgID0gbVJlcS0+ZG1hOyAgICAvKiBURVJNSU5BVEUgPSAwICovCi0JbUVwLT5xaFttRXAtPmRpcl0ucHRyLT50ZC50b2tlbiAmPSB+VERfU1RBVFVTOyAgIC8qIGNsZWFyIHN0YXR1cyAqLworCW1FcC0+cWgucHRyLT50ZC5uZXh0ICAgPSBtUmVxLT5kbWE7ICAgIC8qIFRFUk1JTkFURSA9IDAgKi8KKwltRXAtPnFoLnB0ci0+dGQudG9rZW4gJj0gflREX1NUQVRVUzsgICAvKiBjbGVhciBzdGF0dXMgKi8KIAlpZiAobVJlcS0+cmVxLnplcm8gPT0gMCkKLQkJbUVwLT5xaFttRXAtPmRpcl0ucHRyLT5jYXAgfD0gIFFIX1pMVDsKKwkJbUVwLT5xaC5wdHItPmNhcCB8PSAgUUhfWkxUOwogCWVsc2UKLQkJbUVwLT5xaFttRXAtPmRpcl0ucHRyLT5jYXAgJj0gflFIX1pMVDsKKwkJbUVwLT5xaC5wdHItPmNhcCAmPSB+UUhfWkxUOwogCiAJd21iKCk7ICAgLyogc3luY2hyb25pemUgYmVmb3JlIGVwIHByaW1lICovCiAKQEAgLTE1NDIsMTEgKzE1NTIsMTEgQEAKIAogCWh3X2VwX2ZsdXNoKG1FcC0+bnVtLCBtRXAtPmRpcik7CiAKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKSkgeworCXdoaWxlICghbGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpIHsKIAogCQkvKiBwb3Agb2xkZXN0IHJlcXVlc3QgKi8KIAkJc3RydWN0IGNpMTN4eHhfcmVxICptUmVxID0gXAotCQkJbGlzdF9lbnRyeShtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZS5uZXh0LAorCQkJbGlzdF9lbnRyeShtRXAtPnFoLnF1ZXVlLm5leHQsCiAJCQkJICAgc3RydWN0IGNpMTN4eHhfcmVxLCBxdWV1ZSk7CiAJCWxpc3RfZGVsX2luaXQoJm1SZXEtPnF1ZXVlKTsKIAkJbVJlcS0+cmVxLnN0YXR1cyA9IC1FU0hVVERPV047CkBAIC0xNTcxLDggKzE1ODEsNiBAQAogewogCXN0cnVjdCB1c2JfZXAgKmVwOwogCXN0cnVjdCBjaTEzeHh4ICAgICp1ZGMgPSBjb250YWluZXJfb2YoZ2FkZ2V0LCBzdHJ1Y3QgY2kxM3h4eCwgZ2FkZ2V0KTsKLQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwID0gY29udGFpbmVyX29mKGdhZGdldC0+ZXAwLAotCQkJCQkgICAgICBzdHJ1Y3QgY2kxM3h4eF9lcCwgZXApOwogCiAJdHJhY2UoIiVwIiwgZ2FkZ2V0KTsKIApAQCAtMTU4Myw3ICsxNTkxLDggQEAKIAlnYWRnZXRfZm9yX2VhY2hfZXAoZXAsIGdhZGdldCkgewogCQl1c2JfZXBfZmlmb19mbHVzaChlcCk7CiAJfQotCXVzYl9lcF9maWZvX2ZsdXNoKGdhZGdldC0+ZXAwKTsKKwl1c2JfZXBfZmlmb19mbHVzaCgmdWRjLT5lcDBvdXQuZXApOworCXVzYl9lcF9maWZvX2ZsdXNoKCZ1ZGMtPmVwMGluLmVwKTsKIAogCXVkYy0+ZHJpdmVyLT5kaXNjb25uZWN0KGdhZGdldCk7CiAKQEAgLTE1OTEsMTEgKzE2MDAsMTIgQEAKIAlnYWRnZXRfZm9yX2VhY2hfZXAoZXAsIGdhZGdldCkgewogCQl1c2JfZXBfZGlzYWJsZShlcCk7CiAJfQotCXVzYl9lcF9kaXNhYmxlKGdhZGdldC0+ZXAwKTsKKwl1c2JfZXBfZGlzYWJsZSgmdWRjLT5lcDBvdXQuZXApOworCXVzYl9lcF9kaXNhYmxlKCZ1ZGMtPmVwMGluLmVwKTsKIAotCWlmIChtRXAtPnN0YXR1cyAhPSBOVUxMKSB7Ci0JCXVzYl9lcF9mcmVlX3JlcXVlc3QoZ2FkZ2V0LT5lcDAsIG1FcC0+c3RhdHVzKTsKLQkJbUVwLT5zdGF0dXMgPSBOVUxMOworCWlmICh1ZGMtPnN0YXR1cyAhPSBOVUxMKSB7CisJCXVzYl9lcF9mcmVlX3JlcXVlc3QoJnVkYy0+ZXAwaW4uZXAsIHVkYy0+c3RhdHVzKTsKKwkJdWRjLT5zdGF0dXMgPSBOVUxMOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTYxNCw3ICsxNjI0LDYgQEAKIF9fcmVsZWFzZXModWRjLT5sb2NrKQogX19hY3F1aXJlcyh1ZGMtPmxvY2spCiB7Ci0Jc3RydWN0IGNpMTN4eHhfZXAgKm1FcCA9ICZ1ZGMtPmNpMTN4eHhfZXBbMF07CiAJaW50IHJldHZhbDsKIAogCXRyYWNlKCIlcCIsIHVkYyk7CkBAIC0xNjM1LDExICsxNjQ0LDE1IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBkb25lOwogCi0JcmV0dmFsID0gdXNiX2VwX2VuYWJsZSgmbUVwLT5lcCwgJmN0cmxfZW5kcHRfZGVzYyk7CisJcmV0dmFsID0gdXNiX2VwX2VuYWJsZSgmdWRjLT5lcDBvdXQuZXAsICZjdHJsX2VuZHB0X291dF9kZXNjKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGRvbmU7CisKKwlyZXR2YWwgPSB1c2JfZXBfZW5hYmxlKCZ1ZGMtPmVwMGluLmVwLCAmY3RybF9lbmRwdF9pbl9kZXNjKTsKIAlpZiAoIXJldHZhbCkgewotCQltRXAtPnN0YXR1cyA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KCZtRXAtPmVwLCBHRlBfQVRPTUlDKTsKLQkJaWYgKG1FcC0+c3RhdHVzID09IE5VTEwpIHsKLQkJCXVzYl9lcF9kaXNhYmxlKCZtRXAtPmVwKTsKKwkJdWRjLT5zdGF0dXMgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdCgmdWRjLT5lcDBpbi5lcCwgR0ZQX0FUT01JQyk7CisJCWlmICh1ZGMtPnN0YXR1cyA9PSBOVUxMKSB7CisJCQl1c2JfZXBfZGlzYWJsZSgmdWRjLT5lcDBvdXQuZXApOwogCQkJcmV0dmFsID0gLUVOT01FTTsKIAkJfQogCX0KQEAgLTE2NzIsMTYgKzE2ODUsMTcgQEAKIAogLyoqCiAgKiBpc3JfZ2V0X3N0YXR1c19yZXNwb25zZTogZ2V0X3N0YXR1cyByZXF1ZXN0IHJlc3BvbnNlCi0gKiBAZXA6ICAgIGVuZHBvaW50CisgKiBAdWRjOiB1ZGMgc3RydWN0CiAgKiBAc2V0dXA6IHNldHVwIHJlcXVlc3QgcGFja2V0CiAgKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGNvZGUKICAqLwotc3RhdGljIGludCBpc3JfZ2V0X3N0YXR1c19yZXNwb25zZShzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwLAorc3RhdGljIGludCBpc3JfZ2V0X3N0YXR1c19yZXNwb25zZShzdHJ1Y3QgY2kxM3h4eCAqdWRjLAogCQkJCSAgIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnNldHVwKQogX19yZWxlYXNlcyhtRXAtPmxvY2spCiBfX2FjcXVpcmVzKG1FcC0+bG9jaykKIHsKKwlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwID0gJnVkYy0+ZXAwaW47CiAJc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEgPSBOVUxMOwogCWdmcF90IGdmcF9mbGFncyA9IEdGUF9BVE9NSUM7CiAJaW50IGRpciwgbnVtLCByZXR2YWw7CkBAIC0xNzM2LDI3ICsxNzUwLDIzIEBACiAKIC8qKgogICogaXNyX3NldHVwX3N0YXR1c19waGFzZTogcXVldWVzIHRoZSBzdGF0dXMgcGhhc2Ugb2YgYSBzZXR1cCB0cmFuc2F0aW9uCi0gKiBAbUVwOiBlbmRwb2ludAorICogQHVkYzogdWRjIHN0cnVjdAogICoKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBjb2RlCiAgKi8KLXN0YXRpYyBpbnQgaXNyX3NldHVwX3N0YXR1c19waGFzZShzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwKQorc3RhdGljIGludCBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKHN0cnVjdCBjaTEzeHh4ICp1ZGMpCiBfX3JlbGVhc2VzKG1FcC0+bG9jaykKIF9fYWNxdWlyZXMobUVwLT5sb2NrKQogewogCWludCByZXR2YWw7CisJc3RydWN0IGNpMTN4eHhfZXAgKm1FcDsKIAotCXRyYWNlKCIlcCIsIG1FcCk7CisJdHJhY2UoIiVwIiwgdWRjKTsKIAotCS8qIG1FcCBpcyBhbHdheXMgdmFsaWQgJiBjb25maWd1cmVkICovCi0KLQlpZiAobUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpCi0JCW1FcC0+ZGlyID0gKG1FcC0+ZGlyID09IFRYKSA/IFJYIDogVFg7Ci0KLQltRXAtPnN0YXR1cy0+bm9faW50ZXJydXB0ID0gMTsKKwltRXAgPSAodWRjLT5lcDBfZGlyID09IFRYKSA/ICZ1ZGMtPmVwMG91dCA6ICZ1ZGMtPmVwMGluOwogCiAJc3Bpbl91bmxvY2sobUVwLT5sb2NrKTsKLQlyZXR2YWwgPSB1c2JfZXBfcXVldWUoJm1FcC0+ZXAsIG1FcC0+c3RhdHVzLCBHRlBfQVRPTUlDKTsKKwlyZXR2YWwgPSB1c2JfZXBfcXVldWUoJm1FcC0+ZXAsIHVkYy0+c3RhdHVzLCBHRlBfQVRPTUlDKTsKIAlzcGluX2xvY2sobUVwLT5sb2NrKTsKIAogCXJldHVybiByZXR2YWw7CkBAIC0xNzc4LDExICsxNzg4LDExIEBACiAKIAl0cmFjZSgiJXAiLCBtRXApOwogCi0JaWYgKGxpc3RfZW1wdHkoJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKSkKKwlpZiAobGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogcG9wIG9sZGVzdCByZXF1ZXN0ICovCi0JbVJlcSA9IGxpc3RfZW50cnkobUVwLT5xaFttRXAtPmRpcl0ucXVldWUubmV4dCwKKwltUmVxID0gbGlzdF9lbnRyeShtRXAtPnFoLnF1ZXVlLm5leHQsCiAJCQkgIHN0cnVjdCBjaTEzeHh4X3JlcSwgcXVldWUpOwogCWxpc3RfZGVsX2luaXQoJm1SZXEtPnF1ZXVlKTsKIApAQCAtMTc5NCwxMCArMTgwNCwxMCBAQAogCiAJZGJnX2RvbmUoX3VzYl9hZGRyKG1FcCksIG1SZXEtPnB0ci0+dG9rZW4sIHJldHZhbCk7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKSkgeworCWlmICghbGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpIHsKIAkJc3RydWN0IGNpMTN4eHhfcmVxKiBtUmVxRW5xOwogCi0JCW1SZXFFbnEgPSBsaXN0X2VudHJ5KG1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlLm5leHQsCisJCW1SZXFFbnEgPSBsaXN0X2VudHJ5KG1FcC0+cWgucXVldWUubmV4dCwKIAkJCQkgIHN0cnVjdCBjaTEzeHh4X3JlcSwgcXVldWUpOwogCQlfaGFyZHdhcmVfZW5xdWV1ZShtRXAsIG1SZXFFbnEpOwogCX0KQEAgLTE4MzYsMTYgKzE4NDYsMTQgQEAKIAkJaW50IHR5cGUsIG51bSwgZXJyID0gLUVJTlZBTDsKIAkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCByZXE7CiAKLQogCQlpZiAobUVwLT5kZXNjID09IE5VTEwpCiAJCQljb250aW51ZTsgICAvKiBub3QgY29uZmlndXJlZCAqLwogCi0JCWlmICgobUVwLT5kaXIgPT0gUlggJiYgaHdfdGVzdF9hbmRfY2xlYXJfY29tcGxldGUoaSkpIHx8Ci0JCSAgICAobUVwLT5kaXIgPT0gVFggJiYgaHdfdGVzdF9hbmRfY2xlYXJfY29tcGxldGUoaSArIDE2KSkpIHsKKwkJaWYgKGh3X3Rlc3RfYW5kX2NsZWFyX2NvbXBsZXRlKGkpKSB7CiAJCQllcnIgPSBpc3JfdHJfY29tcGxldGVfbG93KG1FcCk7CiAJCQlpZiAobUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpIHsKIAkJCQlpZiAoZXJyID4gMCkgICAvKiBuZWVkcyBzdGF0dXMgcGhhc2UgKi8KLQkJCQkJZXJyID0gaXNyX3NldHVwX3N0YXR1c19waGFzZShtRXApOworCQkJCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKHVkYyk7CiAJCQkJaWYgKGVyciA8IDApIHsKIAkJCQkJZGJnX2V2ZW50KF91c2JfYWRkcihtRXApLAogCQkJCQkJICAiRVJST1IiLCBlcnIpOwpAQCAtMTg2NiwxNSArMTg3NCwyMiBAQAogCQkJY29udGludWU7CiAJCX0KIAorCQkvKgorCQkgKiBGbHVzaCBkYXRhIGFuZCBoYW5kc2hha2UgdHJhbnNhY3Rpb25zIG9mIHByZXZpb3VzCisJCSAqIHNldHVwIHBhY2tldC4KKwkJICovCisJCV9lcF9udWtlKCZ1ZGMtPmVwMG91dCk7CisJCV9lcF9udWtlKCZ1ZGMtPmVwMGluKTsKKwogCQkvKiByZWFkX3NldHVwX3BhY2tldCAqLwogCQlkbyB7CiAJCQlod190ZXN0X2FuZF9zZXRfc2V0dXBfZ3VhcmQoKTsKLQkJCW1lbWNweSgmcmVxLCAmbUVwLT5xaFtSWF0ucHRyLT5zZXR1cCwgc2l6ZW9mKHJlcSkpOworCQkJbWVtY3B5KCZyZXEsICZtRXAtPnFoLnB0ci0+c2V0dXAsIHNpemVvZihyZXEpKTsKIAkJfSB3aGlsZSAoIWh3X3Rlc3RfYW5kX2NsZWFyX3NldHVwX2d1YXJkKCkpOwogCiAJCXR5cGUgPSByZXEuYlJlcXVlc3RUeXBlOwogCi0JCW1FcC0+ZGlyID0gKHR5cGUgJiBVU0JfRElSX0lOKSA/IFRYIDogUlg7CisJCXVkYy0+ZXAwX2RpciA9ICh0eXBlICYgVVNCX0RJUl9JTikgPyBUWCA6IFJYOwogCiAJCWRiZ19zZXR1cChfdXNiX2FkZHIobUVwKSwgJnJlcSk7CiAKQEAgLTE4OTUsNyArMTkxMCw3IEBACiAJCQkJaWYgKGVycikKIAkJCQkJYnJlYWs7CiAJCQl9Ci0JCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKG1FcCk7CisJCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKHVkYyk7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfUkVRX0dFVF9TVEFUVVM6CiAJCQlpZiAodHlwZSAhPSAoVVNCX0RJUl9JTnxVU0JfUkVDSVBfREVWSUNFKSAgICYmCkBAIC0xOTA1LDcgKzE5MjAsNyBAQAogCQkJaWYgKGxlMTZfdG9fY3B1KHJlcS53TGVuZ3RoKSAhPSAyIHx8CiAJCQkgICAgbGUxNl90b19jcHUocmVxLndWYWx1ZSkgICE9IDApCiAJCQkJYnJlYWs7Ci0JCQllcnIgPSBpc3JfZ2V0X3N0YXR1c19yZXNwb25zZShtRXAsICZyZXEpOworCQkJZXJyID0gaXNyX2dldF9zdGF0dXNfcmVzcG9uc2UodWRjLCAmcmVxKTsKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9SRVFfU0VUX0FERFJFU1M6CiAJCQlpZiAodHlwZSAhPSAoVVNCX0RJUl9PVVR8VVNCX1JFQ0lQX0RFVklDRSkpCkBAIC0xOTE2LDcgKzE5MzEsNyBAQAogCQkJZXJyID0gaHdfdXNiX3NldF9hZGRyZXNzKCh1OClsZTE2X3RvX2NwdShyZXEud1ZhbHVlKSk7CiAJCQlpZiAoZXJyKQogCQkJCWJyZWFrOwotCQkJZXJyID0gaXNyX3NldHVwX3N0YXR1c19waGFzZShtRXApOworCQkJZXJyID0gaXNyX3NldHVwX3N0YXR1c19waGFzZSh1ZGMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1JFUV9TRVRfRkVBVFVSRToKIAkJCWlmICh0eXBlICE9IChVU0JfRElSX09VVHxVU0JfUkVDSVBfRU5EUE9JTlQpICYmCkBAIC0xOTMyLDEyICsxOTQ3LDEyIEBACiAJCQlzcGluX2xvY2sodWRjLT5sb2NrKTsKIAkJCWlmIChlcnIpCiAJCQkJYnJlYWs7Ci0JCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKG1FcCk7CisJCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKHVkYyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIGRlbGVnYXRlOgogCQkJaWYgKHJlcS53TGVuZ3RoID09IDApICAgLyogbm8gZGF0YSBwaGFzZSAqLwotCQkJCW1FcC0+ZGlyID0gVFg7CisJCQkJdWRjLT5lcDBfZGlyID0gVFg7CiAKIAkJCXNwaW5fdW5sb2NrKHVkYy0+bG9jayk7CiAJCQllcnIgPSB1ZGMtPmRyaXZlci0+c2V0dXAoJnVkYy0+Z2FkZ2V0LCAmcmVxKTsKQEAgLTE5NjgsNyArMTk4Myw3IEBACiAJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKQogewogCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSBjb250YWluZXJfb2YoZXAsIHN0cnVjdCBjaTEzeHh4X2VwLCBlcCk7Ci0JaW50IGRpcmVjdGlvbiwgcmV0dmFsID0gMDsKKwlpbnQgcmV0dmFsID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJdHJhY2UoIiVwLCAlcCIsIGVwLCBkZXNjKTsKQEAgLTE5ODIsNyArMTk5Nyw3IEBACiAKIAltRXAtPmRlc2MgPSBkZXNjOwogCi0JaWYgKCFsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpCisJaWYgKCFsaXN0X2VtcHR5KCZtRXAtPnFoLnF1ZXVlKSkKIAkJd2FybigiZW5hYmxpbmcgYSBub24tZW1wdHkgZW5kcG9pbnQhIik7CiAKIAltRXAtPmRpciAgPSB1c2JfZW5kcG9pbnRfZGlyX2luKGRlc2MpID8gVFggOiBSWDsKQEAgLTE5OTEsMjkgKzIwMDYsMjIgQEAKIAogCW1FcC0+ZXAubWF4cGFja2V0ID0gX19jb25zdGFudF9sZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSk7CiAKLQlkaXJlY3Rpb24gPSBtRXAtPmRpcjsKLQlkbyB7Ci0JCWRiZ19ldmVudChfdXNiX2FkZHIobUVwKSwgIkVOQUJMRSIsIDApOworCWRiZ19ldmVudChfdXNiX2FkZHIobUVwKSwgIkVOQUJMRSIsIDApOwogCi0JCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+Y2FwID0gMDsKKwltRXAtPnFoLnB0ci0+Y2FwID0gMDsKIAotCQlpZiAobUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpCi0JCQltRXAtPnFoW21FcC0+ZGlyXS5wdHItPmNhcCB8PSAgUUhfSU9TOwotCQllbHNlIGlmIChtRXAtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykKLQkJCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+Y2FwICY9IH5RSF9NVUxUOwotCQllbHNlCi0JCQltRXAtPnFoW21FcC0+ZGlyXS5wdHItPmNhcCAmPSB+UUhfWkxUOworCWlmIChtRXAtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCkKKwkJbUVwLT5xaC5wdHItPmNhcCB8PSAgUUhfSU9TOworCWVsc2UgaWYgKG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQorCQltRXAtPnFoLnB0ci0+Y2FwICY9IH5RSF9NVUxUOworCWVsc2UKKwkJbUVwLT5xaC5wdHItPmNhcCAmPSB+UUhfWkxUOwogCi0JCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+Y2FwIHw9Ci0JCQkobUVwLT5lcC5tYXhwYWNrZXQgPDwgZmZzX25yKFFIX01BWF9QS1QpKSAmIFFIX01BWF9QS1Q7Ci0JCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+dGQubmV4dCB8PSBURF9URVJNSU5BVEU7ICAgLyogbmVlZGVkPyAqLworCW1FcC0+cWgucHRyLT5jYXAgfD0KKwkJKG1FcC0+ZXAubWF4cGFja2V0IDw8IGZmc19ucihRSF9NQVhfUEtUKSkgJiBRSF9NQVhfUEtUOworCW1FcC0+cWgucHRyLT50ZC5uZXh0IHw9IFREX1RFUk1JTkFURTsgICAvKiBuZWVkZWQ/ICovCiAKLQkJcmV0dmFsIHw9IGh3X2VwX2VuYWJsZShtRXAtPm51bSwgbUVwLT5kaXIsIG1FcC0+dHlwZSk7Ci0KLQkJaWYgKG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKQotCQkJbUVwLT5kaXIgPSAobUVwLT5kaXIgPT0gVFgpID8gUlggOiBUWDsKLQotCX0gd2hpbGUgKG1FcC0+ZGlyICE9IGRpcmVjdGlvbik7CisJcmV0dmFsIHw9IGh3X2VwX2VuYWJsZShtRXAtPm51bSwgbUVwLT5kaXIsIG1FcC0+dHlwZSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKG1FcC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByZXR2YWw7CkBAIC0yMTQ2LDcgKzIxNTQsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKG1FcC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MICYmCi0JICAgICFsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpIHsKKwkgICAgIWxpc3RfZW1wdHkoJm1FcC0+cWgucXVldWUpKSB7CiAJCV9lcF9udWtlKG1FcCk7CiAJCXJldHZhbCA9IC1FT1ZFUkZMT1c7CiAJCXdhcm4oImVuZHBvaW50IGN0cmwgJVggbnVrZWQiLCBfdXNiX2FkZHIobUVwKSk7CkBAIC0yMTcwLDkgKzIxNzgsOSBAQAogCS8qIHB1c2ggcmVxdWVzdCAqLwogCW1SZXEtPnJlcS5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CiAJbVJlcS0+cmVxLmFjdHVhbCA9IDA7Ci0JbGlzdF9hZGRfdGFpbCgmbVJlcS0+cXVldWUsICZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSk7CisJbGlzdF9hZGRfdGFpbCgmbVJlcS0+cXVldWUsICZtRXAtPnFoLnF1ZXVlKTsKIAotCWlmIChsaXN0X2lzX3Npbmd1bGFyKCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpCisJaWYgKGxpc3RfaXNfc2luZ3VsYXIoJm1FcC0+cWgucXVldWUpKQogCQlyZXR2YWwgPSBfaGFyZHdhcmVfZW5xdWV1ZShtRXAsIG1SZXEpOwogCiAJaWYgKHJldHZhbCA9PSAtRUFMUkVBRFkpIHsKQEAgLTIxOTksNyArMjIwNyw3IEBACiAJdHJhY2UoIiVwLCAlcCIsIGVwLCByZXEpOwogCiAJaWYgKGVwID09IE5VTEwgfHwgcmVxID09IE5VTEwgfHwgbUVwLT5kZXNjID09IE5VTEwgfHwKLQkgICAgbGlzdF9lbXB0eSgmbVJlcS0+cXVldWUpICB8fCBsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpCisJICAgIGxpc3RfZW1wdHkoJm1SZXEtPnF1ZXVlKSAgfHwgbGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUobUVwLT5sb2NrLCBmbGFncyk7CkBAIC0yMjQ0LDcgKzIyNTIsNyBAQAogI2lmbmRlZiBTVEFMTF9JTgogCS8qIGdfZmlsZV9zdG9yYWdlIE1TIGNvbXBsaWFudCBidXQgZ196ZXJvIGZhaWxzIGNoYXB0ZXIgOSBjb21wbGlhbmNlICovCiAJaWYgKHZhbHVlICYmIG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLICYmIG1FcC0+ZGlyID09IFRYICYmCi0JICAgICFsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpIHsKKwkgICAgIWxpc3RfZW1wdHkoJm1FcC0+cWgucXVldWUpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobUVwLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KQEAgLTIzNTUsNyArMjM2Myw3IEBACiAJCWlmIChpc19hY3RpdmUpIHsKIAkJCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJl9nYWRnZXQtPmRldik7CiAJCQlod19kZXZpY2VfcmVzZXQodWRjKTsKLQkJCWh3X2RldmljZV9zdGF0ZSh1ZGMtPmNpMTN4eHhfZXBbMF0ucWhbUlhdLmRtYSk7CisJCQlod19kZXZpY2Vfc3RhdGUodWRjLT5lcDBvdXQucWguZG1hKTsKIAkJfSBlbHNlIHsKIAkJCWh3X2RldmljZV9zdGF0ZSgwKTsKIAkJCWlmICh1ZGMtPnVkY19kcml2ZXItPm5vdGlmeV9ldmVudCkKQEAgLTIzOTAsNyArMjM5OCw4IEBACiAJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKQogewogCXN0cnVjdCBjaTEzeHh4ICp1ZGMgPSBfdWRjOwotCXVuc2lnbmVkIGxvbmcgaSwgaywgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaSwgajsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAogCXRyYWNlKCIlcCIsIGRyaXZlcik7CkBAIC0yNDI3LDQ1ICsyNDM2LDQ2IEBACiAKIAlpbmZvKCJod19lcF9tYXggPSAlZCIsIGh3X2VwX21heCk7CiAKLQl1ZGMtPmRyaXZlciA9IGRyaXZlcjsKIAl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKIAogCXJldHZhbCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGh3X2VwX21heDsgaSsrKSB7Ci0JCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSAmdWRjLT5jaTEzeHh4X2VwW2ldOworCWZvciAoaSA9IDA7IGkgPCBod19lcF9tYXgvMjsgaSsrKSB7CisJCWZvciAoaiA9IFJYOyBqIDw9IFRYOyBqKyspIHsKKwkJCWludCBrID0gaSArIGogKiBod19lcF9tYXgvMjsKKwkJCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSAmdWRjLT5jaTEzeHh4X2VwW2tdOwogCi0JCXNjbnByaW50ZihtRXAtPm5hbWUsIHNpemVvZihtRXAtPm5hbWUpLCAiZXAlaSIsIChpbnQpaSk7CisJCQlzY25wcmludGYobUVwLT5uYW1lLCBzaXplb2YobUVwLT5uYW1lKSwgImVwJWklcyIsIGksCisJCQkJCShqID09IFRYKSAgPyAiaW4iIDogIm91dCIpOwogCi0JCW1FcC0+bG9jayAgICAgICAgID0gdWRjLT5sb2NrOwotCQltRXAtPmRldmljZSAgICAgICA9ICZ1ZGMtPmdhZGdldC5kZXY7Ci0JCW1FcC0+dGRfcG9vbCAgICAgID0gdWRjLT50ZF9wb29sOworCQkJbUVwLT5sb2NrICAgICAgICAgPSB1ZGMtPmxvY2s7CisJCQltRXAtPmRldmljZSAgICAgICA9ICZ1ZGMtPmdhZGdldC5kZXY7CisJCQltRXAtPnRkX3Bvb2wgICAgICA9IHVkYy0+dGRfcG9vbDsKIAotCQltRXAtPmVwLm5hbWUgICAgICA9IG1FcC0+bmFtZTsKLQkJbUVwLT5lcC5vcHMgICAgICAgPSAmdXNiX2VwX29wczsKLQkJbUVwLT5lcC5tYXhwYWNrZXQgPSBDVFJMX1BBWUxPQURfTUFYOworCQkJbUVwLT5lcC5uYW1lICAgICAgPSBtRXAtPm5hbWU7CisJCQltRXAtPmVwLm9wcyAgICAgICA9ICZ1c2JfZXBfb3BzOworCQkJbUVwLT5lcC5tYXhwYWNrZXQgPSBDVFJMX1BBWUxPQURfTUFYOwogCi0JCS8qIHRoaXMgYWxsb2NhdGlvbiBjYW5ub3QgYmUgcmFuZG9tICovCi0JCWZvciAoayA9IFJYOyBrIDw9IFRYOyBrKyspIHsKLQkJCUlOSVRfTElTVF9IRUFEKCZtRXAtPnFoW2tdLnF1ZXVlKTsKKwkJCUlOSVRfTElTVF9IRUFEKCZtRXAtPnFoLnF1ZXVlKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7Ci0JCQltRXAtPnFoW2tdLnB0ciA9IGRtYV9wb29sX2FsbG9jKHVkYy0+cWhfcG9vbCwKLQkJCQkJCQlHRlBfS0VSTkVMLAotCQkJCQkJCSZtRXAtPnFoW2tdLmRtYSk7CisJCQltRXAtPnFoLnB0ciA9IGRtYV9wb29sX2FsbG9jKHVkYy0+cWhfcG9vbCwgR0ZQX0tFUk5FTCwKKwkJCQkJJm1FcC0+cWguZG1hKTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKHVkYy0+bG9jaywgZmxhZ3MpOwotCQkJaWYgKG1FcC0+cWhba10ucHRyID09IE5VTEwpCisJCQlpZiAobUVwLT5xaC5wdHIgPT0gTlVMTCkKIAkJCQlyZXR2YWwgPSAtRU5PTUVNOwogCQkJZWxzZQotCQkJCW1lbXNldChtRXAtPnFoW2tdLnB0ciwgMCwKLQkJCQkgICAgICAgc2l6ZW9mKCptRXAtPnFoW2tdLnB0cikpOwotCQl9Ci0JCWlmIChpID09IDApCi0JCQl1ZGMtPmdhZGdldC5lcDAgPSAmbUVwLT5lcDsKLQkJZWxzZQorCQkJCW1lbXNldChtRXAtPnFoLnB0ciwgMCwgc2l6ZW9mKCptRXAtPnFoLnB0cikpOworCisJCQkvKiBza2lwIGVwMCBvdXQgYW5kIGluIGVuZHBvaW50cyAqLworCQkJaWYgKGkgPT0gMCkKKwkJCQljb250aW51ZTsKKwogCQkJbGlzdF9hZGRfdGFpbCgmbUVwLT5lcC5lcF9saXN0LCAmdWRjLT5nYWRnZXQuZXBfbGlzdCk7CisJCX0KIAl9CiAJaWYgKHJldHZhbCkKIAkJZ290byBkb25lOwogCisJdWRjLT5nYWRnZXQuZXAwID0gJnVkYy0+ZXAwaW4uZXA7CiAJLyogYmluZCBnYWRnZXQgKi8KIAlkcml2ZXItPmRyaXZlci5idXMgICAgID0gTlVMTDsKIAl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOwpAQCAtMjQ3OSw2ICsyNDg5LDcgQEAKIAkJZ290byBkb25lOwogCX0KIAorCXVkYy0+ZHJpdmVyID0gZHJpdmVyOwogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnVkYy0+Z2FkZ2V0LmRldik7CiAJaWYgKHVkYy0+dWRjX2RyaXZlci0+ZmxhZ3MgJiBDSTEzWFhYX1BVTExVUF9PTl9WQlVTKSB7CiAJCWlmICh1ZGMtPnZidXNfYWN0aXZlKSB7CkBAIC0yNDkwLDE0ICsyNTAxLDEyIEBACiAJCX0KIAl9CiAKLQlyZXR2YWwgPSBod19kZXZpY2Vfc3RhdGUodWRjLT5jaTEzeHh4X2VwWzBdLnFoW1JYXS5kbWEpOworCXJldHZhbCA9IGh3X2RldmljZV9zdGF0ZSh1ZGMtPmVwMG91dC5xaC5kbWEpOwogCWlmIChyZXR2YWwpCiAJCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnVkYy0+Z2FkZ2V0LmRldik7CiAKICBkb25lOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7Ci0JaWYgKHJldHZhbCkKLQkJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihkcml2ZXIpOwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKTsKQEAgLTI1MTAsNyArMjUxOSw3IEBACiBpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKIAlzdHJ1Y3QgY2kxM3h4eCAqdWRjID0gX3VkYzsKLQl1bnNpZ25lZCBsb25nIGksIGssIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgaSwgZmxhZ3M7CiAKIAl0cmFjZSgiJXAiLCBkcml2ZXIpOwogCkBAIC0yNTQ2LDE3ICsyNTU1LDE0IEBACiAJZm9yIChpID0gMDsgaSA8IGh3X2VwX21heDsgaSsrKSB7CiAJCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSAmdWRjLT5jaTEzeHh4X2VwW2ldOwogCi0JCWlmIChpID09IDApCi0JCQl1ZGMtPmdhZGdldC5lcDAgPSBOVUxMOwotCQllbHNlIGlmICghbGlzdF9lbXB0eSgmbUVwLT5lcC5lcF9saXN0KSkKKwkJaWYgKCFsaXN0X2VtcHR5KCZtRXAtPmVwLmVwX2xpc3QpKQogCQkJbGlzdF9kZWxfaW5pdCgmbUVwLT5lcC5lcF9saXN0KTsKIAotCQlmb3IgKGsgPSBSWDsgayA8PSBUWDsgaysrKQotCQkJaWYgKG1FcC0+cWhba10ucHRyICE9IE5VTEwpCi0JCQkJZG1hX3Bvb2xfZnJlZSh1ZGMtPnFoX3Bvb2wsCi0JCQkJCSAgICAgIG1FcC0+cWhba10ucHRyLCBtRXAtPnFoW2tdLmRtYSk7CisJCWlmIChtRXAtPnFoLnB0ciAhPSBOVUxMKQorCQkJZG1hX3Bvb2xfZnJlZSh1ZGMtPnFoX3Bvb2wsIG1FcC0+cWgucHRyLCBtRXAtPnFoLmRtYSk7CiAJfQogCisJdWRjLT5nYWRnZXQuZXAwID0gTlVMTDsKIAl1ZGMtPmRyaXZlciA9IE5VTEw7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHVkYy0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuaAppbmRleCBmNjFmZWQwLi5hMjQ5MmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuaApAQCAtMjAsNyArMjAsNyBAQAogICogREVGSU5FCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIENJMTNYWFhfUEFHRV9TSVpFICA0MDk2dWwgLyogcGFnZSBzaXplIGZvciBURCdzICovCi0jZGVmaW5lIEVORFBUX01BWCAgICAgICAgICAoMTYpCisjZGVmaW5lIEVORFBUX01BWCAgICAgICAgICAoMzIpCiAjZGVmaW5lIENUUkxfUEFZTE9BRF9NQVggICAoNjQpCiAjZGVmaW5lIFJYICAgICAgICAoMCkgIC8qIHNpbWlsYXIgdG8gVVNCX0RJUl9PVVQgYnV0IGNhbiBiZSB1c2VkIGFzIGFuIGluZGV4ICovCiAjZGVmaW5lIFRYICAgICAgICAoMSkgIC8qIHNpbWlsYXIgdG8gVVNCX0RJUl9JTiAgYnV0IGNhbiBiZSB1c2VkIGFzIGFuIGluZGV4ICovCkBAIC04OCw4ICs4OCw3IEBACiAJCXN0cnVjdCBsaXN0X2hlYWQgICBxdWV1ZTsKIAkJc3RydWN0IGNpMTN4eHhfcWggKnB0cjsKIAkJZG1hX2FkZHJfdCAgICAgICAgIGRtYTsKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxaFsyXTsKLQlzdHJ1Y3QgdXNiX3JlcXVlc3QgICAgICAgICAgICAgICAgICAgICpzdGF0dXM7CisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWg7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VkZ2U7CiAKIAkvKiBnbG9iYWwgcmVzb3VyY2VzICovCkBAIC0xMTksOSArMTE4LDEzIEBACiAKIAlzdHJ1Y3QgZG1hX3Bvb2wgICAgICAgICAgICpxaF9wb29sOyAgIC8qIERNQSBwb29sIGZvciBxdWV1ZSBoZWFkcyAqLwogCXN0cnVjdCBkbWFfcG9vbCAgICAgICAgICAgKnRkX3Bvb2w7ICAgLyogRE1BIHBvb2wgZm9yIHRyYW5zZmVyIGRlc2NzICovCisJc3RydWN0IHVzYl9yZXF1ZXN0ICAgICAgICAqc3RhdHVzOyAgICAvKiBlcDAgc3RhdHVzIHJlcXVlc3QgKi8KIAogCXN0cnVjdCB1c2JfZ2FkZ2V0ICAgICAgICAgIGdhZGdldDsgICAgIC8qIFVTQiBzbGF2ZSBkZXZpY2UgKi8KIAlzdHJ1Y3QgY2kxM3h4eF9lcCAgICAgICAgICBjaTEzeHh4X2VwW0VORFBUX01BWF07IC8qIGV4dGVuZGVkIGVuZHB0cyAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIGVwMF9kaXI7ICAgIC8qIGVwMCBkaXJlY3Rpb24gKi8KKyNkZWZpbmUgZXAwb3V0IGNpMTN4eHhfZXBbMF0KKyNkZWZpbmUgZXAwaW4gIGNpMTN4eHhfZXBbMTZdCiAKIAlzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgICpkcml2ZXI7ICAgICAvKiAzcmQgcGFydHkgZ2FkZ2V0IGRyaXZlciAqLwogCXN0cnVjdCBjaTEzeHh4X3VkY19kcml2ZXIgKnVkY19kcml2ZXI7IC8qIGRldmljZSBjb250cm9sbGVyIGRyaXZlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCmluZGV4IGY2ZmY4NDUuLjFiYTRiZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKQEAgLTkyOCw4ICs5MjgsOSBAQAogCQkgKi8KIAkJc3dpdGNoIChjdHJsLT5iUmVxdWVzdFR5cGUgJiBVU0JfUkVDSVBfTUFTSykgewogCQljYXNlIFVTQl9SRUNJUF9JTlRFUkZBQ0U6Ci0JCQlpZiAoY2Rldi0+Y29uZmlnKQotCQkJCWYgPSBjZGV2LT5jb25maWctPmludGVyZmFjZVtpbnRmXTsKKwkJCWlmICghY2Rldi0+Y29uZmlnIHx8IHdfaW5kZXggPj0gTUFYX0NPTkZJR19JTlRFUkZBQ0VTKQorCQkJCWJyZWFrOworCQkJZiA9IGNkZXYtPmNvbmZpZy0+aW50ZXJmYWNlW2ludGZdOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBVU0JfUkVDSVBfRU5EUE9JTlQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9tYXNzX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCmluZGV4IGI1ZGJiMjMuLjZkOGU1MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCkBAIC0yOTMsNiArMjkzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2NvbXBvc2l0ZS5oPgogCiAjaW5jbHVkZSAiZ2FkZ2V0X2NoaXBzLmgiCiAKQEAgLTI3NjMsNyArMjc2NCw3IEBACiAJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAkJY29tbW9uLT5mcmVlX3N0b3JhZ2Vfb25fcmVsZWFzZSA9IDE7CiAJfSBlbHNlIHsKLQkJbWVtc2V0KGNvbW1vbiwgMCwgc2l6ZW9mIGNvbW1vbik7CisJCW1lbXNldChjb21tb24sIDAsIHNpemVvZiAqY29tbW9uKTsKIAkJY29tbW9uLT5mcmVlX3N0b3JhZ2Vfb25fcmVsZWFzZSA9IDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcGNoX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3BjaF91ZGMuYwppbmRleCAwYzhkZDgxLi5iMTIwZGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcGNoX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wY2hfdWRjLmMKQEAgLTE5OCwxMCArMTk4LDEwIEBACiAjZGVmaW5lIFBDSF9VRENfQlJMRU4JCTB4MEYJLyogQnVyc3QgbGVuZ3RoICovCiAjZGVmaW5lIFBDSF9VRENfVEhMRU4JCTB4MUYJLyogVGhyZXNob2xkIGxlbmd0aCAqLwogLyogVmFsdWUgb2YgRVAgQnVmZmVyIFNpemUgKi8KLSNkZWZpbmUgVURDX0VQMElOX0JVRkZfU0laRQk2NAotI2RlZmluZSBVRENfRVBJTl9CVUZGX1NJWkUJNTEyCi0jZGVmaW5lIFVEQ19FUDBPVVRfQlVGRl9TSVpFCTY0Ci0jZGVmaW5lIFVEQ19FUE9VVF9CVUZGX1NJWkUJNTEyCisjZGVmaW5lIFVEQ19FUDBJTl9CVUZGX1NJWkUJMTYKKyNkZWZpbmUgVURDX0VQSU5fQlVGRl9TSVpFCTI1NgorI2RlZmluZSBVRENfRVAwT1VUX0JVRkZfU0laRQkxNgorI2RlZmluZSBVRENfRVBPVVRfQlVGRl9TSVpFCTI1NgogLyogVmFsdWUgb2YgRVAgbWF4aW11bSBwYWNrZXQgc2l6ZSAqLwogI2RlZmluZSBVRENfRVAwSU5fTUFYX1BLVF9TSVpFCTY0CiAjZGVmaW5lIFVEQ19FUDBPVVRfTUFYX1BLVF9TSVpFCTY0CkBAIC0zNTEsNyArMzUxLDcgQEAKIAlzdHJ1Y3QgcGNpX3Bvb2wJCSpkYXRhX3JlcXVlc3RzOwogCXN0cnVjdCBwY2lfcG9vbAkJKnN0cF9yZXF1ZXN0czsKIAlkbWFfYWRkcl90CQkJZG1hX2FkZHI7Ci0JdW5zaWduZWQgbG9uZwkJCWVwMG91dF9idWZbNjRdOworCXZvaWQJCQkJKmVwMG91dF9idWY7CiAJc3RydWN0IHVzYl9jdHJscmVxdWVzdAkJc2V0dXBfZGF0YTsKIAl1bnNpZ25lZCBsb25nCQkJcGh5c19hZGRyOwogCXZvaWQgX19pb21lbQkJCSpiYXNlX2FkZHI7CkBAIC0zNjEsNiArMzYxLDggQEAKIAogI2RlZmluZSBQQ0hfVURDX1BDSV9CQVIJCQkxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUcyMFRfVURDCTB4ODgwOAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX1JPSE0JCTB4MTBEQgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01MNzIxM19JT0hfVURDCTB4ODAxRAogCiBzdGF0aWMgY29uc3QgY2hhcgllcDBfc3RyaW5nW10gPSAiZXAwaW4iOwogc3RhdGljIERFRklORV9TUElOTE9DSyh1ZGNfc3RhbGxfc3BpbmxvY2spOwkvKiBzdGFsbCBzcGluIGxvY2sgKi8KQEAgLTEyMTksMTEgKzEyMjEsMTEgQEAKIAlkZXYgPSBlcC0+ZGV2OwogCWlmIChyZXEtPmRtYV9tYXBwZWQpIHsKIAkJaWYgKGVwLT5pbikKLQkJCXBjaV91bm1hcF9zaW5nbGUoZGV2LT5wZGV2LCByZXEtPnJlcS5kbWEsCi0JCQkJCSByZXEtPnJlcS5sZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJZG1hX3VubWFwX3NpbmdsZSgmZGV2LT5wZGV2LT5kZXYsIHJlcS0+cmVxLmRtYSwKKwkJCQkJIHJlcS0+cmVxLmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CiAJCWVsc2UKLQkJCXBjaV91bm1hcF9zaW5nbGUoZGV2LT5wZGV2LCByZXEtPnJlcS5kbWEsCi0JCQkJCSByZXEtPnJlcS5sZW5ndGgsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlkbWFfdW5tYXBfc2luZ2xlKCZkZXYtPnBkZXYtPmRldiwgcmVxLT5yZXEuZG1hLAorCQkJCQkgcmVxLT5yZXEubGVuZ3RoLCBETUFfRlJPTV9ERVZJQ0UpOwogCQlyZXEtPmRtYV9tYXBwZWQgPSAwOwogCQlyZXEtPnJlcS5kbWEgPSBETUFfQUREUl9JTlZBTElEOwogCX0KQEAgLTE0MTQsNyArMTQxNiw2IEBACiAKIAlwY2hfdWRjX2NsZWFyX2RtYShlcC0+ZGV2LCBETUFfRElSX1JYKTsKIAl0ZF9kYXRhID0gcmVxLT50ZF9kYXRhOwotCWVwLT50ZF9kYXRhID0gcmVxLT50ZF9kYXRhOwogCS8qIFNldCB0aGUgc3RhdHVzIGJpdHMgZm9yIGFsbCBkZXNjcmlwdG9ycyAqLwogCXdoaWxlICgxKSB7CiAJCXRkX2RhdGEtPnN0YXR1cyA9ICh0ZF9kYXRhLT5zdGF0dXMgJiB+UENIX1VEQ19CVUZGX1NUUykgfApAQCAtMTYxMywxNSArMTYxNCwxOSBAQAogCWlmICh1c2JyZXEtPmxlbmd0aCAmJgogCSAgICAoKHVzYnJlcS0+ZG1hID09IERNQV9BRERSX0lOVkFMSUQpIHx8ICF1c2JyZXEtPmRtYSkpIHsKIAkJaWYgKGVwLT5pbikKLQkJCXVzYnJlcS0+ZG1hID0gcGNpX21hcF9zaW5nbGUoZGV2LT5wZGV2LCB1c2JyZXEtPmJ1ZiwKLQkJCQkJdXNicmVxLT5sZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJdXNicmVxLT5kbWEgPSBkbWFfbWFwX3NpbmdsZSgmZGV2LT5wZGV2LT5kZXYsCisJCQkJCQkgICAgIHVzYnJlcS0+YnVmLAorCQkJCQkJICAgICB1c2JyZXEtPmxlbmd0aCwKKwkJCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAJCWVsc2UKLQkJCXVzYnJlcS0+ZG1hID0gcGNpX21hcF9zaW5nbGUoZGV2LT5wZGV2LCB1c2JyZXEtPmJ1ZiwKLQkJCQkJdXNicmVxLT5sZW5ndGgsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQl1c2JyZXEtPmRtYSA9IGRtYV9tYXBfc2luZ2xlKCZkZXYtPnBkZXYtPmRldiwKKwkJCQkJCSAgICAgdXNicmVxLT5idWYsCisJCQkJCQkgICAgIHVzYnJlcS0+bGVuZ3RoLAorCQkJCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpOwogCQlyZXEtPmRtYV9tYXBwZWQgPSAxOwogCX0KIAlpZiAodXNicmVxLT5sZW5ndGggPiAwKSB7Ci0JCXJldHZhbCA9IHByZXBhcmVfZG1hKGVwLCByZXEsIGdmcCk7CisJCXJldHZhbCA9IHByZXBhcmVfZG1hKGVwLCByZXEsIEdGUF9BVE9NSUMpOwogCQlpZiAocmV0dmFsKQogCQkJZ290byBwcm9iZV9lbmQ7CiAJfQpAQCAtMTY0Niw3ICsxNjUxLDYgQEAKIAkJCXBjaF91ZGNfd2FpdF9lcF9zdGFsbChlcCk7CiAJCQlwY2hfdWRjX2VwX2NsZWFyX25hayhlcCk7CiAJCQlwY2hfdWRjX2VuYWJsZV9lcF9pbnRlcnJ1cHRzKGVwLT5kZXYsICgxIDw8IGVwLT5udW0pKTsKLQkJCXBjaF91ZGNfc2V0X2RtYShkZXYsIERNQV9ESVJfVFgpOwogCQl9CiAJfQogCS8qIE5vdyBhZGQgdGhpcyByZXF1ZXN0IHRvIHRoZSBlcCdzIHBlbmRpbmcgcmVxdWVzdHMgKi8KQEAgLTE5MjYsNiArMTkzMCw3IEBACiAJICAgIFBDSF9VRENfQlNfRE1BX0RPTkUpCiAJCXJldHVybjsKIAlwY2hfdWRjX2NsZWFyX2RtYShlcC0+ZGV2LCBETUFfRElSX1JYKTsKKwlwY2hfdWRjX2VwX3NldF9kZHB0cihlcCwgMCk7CiAJaWYgKChyZXEtPnRkX2RhdGFfbGFzdC0+c3RhdHVzICYgUENIX1VEQ19SWFRYX1NUUykgIT0KIAkgICAgUENIX1VEQ19SVFNfU1VDQykgewogCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgIkludmFsaWQgUlhUWCBzdGF0dXMgKDB4JTA4eCkgIgpAQCAtMTk2Myw3ICsxOTY4LDcgQEAKIAl1MzIJZXBzdHM7CiAJc3RydWN0IHBjaF91ZGNfZXAJKmVwOwogCi0JZXAgPSAmZGV2LT5lcFsyKmVwX251bV07CisJZXAgPSAmZGV2LT5lcFtVRENfRVBJTl9JRFgoZXBfbnVtKV07CiAJZXBzdHMgPSBlcC0+ZXBzdHM7CiAJZXAtPmVwc3RzID0gMDsKIApAQCAtMjAwOCw3ICsyMDEzLDcgQEAKIAlzdHJ1Y3QgcGNoX3VkY19lcAkJKmVwOwogCXN0cnVjdCBwY2hfdWRjX3JlcXVlc3QJCSpyZXEgPSBOVUxMOwogCi0JZXAgPSAmZGV2LT5lcFsyKmVwX251bSArIDFdOworCWVwID0gJmRldi0+ZXBbVURDX0VQT1VUX0lEWChlcF9udW0pXTsKIAllcHN0cyA9IGVwLT5lcHN0czsKIAllcC0+ZXBzdHMgPSAwOwogCkBAIC0yMDI1LDEwICsyMDMwLDExIEBACiAJfQogCWlmIChlcHN0cyAmIFVEQ19FUFNUU19IRSkKIAkJcmV0dXJuOwotCWlmIChlcHN0cyAmIFVEQ19FUFNUU19SU1MpCisJaWYgKGVwc3RzICYgVURDX0VQU1RTX1JTUykgewogCQlwY2hfdWRjX2VwX3NldF9zdGFsbChlcCk7CiAJCXBjaF91ZGNfZW5hYmxlX2VwX2ludGVycnVwdHMoZXAtPmRldiwKIAkJCQkJICAgICBQQ0hfVURDX0VQSU5UKGVwLT5pbiwgZXAtPm51bSkpOworCX0KIAlpZiAoZXBzdHMgJiBVRENfRVBTVFNfUkNTKSB7CiAJCWlmICghZGV2LT5wcm90X3N0YWxsKSB7CiAJCQlwY2hfdWRjX2VwX2NsZWFyX3N0YWxsKGVwKTsKQEAgLTIwNjAsOCArMjA2NiwxMCBAQAogewogCXUzMgllcHN0czsKIAlzdHJ1Y3QgcGNoX3VkY19lcAkqZXA7CisJc3RydWN0IHBjaF91ZGNfZXAJKmVwX291dDsKIAogCWVwID0gJmRldi0+ZXBbVURDX0VQMElOX0lEWF07CisJZXBfb3V0ID0gJmRldi0+ZXBbVURDX0VQME9VVF9JRFhdOwogCWVwc3RzID0gZXAtPmVwc3RzOwogCWVwLT5lcHN0cyA9IDA7CiAKQEAgLTIwNzMsOCArMjA4MSwxNiBAQAogCQlyZXR1cm47CiAJaWYgKGVwc3RzICYgVURDX0VQU1RTX0hFKQogCQlyZXR1cm47Ci0JaWYgKChlcHN0cyAmIFVEQ19FUFNUU19UREMpICYmICghZGV2LT5zdGFsbCkpCisJaWYgKChlcHN0cyAmIFVEQ19FUFNUU19UREMpICYmICghZGV2LT5zdGFsbCkpIHsKIAkJcGNoX3VkY19jb21wbGV0ZV90cmFuc2ZlcihlcCk7CisJCXBjaF91ZGNfY2xlYXJfZG1hKGRldiwgRE1BX0RJUl9SWCk7CisJCWVwX291dC0+dGRfZGF0YS0+c3RhdHVzID0gKGVwX291dC0+dGRfZGF0YS0+c3RhdHVzICYKKwkJCQkJflBDSF9VRENfQlVGRl9TVFMpIHwKKwkJCQkJUENIX1VEQ19CU19IU1RfUkRZOworCQlwY2hfdWRjX2VwX2NsZWFyX25hayhlcF9vdXQpOworCQlwY2hfdWRjX3NldF9kbWEoZGV2LCBETUFfRElSX1JYKTsKKwkJcGNoX3VkY19lcF9zZXRfcnJkeShlcF9vdXQpOworCX0KIAkvKiBPbiBJTiBpbnRlcnJ1cHQsIHByb3ZpZGUgZGF0YSBpZiB3ZSBoYXZlIGFueSAqLwogCWlmICgoZXBzdHMgJiBVRENfRVBTVFNfSU4pICYmICEoZXBzdHMgJiBVRENfRVBTVFNfVERDKSAmJgogCSAgICAgIShlcHN0cyAmIFVEQ19FUFNUU19UWEVNUFRZKSkKQEAgLTIxMDIsMTEgKzIxMTgsOSBAQAogCQlkZXYtPnN0YWxsID0gMDsKIAkJZGV2LT5lcFtVRENfRVAwSU5fSURYXS5oYWx0ZWQgPSAwOwogCQlkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS5oYWx0ZWQgPSAwOwotCQkvKiBJbiBkYXRhIG5vdCByZWFkeSAqLwotCQlwY2hfdWRjX2VwX3NldF9uYWsoJihkZXYtPmVwW1VEQ19FUDBJTl9JRFhdKSk7CiAJCWRldi0+c2V0dXBfZGF0YSA9IGVwLT50ZF9zdHAtPnJlcXVlc3Q7CiAJCXBjaF91ZGNfaW5pdF9zZXR1cF9idWZmKGVwLT50ZF9zdHApOwotCQlwY2hfdWRjX2NsZWFyX2RtYShkZXYsIERNQV9ESVJfVFgpOworCQlwY2hfdWRjX2NsZWFyX2RtYShkZXYsIERNQV9ESVJfUlgpOwogCQlwY2hfdWRjX2VwX2ZpZm9fZmx1c2goJihkZXYtPmVwW1VEQ19FUDBJTl9JRFhdKSwKIAkJCQkgICAgICBkZXYtPmVwW1VEQ19FUDBJTl9JRFhdLmluKTsKIAkJaWYgKChkZXYtPnNldHVwX2RhdGEuYlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikpCkBAIC0yMTIyLDE0ICsyMTM2LDIzIEBACiAJCXNldHVwX3N1cHBvcnRlZCA9IGRldi0+ZHJpdmVyLT5zZXR1cCgmZGV2LT5nYWRnZXQsCiAJCQkJCQkgICAgICZkZXYtPnNldHVwX2RhdGEpOwogCQlzcGluX2xvY2soJmRldi0+bG9jayk7CisKKwkJaWYgKGRldi0+c2V0dXBfZGF0YS5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSB7CisJCQllcC0+dGRfZGF0YS0+c3RhdHVzID0gKGVwLT50ZF9kYXRhLT5zdGF0dXMgJgorCQkJCQkJflBDSF9VRENfQlVGRl9TVFMpIHwKKwkJCQkJCVBDSF9VRENfQlNfSFNUX1JEWTsKKwkJCXBjaF91ZGNfZXBfc2V0X2RkcHRyKGVwLCBlcC0+dGRfZGF0YV9waHlzKTsKKwkJfQogCQkvKiBlcDAgaW4gcmV0dXJucyBkYXRhIG9uIElOIHBoYXNlICovCiAJCWlmIChzZXR1cF9zdXBwb3J0ZWQgPj0gMCAmJiBzZXR1cF9zdXBwb3J0ZWQgPAogCQkJCQkgICAgVURDX0VQMElOX01BWF9QS1RfU0laRSkgewogCQkJcGNoX3VkY19lcF9jbGVhcl9uYWsoJihkZXYtPmVwW1VEQ19FUDBJTl9JRFhdKSk7CiAJCQkvKiBHYWRnZXQgd291bGQgaGF2ZSBxdWV1ZWQgYSByZXF1ZXN0IHdoZW4KIAkJCSAqIHdlIGNhbGxlZCB0aGUgc2V0dXAgKi8KLQkJCXBjaF91ZGNfc2V0X2RtYShkZXYsIERNQV9ESVJfUlgpOwotCQkJcGNoX3VkY19lcF9jbGVhcl9uYWsoZXApOworCQkJaWYgKCEoZGV2LT5zZXR1cF9kYXRhLmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pKSB7CisJCQkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9SWCk7CisJCQkJcGNoX3VkY19lcF9jbGVhcl9uYWsoZXApOworCQkJfQogCQl9IGVsc2UgaWYgKHNldHVwX3N1cHBvcnRlZCA8IDApIHsKIAkJCS8qIGlmIHVuc3VwcG9ydGVkIHJlcXVlc3QsIHRoZW4gc3RhbGwgKi8KIAkJCXBjaF91ZGNfZXBfc2V0X3N0YWxsKCYoZGV2LT5lcFtVRENfRVAwSU5fSURYXSkpOwpAQCAtMjE0MiwyMiArMjE2NSwxMyBAQAogCQl9CiAJfSBlbHNlIGlmICgoKChzdGF0ICYgVURDX0VQU1RTX09VVF9NQVNLKSA+PiBVRENfRVBTVFNfT1VUX1NISUZUKSA9PQogCQkgICAgIFVEQ19FUFNUU19PVVRfREFUQSkgJiYgIWRldi0+c3RhbGwpIHsKLQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKLQkJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiJXM6IE5vIHJlcXVlc3RcbiIsIF9fZnVuY19fKTsKLQkJCWVwLT50ZF9kYXRhLT5zdGF0dXMgPSAoZXAtPnRkX2RhdGEtPnN0YXR1cyAmCi0JCQkJCSAgICAgICB+UENIX1VEQ19CVUZGX1NUUykgfAotCQkJCQkgICAgICAgUENIX1VEQ19CU19IU1RfUkRZOwotCQkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9SWCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBjb250cm9sIHdyaXRlICovCi0JCQkvKiBuZXh0IGZ1bmN0aW9uIHdpbGwgcGlja3VvIGFuIGNsZWFyIHRoZSBzdGF0dXMgKi8KKwkJcGNoX3VkY19jbGVhcl9kbWEoZGV2LCBETUFfRElSX1JYKTsKKwkJcGNoX3VkY19lcF9zZXRfZGRwdHIoZXAsIDApOworCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKIAkJCWVwLT5lcHN0cyA9IHN0YXQ7Ci0KLQkJCXBjaF91ZGNfc3ZjX2RhdGFfb3V0KGRldiwgMCk7Ci0JCQkvKiByZS1wcm9ncmFtIGRlc2MuIHBvaW50ZXIgZm9yIHBvc3NpYmxlIFpMUHMgKi8KLQkJCXBjaF91ZGNfZXBfc2V0X2RkcHRyKGVwLCBlcC0+dGRfZGF0YV9waHlzKTsKLQkJCXBjaF91ZGNfc2V0X2RtYShkZXYsIERNQV9ESVJfUlgpOworCQkJcGNoX3VkY19zdmNfZGF0YV9vdXQoZGV2LCBQQ0hfVURDX0VQMCk7CiAJCX0KKwkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9SWCk7CiAJfQogCXBjaF91ZGNfZXBfc2V0X3JyZHkoZXApOwogfQpAQCAtMjE3NCw3ICsyMTg4LDcgQEAKIAlzdHJ1Y3QgcGNoX3VkY19lcAkqZXA7CiAJc3RydWN0IHBjaF91ZGNfcmVxdWVzdCAqcmVxOwogCi0JZXAgPSAmZGV2LT5lcFsyKmVwX251bV07CisJZXAgPSAmZGV2LT5lcFtVRENfRVBJTl9JRFgoZXBfbnVtKV07CiAJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CiAJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBwY2hfdWRjX3JlcXVlc3QsIHF1ZXVlKTsKIAkJcGNoX3VkY19lbmFibGVfZXBfaW50ZXJydXB0cyhlcC0+ZGV2LApAQCAtMjE5NiwxMyArMjIxMCwxMyBAQAogCWZvciAoaSA9IDA7IGkgPCBQQ0hfVURDX1VTRURfRVBfTlVNOyBpKyspIHsKIAkJLyogSU4gKi8KIAkJaWYgKGVwX2ludHIgJiAoMHgxIDw8IGkpKSB7Ci0JCQllcCA9ICZkZXYtPmVwWzIqaV07CisJCQllcCA9ICZkZXYtPmVwW1VEQ19FUElOX0lEWChpKV07CiAJCQllcC0+ZXBzdHMgPSBwY2hfdWRjX3JlYWRfZXBfc3RhdHVzKGVwKTsKIAkJCXBjaF91ZGNfY2xlYXJfZXBfc3RhdHVzKGVwLCBlcC0+ZXBzdHMpOwogCQl9CiAJCS8qIE9VVCAqLwogCQlpZiAoZXBfaW50ciAmICgweDEwMDAwIDw8IGkpKSB7Ci0JCQllcCA9ICZkZXYtPmVwWzIqaSsxXTsKKwkJCWVwID0gJmRldi0+ZXBbVURDX0VQT1VUX0lEWChpKV07CiAJCQllcC0+ZXBzdHMgPSBwY2hfdWRjX3JlYWRfZXBfc3RhdHVzKGVwKTsKIAkJCXBjaF91ZGNfY2xlYXJfZXBfc3RhdHVzKGVwLCBlcC0+ZXBzdHMpOwogCQl9CkBAIC0yNTYzLDkgKzI1NzcsNiBAQAogCWRldi0+ZXBbVURDX0VQMElOX0lEWF0uZXAubWF4cGFja2V0ID0gVURDX0VQMElOX01BWF9QS1RfU0laRTsKIAlkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS5lcC5tYXhwYWNrZXQgPSBVRENfRVAwT1VUX01BWF9QS1RfU0laRTsKIAotCWRldi0+ZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShkZXYtPnBkZXYsIGRldi0+ZXAwb3V0X2J1ZiwgMjU2LAotCQkJCSAgUENJX0RNQV9GUk9NREVWSUNFKTsKLQogCS8qIHJlbW92ZSBlcDAgaW4gYW5kIG91dCBmcm9tIHRoZSBsaXN0LiAgVGhleSBoYXZlIG93biBwb2ludGVyICovCiAJbGlzdF9kZWxfaW5pdCgmZGV2LT5lcFtVRENfRVAwSU5fSURYXS5lcC5lcF9saXN0KTsKIAlsaXN0X2RlbF9pbml0KCZkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS5lcC5lcF9saXN0KTsKQEAgLTI2MzcsNiArMjY0OCwxMyBAQAogCWRldi0+ZXBbVURDX0VQMElOX0lEWF0udGRfc3RwX3BoeXMgPSAwOwogCWRldi0+ZXBbVURDX0VQMElOX0lEWF0udGRfZGF0YSA9IE5VTEw7CiAJZGV2LT5lcFtVRENfRVAwSU5fSURYXS50ZF9kYXRhX3BoeXMgPSAwOworCisJZGV2LT5lcDBvdXRfYnVmID0ga3phbGxvYyhVRENfRVAwT1VUX0JVRkZfU0laRSAqIDQsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5lcDBvdXRfYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlkZXYtPmRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoJmRldi0+cGRldi0+ZGV2LCBkZXYtPmVwMG91dF9idWYsCisJCQkJICAgICAgIFVEQ19FUDBPVVRfQlVGRl9TSVpFICogNCwKKwkJCQkgICAgICAgRE1BX0ZST01fREVWSUNFKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjcwMCw3ICsyNzE4LDggQEAKIAogCXBjaF91ZGNfZGlzYWJsZV9pbnRlcnJ1cHRzKGRldiwgVURDX0RFVklOVF9NU0spOwogCi0JLyogQXNzdWVzIHRoYXQgdGhlcmUgYXJlIG5vIHBlbmRpbmcgcmVxdWV0cyB3aXRoIHRoaXMgZHJpdmVyICovCisJLyogQXNzdXJlcyB0aGF0IHRoZXJlIGFyZSBubyBwZW5kaW5nIHJlcXVlc3RzIHdpdGggdGhpcyBkcml2ZXIgKi8KKwlkcml2ZXItPmRpc2Nvbm5lY3QoJmRldi0+Z2FkZ2V0KTsKIAlkcml2ZXItPnVuYmluZCgmZGV2LT5nYWRnZXQpOwogCWRldi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwogCWRldi0+ZHJpdmVyID0gTlVMTDsKQEAgLTI3NTAsNiArMjc2OSwxMSBAQAogCQlwY2lfcG9vbF9kZXN0cm95KGRldi0+c3RwX3JlcXVlc3RzKTsKIAl9CiAKKwlpZiAoZGV2LT5kbWFfYWRkcikKKwkJZG1hX3VubWFwX3NpbmdsZSgmZGV2LT5wZGV2LT5kZXYsIGRldi0+ZG1hX2FkZHIsCisJCQkJIFVEQ19FUDBPVVRfQlVGRl9TSVpFICogNCwgRE1BX0ZST01fREVWSUNFKTsKKwlrZnJlZShkZXYtPmVwMG91dF9idWYpOworCiAJcGNoX3VkY19leGl0KGRldik7CiAKIAlpZiAoZGV2LT5pcnFfcmVnaXN0ZXJlZCkKQEAgLTI3OTIsMTEgKzI4MTYsNyBAQAogCWludCByZXQ7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7Ci0JcmV0ID0gcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogcGNpX3Jlc3RvcmVfc3RhdGUgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiByZXQ7Ci0JfQorCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZFxuIiwgX19mdW5jX18pOwpAQCAtMjkxNCw2ICsyOTM0LDExIEBACiAJCS5jbGFzcyA9IChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4ZmUsCiAJCS5jbGFzc19tYXNrID0gMHhmZmZmZmZmZiwKIAl9LAorCXsKKwkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JPSE0sIFBDSV9ERVZJQ0VfSURfTUw3MjEzX0lPSF9VREMpLAorCQkuY2xhc3MgPSAoUENJX0NMQVNTX1NFUklBTF9VU0IgPDwgOCkgfCAweGZlLAorCQkuY2xhc3NfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKIAl7IDAgfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCmluZGV4IDJmYzg2MzYuLjEyZmY2Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwpAQCAtMTMxLDMxICsxMzEsMzEgQEAKICAqIHBhcmFtZXRlcnMgYXJlIGluIFVURi04IChzdXBlcnNldCBvZiBBU0NJSSdzIDcgYml0IGNoYXJhY3RlcnMpLgogICovCiAKLXN0YXRpYyB1c2hvcnQgX19pbml0ZGF0YSBpZFZlbmRvcjsKK3N0YXRpYyB1c2hvcnQgaWRWZW5kb3I7CiBtb2R1bGVfcGFyYW0oaWRWZW5kb3IsIHVzaG9ydCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlkVmVuZG9yLCAiVVNCIFZlbmRvciBJRCIpOwogCi1zdGF0aWMgdXNob3J0IF9faW5pdGRhdGEgaWRQcm9kdWN0Oworc3RhdGljIHVzaG9ydCBpZFByb2R1Y3Q7CiBtb2R1bGVfcGFyYW0oaWRQcm9kdWN0LCB1c2hvcnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhpZFByb2R1Y3QsICJVU0IgUHJvZHVjdCBJRCIpOwogCi1zdGF0aWMgdXNob3J0IF9faW5pdGRhdGEgYmNkRGV2aWNlOworc3RhdGljIHVzaG9ydCBiY2REZXZpY2U7CiBtb2R1bGVfcGFyYW0oYmNkRGV2aWNlLCB1c2hvcnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhiY2REZXZpY2UsICJVU0IgRGV2aWNlIHZlcnNpb24gKEJDRCkiKTsKIAotc3RhdGljIGNoYXIgKl9faW5pdGRhdGEgaU1hbnVmYWN0dXJlcjsKK3N0YXRpYyBjaGFyICppTWFudWZhY3R1cmVyOwogbW9kdWxlX3BhcmFtKGlNYW51ZmFjdHVyZXIsIGNoYXJwLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoaU1hbnVmYWN0dXJlciwgIlVTQiBNYW51ZmFjdHVyZXIgc3RyaW5nIik7CiAKLXN0YXRpYyBjaGFyICpfX2luaXRkYXRhIGlQcm9kdWN0Oworc3RhdGljIGNoYXIgKmlQcm9kdWN0OwogbW9kdWxlX3BhcmFtKGlQcm9kdWN0LCBjaGFycCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlQcm9kdWN0LCAiVVNCIFByb2R1Y3Qgc3RyaW5nIik7CiAKLXN0YXRpYyBjaGFyICpfX2luaXRkYXRhIGlTZXJpYWxOdW07CitzdGF0aWMgY2hhciAqaVNlcmlhbE51bTsKIG1vZHVsZV9wYXJhbShpU2VyaWFsTnVtLCBjaGFycCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlTZXJpYWxOdW0sICIxIik7CiAKLXN0YXRpYyBjaGFyICpfX2luaXRkYXRhIGlQTlBzdHJpbmc7CitzdGF0aWMgY2hhciAqaVBOUHN0cmluZzsKIG1vZHVsZV9wYXJhbShpUE5Qc3RyaW5nLCBjaGFycCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlQTlBzdHJpbmcsICJNRkc6bGludXg7TURMOmdfcHJpbnRlcjtDTFM6UFJJTlRFUjtTTjoxOyIpOwogCkBAIC0xNTk2LDEzICsxNTk2LDEyIEBACiAJaW50IHN0YXR1czsKIAogCW11dGV4X2xvY2soJnVzYl9wcmludGVyX2dhZGdldC5sb2NrX3ByaW50ZXJfaW8pOwotCWNsYXNzX2Rlc3Ryb3kodXNiX2dhZGdldF9jbGFzcyk7Ci0JdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGdfcHJpbnRlcl9kZXZubywgMik7Ci0KIAlzdGF0dXMgPSB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKCZwcmludGVyX2RyaXZlcik7CiAJaWYgKHN0YXR1cykKIAkJRVJST1IoZGV2LCAidXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAleFxuIiwgc3RhdHVzKTsKIAorCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihnX3ByaW50ZXJfZGV2bm8sIDIpOworCWNsYXNzX2Rlc3Ryb3kodXNiX2dhZGdldF9jbGFzcyk7CiAJbXV0ZXhfdW5sb2NrKCZ1c2JfcHJpbnRlcl9nYWRnZXQubG9ja19wcmludGVyX2lvKTsKIH0KIG1vZHVsZV9leGl0KGNsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5jCmluZGV4IDIwZDQzZGEuLjAxNTExODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogCQlicmVhazsKIAljYXNlIFI4QTY2NTk3X0JVTEs6CiAJCS8qIGlzb2Nocm9ub3VzIHBpcGVzIG1heSBiZSB1c2VkIGFzIGJ1bGsgcGlwZXMgKi8KLQkJaWYgKGluZm8tPnBpcGUgPiBSOEE2NjU5N19CQVNFX1BJUEVOVU1fQlVMSykKKwkJaWYgKGluZm8tPnBpcGUgPj0gUjhBNjY1OTdfQkFTRV9QSVBFTlVNX0JVTEspCiAJCQlidWZudW0gPSBpbmZvLT5waXBlIC0gUjhBNjY1OTdfQkFTRV9QSVBFTlVNX0JVTEs7CiAJCWVsc2UKIAkJCWJ1Zm51bSA9IGluZm8tPnBpcGUgLSBSOEE2NjU5N19CQVNFX1BJUEVOVU1fSVNPQzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwppbmRleCAyNDA0NmMwLi4wZTZhZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCkBAIC0xNTEsNiArMTUxLDggQEAKIAkgIFF1YWxjb21tIGNoaXBzZXRzLiBSb290IEh1YiBoYXMgaW5idWlsdCBUVC4KIAkgIFRoaXMgZHJpdmVyIGRlcGVuZHMgb24gT1RHIGRyaXZlciBmb3IgUEhZIGluaXRpYWxpemF0aW9uLAogCSAgY2xvY2sgbWFuYWdlbWVudCwgcG93ZXJpbmcgdXAgVkJVUywgYW5kIHBvd2VyIG1hbmFnZW1lbnQuCisJICBUaGlzIGRyaXZlciBpcyBub3Qgc3VwcG9ydGVkIG9uIGJvYXJkcyBsaWtlIHRyb3V0IHdoaWNoCisJICBoYXMgYW4gZXh0ZXJuYWwgUEhZLgogCiBjb25maWcgVVNCX0VIQ0lfSENEX1BQQ19PRgogCWJvb2wgIkVIQ0kgc3VwcG9ydCBmb3IgUFBDIFVTQiBjb250cm9sbGVyIG9uIE9GIHBsYXRmb3JtIGJ1cyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYwppbmRleCAyYmFmOGE4Li5hODY5ZTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jCkBAIC0yMjcsOCArMjI3LDggQEAKIAkgKiBtYXJrIEhXIHVuYWNjZXNzaWJsZS4gIFRoZSBQTSBhbmQgVVNCIGNvcmVzIG1ha2Ugc3VyZSB0aGF0CiAJICogdGhlIHJvb3QgaHViIGlzIGVpdGhlciBzdXNwZW5kZWQgb3Igc3RvcHBlZC4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCWVoY2lfcHJlcGFyZV9wb3J0c19mb3JfY29udHJvbGxlcl9zdXNwZW5kKGVoY2ksIGRldmljZV9tYXlfd2FrZXVwKGRldikpOworCXNwaW5fbG9ja19pcnFzYXZlKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAJZWhjaV93cml0ZWwoZWhjaSwgMCwgJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKTsKIAkodm9pZCllaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYwppbmRleCA4NmU0Mjg5Li41Yzc2MWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jCkBAIC01Miw3ICs1Miw2IEBACiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IGlycTsKIAlpbnQgcmV0dmFsOwotCXVuc2lnbmVkIGludCB0ZW1wOwogCiAJcHJfZGVidWcoImluaXRpYWxpemluZyBGU0wtU09DIFVTQiBDb250cm9sbGVyXG4iKTsKIApAQCAtMTI2LDE4ICsxMjUsNiBAQAogCQlnb3RvIGVycjM7CiAJfQogCi0JLyoKLQkgKiBDaGVjayBpZiBpdCBpcyBNUEM1MTIxIFNvQywgb3RoZXJ3aXNlIHNldCBwZGF0YS0+aGF2ZV9zeXNpZl9yZWdzCi0JICogZmxhZyBmb3IgODN4eCBvciA4NTM2IHN5c3RlbSBpbnRlcmZhY2UgcmVnaXN0ZXJzLgotCSAqLwotCWlmIChwZGF0YS0+YmlnX2VuZGlhbl9tbWlvKQotCQl0ZW1wID0gaW5fYmUzMihoY2QtPnJlZ3MgKyBGU0xfU09DX1VTQl9JRCk7Ci0JZWxzZQotCQl0ZW1wID0gaW5fbGUzMihoY2QtPnJlZ3MgKyBGU0xfU09DX1VTQl9JRCk7Ci0KLQlpZiAoKHRlbXAgJiBJRF9NU0spICE9ICh+KCh0ZW1wICYgTklEX01TSykgPj4gOCkgJiBJRF9NU0spKQotCQlwZGF0YS0+aGF2ZV9zeXNpZl9yZWdzID0gMTsKLQogCS8qIEVuYWJsZSBVU0IgY29udHJvbGxlciwgODN4eCBvciA4NTM2ICovCiAJaWYgKHBkYXRhLT5oYXZlX3N5c2lmX3JlZ3MpCiAJCXNldGJpdHMzMihoY2QtPnJlZ3MgKyBGU0xfU09DX1VTQl9DVFJMLCAweDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5oIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5oCmluZGV4IDJjODM1MzcuLjNmYWJlZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmgKQEAgLTE5LDkgKzE5LDYgQEAKICNkZWZpbmUgX0VIQ0lfRlNMX0gKIAogLyogb2Zmc2V0cyBmb3IgdGhlIG5vbi1laGNpIHJlZ2lzdGVycyBpbiB0aGUgRlNMIFNPQyBVU0IgY29udHJvbGxlciAqLwotI2RlZmluZSBGU0xfU09DX1VTQl9JRAkJMHgwCi0jZGVmaW5lIElEX01TSwkJCTB4M2YKLSNkZWZpbmUgTklEX01TSwkJCTB4M2YwMAogI2RlZmluZSBGU0xfU09DX1VTQl9VTFBJVlAJMHgxNzAKICNkZWZpbmUgRlNMX1NPQ19VU0JfUE9SVFNDMQkweDE4NAogI2RlZmluZSBQT1JUX1BUU19NU0sJCSgzPDwzMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwppbmRleCA2ZmVlM2NkLi43NGRjZjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCkBAIC01NzIsNiArNTcyLDggQEAKIAllaGNpLT5pYWFfd2F0Y2hkb2cuZnVuY3Rpb24gPSBlaGNpX2lhYV93YXRjaGRvZzsKIAllaGNpLT5pYWFfd2F0Y2hkb2cuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBlaGNpOwogCisJaGNjX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjY19wYXJhbXMpOworCiAJLyoKIAkgKiBodyBkZWZhdWx0OiAxSyBwZXJpb2RpYyBsaXN0IGhlYWRzLCBvbmUgcGVyIGZyYW1lLgogCSAqIHBlcmlvZGljX3NpemUgY2FuIHNocmluayBieSBVU0JDTUQgdXBkYXRlIGlmIGhjY19wYXJhbXMgYWxsb3dzLgpAQCAtNTc5LDExICs1ODEsMjAgQEAKIAllaGNpLT5wZXJpb2RpY19zaXplID0gREVGQVVMVF9JX1REUFM7CiAJSU5JVF9MSVNUX0hFQUQoJmVoY2ktPmNhY2hlZF9pdGRfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmVoY2ktPmNhY2hlZF9zaXRkX2xpc3QpOworCisJaWYgKEhDQ19QR01fRlJBTUVMSVNUTEVOKGhjY19wYXJhbXMpKSB7CisJCS8qIHBlcmlvZGljIHNjaGVkdWxlIHNpemUgY2FuIGJlIHNtYWxsZXIgdGhhbiBkZWZhdWx0ICovCisJCXN3aXRjaCAoRUhDSV9UVU5FX0ZMUykgeworCQljYXNlIDA6IGVoY2ktPnBlcmlvZGljX3NpemUgPSAxMDI0OyBicmVhazsKKwkJY2FzZSAxOiBlaGNpLT5wZXJpb2RpY19zaXplID0gNTEyOyBicmVhazsKKwkJY2FzZSAyOiBlaGNpLT5wZXJpb2RpY19zaXplID0gMjU2OyBicmVhazsKKwkJZGVmYXVsdDoJQlVHKCk7CisJCX0KKwl9CiAJaWYgKChyZXR2YWwgPSBlaGNpX21lbV9pbml0KGVoY2ksIEdGUF9LRVJORUwpKSA8IDApCiAJCXJldHVybiByZXR2YWw7CiAKIAkvKiBjb250cm9sbGVycyBtYXkgY2FjaGUgc29tZSBvZiB0aGUgcGVyaW9kaWMgc2NoZWR1bGUgLi4uICovCi0JaGNjX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjY19wYXJhbXMpOwogCWlmIChIQ0NfSVNPQ19DQUNIRShoY2NfcGFyYW1zKSkJCS8vIGZ1bGwgZnJhbWUgY2FjaGUKIAkJZWhjaS0+aV90aHJlc2ggPSAyICsgODsKIAllbHNlCQkJCQkvLyBOIG1pY3JvZnJhbWVzIGNhY2hlZApAQCAtNjM3LDEyICs2NDgsNiBAQAogCQkvKiBwZXJpb2RpYyBzY2hlZHVsZSBzaXplIGNhbiBiZSBzbWFsbGVyIHRoYW4gZGVmYXVsdCAqLwogCQl0ZW1wICY9IH4oMyA8PCAyKTsKIAkJdGVtcCB8PSAoRUhDSV9UVU5FX0ZMUyA8PCAyKTsKLQkJc3dpdGNoIChFSENJX1RVTkVfRkxTKSB7Ci0JCWNhc2UgMDogZWhjaS0+cGVyaW9kaWNfc2l6ZSA9IDEwMjQ7IGJyZWFrOwotCQljYXNlIDE6IGVoY2ktPnBlcmlvZGljX3NpemUgPSA1MTI7IGJyZWFrOwotCQljYXNlIDI6IGVoY2ktPnBlcmlvZGljX3NpemUgPSAyNTY7IGJyZWFrOwotCQlkZWZhdWx0OglCVUcoKTsKLQkJfQogCX0KIAlpZiAoSENDX0xQTShoY2NfcGFyYW1zKSkgewogCQkvKiBzdXBwb3J0IGxpbmsgcG93ZXIgbWFuYWdlbWVudCBFSENJIDEuMSBhZGRlbmR1bSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCmluZGV4IDc5NmVhMGMuLjhhNTE1ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKQEAgLTExMSw2ICsxMTEsNyBAQAogewogCWludAkJcG9ydDsKIAl1MzIJCXRlbXA7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKIAogCS8qIElmIHJlbW90ZSB3YWtldXAgaXMgZW5hYmxlZCBmb3IgdGhlIHJvb3QgaHViIGJ1dCBkaXNhYmxlZAogCSAqIGZvciB0aGUgY29udHJvbGxlciwgd2UgbXVzdCBhZGp1c3QgYWxsIHRoZSBwb3J0IHdha2V1cCBmbGFncwpAQCAtMTIwLDYgKzEyMSw4IEBACiAJaWYgKCFlaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5yb290X2h1Yi0+ZG9fcmVtb3RlX3dha2V1cCB8fCBkb193YWtldXApCiAJCXJldHVybjsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZlaGNpLT5sb2NrLCBmbGFncyk7CisKIAkvKiBjbGVhciBwaHkgbG93LXBvd2VyIG1vZGUgYmVmb3JlIGNoYW5naW5nIHdha2V1cCBmbGFncyAqLwogCWlmIChlaGNpLT5oYXNfaG9zdHBjKSB7CiAJCXBvcnQgPSBIQ1NfTl9QT1JUUyhlaGNpLT5oY3NfcGFyYW1zKTsKQEAgLTEzMSw3ICsxMzQsOSBAQAogCQkJdGVtcCA9IGVoY2lfcmVhZGwoZWhjaSwgaG9zdHBjX3JlZyk7CiAJCQllaGNpX3dyaXRlbChlaGNpLCB0ZW1wICYgfkhPU1RQQ19QSENELCBob3N0cGNfcmVnKTsKIAkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAJCW1zbGVlcCg1KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAlwb3J0ID0gSENTX05fUE9SVFMoZWhjaS0+aGNzX3BhcmFtcyk7CkBAIC0xNzAsNiArMTc1LDggQEAKIAkvKiBEb2VzIHRoZSByb290IGh1YiBoYXZlIGEgcG9ydCB3YWtldXAgcGVuZGluZz8gKi8KIAlpZiAoIXN1c3BlbmRpbmcgJiYgKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPnN0YXR1cykgJiBTVFNfUENEKSkKIAkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoZWhjaV90b19oY2QoZWhjaSkpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjaS0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IGVoY2lfYnVzX3N1c3BlbmQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMKaW5kZXggZmE1OWIyNi4uYzhlMzYwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW14Yy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teGMuYwpAQCAtMjEsMTAgKzIxLDEzIEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VscGkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CiAKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCiAjZGVmaW5lIFVMUElfVklFV1BPUlRfT0ZGU0VUCTB4MTcwCiAKIHN0cnVjdCBlaGNpX214Y19wcml2IHsKQEAgLTExNCw2ICsxMTcsNyBAQAogCXN0cnVjdCB1c2JfaGNkICpoY2Q7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IGlycSwgcmV0OworCXVuc2lnbmVkIGludCBmbGFnczsKIAlzdHJ1Y3QgZWhjaV9teGNfcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCBlaGNpX2hjZCAqZWhjaTsKQEAgLTE3Nyw4ICsxODEsOCBAQAogCQljbGtfZW5hYmxlKHByaXYtPmFoYmNsayk7CiAJfQogCi0JLyogImRyIiBkZXZpY2UgaGFzIGl0cyBvd24gY2xvY2sgKi8KLQlpZiAocGRldi0+aWQgPT0gMCkgeworCS8qICJkciIgZGV2aWNlIGhhcyBpdHMgb3duIGNsb2NrIG9uIGkuTVg1MSAqLworCWlmIChjcHVfaXNfbXg1MSgpICYmIChwZGV2LT5pZCA9PSAwKSkgewogCQlwcml2LT5waHkxY2xrID0gY2xrX2dldChkZXYsICJ1c2JfcGh5MSIpOwogCQlpZiAoSVNfRVJSKHByaXYtPnBoeTFjbGspKSB7CiAJCQlyZXQgPSBQVFJfRVJSKHByaXYtPnBoeTFjbGspOwpAQCAtMjQwLDYgKzI0NCwyMyBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2FkZDsKIAorCWlmIChwZGF0YS0+b3RnKSB7CisJCS8qCisJCSAqIGVmaWthbXggYW5kIGVmaWthc2IgaGF2ZSBzb21lIGhhcmR3YXJlIGJ1ZyB3aGljaCBpcworCQkgKiBwcmV2ZW50aW5nIHVzYiB0byB3b3JrIHVubGVzcyBDSFJHVkJVUyBpcyBzZXQuCisJCSAqIEl0J3MgaW4gdmlvbGF0aW9uIG9mIFVTQiBzcGVjcworCQkgKi8KKwkJaWYgKG1hY2hpbmVfaXNfbXg1MV9lZmlrYW14KCkgfHwgbWFjaGluZV9pc19teDUxX2VmaWthc2IoKSkgeworCQkJZmxhZ3MgPSBvdGdfaW9fcmVhZChwZGF0YS0+b3RnLCBVTFBJX09UR19DVFJMKTsKKwkJCWZsYWdzIHw9IFVMUElfT1RHX0NUUkxfQ0hSR1ZCVVM7CisJCQlyZXQgPSBvdGdfaW9fd3JpdGUocGRhdGEtPm90ZywgZmxhZ3MsIFVMUElfT1RHX0NUUkwpOworCQkJaWYgKHJldCkgeworCQkJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIHNldCBDSFJWQlVTXG4iKTsKKwkJCQlnb3RvIGVycl9hZGQ7CisJCQl9CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKIAogZXJyX2FkZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jCmluZGV4IDY4MGYyZWYuLmY3ODRjZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYwpAQCAtNzk2LDcgKzc5Niw3IEBACiAJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmVoY2lfb21hcF9oY19kcml2ZXIsICZwZGV2LT5kZXYsCiAJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CiAJaWYgKCFoY2QpIHsKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBoY2Qgd2l0aCBlcnIgJWRcbiIsIHJldCk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgaGNkIHdpdGggZXJyICVkXG4iLCByZXQpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9jcmVhdGVfaGNkOwogCX0KQEAgLTg2NCw3ICs4NjQsNyBAQAogCiAJcmV0ID0gb21hcF9zdGFydF9laGMob21hcCwgaGNkKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwgImZhaWxlZCB0byBzdGFydCBlaGNpXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHN0YXJ0IGVoY2kgd2l0aCBlcnIgJWRcbiIsIHJldCk7CiAJCWdvdG8gZXJyX3N0YXJ0OwogCX0KIApAQCAtODc5LDcgKzg3OSw3IEBACiAKIAlyZXQgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgaGNkIHdpdGggZXJyICVkXG4iLCByZXQpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIGhjZCB3aXRoIGVyciAlZFxuIiwgcmV0KTsKIAkJZ290byBlcnJfYWRkX2hjZDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYwppbmRleCA3NjE3OWMzLi4wN2JiOTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCkBAIC00NCwyOCArNDQsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBlaGNpX3F1aXJrX2FtZF9TQjgwMChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCitzdGF0aWMgaW50IGVoY2lfcXVpcmtfYW1kX2h1ZHNvbihzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmFtZF9zbWJ1c19kZXY7CiAJdTggcmV2ID0gMDsKIAogCWFtZF9zbWJ1c19kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FUSSwgMHg0Mzg1LCBOVUxMKTsKLQlpZiAoIWFtZF9zbWJ1c19kZXYpCi0JCXJldHVybiAwOwotCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoYW1kX3NtYnVzX2RldiwgUENJX1JFVklTSU9OX0lELCAmcmV2KTsKLQlpZiAocmV2IDwgMHg0MCkgewotCQlwY2lfZGV2X3B1dChhbWRfc21idXNfZGV2KTsKLQkJYW1kX3NtYnVzX2RldiA9IE5VTEw7Ci0JCXJldHVybiAwOworCWlmIChhbWRfc21idXNfZGV2KSB7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGFtZF9zbWJ1c19kZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldik7CisJCWlmIChyZXYgPCAweDQwKSB7CisJCQlwY2lfZGV2X3B1dChhbWRfc21idXNfZGV2KTsKKwkJCWFtZF9zbWJ1c19kZXYgPSBOVUxMOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlhbWRfc21idXNfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTUQsIDB4NzgwYiwgTlVMTCk7CisJCWlmICghYW1kX3NtYnVzX2RldikKKwkJCXJldHVybiAwOworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShhbWRfc21idXNfZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZyZXYpOworCQlpZiAocmV2IDwgMHgxMSB8fCByZXYgPiAweDE4KSB7CisJCQlwY2lfZGV2X3B1dChhbWRfc21idXNfZGV2KTsKKwkJCWFtZF9zbWJ1c19kZXYgPSBOVUxMOworCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlpZiAoIWFtZF9uYl9kZXYpCiAJCWFtZF9uYl9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNRCwgMHgxNTEwLCBOVUxMKTsKLQlpZiAoIWFtZF9uYl9kZXYpCi0JCWVoY2lfZXJyKGVoY2ksICJRVUlSSzogdW5hYmxlIHRvIGdldCBBTUQgTkIgZGV2aWNlXG4iKTsKIAotCWVoY2lfaW5mbyhlaGNpLCAiUVVJUks6IEVuYWJsZSBBTUQgU0I4MDAgTDEgZml4XG4iKTsKKwllaGNpX2luZm8oZWhjaSwgIlFVSVJLOiBFbmFibGUgZXhjZXB0aW9uIGZvciBBTUQgSHVkc29uIEFTUE1cbiIpOwogCiAJcGNpX2Rldl9wdXQoYW1kX3NtYnVzX2Rldik7CiAJYW1kX3NtYnVzX2RldiA9IE5VTEw7CkBAIC0xMzEsNyArMTM4LDcgQEAKIAkvKiBjYWNoZSB0aGlzIHJlYWRvbmx5IGRhdGE7IG1pbmltaXplIGNoaXAgcmVhZHMgKi8KIAllaGNpLT5oY3NfcGFyYW1zID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CiAKLQlpZiAoZWhjaV9xdWlya19hbWRfU0I4MDAoZWhjaSkpCisJaWYgKGVoY2lfcXVpcmtfYW1kX2h1ZHNvbihlaGNpKSkKIAkJZWhjaS0+YW1kX2wxX2ZpeCA9IDE7CiAKIAlyZXR2YWwgPSBlaGNpX2hhbHQoZWhjaSk7CkBAIC0zNjAsOCArMzY3LDggQEAKIAkgKiBtYXJrIEhXIHVuYWNjZXNzaWJsZS4gIFRoZSBQTSBhbmQgVVNCIGNvcmVzIG1ha2Ugc3VyZSB0aGF0CiAJICogdGhlIHJvb3QgaHViIGlzIGVpdGhlciBzdXNwZW5kZWQgb3Igc3RvcHBlZC4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAllaGNpX3ByZXBhcmVfcG9ydHNfZm9yX2NvbnRyb2xsZXJfc3VzcGVuZChlaGNpLCBkb193YWtldXApOworCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCWVoY2lfd3JpdGVsKGVoY2ksIDAsICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7CiAJKHZvaWQpZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+aW50cl9lbmFibGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2ZzbC1tcGgtZHItb2YuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZnNsLW1waC1kci1vZi5jCmluZGV4IDU3NGI5OWUuLjc5YTY2ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZnNsLW1waC1kci1vZi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZnNsLW1waC1kci1vZi5jCkBAIC0yNjIsMTkgKzI2MiwyNCBAQAogCX0KIH0KIAotc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgZnNsX3VzYjJfbXBjNTEyMV9wZCA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSBmc2xfdXNiMl9tcGM1MTIxX3BkID0gewogCS5iaWdfZW5kaWFuX2Rlc2MgPSAxLAogCS5iaWdfZW5kaWFuX21taW8gPSAxLAogCS5lcyA9IDEsCisJLmhhdmVfc3lzaWZfcmVncyA9IDAsCiAJLmxlX3NldHVwX2J1ZiA9IDEsCiAJLmluaXQgPSBmc2xfdXNiMl9tcGM1MTIxX2luaXQsCiAJLmV4aXQgPSBmc2xfdXNiMl9tcGM1MTIxX2V4aXQsCiB9OwogI2VuZGlmIC8qIENPTkZJR19QUENfTVBDNTEyeCAqLwogCitzdGF0aWMgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgZnNsX3VzYjJfbXBjOHh4eF9wZCA9IHsKKwkuaGF2ZV9zeXNpZl9yZWdzID0gMSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzbF91c2IyX21waF9kcl9vZl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAiZnNsLXVzYjItbXBoIiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImZzbC11c2IyLWRyIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImZzbC11c2IyLW1waCIsIC5kYXRhID0gJmZzbF91c2IyX21wYzh4eHhfcGQsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1kciIsIC5kYXRhID0gJmZzbF91c2IyX21wYzh4eHhfcGQsIH0sCiAjaWZkZWYgQ09ORklHX1BQQ19NUEM1MTJ4CiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS11c2IyLWRyIiwgLmRhdGEgPSAmZnNsX3VzYjJfbXBjNTEyMV9wZCwgfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKaW5kZXggOTkwZjA2Yi4uMmU5NjAyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCkBAIC04NjEsNiArODYxLDcgQEAKIAkJCURCRygiZGV2ICVkIGVwJWQgbWF4cGFja2V0ICVkXG4iLAogCQkJCXVkZXYtPmRldm51bSwgZXBudW0sIGVwLT5tYXhwYWNrZXQpOwogCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCWtmcmVlKGVwKTsKIAkJCWdvdG8gZmFpbDsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMKaW5kZXggZmNiZjRhYi4uMDIzMTgxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1kYmcuYwpAQCAtMTY5LDkgKzE2OSwxMCBAQAogCX0KIH0KIAotdm9pZCB4aGNpX3ByaW50X2lyX3NldChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX2ludHJfcmVnICppcl9zZXQsIGludCBzZXRfbnVtKQordm9pZCB4aGNpX3ByaW50X2lyX3NldChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBzZXRfbnVtKQogewotCXZvaWQgKmFkZHI7CisJc3RydWN0IHhoY2lfaW50cl9yZWcgX19pb21lbSAqaXJfc2V0ID0gJnhoY2ktPnJ1bl9yZWdzLT5pcl9zZXRbc2V0X251bV07CisJdm9pZCBfX2lvbWVtICphZGRyOwogCXUzMiB0ZW1wOwogCXU2NCB0ZW1wXzY0OwogCkBAIC00NDksNyArNDUwLDcgQEAKIAl9CiB9CiAKLXZvaWQgeGhjaV9kYmdfc2xvdF9jdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICpjdHgpCitzdGF0aWMgdm9pZCB4aGNpX2RiZ19zbG90X2N0eChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKmN0eCkKIHsKIAkvKiBGaWVsZHMgYXJlIDMyIGJpdHMgd2lkZSwgRE1BIGFkZHJlc3NlcyBhcmUgaW4gYnl0ZXMgKi8KIAlpbnQgZmllbGRfc2l6ZSA9IDMyIC8gODsKQEAgLTQ4OCw3ICs0ODksNyBAQAogCQlkYmdfcnN2ZDY0KHhoY2ksICh1NjQgKilzbG90X2N0eCwgZG1hKTsKIH0KIAotdm9pZCB4aGNpX2RiZ19lcF9jdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorc3RhdGljIHZvaWQgeGhjaV9kYmdfZXBfY3R4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKIAkJICAgICBzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICpjdHgsCiAJCSAgICAgdW5zaWduZWQgaW50IGxhc3RfZXApCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKaW5kZXggMWQwZjQ1Zi4uYTk1MzQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYwpAQCAtMzA3LDcgKzMwNyw3IEBACiAKIC8qKioqKioqKioqKioqKioqKiBTdHJlYW1zIHN0cnVjdHVyZXMgbWFuaXB1bGF0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgeGhjaV9mcmVlX3N0cmVhbV9jdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorc3RhdGljIHZvaWQgeGhjaV9mcmVlX3N0cmVhbV9jdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLAogCQl1bnNpZ25lZCBpbnQgbnVtX3N0cmVhbV9jdHhzLAogCQlzdHJ1Y3QgeGhjaV9zdHJlYW1fY3R4ICpzdHJlYW1fY3R4LCBkbWFfYWRkcl90IGRtYSkKIHsKQEAgLTMzNSw3ICszMzUsNyBAQAogICogVGhlIHN0cmVhbSBjb250ZXh0IGFycmF5IG11c3QgYmUgYSBwb3dlciBvZiAyLCBhbmQgY2FuIGJlIGFzIHNtYWxsIGFzCiAgKiA2NCBieXRlcyBvciBhcyBsYXJnZSBhcyAxTUIuCiAgKi8KLXN0cnVjdCB4aGNpX3N0cmVhbV9jdHggKnhoY2lfYWxsb2Nfc3RyZWFtX2N0eChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCitzdGF0aWMgc3RydWN0IHhoY2lfc3RyZWFtX2N0eCAqeGhjaV9hbGxvY19zdHJlYW1fY3R4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKIAkJdW5zaWduZWQgaW50IG51bV9zdHJlYW1fY3R4cywgZG1hX2FkZHJfdCAqZG1hLAogCQlnZnBfdCBtZW1fZmxhZ3MpCiB7CkBAIC0xOTAwLDExICsxOTAwLDExIEBACiAJdmFsICY9IERCT0ZGX01BU0s7CiAJeGhjaV9kYmcoeGhjaSwgIi8vIERvb3JiZWxsIGFycmF5IGlzIGxvY2F0ZWQgYXQgb2Zmc2V0IDB4JXgiCiAJCQkiIGZyb20gY2FwIHJlZ3MgYmFzZSBhZGRyXG4iLCB2YWwpOwotCXhoY2ktPmRiYSA9ICh2b2lkICopIHhoY2ktPmNhcF9yZWdzICsgdmFsOworCXhoY2ktPmRiYSA9ICh2b2lkIF9faW9tZW0gKikgeGhjaS0+Y2FwX3JlZ3MgKyB2YWw7CiAJeGhjaV9kYmdfcmVncyh4aGNpKTsKIAl4aGNpX3ByaW50X3J1bl9yZWdzKHhoY2kpOwogCS8qIFNldCBpcl9zZXQgdG8gaW50ZXJydXB0IHJlZ2lzdGVyIHNldCAwICovCi0JeGhjaS0+aXJfc2V0ID0gKHZvaWQgKikgeGhjaS0+cnVuX3JlZ3MtPmlyX3NldDsKKwl4aGNpLT5pcl9zZXQgPSAmeGhjaS0+cnVuX3JlZ3MtPmlyX3NldFswXTsKIAogCS8qCiAJICogRXZlbnQgcmluZyBzZXR1cDogQWxsb2NhdGUgYSBub3JtYWwgcmluZywgYnV0IGFsc28gc2V0dXAKQEAgLTE5NjEsNyArMTk2MSw3IEBACiAJLyogU2V0IHRoZSBldmVudCByaW5nIGRlcXVldWUgYWRkcmVzcyAqLwogCXhoY2lfc2V0X2hjX2V2ZW50X2RlcSh4aGNpKTsKIAl4aGNpX2RiZyh4aGNpLCAiV3JvdGUgRVJTVCBhZGRyZXNzIHRvIGlyX3NldCAwLlxuIik7Ci0JeGhjaV9wcmludF9pcl9zZXQoeGhjaSwgeGhjaS0+aXJfc2V0LCAwKTsKKwl4aGNpX3ByaW50X2lyX3NldCh4aGNpLCAwKTsKIAogCS8qCiAJICogWFhYOiBNaWdodCBuZWVkIHRvIHNldCB0aGUgSW50ZXJydXB0ZXIgTW9kZXJhdGlvbiBSZWdpc3RlciB0bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKaW5kZXggZGY1NThmNi4uMzI4OWJmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCkBAIC0zMDgsMTEgKzMwOCw4IEBACiAvKiBSaW5nIHRoZSBob3N0IGNvbnRyb2xsZXIgZG9vcmJlbGwgYWZ0ZXIgcGxhY2luZyBhIGNvbW1hbmQgb24gdGhlIHJpbmcgKi8KIHZvaWQgeGhjaV9yaW5nX2NtZF9kYihzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCiB7Ci0JdTMyIHRlbXA7Ci0KIAl4aGNpX2RiZyh4aGNpLCAiLy8gRGluZyBkb25nIVxuIik7Ci0JdGVtcCA9IHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPmRiYS0+ZG9vcmJlbGxbMF0pICYgREJfTUFTSzsKLQl4aGNpX3dyaXRlbCh4aGNpLCB0ZW1wIHwgREJfVEFSR0VUX0hPU1QsICZ4aGNpLT5kYmEtPmRvb3JiZWxsWzBdKTsKKwl4aGNpX3dyaXRlbCh4aGNpLCBEQl9WQUxVRV9IT1NULCAmeGhjaS0+ZGJhLT5kb29yYmVsbFswXSk7CiAJLyogRmx1c2ggUENJIHBvc3RlZCB3cml0ZXMgKi8KIAl4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5kYmEtPmRvb3JiZWxsWzBdKTsKIH0KQEAgLTMyMiwyNiArMzE5LDI0IEBACiAJCXVuc2lnbmVkIGludCBlcF9pbmRleCwKIAkJdW5zaWduZWQgaW50IHN0cmVhbV9pZCkKIHsKLQlzdHJ1Y3QgeGhjaV92aXJ0X2VwICplcDsKLQl1bnNpZ25lZCBpbnQgZXBfc3RhdGU7Ci0JdTMyIGZpZWxkOwogCV9fdTMyIF9faW9tZW0gKmRiX2FkZHIgPSAmeGhjaS0+ZGJhLT5kb29yYmVsbFtzbG90X2lkXTsKKwlzdHJ1Y3QgeGhjaV92aXJ0X2VwICplcCA9ICZ4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcHNbZXBfaW5kZXhdOworCXVuc2lnbmVkIGludCBlcF9zdGF0ZSA9IGVwLT5lcF9zdGF0ZTsKIAotCWVwID0gJnhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF07Ci0JZXBfc3RhdGUgPSBlcC0+ZXBfc3RhdGU7CiAJLyogRG9uJ3QgcmluZyB0aGUgZG9vcmJlbGwgZm9yIHRoaXMgZW5kcG9pbnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcKLQkgKiBjYW5jZWxsYXRpb25zIGJlY2F1c2UgdGhlIHdlIGRvbid0IHdhbnQgdG8gaW50ZXJydXB0IHByb2Nlc3NpbmcuCisJICogY2FuY2VsbGF0aW9ucyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gaW50ZXJydXB0IHByb2Nlc3NpbmcuCiAJICogV2UgZG9uJ3Qgd2FudCB0byByZXN0YXJ0IGFueSBzdHJlYW0gcmluZ3MgaWYgdGhlcmUncyBhIHNldCBkZXF1ZXVlCiAJICogcG9pbnRlciBjb21tYW5kIHBlbmRpbmcgYmVjYXVzZSB0aGUgZGV2aWNlIGNhbiBjaG9vc2UgdG8gc3RhcnQgYW55CiAJICogc3RyZWFtIG9uY2UgdGhlIGVuZHBvaW50IGlzIG9uIHRoZSBIVyBzY2hlZHVsZS4KIAkgKiBGSVhNRSAtIGNoZWNrIGFsbCB0aGUgc3RyZWFtIHJpbmdzIGZvciBwZW5kaW5nIGNhbmNlbGxhdGlvbnMuCiAJICovCi0JaWYgKCEoZXBfc3RhdGUgJiBFUF9IQUxUX1BFTkRJTkcpICYmICEoZXBfc3RhdGUgJiBTRVRfREVRX1BFTkRJTkcpCi0JCQkmJiAhKGVwX3N0YXRlICYgRVBfSEFMVEVEKSkgewotCQlmaWVsZCA9IHhoY2lfcmVhZGwoeGhjaSwgZGJfYWRkcikgJiBEQl9NQVNLOwotCQlmaWVsZCB8PSBFUElfVE9fREIoZXBfaW5kZXgpIHwgU1RSRUFNX0lEX1RPX0RCKHN0cmVhbV9pZCk7Ci0JCXhoY2lfd3JpdGVsKHhoY2ksIGZpZWxkLCBkYl9hZGRyKTsKLQl9CisJaWYgKChlcF9zdGF0ZSAmIEVQX0hBTFRfUEVORElORykgfHwgKGVwX3N0YXRlICYgU0VUX0RFUV9QRU5ESU5HKSB8fAorCSAgICAoZXBfc3RhdGUgJiBFUF9IQUxURUQpKQorCQlyZXR1cm47CisJeGhjaV93cml0ZWwoeGhjaSwgREJfVkFMVUUoZXBfaW5kZXgsIHN0cmVhbV9pZCksIGRiX2FkZHIpOworCS8qIFRoZSBDUFUgaGFzIGJldHRlciB0aGluZ3MgdG8gZG8gYXQgdGhpcyBwb2ludCB0aGFuIHdhaXQgZm9yIGEKKwkgKiB3cml0ZS1wb3N0aW5nIGZsdXNoLiAgSXQnbGwgZ2V0IHRoZXJlIHNvb24gZW5vdWdoLgorCSAqLwogfQogCiAvKiBSaW5nIHRoZSBkb29yYmVsbCBmb3IgYW55IHJpbmdzIHdpdGggcGVuZGluZyBVUkJzICovCkBAIC00NzksOCArNDc0LDExIEBACiAJc3RhdGUtPm5ld19kZXFfc2VnID0gZmluZF90cmJfc2VnKGN1cl90ZC0+c3RhcnRfc2VnLAogCQkJZGV2LT5lcHNbZXBfaW5kZXhdLnN0b3BwZWRfdHJiLAogCQkJJnN0YXRlLT5uZXdfY3ljbGVfc3RhdGUpOwotCWlmICghc3RhdGUtPm5ld19kZXFfc2VnKQotCQlCVUcoKTsKKwlpZiAoIXN0YXRlLT5uZXdfZGVxX3NlZykgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCiAJLyogRGlnIG91dCB0aGUgY3ljbGUgc3RhdGUgc2F2ZWQgYnkgdGhlIHhIQyBkdXJpbmcgdGhlIHN0b3AgZXAgY21kICovCiAJeGhjaV9kYmcoeGhjaSwgIkZpbmRpbmcgZW5kcG9pbnQgY29udGV4dFxuIik7CiAJZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksIGRldi0+b3V0X2N0eCwgZXBfaW5kZXgpOwpAQCAtNDkxLDggKzQ4OSwxMCBAQAogCXN0YXRlLT5uZXdfZGVxX3NlZyA9IGZpbmRfdHJiX3NlZyhzdGF0ZS0+bmV3X2RlcV9zZWcsCiAJCQlzdGF0ZS0+bmV3X2RlcV9wdHIsCiAJCQkmc3RhdGUtPm5ld19jeWNsZV9zdGF0ZSk7Ci0JaWYgKCFzdGF0ZS0+bmV3X2RlcV9zZWcpCi0JCUJVRygpOworCWlmICghc3RhdGUtPm5ld19kZXFfc2VnKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CiAKIAl0cmIgPSAmc3RhdGUtPm5ld19kZXFfcHRyLT5nZW5lcmljOwogCWlmICgodHJiLT5maWVsZFszXSAmIFRSQl9UWVBFX0JJVE1BU0spID09IFRSQl9UWVBFKFRSQl9MSU5LKSAmJgpAQCAtMTE4OCw3ICsxMTg4LDcgQEAKIAogCWFkZHIgPSAmeGhjaS0+b3BfcmVncy0+cG9ydF9zdGF0dXNfYmFzZSArIE5VTV9QT1JUX1JFR1MgKiAocG9ydF9pZCAtIDEpOwogCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksIGFkZHIpOwotCWlmICgodGVtcCAmIFBPUlRfQ09OTkVDVCkgJiYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfU1VTUEVOREVEKSkgeworCWlmIChoY2QtPnN0YXRlID09IEhDX1NUQVRFX1NVU1BFTkRFRCkgewogCQl4aGNpX2RiZyh4aGNpLCAicmVzdW1lIHJvb3QgaHViXG4iKTsKIAkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoaGNkKTsKIAl9CkBAIC0xNzEwLDggKzE3MTAsNyBAQAogCQkvKiBPdGhlcnMgYWxyZWFkeSBoYW5kbGVkIGFib3ZlICovCiAJCWJyZWFrOwogCX0KLQlkZXZfZGJnKCZ0ZC0+dXJiLT5kZXYtPmRldiwKLQkJCSJlcCAlI3ggLSBhc2tlZCBmb3IgJWQgYnl0ZXMsICIKKwl4aGNpX2RiZyh4aGNpLCAiZXAgJSN4IC0gYXNrZWQgZm9yICVkIGJ5dGVzLCAiCiAJCQkiJWQgYnl0ZXMgdW50cmFuc2ZlcnJlZFxuIiwKIAkJCXRkLT51cmItPmVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsCiAJCQl0ZC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLApAQCAtMjM2OSwxMiArMjM2OCwxMyBAQAogCiAJCS8qIFNjYXR0ZXIgZ2F0aGVyIGxpc3QgZW50cmllcyBtYXkgY3Jvc3MgNjRLQiBib3VuZGFyaWVzICovCiAJCXJ1bm5pbmdfdG90YWwgPSBUUkJfTUFYX0JVRkZfU0laRSAtCi0JCQkoc2dfZG1hX2FkZHJlc3Moc2cpICYgKCgxIDw8IFRSQl9NQVhfQlVGRl9TSElGVCkgLSAxKSk7CisJCQkoc2dfZG1hX2FkZHJlc3Moc2cpICYgKFRSQl9NQVhfQlVGRl9TSVpFIC0gMSkpOworCQlydW5uaW5nX3RvdGFsICY9IFRSQl9NQVhfQlVGRl9TSVpFIC0gMTsKIAkJaWYgKHJ1bm5pbmdfdG90YWwgIT0gMCkKIAkJCW51bV90cmJzKys7CiAKIAkJLyogSG93IG1hbnkgbW9yZSA2NEtCIGNodW5rcyB0byB0cmFuc2ZlciwgaG93IG1hbnkgbW9yZSBUUkJzPyAqLwotCQl3aGlsZSAocnVubmluZ190b3RhbCA8IHNnX2RtYV9sZW4oc2cpKSB7CisJCXdoaWxlIChydW5uaW5nX3RvdGFsIDwgc2dfZG1hX2xlbihzZykgJiYgcnVubmluZ190b3RhbCA8IHRlbXApIHsKIAkJCW51bV90cmJzKys7CiAJCQlydW5uaW5nX3RvdGFsICs9IFRSQl9NQVhfQlVGRl9TSVpFOwogCQl9CkBAIC0yMzg5LDcgKzIzODksOCBAQAogCX0KIAl4aGNpX2RiZyh4aGNpLCAiXG4iKTsKIAlpZiAoIWluX2ludGVycnVwdCgpKQotCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LCAiZXAgJSN4IC0gdXJiIGxlbiA9ICVkLCBzZ2xpc3QgdXNlZCwgbnVtX3RyYnMgPSAlZFxuIiwKKwkJeGhjaV9kYmcoeGhjaSwgImVwICUjeCAtIHVyYiBsZW4gPSAlZCwgc2dsaXN0IHVzZWQsICIKKwkJCQkibnVtX3RyYnMgPSAlZFxuIiwKIAkJCQl1cmItPmVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsCiAJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAogCQkJCW51bV90cmJzKTsKQEAgLTIzOTksMTEgKzI0MDAsMTEgQEAKIHN0YXRpYyB2b2lkIGNoZWNrX3RyYl9tYXRoKHN0cnVjdCB1cmIgKnVyYiwgaW50IG51bV90cmJzLCBpbnQgcnVubmluZ190b3RhbCkKIHsKIAlpZiAobnVtX3RyYnMgIT0gMCkKLQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgIiVzIC0gZXAgJSN4IC0gTWlzY2FsY3VsYXRlZCBudW1iZXIgb2YgIgorCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBlcCAlI3ggLSBNaXNjYWxjdWxhdGVkIG51bWJlciBvZiAiCiAJCQkJIlRSQnMsICVkIGxlZnRcbiIsIF9fZnVuY19fLAogCQkJCXVyYi0+ZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcywgbnVtX3RyYnMpOwogCWlmIChydW5uaW5nX3RvdGFsICE9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKLQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgIiVzIC0gZXAgJSN4IC0gTWlzY2FsY3VsYXRlZCB0eCBsZW5ndGgsICIKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gZXAgJSN4IC0gTWlzY2FsY3VsYXRlZCB0eCBsZW5ndGgsICIKIAkJCQkicXVldWVkICUjeCAoJWQpLCBhc2tlZCBmb3IgJSN4ICglZClcbiIsCiAJCQkJX19mdW5jX18sCiAJCQkJdXJiLT5lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLApAQCAtMjQxNCwxNCArMjQxNSwxNyBAQAogCiBzdGF0aWMgdm9pZCBnaXZlYmFja19maXJzdF90cmIoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBpbnQgc2xvdF9pZCwKIAkJdW5zaWduZWQgaW50IGVwX2luZGV4LCB1bnNpZ25lZCBpbnQgc3RyZWFtX2lkLCBpbnQgc3RhcnRfY3ljbGUsCi0JCXN0cnVjdCB4aGNpX2dlbmVyaWNfdHJiICpzdGFydF90cmIsIHN0cnVjdCB4aGNpX3RkICp0ZCkKKwkJc3RydWN0IHhoY2lfZ2VuZXJpY190cmIgKnN0YXJ0X3RyYikKIHsKIAkvKgogCSAqIFBhc3MgYWxsIHRoZSBUUkJzIHRvIHRoZSBoYXJkd2FyZSBhdCBvbmNlIGFuZCBtYWtlIHN1cmUgdGhpcyB3cml0ZQogCSAqIGlzbid0IHJlb3JkZXJlZC4KIAkgKi8KIAl3bWIoKTsKLQlzdGFydF90cmItPmZpZWxkWzNdIHw9IHN0YXJ0X2N5Y2xlOworCWlmIChzdGFydF9jeWNsZSkKKwkJc3RhcnRfdHJiLT5maWVsZFszXSB8PSBzdGFydF9jeWNsZTsKKwllbHNlCisJCXN0YXJ0X3RyYi0+ZmllbGRbM10gJj0gfjB4MTsKIAl4aGNpX3JpbmdfZXBfZG9vcmJlbGwoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgsIHN0cmVhbV9pZCk7CiB9CiAKQEAgLTI0NDksNyArMjQ1Myw3IEBACiAJICogdG8gc2V0IHRoZSBwb2xsaW5nIGludGVydmFsIChvbmNlIHRoZSBBUEkgaXMgYWRkZWQpLgogCSAqLwogCWlmICh4aGNpX2ludGVydmFsICE9IGVwX2ludGVydmFsKSB7Ci0JCWlmICghcHJpbnRrX3JhdGVsaW1pdCgpKQorCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgIkRyaXZlciB1c2VzIGRpZmZlcmVudCBpbnRlcnZhbCIKIAkJCQkJIiAoJWQgbWljcm9mcmFtZSVzKSB0aGFuIHhIQ0kgIgogCQkJCQkiKCVkIG1pY3JvZnJhbWUlcylcbiIsCkBAIC0yNTM1LDggKzI1MzksNyBAQAogCXNnID0gdXJiLT5zZzsKIAlhZGRyID0gKHU2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOwogCXRoaXNfc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7Ci0JdHJiX2J1ZmZfbGVuID0gVFJCX01BWF9CVUZGX1NJWkUgLQotCQkoYWRkciAmICgoMSA8PCBUUkJfTUFYX0JVRkZfU0hJRlQpIC0gMSkpOworCXRyYl9idWZmX2xlbiA9IFRSQl9NQVhfQlVGRl9TSVpFIC0gKGFkZHIgJiAoVFJCX01BWF9CVUZGX1NJWkUgLSAxKSk7CiAJdHJiX2J1ZmZfbGVuID0gbWluX3QoaW50LCB0cmJfYnVmZl9sZW4sIHRoaXNfc2dfbGVuKTsKIAlpZiAodHJiX2J1ZmZfbGVuID4gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKQogCQl0cmJfYnVmZl9sZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CkBAIC0yNTUxLDkgKzI1NTQsMTEgQEAKIAkJdTMyIHJlbWFpbmRlciA9IDA7CiAKIAkJLyogRG9uJ3QgY2hhbmdlIHRoZSBjeWNsZSBiaXQgb2YgdGhlIGZpcnN0IFRSQiB1bnRpbCBsYXRlciAqLwotCQlpZiAoZmlyc3RfdHJiKQorCQlpZiAoZmlyc3RfdHJiKSB7CiAJCQlmaXJzdF90cmIgPSBmYWxzZTsKLQkJZWxzZQorCQkJaWYgKHN0YXJ0X2N5Y2xlID09IDApCisJCQkJZmllbGQgfD0gMHgxOworCQl9IGVsc2UKIAkJCWZpZWxkIHw9IGVwX3JpbmctPmN5Y2xlX3N0YXRlOwogCiAJCS8qIENoYWluIGFsbCB0aGUgVFJCcyB0b2dldGhlcjsgY2xlYXIgdGhlIGNoYWluIGJpdCBpbiB0aGUgbGFzdApAQCAtMjU3Miw3ICsyNTc3LDcgQEAKIAkJCQkodW5zaWduZWQgaW50KSAoYWRkciArIFRSQl9NQVhfQlVGRl9TSVpFKSAmIH4oVFJCX01BWF9CVUZGX1NJWkUgLSAxKSwKIAkJCQkodW5zaWduZWQgaW50KSBhZGRyICsgdHJiX2J1ZmZfbGVuKTsKIAkJaWYgKFRSQl9NQVhfQlVGRl9TSVpFIC0KLQkJCQkoYWRkciAmICgoMSA8PCBUUkJfTUFYX0JVRkZfU0hJRlQpIC0gMSkpIDwgdHJiX2J1ZmZfbGVuKSB7CisJCQkJKGFkZHIgJiAoVFJCX01BWF9CVUZGX1NJWkUgLSAxKSkgPCB0cmJfYnVmZl9sZW4pIHsKIAkJCXhoY2lfd2Fybih4aGNpLCAiV0FSTjogc2cgZG1hIHhmZXIgY3Jvc3NlcyA2NEtCIGJvdW5kYXJpZXMhXG4iKTsKIAkJCXhoY2lfZGJnKHhoY2ksICJOZXh0IGJvdW5kYXJ5IGF0ICUjeCwgZW5kIGRtYSA9ICUjeFxuIiwKIAkJCQkJKHVuc2lnbmVkIGludCkgKGFkZHIgKyBUUkJfTUFYX0JVRkZfU0laRSkgJiB+KFRSQl9NQVhfQlVGRl9TSVpFIC0gMSksCkBAIC0yNjE2LDcgKzI2MjEsNyBAQAogCQl9CiAKIAkJdHJiX2J1ZmZfbGVuID0gVFJCX01BWF9CVUZGX1NJWkUgLQotCQkJKGFkZHIgJiAoKDEgPDwgVFJCX01BWF9CVUZGX1NISUZUKSAtIDEpKTsKKwkJCShhZGRyICYgKFRSQl9NQVhfQlVGRl9TSVpFIC0gMSkpOwogCQl0cmJfYnVmZl9sZW4gPSBtaW5fdChpbnQsIHRyYl9idWZmX2xlbiwgdGhpc19zZ19sZW4pOwogCQlpZiAocnVubmluZ190b3RhbCArIHRyYl9idWZmX2xlbiA+IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKIAkJCXRyYl9idWZmX2xlbiA9CkBAIC0yNjI1LDcgKzI2MzAsNyBAQAogCiAJY2hlY2tfdHJiX21hdGgodXJiLCBudW1fdHJicywgcnVubmluZ190b3RhbCk7CiAJZ2l2ZWJhY2tfZmlyc3RfdHJiKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4LCB1cmItPnN0cmVhbV9pZCwKLQkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIsIHRkKTsKKwkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIpOwogCXJldHVybiAwOwogfQogCkBAIC0yNjU2LDcgKzI2NjEsOCBAQAogCW51bV90cmJzID0gMDsKIAkvKiBIb3cgbXVjaCBkYXRhIGlzIChwb3RlbnRpYWxseSkgbGVmdCBiZWZvcmUgdGhlIDY0S0IgYm91bmRhcnk/ICovCiAJcnVubmluZ190b3RhbCA9IFRSQl9NQVhfQlVGRl9TSVpFIC0KLQkJKHVyYi0+dHJhbnNmZXJfZG1hICYgKCgxIDw8IFRSQl9NQVhfQlVGRl9TSElGVCkgLSAxKSk7CisJCSh1cmItPnRyYW5zZmVyX2RtYSAmIChUUkJfTUFYX0JVRkZfU0laRSAtIDEpKTsKKwlydW5uaW5nX3RvdGFsICY9IFRSQl9NQVhfQlVGRl9TSVpFIC0gMTsKIAogCS8qIElmIHRoZXJlJ3Mgc29tZSBkYXRhIG9uIHRoaXMgNjRLQiBjaHVuaywgb3Igd2UgaGF2ZSB0byBzZW5kIGEKIAkgKiB6ZXJvLWxlbmd0aCB0cmFuc2Zlciwgd2UgbmVlZCBhdCBsZWFzdCBvbmUgVFJCCkBAIC0yNjcxLDcgKzI2NzcsOCBAQAogCS8qIEZJWE1FOiB0aGlzIGRvZXNuJ3QgZGVhbCB3aXRoIFVSQl9aRVJPX1BBQ0tFVCAtIG5lZWQgb25lIG1vcmUgKi8KIAogCWlmICghaW5faW50ZXJydXB0KCkpCi0JCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsICJlcCAlI3ggLSB1cmIgbGVuID0gJSN4ICglZCksIGFkZHIgPSAlI2xseCwgbnVtX3RyYnMgPSAlZFxuIiwKKwkJeGhjaV9kYmcoeGhjaSwgImVwICUjeCAtIHVyYiBsZW4gPSAlI3ggKCVkKSwgIgorCQkJCSJhZGRyID0gJSNsbHgsIG51bV90cmJzID0gJWRcbiIsCiAJCQkJdXJiLT5lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAogCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKIAkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCkBAIC0yNjk5LDggKzI3MDYsOCBAQAogCS8qIEhvdyBtdWNoIGRhdGEgaXMgaW4gdGhlIGZpcnN0IFRSQj8gKi8KIAlhZGRyID0gKHU2NCkgdXJiLT50cmFuc2Zlcl9kbWE7CiAJdHJiX2J1ZmZfbGVuID0gVFJCX01BWF9CVUZGX1NJWkUgLQotCQkodXJiLT50cmFuc2Zlcl9kbWEgJiAoKDEgPDwgVFJCX01BWF9CVUZGX1NISUZUKSAtIDEpKTsKLQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDwgdHJiX2J1ZmZfbGVuKQorCQkodXJiLT50cmFuc2Zlcl9kbWEgJiAoVFJCX01BWF9CVUZGX1NJWkUgLSAxKSk7CisJaWYgKHRyYl9idWZmX2xlbiA+IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKIAkJdHJiX2J1ZmZfbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOwogCiAJZmlyc3RfdHJiID0gdHJ1ZTsKQEAgLTI3MTEsOSArMjcxOCwxMSBAQAogCQlmaWVsZCA9IDA7CiAKIAkJLyogRG9uJ3QgY2hhbmdlIHRoZSBjeWNsZSBiaXQgb2YgdGhlIGZpcnN0IFRSQiB1bnRpbCBsYXRlciAqLwotCQlpZiAoZmlyc3RfdHJiKQorCQlpZiAoZmlyc3RfdHJiKSB7CiAJCQlmaXJzdF90cmIgPSBmYWxzZTsKLQkJZWxzZQorCQkJaWYgKHN0YXJ0X2N5Y2xlID09IDApCisJCQkJZmllbGQgfD0gMHgxOworCQl9IGVsc2UKIAkJCWZpZWxkIHw9IGVwX3JpbmctPmN5Y2xlX3N0YXRlOwogCiAJCS8qIENoYWluIGFsbCB0aGUgVFJCcyB0b2dldGhlcjsgY2xlYXIgdGhlIGNoYWluIGJpdCBpbiB0aGUgbGFzdApAQCAtMjc1Nyw3ICsyNzY2LDcgQEAKIAogCWNoZWNrX3RyYl9tYXRoKHVyYiwgbnVtX3RyYnMsIHJ1bm5pbmdfdG90YWwpOwogCWdpdmViYWNrX2ZpcnN0X3RyYih4aGNpLCBzbG90X2lkLCBlcF9pbmRleCwgdXJiLT5zdHJlYW1faWQsCi0JCQlzdGFydF9jeWNsZSwgc3RhcnRfdHJiLCB0ZCk7CisJCQlzdGFydF9jeWNsZSwgc3RhcnRfdHJiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjgxOCwxMyArMjgyNywxNyBAQAogCS8qIFF1ZXVlIHNldHVwIFRSQiAtIHNlZSBzZWN0aW9uIDYuNC4xLjIuMSAqLwogCS8qIEZJWE1FIGJldHRlciB3YXkgdG8gdHJhbnNsYXRlIHNldHVwX3BhY2tldCBpbnRvIHR3byB1MzIgZmllbGRzPyAqLwogCXNldHVwID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisJZmllbGQgPSAwOworCWZpZWxkIHw9IFRSQl9JRFQgfCBUUkJfVFlQRShUUkJfU0VUVVApOworCWlmIChzdGFydF9jeWNsZSA9PSAwKQorCQlmaWVsZCB8PSAweDE7CiAJcXVldWVfdHJiKHhoY2ksIGVwX3JpbmcsIGZhbHNlLCB0cnVlLAogCQkJLyogRklYTUUgZW5kaWFubmVzcyBpcyBwcm9iYWJseSBnb2luZyB0byBiaXRlIG15IGFzcyBoZXJlLiAqLwogCQkJc2V0dXAtPmJSZXF1ZXN0VHlwZSB8IHNldHVwLT5iUmVxdWVzdCA8PCA4IHwgc2V0dXAtPndWYWx1ZSA8PCAxNiwKIAkJCXNldHVwLT53SW5kZXggfCBzZXR1cC0+d0xlbmd0aCA8PCAxNiwKIAkJCVRSQl9MRU4oOCkgfCBUUkJfSU5UUl9UQVJHRVQoMCksCiAJCQkvKiBJbW1lZGlhdGUgZGF0YSBpbiBwb2ludGVyICovCi0JCQlUUkJfSURUIHwgVFJCX1RZUEUoVFJCX1NFVFVQKSk7CisJCQlmaWVsZCk7CiAKIAkvKiBJZiB0aGVyZSdzIGRhdGEsIHF1ZXVlIGRhdGEgVFJCcyAqLwogCWZpZWxkID0gMDsKQEAgLTI4NTksNyArMjg3Miw3IEBACiAJCQlmaWVsZCB8IFRSQl9JT0MgfCBUUkJfVFlQRShUUkJfU1RBVFVTKSB8IGVwX3JpbmctPmN5Y2xlX3N0YXRlKTsKIAogCWdpdmViYWNrX2ZpcnN0X3RyYih4aGNpLCBzbG90X2lkLCBlcF9pbmRleCwgMCwKLQkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIsIHRkKTsKKwkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIpOwogCXJldHVybiAwOwogfQogCkBAIC0yODcyLDggKzI4ODUsOCBAQAogCWFkZHIgPSAodTY0KSAodXJiLT50cmFuc2Zlcl9kbWEgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCk7CiAJdGRfbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGg7CiAKLQlydW5uaW5nX3RvdGFsID0gVFJCX01BWF9CVUZGX1NJWkUgLQotCQkJKGFkZHIgJiAoKDEgPDwgVFJCX01BWF9CVUZGX1NISUZUKSAtIDEpKTsKKwlydW5uaW5nX3RvdGFsID0gVFJCX01BWF9CVUZGX1NJWkUgLSAoYWRkciAmIChUUkJfTUFYX0JVRkZfU0laRSAtIDEpKTsKKwlydW5uaW5nX3RvdGFsICY9IFRSQl9NQVhfQlVGRl9TSVpFIC0gMTsKIAlpZiAocnVubmluZ190b3RhbCAhPSAwKQogCQludW1fdHJicysrOwogCkBAIC0yOTAwLDYgKzI5MTMsNyBAQAogCWludCBydW5uaW5nX3RvdGFsLCB0cmJfYnVmZl9sZW4sIHRkX2xlbiwgdGRfcmVtYWluX2xlbiwgcmV0OwogCXU2NCBzdGFydF9hZGRyLCBhZGRyOwogCWludCBpLCBqOworCWJvb2wgbW9yZV90cmJzX2NvbWluZzsKIAogCWVwX3JpbmcgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcHNbZXBfaW5kZXhdLnJpbmc7CiAKQEAgLTI5MTAsNyArMjkyNCw3IEBACiAJfQogCiAJaWYgKCFpbl9pbnRlcnJ1cHQoKSkKLQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgImVwICUjeCAtIHVyYiBsZW4gPSAlI3ggKCVkKSwiCisJCXhoY2lfZGJnKHhoY2ksICJlcCAlI3ggLSB1cmIgbGVuID0gJSN4ICglZCksIgogCQkJCSIgYWRkciA9ICUjbGx4LCBudW1fdGRzID0gJWRcbiIsCiAJCQkJdXJiLT5lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAogCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKQEAgLTI5NTAsNyArMjk2NCwxMCBAQAogCQkJCWZpZWxkIHw9IFRSQl9UWVBFKFRSQl9JU09DKTsKIAkJCQkvKiBBc3N1bWUgVVJCX0lTT19BU0FQIGlzIHNldCAqLwogCQkJCWZpZWxkIHw9IFRSQl9TSUE7Ci0JCQkJaWYgKGkgPiAwKQorCQkJCWlmIChpID09IDApIHsKKwkJCQkJaWYgKHN0YXJ0X2N5Y2xlID09IDApCisJCQkJCQlmaWVsZCB8PSAweDE7CisJCQkJfSBlbHNlCiAJCQkJCWZpZWxkIHw9IGVwX3JpbmctPmN5Y2xlX3N0YXRlOwogCQkJCWZpcnN0X3RyYiA9IGZhbHNlOwogCQkJfSBlbHNlIHsKQEAgLTI5NjUsOSArMjk4MiwxMSBAQAogCQkJICovCiAJCQlpZiAoaiA8IHRyYnNfcGVyX3RkIC0gMSkgewogCQkJCWZpZWxkIHw9IFRSQl9DSEFJTjsKKwkJCQltb3JlX3RyYnNfY29taW5nID0gdHJ1ZTsKIAkJCX0gZWxzZSB7CiAJCQkJdGQtPmxhc3RfdHJiID0gZXBfcmluZy0+ZW5xdWV1ZTsKIAkJCQlmaWVsZCB8PSBUUkJfSU9DOworCQkJCW1vcmVfdHJic19jb21pbmcgPSBmYWxzZTsKIAkJCX0KIAogCQkJLyogQ2FsY3VsYXRlIFRSQiBsZW5ndGggKi8KQEAgLTI5ODAsNyArMjk5OSw3IEBACiAJCQlsZW5ndGhfZmllbGQgPSBUUkJfTEVOKHRyYl9idWZmX2xlbikgfAogCQkJCXJlbWFpbmRlciB8CiAJCQkJVFJCX0lOVFJfVEFSR0VUKDApOwotCQkJcXVldWVfdHJiKHhoY2ksIGVwX3JpbmcsIGZhbHNlLCBmYWxzZSwKKwkJCXF1ZXVlX3RyYih4aGNpLCBlcF9yaW5nLCBmYWxzZSwgbW9yZV90cmJzX2NvbWluZywKIAkJCQlsb3dlcl8zMl9iaXRzKGFkZHIpLAogCQkJCXVwcGVyXzMyX2JpdHMoYWRkciksCiAJCQkJbGVuZ3RoX2ZpZWxkLApAQCAtMzAwMywxMCArMzAyMiw4IEBACiAJCX0KIAl9CiAKLQl3bWIoKTsKLQlzdGFydF90cmItPmZpZWxkWzNdIHw9IHN0YXJ0X2N5Y2xlOwotCi0JeGhjaV9yaW5nX2VwX2Rvb3JiZWxsKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4LCB1cmItPnN0cmVhbV9pZCk7CisJZ2l2ZWJhY2tfZmlyc3RfdHJiKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4LCB1cmItPnN0cmVhbV9pZCwKKwkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIpOwogCXJldHVybiAwOwogfQogCkBAIC0zMDY0LDcgKzMwODEsNyBAQAogCSAqIHRvIHNldCB0aGUgcG9sbGluZyBpbnRlcnZhbCAob25jZSB0aGUgQVBJIGlzIGFkZGVkKS4KIAkgKi8KIAlpZiAoeGhjaV9pbnRlcnZhbCAhPSBlcF9pbnRlcnZhbCkgewotCQlpZiAoIXByaW50a19yYXRlbGltaXQoKSkKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsICJEcml2ZXIgdXNlcyBkaWZmZXJlbnQgaW50ZXJ2YWwiCiAJCQkJCSIgKCVkIG1pY3JvZnJhbWUlcykgdGhhbiB4SENJICIKIAkJCQkJIiglZCBtaWNyb2ZyYW1lJXMpXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwppbmRleCA0NWU0YTMxLi4yMDgzZmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiAvKgogICogU2V0IHRoZSBydW4gYml0IGFuZCB3YWl0IGZvciB0aGUgaG9zdCB0byBiZSBydW5uaW5nLgogICovCi1pbnQgeGhjaV9zdGFydChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCitzdGF0aWMgaW50IHhoY2lfc3RhcnQoc3RydWN0IHhoY2lfaGNkICp4aGNpKQogewogCXUzMiB0ZW1wOwogCWludCByZXQ7CkBAIC0yMjYsNyArMjI2LDggQEAKIHN0YXRpYyBpbnQgeGhjaV9zZXR1cF9tc2l4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKIHsKIAlpbnQgaSwgcmV0ID0gMDsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoeGhjaV90b19oY2QoeGhjaSktPnNlbGYuY29udHJvbGxlcik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHhoY2lfdG9faGNkKHhoY2kpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlcik7CiAKIAkvKgogCSAqIGNhbGN1bGF0ZSBudW1iZXIgb2YgbXNpLXggdmVjdG9ycyBzdXBwb3J0ZWQuCkBAIC0yNjUsNiArMjY2LDcgQEAKIAkJCWdvdG8gZGlzYWJsZV9tc2l4OwogCX0KIAorCWhjZC0+bXNpeF9lbmFibGVkID0gMTsKIAlyZXR1cm4gcmV0OwogCiBkaXNhYmxlX21zaXg6CkBAIC0yODAsNyArMjgyLDggQEAKIC8qIEZyZWUgYW55IElSUXMgYW5kIGRpc2FibGUgTVNJLVggKi8KIHN0YXRpYyB2b2lkIHhoY2lfY2xlYW51cF9tc2l4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoeGhjaV90b19oY2QoeGhjaSktPnNlbGYuY29udHJvbGxlcik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHhoY2lfdG9faGNkKHhoY2kpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlcik7CiAKIAl4aGNpX2ZyZWVfaXJxKHhoY2kpOwogCkBAIC0yOTIsNiArMjk1LDcgQEAKIAkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOwogCX0KIAorCWhjZC0+bXNpeF9lbmFibGVkID0gMDsKIAlyZXR1cm47CiB9CiAKQEAgLTMyNSw3ICszMjksNyBAQAogCiAKICNpZmRlZiBDT05GSUdfVVNCX1hIQ0lfSENEX0RFQlVHR0lORwotdm9pZCB4aGNpX2V2ZW50X3Jpbmdfd29yayh1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyB2b2lkIHhoY2lfZXZlbnRfcmluZ193b3JrKHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHRlbXA7CkBAIC00NjksNyArNDczLDcgQEAKIAkJCXhoY2ktPmlyX3NldCwgKHVuc2lnbmVkIGludCkgRVJfSVJRX0VOQUJMRSh0ZW1wKSk7CiAJeGhjaV93cml0ZWwoeGhjaSwgRVJfSVJRX0VOQUJMRSh0ZW1wKSwKIAkJCSZ4aGNpLT5pcl9zZXQtPmlycV9wZW5kaW5nKTsKLQl4aGNpX3ByaW50X2lyX3NldCh4aGNpLCB4aGNpLT5pcl9zZXQsIDApOworCXhoY2lfcHJpbnRfaXJfc2V0KHhoY2ksIDApOwogCiAJaWYgKE5VTV9URVNUX05PT1BTID4gMCkKIAkJZG9vcmJlbGwgPSB4aGNpX3NldHVwX29uZV9ub29wKHhoY2kpOwpAQCAtNTA4LDkgKzUxMiwxMCBAQAogCXNwaW5fbG9ja19pcnEoJnhoY2ktPmxvY2spOwogCXhoY2lfaGFsdCh4aGNpKTsKIAl4aGNpX3Jlc2V0KHhoY2kpOwotCXhoY2lfY2xlYW51cF9tc2l4KHhoY2kpOwogCXNwaW5fdW5sb2NrX2lycSgmeGhjaS0+bG9jayk7CiAKKwl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKKwogI2lmZGVmIENPTkZJR19VU0JfWEhDSV9IQ0RfREVCVUdHSU5HCiAJLyogVGVsbCB0aGUgZXZlbnQgcmluZyBwb2xsIGZ1bmN0aW9uIG5vdCB0byByZXNjaGVkdWxlICovCiAJeGhjaS0+em9tYmllID0gMTsKQEAgLTUyMyw3ICs1MjgsNyBAQAogCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5pcl9zZXQtPmlycV9wZW5kaW5nKTsKIAl4aGNpX3dyaXRlbCh4aGNpLCBFUl9JUlFfRElTQUJMRSh0ZW1wKSwKIAkJCSZ4aGNpLT5pcl9zZXQtPmlycV9wZW5kaW5nKTsKLQl4aGNpX3ByaW50X2lyX3NldCh4aGNpLCB4aGNpLT5pcl9zZXQsIDApOworCXhoY2lfcHJpbnRfaXJfc2V0KHhoY2ksIDApOwogCiAJeGhjaV9kYmcoeGhjaSwgImNsZWFuaW5nIHVwIG1lbW9yeVxuIik7CiAJeGhjaV9tZW1fY2xlYW51cCh4aGNpKTsKQEAgLTU0NCw5ICs1NDksMTAgQEAKIAogCXNwaW5fbG9ja19pcnEoJnhoY2ktPmxvY2spOwogCXhoY2lfaGFsdCh4aGNpKTsKLQl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKIAlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOwogCisJeGhjaV9jbGVhbnVwX21zaXgoeGhjaSk7CisKIAl4aGNpX2RiZyh4aGNpLCAieGhjaV9zaHV0ZG93biBjb21wbGV0ZWQgLSBzdGF0dXMgPSAleFxuIiwKIAkJICAgIHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPm9wX3JlZ3MtPnN0YXR1cykpOwogfQpAQCAtNjQ3LDYgKzY1Myw3IEBACiAJaW50CQkJcmMgPSAwOwogCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0geGhjaV90b19oY2QoeGhjaSk7CiAJdTMyCQkJY29tbWFuZDsKKwlpbnQJCQlpOwogCiAJc3Bpbl9sb2NrX2lycSgmeGhjaS0+bG9jayk7CiAJY2xlYXJfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKTsKQEAgLTY3NywxMCArNjg0LDE1IEBACiAJCXNwaW5fdW5sb2NrX2lycSgmeGhjaS0+bG9jayk7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KLQkvKiBzdGVwIDU6IHJlbW92ZSBjb3JlIHdlbGwgcG93ZXIgKi8KLQl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKIAlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOwogCisJLyogc3RlcCA1OiByZW1vdmUgY29yZSB3ZWxsIHBvd2VyICovCisJLyogc3luY2hyb25pemUgaXJxIHdoZW4gdXNpbmcgTVNJLVggKi8KKwlpZiAoeGhjaS0+bXNpeF9lbnRyaWVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCB4aGNpLT5tc2l4X2NvdW50OyBpKyspCisJCQlzeW5jaHJvbml6ZV9pcnEoeGhjaS0+bXNpeF9lbnRyaWVzW2ldLnZlY3Rvcik7CisJfQorCiAJcmV0dXJuIHJjOwogfQogCkBAIC02OTQsNyArNzA2LDYgQEAKIHsKIAl1MzIJCQljb21tYW5kLCB0ZW1wID0gMDsKIAlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IHhoY2lfdG9faGNkKHhoY2kpOwotCXN0cnVjdCBwY2lfZGV2CQkqcGRldiA9IHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOwogCWludAlvbGRfc3RhdGUsIHJldHZhbDsKIAogCW9sZF9zdGF0ZSA9IGhjZC0+c3RhdGU7CkBAIC03MjksOSArNzQwLDggQEAKIAkJeGhjaV9kYmcoeGhjaSwgIlN0b3AgSENEXG4iKTsKIAkJeGhjaV9oYWx0KHhoY2kpOwogCQl4aGNpX3Jlc2V0KHhoY2kpOwotCQlpZiAoaGliZXJuYXRlZCkKLQkJCXhoY2lfY2xlYW51cF9tc2l4KHhoY2kpOwogCQlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOworCQl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKIAogI2lmZGVmIENPTkZJR19VU0JfWEhDSV9IQ0RfREVCVUdHSU5HCiAJCS8qIFRlbGwgdGhlIGV2ZW50IHJpbmcgcG9sbCBmdW5jdGlvbiBub3QgdG8gcmVzY2hlZHVsZSAqLwpAQCAtNzQ1LDcgKzc1NSw3IEBACiAJCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5pcl9zZXQtPmlycV9wZW5kaW5nKTsKIAkJeGhjaV93cml0ZWwoeGhjaSwgRVJfSVJRX0RJU0FCTEUodGVtcCksCiAJCQkJJnhoY2ktPmlyX3NldC0+aXJxX3BlbmRpbmcpOwotCQl4aGNpX3ByaW50X2lyX3NldCh4aGNpLCB4aGNpLT5pcl9zZXQsIDApOworCQl4aGNpX3ByaW50X2lyX3NldCh4aGNpLCAwKTsKIAogCQl4aGNpX2RiZyh4aGNpLCAiY2xlYW5pbmcgdXAgbWVtb3J5XG4iKTsKIAkJeGhjaV9tZW1fY2xlYW51cCh4aGNpKTsKQEAgLTc2NSwzMCArNzc1LDYgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOwotCS8qIFJlLXNldHVwIE1TSS1YICovCi0JaWYgKGhjZC0+aXJxKQotCQlmcmVlX2lycShoY2QtPmlycSwgaGNkKTsKLQloY2QtPmlycSA9IC0xOwotCi0JcmV0dmFsID0geGhjaV9zZXR1cF9tc2l4KHhoY2kpOwotCWlmIChyZXR2YWwpCi0JCS8qIGZhbGwgYmFjayB0byBtc2kqLwotCQlyZXR2YWwgPSB4aGNpX3NldHVwX21zaSh4aGNpKTsKLQotCWlmIChyZXR2YWwpIHsKLQkJLyogZmFsbCBiYWNrIHRvIGxlZ2FjeSBpbnRlcnJ1cHQqLwotCQlyZXR2YWwgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsICZ1c2JfaGNkX2lycSwgSVJRRl9TSEFSRUQsCi0JCQkJCWhjZC0+aXJxX2Rlc2NyLCBoY2QpOwotCQlpZiAocmV0dmFsKSB7Ci0JCQl4aGNpX2Vycih4aGNpLCAicmVxdWVzdCBpbnRlcnJ1cHQgJWQgZmFpbGVkXG4iLAotCQkJCQlwZGV2LT5pcnEpOwotCQkJcmV0dXJuIHJldHZhbDsKLQkJfQotCQloY2QtPmlycSA9IHBkZXYtPmlycTsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxKCZ4aGNpLT5sb2NrKTsKIAkvKiBzdGVwIDQ6IHNldCBSdW4vU3RvcCBiaXQgKi8KIAljb21tYW5kID0geGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+b3BfcmVncy0+Y29tbWFuZCk7CiAJY29tbWFuZCB8PSBDTURfUlVOOwpAQCAtODcxLDcgKzg1Nyw3IEBACiAvKiBSZXR1cm5zIDEgaWYgdGhlIGFyZ3VtZW50cyBhcmUgT0s7CiAgKiByZXR1cm5zIDAgdGhpcyBpcyBhIHJvb3QgaHViOyByZXR1cm5zIC1FSU5WQUwgZm9yIE5VTEwgcG9pbnRlcnMuCiAgKi8KLWludCB4aGNpX2NoZWNrX2FyZ3Moc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCitzdGF0aWMgaW50IHhoY2lfY2hlY2tfYXJncyhzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKIAkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwgaW50IGNoZWNrX2VwLCBib29sIGNoZWNrX3ZpcnRfZGV2LAogCQljb25zdCBjaGFyICpmdW5jKSB7CiAJc3RydWN0IHhoY2lfaGNkCSp4aGNpOwpAQCAtMTcwNyw3ICsxNjkzLDcgQEAKIAl4aGNpX2RiZ19jdHgoeGhjaSwgaW5fY3R4LCB4aGNpX2xhc3RfdmFsaWRfZW5kcG9pbnQoYWRkX2ZsYWdzKSk7CiB9CiAKLXZvaWQgeGhjaV9zZXR1cF9pbnB1dF9jdHhfZm9yX3F1aXJrKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKK3N0YXRpYyB2b2lkIHhoY2lfc2V0dXBfaW5wdXRfY3R4X2Zvcl9xdWlyayhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCiAJCXVuc2lnbmVkIGludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgsCiAJCXN0cnVjdCB4aGNpX2RlcXVldWVfc3RhdGUgKmRlcV9zdGF0ZSkKIHsKQEAgLTI0NDUsOCArMjQzMSwxMiBAQAogCQl4aGNpX2Vycih4aGNpLCAiRXJyb3Igd2hpbGUgYXNzaWduaW5nIGRldmljZSBzbG90IElEXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCS8qIHhoY2lfYWxsb2NfdmlydF9kZXZpY2UoKSBkb2VzIG5vdCB0b3VjaCByaW5nczsgbm8gbmVlZCB0byBsb2NrICovCi0JaWYgKCF4aGNpX2FsbG9jX3ZpcnRfZGV2aWNlKHhoY2ksIHhoY2ktPnNsb3RfaWQsIHVkZXYsIEdGUF9LRVJORUwpKSB7CisJLyogeGhjaV9hbGxvY192aXJ0X2RldmljZSgpIGRvZXMgbm90IHRvdWNoIHJpbmdzOyBubyBuZWVkIHRvIGxvY2suCisJICogVXNlIEdGUF9OT0lPLCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgZnJvbQorCSAqIHhoY2lfZGlzY292ZXJfb3JfcmVzZXRfZGV2aWNlKCksIHdoaWNoIG1heSBiZSBjYWxsZWQgYXMgcGFydCBvZgorCSAqIG1hc3Mgc3RvcmFnZSBkcml2ZXIgZXJyb3IgaGFuZGxpbmcuCisJICovCisJaWYgKCF4aGNpX2FsbG9jX3ZpcnRfZGV2aWNlKHhoY2ksIHhoY2ktPnNsb3RfaWQsIHVkZXYsIEdGUF9OT0lPKSkgewogCQkvKiBEaXNhYmxlIHNsb3QsIGlmIHdlIGNhbiBkbyBpdCB3aXRob3V0IG1lbSBhbGxvYyAqLwogCQl4aGNpX3dhcm4oeGhjaSwgIkNvdWxkIG5vdCBhbGxvY2F0ZSB4SENJIFVTQiBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmVzXG4iKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKaW5kZXggMTcwYzM2Ny4uN2YxMjdkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKQEAgLTQzNiwyMiArNDM2LDE4IEBACiAvKioKICAqIHN0cnVjdCBkb29yYmVsbF9hcnJheQogICoKKyAqIEJpdHMgIDAgLSAgNzogRW5kcG9pbnQgdGFyZ2V0CisgKiBCaXRzICA4IC0gMTU6IFJzdmRaCisgKiBCaXRzIDE2IC0gMzE6IFN0cmVhbSBJRAorICoKICAqIFNlY3Rpb24gNS42CiAgKi8KIHN0cnVjdCB4aGNpX2Rvb3JiZWxsX2FycmF5IHsKIAl1MzIJZG9vcmJlbGxbMjU2XTsKIH07CiAKLSNkZWZpbmUJREJfVEFSR0VUX01BU0sJCTB4RkZGRkZGMDAKLSNkZWZpbmUJREJfU1RSRUFNX0lEX01BU0sJMHgwMDAwRkZGRgotI2RlZmluZQlEQl9UQVJHRVRfSE9TVAkJMHgwCi0jZGVmaW5lCURCX1NUUkVBTV9JRF9IT1NUCTB4MAotI2RlZmluZQlEQl9NQVNLCQkJKDB4ZmYgPDwgOCkKLQotLyogRW5kcG9pbnQgVGFyZ2V0IC0gYml0cyAwOjcgKi8KLSNkZWZpbmUgRVBJX1RPX0RCKHApCQkoKChwKSArIDEpICYgMHhmZikKLSNkZWZpbmUgU1RSRUFNX0lEX1RPX0RCKHApCSgoKHApICYgMHhmZmZmKSA8PCAxNikKLQorI2RlZmluZSBEQl9WQUxVRShlcCwgc3RyZWFtKQkoKCgoZXApICsgMSkgJiAweGZmKSB8ICgoc3RyZWFtKSA8PCAxNikpCisjZGVmaW5lIERCX1ZBTFVFX0hPU1QJCTB4MDAwMDAwMDAKIAogLyoqCiAgKiBzdHJ1Y3QgeGhjaV9wcm90b2NvbF9jYXBzCkBAIC0xMzUyLDcgKzEzNDgsNyBAQAogfQogCiAvKiB4SENJIGRlYnVnZ2luZyAqLwotdm9pZCB4aGNpX3ByaW50X2lyX3NldChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX2ludHJfcmVnICppcl9zZXQsIGludCBzZXRfbnVtKTsKK3ZvaWQgeGhjaV9wcmludF9pcl9zZXQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBpbnQgc2V0X251bSk7CiB2b2lkIHhoY2lfcHJpbnRfcmVnaXN0ZXJzKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSk7CiB2b2lkIHhoY2lfZGJnX3JlZ3Moc3RydWN0IHhoY2lfaGNkICp4aGNpKTsKIHZvaWQgeGhjaV9wcmludF9ydW5fcmVncyhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMKaW5kZXggMTczMmQ5Yi4uMTYxNmFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxlZC5jCkBAIC00NSw3ICs0NSw3IEBACiAKIHN0YXRpYyB2b2lkIGNoYW5nZV9jb2xvcihzdHJ1Y3QgdXNiX2xlZCAqbGVkKQogewotCWludCByZXR2YWw7CisJaW50IHJldHZhbCA9IDA7CiAJdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCiAJYnVmZmVyID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jCmluZGV4IDRmZjIxNTguLmY3YTIwNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYwpAQCAtNzc2LDcgKzc3Niw2IEBACiAJeyBVU0JfREVWSUNFKDB4MDU1NywgMHgyMDAxKSB9LAogCXsgVVNCX0RFVklDRSgweDA3MjksIDB4MTI4NCkgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxMjkzLCAweDAwMDIpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTI5MywgMHgwMDAyKSB9LAogCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4MDAwMikgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYwppbmRleCBlZWJhMjI4Li45ZDQ5ZDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCkBAIC00MDQsNiArNDA0LDcgQEAKIAkJbXVzYi0+eGNlaXYtPnNldF9wb3dlciA9IGJmaW5fbXVzYl9zZXRfcG93ZXI7CiAKIAltdXNiLT5pc3IgPSBibGFja2Zpbl9pbnRlcnJ1cHQ7CisJbXVzYi0+ZG91YmxlX2J1ZmZlcl9ub3Rfb2sgPSB0cnVlOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwppbmRleCAwN2NmMzk0Li5jMjkyZDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKQEAgLTEyOCwxMiArMTI4LDcgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbXVzYiAqZGV2X3RvX211c2Ioc3RydWN0IGRldmljZSAqZGV2KQogewotI2lmZGVmIENPTkZJR19VU0JfTVVTQl9IRFJDX0hDRAotCS8qIHVzYmNvcmUgaW5zaXN0cyBkZXYtPmRyaXZlcl9kYXRhIGlzIGEgInN0cnVjdCBoY2QgKiIgKi8KLQlyZXR1cm4gaGNkX3RvX211c2IoZGV2X2dldF9kcnZkYXRhKGRldikpOwotI2Vsc2UKIAlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0jZW5kaWYKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE4NjksNiArMTg2NCw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJm11c2ItPm91dF9idWxrKTsKIAogCWhjZC0+dXNlc19uZXdfcG9sbGluZyA9IDE7CisJaGNkLT5oYXNfdHQgPSAxOwogCiAJbXVzYi0+dmJ1c2Vycl9yZXRyeSA9IFZCVVNFUlJfUkVUUllfQ09VTlQ7CiAJbXVzYi0+YV93YWl0X2Jjb24gPSBPVEdfVElNRV9BX1dBSVRfQkNPTjsKQEAgLTE4NzYsMTAgKzE4NzIsOSBAQAogCW11c2IgPSBremFsbG9jKHNpemVvZiAqbXVzYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtdXNiKQogCQlyZXR1cm4gTlVMTDsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBtdXNiKTsKIAogI2VuZGlmCi0KKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBtdXNiKTsKIAltdXNiLT5tcmVncyA9IG1iYXNlOwogCW11c2ItPmN0cmxfYmFzZSA9IG1iYXNlOwogCW11c2ItPm5JcnEgPSAtRU5PREVWOwpAQCAtMjE5MSw3ICsyMTg2LDcgQEAKIAl2b2lkIF9faW9tZW0JKmJhc2U7CiAKIAlpb21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKCFpb21lbSB8fCBpcnEgPT0gMCkKKwlpZiAoIWlvbWVtIHx8IGlycSA8PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWJhc2UgPSBpb3JlbWFwKGlvbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpb21lbSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKaW5kZXggZDBjMjM2Zi4uZTY0MDBiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCkBAIC00OTcsNiArNDk3LDE5IEBACiAJc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpnYWRnZXRfZHJpdmVyOwkvKiBpdHMgZHJpdmVyICovCiAjZW5kaWYKIAorCS8qCisJICogRklYTUU6IFJlbW92ZSB0aGlzIGZsYWcuCisJICoKKwkgKiBUaGlzIGlzIG9ubHkgYWRkZWQgdG8gYWxsb3cgQmxhY2tmaW4gdG8gd29yaworCSAqIHdpdGggY3VycmVudCBkcml2ZXIuIEZvciBzb21lIHVua25vd24gcmVhc29uCisJICogQmxhY2tmaW4gZG9lc24ndCB3b3JrIHdpdGggZG91YmxlIGJ1ZmZlcmluZworCSAqIGFuZCB0aGF0J3MgZW5hYmxlZCBieSBkZWZhdWx0LgorCSAqCisJICogV2UgYWRkZWQgdGhpcyBmbGFnIHRvIGZvcmNlZnVsbHkgZGlzYWJsZSBkb3VibGUKKwkgKiBidWZmZXJpbmcgdW50aWwgd2UgZ2V0IGl0IHdvcmtpbmcuCisJICovCisJdW5zaWduZWQgICAgICAgICAgICAgICAgZG91YmxlX2J1ZmZlcl9ub3Rfb2s6MSBfX2RlcHJlY2F0ZWQ7CisKIAlzdHJ1Y3QgbXVzYl9oZHJjX2NvbmZpZwkqY29uZmlnOwogCiAjaWZkZWYgTVVTQl9DT05GSUdfUFJPQ19GUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2RtYS5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2RtYS5oCmluZGV4IDkxNjA2NWIuLjNhOTdjNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9kbWEuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZG1hLmgKQEAgLTE2OSw2ICsxNjksOSBAQAogCQkJCQkJCWRtYV9hZGRyX3QgZG1hX2FkZHIsCiAJCQkJCQkJdTMyIGxlbmd0aCk7CiAJaW50CQkJKCpjaGFubmVsX2Fib3J0KShzdHJ1Y3QgZG1hX2NoYW5uZWwgKik7CisJaW50CQkJKCppc19jb21wYXRpYmxlKShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkJCQkJdTE2IG1heHBhY2tldCwKKwkJCQkJCQl2b2lkICpidWYsIHUzMiBsZW5ndGgpOwogfTsKIAogLyogY2FsbGVkIGFmdGVyIGNoYW5uZWxfcHJvZ3JhbSgpLCBtYXkgaW5kaWNhdGUgYSBmYXVsdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCmluZGV4IGVkNThjNmMuLjJmZTMwNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKQEAgLTkyLDExICs5MiwzMyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisjZGVmaW5lIGlzX2J1ZmZlcl9tYXBwZWQocmVxKSAoaXNfZG1hX2NhcGFibGUoKSAmJiBcCisJCQkJCShyZXEtPm1hcF9zdGF0ZSAhPSBVTl9NQVBQRUQpKQorCiAvKiBNYXBzIHRoZSBidWZmZXIgdG8gZG1hICAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwX2RtYV9idWZmZXIoc3RydWN0IG11c2JfcmVxdWVzdCAqcmVxdWVzdCwKLQkJCQlzdHJ1Y3QgbXVzYiAqbXVzYikKKwkJCXN0cnVjdCBtdXNiICptdXNiLCBzdHJ1Y3QgbXVzYl9lcCAqbXVzYl9lcCkKIHsKKwlpbnQgY29tcGF0aWJsZSA9IHRydWU7CisJc3RydWN0IGRtYV9jb250cm9sbGVyICpkbWEgPSBtdXNiLT5kbWFfY29udHJvbGxlcjsKKworCXJlcXVlc3QtPm1hcF9zdGF0ZSA9IFVOX01BUFBFRDsKKworCWlmICghaXNfZG1hX2NhcGFibGUoKSB8fCAhbXVzYl9lcC0+ZG1hKQorCQlyZXR1cm47CisKKwkvKiBDaGVjayBpZiBETUEgZW5naW5lIGNhbiBoYW5kbGUgdGhpcyByZXF1ZXN0LgorCSAqIERNQSBjb2RlIG11c3QgcmVqZWN0IHRoZSBVU0IgcmVxdWVzdCBleHBsaWNpdGx5LgorCSAqIERlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIG1hcCB0aGUgcmVxdWVzdC4KKwkgKi8KKwlpZiAoZG1hLT5pc19jb21wYXRpYmxlKQorCQljb21wYXRpYmxlID0gZG1hLT5pc19jb21wYXRpYmxlKG11c2JfZXAtPmRtYSwKKwkJCQltdXNiX2VwLT5wYWNrZXRfc3osIHJlcXVlc3QtPnJlcXVlc3QuYnVmLAorCQkJCXJlcXVlc3QtPnJlcXVlc3QubGVuZ3RoKTsKKwlpZiAoIWNvbXBhdGlibGUpCisJCXJldHVybjsKKwogCWlmIChyZXF1ZXN0LT5yZXF1ZXN0LmRtYSA9PSBETUFfQUREUl9JTlZBTElEKSB7CiAJCXJlcXVlc3QtPnJlcXVlc3QuZG1hID0gZG1hX21hcF9zaW5nbGUoCiAJCQkJbXVzYi0+Y29udHJvbGxlciwKQEAgLTEwNSw3ICsxMjcsNyBAQAogCQkJCXJlcXVlc3QtPnR4CiAJCQkJCT8gRE1BX1RPX0RFVklDRQogCQkJCQk6IERNQV9GUk9NX0RFVklDRSk7Ci0JCXJlcXVlc3QtPm1hcHBlZCA9IDE7CisJCXJlcXVlc3QtPm1hcF9zdGF0ZSA9IE1VU0JfTUFQUEVEOwogCX0gZWxzZSB7CiAJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKG11c2ItPmNvbnRyb2xsZXIsCiAJCQlyZXF1ZXN0LT5yZXF1ZXN0LmRtYSwKQEAgLTExMyw3ICsxMzUsNyBAQAogCQkJcmVxdWVzdC0+dHgKIAkJCQk/IERNQV9UT19ERVZJQ0UKIAkJCQk6IERNQV9GUk9NX0RFVklDRSk7Ci0JCXJlcXVlc3QtPm1hcHBlZCA9IDA7CisJCXJlcXVlc3QtPm1hcF9zdGF0ZSA9IFBSRV9NQVBQRUQ7CiAJfQogfQogCkBAIC0xMjEsMTEgKzE0MywxNCBAQAogc3RhdGljIGlubGluZSB2b2lkIHVubWFwX2RtYV9idWZmZXIoc3RydWN0IG11c2JfcmVxdWVzdCAqcmVxdWVzdCwKIAkJCQlzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKKwlpZiAoIWlzX2J1ZmZlcl9tYXBwZWQocmVxdWVzdCkpCisJCXJldHVybjsKKwogCWlmIChyZXF1ZXN0LT5yZXF1ZXN0LmRtYSA9PSBETUFfQUREUl9JTlZBTElEKSB7CiAJCURCRygyMCwgIm5vdCB1bm1hcHBpbmcgYSBuZXZlciBtYXBwZWQgYnVmZmVyXG4iKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAocmVxdWVzdC0+bWFwcGVkKSB7CisJaWYgKHJlcXVlc3QtPm1hcF9zdGF0ZSA9PSBNVVNCX01BUFBFRCkgewogCQlkbWFfdW5tYXBfc2luZ2xlKG11c2ItPmNvbnRyb2xsZXIsCiAJCQlyZXF1ZXN0LT5yZXF1ZXN0LmRtYSwKIAkJCXJlcXVlc3QtPnJlcXVlc3QubGVuZ3RoLApAQCAtMTMzLDE2ICsxNTgsMTUgQEAKIAkJCQk/IERNQV9UT19ERVZJQ0UKIAkJCQk6IERNQV9GUk9NX0RFVklDRSk7CiAJCXJlcXVlc3QtPnJlcXVlc3QuZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKLQkJcmVxdWVzdC0+bWFwcGVkID0gMDsKLQl9IGVsc2UgeworCX0gZWxzZSB7IC8qIFBSRV9NQVBQRUQgKi8KIAkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUobXVzYi0+Y29udHJvbGxlciwKIAkJCXJlcXVlc3QtPnJlcXVlc3QuZG1hLAogCQkJcmVxdWVzdC0+cmVxdWVzdC5sZW5ndGgsCiAJCQlyZXF1ZXN0LT50eAogCQkJCT8gRE1BX1RPX0RFVklDRQogCQkJCTogRE1BX0ZST01fREVWSUNFKTsKLQogCX0KKwlyZXF1ZXN0LT5tYXBfc3RhdGUgPSBVTl9NQVBQRUQ7CiB9CiAKIC8qCkBAIC0xNzIsOCArMTk2LDcgQEAKIAogCWVwLT5idXN5ID0gMTsKIAlzcGluX3VubG9jaygmbXVzYi0+bG9jayk7Ci0JaWYgKGlzX2RtYV9jYXBhYmxlKCkgJiYgZXAtPmRtYSkKLQkJdW5tYXBfZG1hX2J1ZmZlcihyZXEsIG11c2IpOworCXVubWFwX2RtYV9idWZmZXIocmVxLCBtdXNiKTsKIAlpZiAocmVxdWVzdC0+c3RhdHVzID09IDApCiAJCURCRyg1LCAiJXMgZG9uZSByZXF1ZXN0ICVwLCAgJWQvJWRcbiIsCiAJCQkJZXAtPmVuZF9wb2ludC5uYW1lLCByZXF1ZXN0LApAQCAtMzM1LDcgKzM1OCw3IEBACiAJCQljc3IpOwogCiAjaWZuZGVmCUNPTkZJR19NVVNCX1BJT19PTkxZCi0JaWYgKGlzX2RtYV9jYXBhYmxlKCkgJiYgbXVzYl9lcC0+ZG1hKSB7CisJaWYgKGlzX2J1ZmZlcl9tYXBwZWQocmVxKSkgewogCQlzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIJKmMgPSBtdXNiLT5kbWFfY29udHJvbGxlcjsKIAkJc2l6ZV90IHJlcXVlc3Rfc2l6ZTsKIApAQCAtNDM2LDggKzQ1OSw3IEBACiAJCSAqIFVubWFwIHRoZSBkbWEgYnVmZmVyIGJhY2sgdG8gY3B1IGlmIGRtYSBjaGFubmVsCiAJCSAqIHByb2dyYW1taW5nIGZhaWxzCiAJCSAqLwotCQlpZiAoaXNfZG1hX2NhcGFibGUoKSAmJiBtdXNiX2VwLT5kbWEpCi0JCQl1bm1hcF9kbWFfYnVmZmVyKHJlcSwgbXVzYik7CisJCXVubWFwX2RtYV9idWZmZXIocmVxLCBtdXNiKTsKIAogCQltdXNiX3dyaXRlX2ZpZm8obXVzYl9lcC0+aHdfZXAsIGZpZm9fY291bnQsCiAJCQkJKHU4ICopIChyZXF1ZXN0LT5idWYgKyByZXF1ZXN0LT5hY3R1YWwpKTsKQEAgLTYyNyw3ICs2NDksNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGlzX2NwcGlfZW5hYmxlZCgpICYmIG11c2JfZXAtPmRtYSkgeworCWlmIChpc19jcHBpX2VuYWJsZWQoKSAmJiBpc19idWZmZXJfbWFwcGVkKHJlcSkpIHsKIAkJc3RydWN0IGRtYV9jb250cm9sbGVyCSpjID0gbXVzYi0+ZG1hX2NvbnRyb2xsZXI7CiAJCXN0cnVjdCBkbWFfY2hhbm5lbAkqY2hhbm5lbCA9IG11c2JfZXAtPmRtYTsKIApAQCAtNjU4LDcgKzY4MCw3IEBACiAJCWxlbiA9IG11c2JfcmVhZHcoZXBpbywgTVVTQl9SWENPVU5UKTsKIAkJaWYgKHJlcXVlc3QtPmFjdHVhbCA8IHJlcXVlc3QtPmxlbmd0aCkgewogI2lmZGVmIENPTkZJR19VU0JfSU5WRU5UUkFfRE1BCi0JCQlpZiAoaXNfZG1hX2NhcGFibGUoKSAmJiBtdXNiX2VwLT5kbWEpIHsKKwkJCWlmIChpc19idWZmZXJfbWFwcGVkKHJlcSkpIHsKIAkJCQlzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIJKmM7CiAJCQkJc3RydWN0IGRtYV9jaGFubmVsCSpjaGFubmVsOwogCQkJCWludAkJCXVzZV9kbWEgPSAwOwpAQCAtNzQyLDcgKzc2NCw3IEBACiAJCQlmaWZvX2NvdW50ID0gbWluX3QodW5zaWduZWQsIGxlbiwgZmlmb19jb3VudCk7CiAKICNpZmRlZglDT05GSUdfVVNCX1RVU0JfT01BUF9ETUEKLQkJCWlmICh0dXNiX2RtYV9vbWFwKCkgJiYgbXVzYl9lcC0+ZG1hKSB7CisJCQlpZiAodHVzYl9kbWFfb21hcCgpICYmIGlzX2J1ZmZlcl9tYXBwZWQocmVxKSkgewogCQkJCXN0cnVjdCBkbWFfY29udHJvbGxlciAqYyA9IG11c2ItPmRtYV9jb250cm9sbGVyOwogCQkJCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCA9IG11c2JfZXAtPmRtYTsKIAkJCQl1MzIgZG1hX2FkZHIgPSByZXF1ZXN0LT5kbWEgKyByZXF1ZXN0LT5hY3R1YWw7CkBAIC03NjIsNyArNzg0LDcgQEAKIAkJCSAqIHByb2dyYW1taW5nIGZhaWxzLiBUaGlzIGJ1ZmZlciBpcyBtYXBwZWQgaWYgdGhlCiAJCQkgKiBjaGFubmVsIGFsbG9jYXRpb24gaXMgc3VjY2Vzc2Z1bAogCQkJICovCi0JCQkgaWYgKGlzX2RtYV9jYXBhYmxlKCkgJiYgbXVzYl9lcC0+ZG1hKSB7CisJCQkgaWYgKGlzX2J1ZmZlcl9tYXBwZWQocmVxKSkgewogCQkJCXVubWFwX2RtYV9idWZmZXIocmVxLCBtdXNiKTsKIAogCQkJCS8qCkBAIC05ODksNyArMTAxMSwxMSBAQAogCQkvKiBTZXQgVFhNQVhQIHdpdGggdGhlIEZJRk8gc2l6ZSBvZiB0aGUgZW5kcG9pbnQKIAkJICogdG8gZGlzYWJsZSBkb3VibGUgYnVmZmVyaW5nIG1vZGUuCiAJCSAqLwotCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1RYTUFYUCwgbXVzYl9lcC0+cGFja2V0X3N6IHwgKG11c2JfZXAtPmhiX211bHQgPDwgMTEpKTsKKwkJaWYgKG11c2ItPmRvdWJsZV9idWZmZXJfbm90X29rKQorCQkJbXVzYl93cml0ZXcocmVncywgTVVTQl9UWE1BWFAsIGh3X2VwLT5tYXhfcGFja2V0X3N6X3R4KTsKKwkJZWxzZQorCQkJbXVzYl93cml0ZXcocmVncywgTVVTQl9UWE1BWFAsIG11c2JfZXAtPnBhY2tldF9zegorCQkJCQl8IChtdXNiX2VwLT5oYl9tdWx0IDw8IDExKSk7CiAKIAkJY3NyID0gTVVTQl9UWENTUl9NT0RFIHwgTVVTQl9UWENTUl9DTFJEQVRBVE9HOwogCQlpZiAobXVzYl9yZWFkdyhyZWdzLCBNVVNCX1RYQ1NSKQpAQCAtMTAyNSw3ICsxMDUxLDExIEBACiAJCS8qIFNldCBSWE1BWFAgd2l0aCB0aGUgRklGTyBzaXplIG9mIHRoZSBlbmRwb2ludAogCQkgKiB0byBkaXNhYmxlIGRvdWJsZSBidWZmZXJpbmcgbW9kZS4KIAkJICovCi0JCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfUlhNQVhQLCBtdXNiX2VwLT5wYWNrZXRfc3ogfCAobXVzYl9lcC0+aGJfbXVsdCA8PCAxMSkpOworCQlpZiAobXVzYi0+ZG91YmxlX2J1ZmZlcl9ub3Rfb2spCisJCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1JYTUFYUCwgaHdfZXAtPm1heF9wYWNrZXRfc3pfdHgpOworCQllbHNlCisJCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1JYTUFYUCwgbXVzYl9lcC0+cGFja2V0X3N6CisJCQkJCXwgKG11c2JfZXAtPmhiX211bHQgPDwgMTEpKTsKIAogCQkvKiBmb3JjZSBzaGFyZWQgZmlmbyB0byBPVVQtb25seSBtb2RlICovCiAJCWlmIChod19lcC0+aXNfc2hhcmVkX2ZpZm8pIHsKQEAgLTEyMTQsMTAgKzEyNDQsNyBAQAogCXJlcXVlc3QtPmVwbnVtID0gbXVzYl9lcC0+Y3VycmVudF9lcG51bTsKIAlyZXF1ZXN0LT50eCA9IG11c2JfZXAtPmlzX2luOwogCi0JaWYgKGlzX2RtYV9jYXBhYmxlKCkgJiYgbXVzYl9lcC0+ZG1hKQotCQltYXBfZG1hX2J1ZmZlcihyZXF1ZXN0LCBtdXNiKTsKLQllbHNlCi0JCXJlcXVlc3QtPm1hcHBlZCA9IDA7CisJbWFwX2RtYV9idWZmZXIocmVxdWVzdCwgbXVzYiwgbXVzYl9lcCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXVzYi0+bG9jaywgbG9ja2ZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5oCmluZGV4IGRlYzhkYzAuLmE1NTM1NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmgKQEAgLTM1LDEzICszNSwxOSBAQAogI2lmbmRlZiBfX01VU0JfR0FER0VUX0gKICNkZWZpbmUgX19NVVNCX0dBREdFVF9ICiAKK2VudW0gYnVmZmVyX21hcF9zdGF0ZSB7CisJVU5fTUFQUEVEID0gMCwKKwlQUkVfTUFQUEVELAorCU1VU0JfTUFQUEVECit9OworCiBzdHJ1Y3QgbXVzYl9yZXF1ZXN0IHsKIAlzdHJ1Y3QgdXNiX3JlcXVlc3QJcmVxdWVzdDsKIAlzdHJ1Y3QgbXVzYl9lcAkJKmVwOwogCXN0cnVjdCBtdXNiCQkqbXVzYjsKIAl1OCB0eDsJCQkvKiBlbmRwb2ludCBkaXJlY3Rpb24gKi8KIAl1OCBlcG51bTsKLQl1OCBtYXBwZWQ7CisJZW51bSBidWZmZXJfbWFwX3N0YXRlIG1hcF9zdGF0ZTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG11c2JfcmVxdWVzdCAqdG9fbXVzYl9yZXF1ZXN0KHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKaW5kZXggNGQ1YmNiNC4uMGY1MjNkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCkBAIC02MDksNyArNjA5LDcgQEAKIAkvKiBTZXQgUlhNQVhQIHdpdGggdGhlIEZJRk8gc2l6ZSBvZiB0aGUgZW5kcG9pbnQKIAkgKiB0byBkaXNhYmxlIGRvdWJsZSBidWZmZXIgbW9kZS4KIAkgKi8KLQlpZiAobXVzYi0+aHd2ZXJzIDwgTVVTQl9IV1ZFUlNfMjAwMCkKKwlpZiAobXVzYi0+ZG91YmxlX2J1ZmZlcl9ub3Rfb2spCiAJCW11c2Jfd3JpdGV3KGVwLT5yZWdzLCBNVVNCX1JYTUFYUCwgZXAtPm1heF9wYWNrZXRfc3pfcngpOwogCWVsc2UKIAkJbXVzYl93cml0ZXcoZXAtPnJlZ3MsIE1VU0JfUlhNQVhQLApAQCAtNzg0LDE0ICs3ODQsMTMgQEAKIAkJLyogcHJvdG9jb2wvZW5kcG9pbnQvaW50ZXJ2YWwvTkFLbGltaXQgKi8KIAkJaWYgKGVwbnVtKSB7CiAJCQltdXNiX3dyaXRlYihlcGlvLCBNVVNCX1RYVFlQRSwgcWgtPnR5cGVfcmVnKTsKLQkJCWlmIChjYW5fYnVsa19zcGxpdChtdXNiLCBxaC0+dHlwZSkpCisJCQlpZiAobXVzYi0+ZG91YmxlX2J1ZmZlcl9ub3Rfb2spCiAJCQkJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9UWE1BWFAsCi0JCQkJCXBhY2tldF9zegotCQkJCQl8ICgoaHdfZXAtPm1heF9wYWNrZXRfc3pfdHggLwotCQkJCQkJcGFja2V0X3N6KSAtIDEpIDw8IDExKTsKKwkJCQkJCWh3X2VwLT5tYXhfcGFja2V0X3N6X3R4KTsKIAkJCWVsc2UKIAkJCQltdXNiX3dyaXRldyhlcGlvLCBNVVNCX1RYTUFYUCwKLQkJCQkJcGFja2V0X3N6KTsKKwkJCQkJCXFoLT5tYXhwYWNrZXQgfAorCQkJCQkJKChxaC0+aGJfbXVsdCAtIDEpIDw8IDExKSk7CiAJCQltdXNiX3dyaXRlYihlcGlvLCBNVVNCX1RYSU5URVJWQUwsIHFoLT5pbnR2X3JlZyk7CiAJCX0gZWxzZSB7CiAJCQltdXNiX3dyaXRlYihlcGlvLCBNVVNCX05BS0xJTUlUMCwgcWgtPmludHZfcmVnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmggYi9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5oCmluZGV4IGY3NjNkNjIuLjIxMDU2YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuaApAQCAtOTQsMjQgKzk0LDMzIEBACiB7CiAJbXVzYl93cml0ZXcobWJhc2UsCiAJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYmNoYW5uZWwsIE1VU0JfSFNETUFfQUREUl9MT1cpLAotCQkoKHUxNikoKHUzMikgZG1hX2FkZHIgJiAweEZGRkYpKSk7CisJCWRtYV9hZGRyKTsKIAltdXNiX3dyaXRldyhtYmFzZSwKIAkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9BRERSX0hJR0gpLAotCQkoKHUxNikoKCh1MzIpIGRtYV9hZGRyID4+IDE2KSAmIDB4RkZGRikpKTsKKwkJKGRtYV9hZGRyID4+IDE2KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIG11c2JfcmVhZF9oc2RtYV9jb3VudCh2b2lkIF9faW9tZW0gKm1iYXNlLCB1OCBiY2hhbm5lbCkKIHsKLQlyZXR1cm4gbXVzYl9yZWFkbChtYmFzZSwKKwl1MzIgY291bnQgPSBtdXNiX3JlYWR3KG1iYXNlLAogCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UX0hJR0gpKTsKKworCWNvdW50ID0gY291bnQgPDwgMTY7CisKKwljb3VudCB8PSBtdXNiX3JlYWR3KG1iYXNlLAorCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UX0xPVykpOworCisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXVzYl93cml0ZV9oc2RtYV9jb3VudCh2b2lkIF9faW9tZW0gKm1iYXNlLAogCQkJCXU4IGJjaGFubmVsLCB1MzIgbGVuKQogewotCW11c2Jfd3JpdGVsKG1iYXNlLAorCW11c2Jfd3JpdGV3KG1iYXNlLAorCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UX0xPVyksbGVuKTsKKwltdXNiX3dyaXRldyhtYmFzZSwKIAkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9DT1VOVF9ISUdIKSwKLQkJbGVuKTsKKwkJKGxlbiA+PiAxNikpOwogfQogCiAjZW5kaWYgLyogQ09ORklHX0JMQUNLRklOICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMgYi9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMKaW5kZXggYTNmMTIzMy4uYmM4YmFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuYwpAQCAtMzYyLDYgKzM2Miw3IEBACiAKIHN0YXRpYyBpbnQgb21hcDI0MzBfbXVzYl9leGl0KHN0cnVjdCBtdXNiICptdXNiKQogeworCWRlbF90aW1lcl9zeW5jKCZtdXNiX2lkbGVfdGltZXIpOwogCiAJb21hcDI0MzBfbG93X2xldmVsX2V4aXQobXVzYik7CiAJb3RnX3B1dF90cmFuc2NlaXZlcihtdXNiLT54Y2Vpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCmluZGV4IDlmYjg3NWQuLjlmZmM4MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCkBAIC0xMDMsNiArMTAzLDggQEAKIAkgIHJlcXVpcmVkIGFmdGVyIHJlc2V0dGluZyB0aGUgaGFyZHdhcmUgYW5kIHBvd2VyIG1hbmFnZW1lbnQuCiAJICBUaGlzIGRyaXZlciBpcyByZXF1aXJlZCBldmVuIGZvciBwZXJpcGhlcmFsIG9ubHkgb3IgaG9zdCBvbmx5CiAJICBtb2RlIGNvbmZpZ3VyYXRpb25zLgorCSAgVGhpcyBkcml2ZXIgaXMgbm90IHN1cHBvcnRlZCBvbiBib2FyZHMgbGlrZSB0cm91dCB3aGljaAorCSAgaGFzIGFuIGV4dGVybmFsIFBIWS4KIAogY29uZmlnIEFCODUwMF9VU0IKICAgICAgICAgdHJpc3RhdGUgIkFCODUwMCBVU0IgVHJhbnNjZWl2ZXIgRHJpdmVyIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYyBiL2RyaXZlcnMvdXNiL290Zy9ub3AtdXNiLXhjZWl2LmMKaW5kZXggZTcwMDE0YS4uOGFjZjE2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvbm9wLXVzYi14Y2Vpdi5jCkBAIC0xMzIsNiArMTMyLDggQEAKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5vcCk7CiAKKwlCTE9DS0lOR19JTklUX05PVElGSUVSX0hFQUQoJm5vcC0+b3RnLm5vdGlmaWVyKTsKKwogCXJldHVybiAwOwogZXhpdDoKIAlrZnJlZShub3ApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL3VscGkuYyBiL2RyaXZlcnMvdXNiL290Zy91bHBpLmMKaW5kZXggMDU5ZDlhYy4uNzcwZDc5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL3VscGkuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvdWxwaS5jCkBAIC00NSw3ICs0NSw3IEBACiAvKiBVTFBJIGhhcmRjb2RlZCBJRHMsIHVzZWQgZm9yIHByb2JpbmcgKi8KIHN0YXRpYyBzdHJ1Y3QgdWxwaV9pbmZvIHVscGlfaWRzW10gPSB7CiAJVUxQSV9JTkZPKFVMUElfSUQoMHgwNGNjLCAweDE1MDQpLCAiTlhQIElTUDE1MDQiKSwKLQlVTFBJX0lORk8oVUxQSV9JRCgweDA0MjQsIDB4MDAwNiksICJTTVNDIFVTQjMzMTkiKSwKKwlVTFBJX0lORk8oVUxQSV9JRCgweDA0MjQsIDB4MDAwNiksICJTTVNDIFVTQjMzMXgiKSwKIH07CiAKIHN0YXRpYyBpbnQgdWxwaV9zZXRfb3RnX2ZsYWdzKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMKaW5kZXggNjNmN2NjNC4uN2I4ODE1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMKQEAgLTQ4NiwxMiArNDg2LDIyIEBACiAJaWYgKGFjdHVhbF9sZW5ndGggPj0gNCkgewogCQlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJdTggcHJldl9saW5lX3N0YXR1cyA9IHByaXYtPmxpbmVfc3RhdHVzOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXByaXYtPmxpbmVfc3RhdHVzID0gKH4oZGF0YVsyXSkpICYgQ0gzNDFfQklUU19NT0RFTV9TVEFUOwogCQlpZiAoKGRhdGFbMV0gJiBDSDM0MV9NVUxUX1NUQVQpKQogCQkJcHJpdi0+bXVsdGlfc3RhdHVzX2NoYW5nZSA9IDE7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAoKHByaXYtPmxpbmVfc3RhdHVzIF4gcHJldl9saW5lX3N0YXR1cykgJiBDSDM0MV9CSVRfRENEKSB7CisJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CisJCQlpZiAodHR5KQorCQkJCXVzYl9zZXJpYWxfaGFuZGxlX2RjZF9jaGFuZ2UocG9ydCwgdHR5LAorCQkJCQkgICAgcHJpdi0+bGluZV9zdGF0dXMgJiBDSDM0MV9CSVRfRENEKTsKKwkJCXR0eV9rcmVmX3B1dCh0dHkpOworCQl9CisKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKaW5kZXggOGQ3NzMxZC4uNzM1ZWEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwpAQCAtNDksNyArNDksNiBAQAogc3RhdGljIHZvaWQgY3AyMTB4X2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBpbnQpOwogc3RhdGljIGludCBjcDIxMHhfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsKIHN0YXRpYyB2b2lkIGNwMjEweF9kdHJfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnAsIGludCBvbik7Ci1zdGF0aWMgaW50IGNwMjEweF9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwKTsKIAogc3RhdGljIGludCBkZWJ1ZzsKIApAQCAtODcsNyArODYsNiBAQAogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODExNSkgfSwgLyogQXJ5Z29uIE5GQy9NaWZhcmUgUmVhZGVyICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTNEKSB9LCAvKiBCdXJuc2lkZSBUZWxlY29tIERlc2ttb2JpbGUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxM0YpIH0sIC8qIFRhbXMgTWFzdGVyIEVhc3kgQ29udHJvbCAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE0OSkgfSwgLyogV2VzdCBNb3VudGFpbiBSYWRpbyBDb21wdXRlcml6ZWQgQmF0dGVyeSBBbmFseXplciAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE0QSkgfSwgLyogV2VzdCBNb3VudGFpbiBSYWRpbyBSSUdibGFzdGVyIFAmUCAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE0QikgfSwgLyogV2VzdCBNb3VudGFpbiBSYWRpbyBSSUd0YWxrICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTU2KSB9LCAvKiBCJkcgSDMwMDAgbGluayBjYWJsZSAqLwpAQCAtMTEwLDcgKzEwOCw5IEBACiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MzQxKSB9LCAvKiBTaWVtZW5zIE1DMzVQVSBHUFJTIE1vZGVtICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MzgyKSB9LCAvKiBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLiAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODNBOCkgfSwgLyogQW1iZXIgV2lyZWxlc3MgQU1CMjU2MCAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODNEOCkgfSwgLyogRGVrVGVjIERUQSBQbHVzIFZIRi9VSEYgQm9vc3Rlci9BdHRlbnVhdG9yICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4NDExKSB9LCAvKiBLeW9jZXJhIEdQUyBNb2R1bGUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg0MTgpIH0sIC8qIElSWiBBdXRvbWF0aW9uIFRlbGVwb3J0IFNHLTEwIEdTTS9HUFJTIE1vZGVtICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4NDZFKSB9LCAvKiBCRUkgVVNCIFNlbnNvciBJbnRlcmZhY2UgKFZDUCkgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg0NzcpIH0sIC8qIEJhbGx1ZmYgUkZJRCAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RUE2MCkgfSwgLyogU2lsaWNvbiBMYWJzIGZhY3RvcnkgZGVmYXVsdCAqLwpAQCAtMTY1LDggKzE2NSw3IEBACiAJLnRpb2NtZ2V0IAkJPSBjcDIxMHhfdGlvY21nZXQsCiAJLnRpb2Ntc2V0CQk9IGNwMjEweF90aW9jbXNldCwKIAkuYXR0YWNoCQkJPSBjcDIxMHhfc3RhcnR1cCwKLQkuZHRyX3J0cwkJPSBjcDIxMHhfZHRyX3J0cywKLQkuY2Fycmllcl9yYWlzZWQJCT0gY3AyMTB4X2NhcnJpZXJfcmFpc2VkCisJLmR0cl9ydHMJCT0gY3AyMTB4X2R0cl9ydHMKIH07CiAKIC8qIENvbmZpZyByZXF1ZXN0IHR5cGVzICovCkBAIC03NjUsMTUgKzc2NCw2IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBjcDIxMHhfY2Fycmllcl9yYWlzZWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcCkKLXsKLQl1bnNpZ25lZCBpbnQgY29udHJvbDsKLQljcDIxMHhfZ2V0X2NvbmZpZyhwLCBDUDIxMFhfR0VUX01ETVNUUywgJmNvbnRyb2wsIDEpOwotCWlmIChjb250cm9sICYgQ09OVFJPTF9EQ0QpCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBjcDIxMHhfYnJlYWtfY3RsIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKaW5kZXggYjkyMDcwYy4uNjY2ZTVhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwpAQCAtNDU1LDcgKzQ1NSw2IEBACiBzdGF0aWMgaW50IGRpZ2lfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIGludCBkaWdpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBkaWdpX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIGludCBkaWdpX2NhcnJpZXJfcmFpc2VkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgZGlnaV9kdHJfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBvbik7CiBzdGF0aWMgaW50IGRpZ2lfc3RhcnR1cF9kZXZpY2Uoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgaW50IGRpZ2lfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKQEAgLTUxMSw3ICs1MTAsNiBAQAogCS5vcGVuID0JCQkJZGlnaV9vcGVuLAogCS5jbG9zZSA9CQkJZGlnaV9jbG9zZSwKIAkuZHRyX3J0cyA9CQkJZGlnaV9kdHJfcnRzLAotCS5jYXJyaWVyX3JhaXNlZCA9CQlkaWdpX2NhcnJpZXJfcmFpc2VkLAogCS53cml0ZSA9CQkJZGlnaV93cml0ZSwKIAkud3JpdGVfcm9vbSA9CQkJZGlnaV93cml0ZV9yb29tLAogCS53cml0ZV9idWxrX2NhbGxiYWNrID0gCQlkaWdpX3dyaXRlX2J1bGtfY2FsbGJhY2ssCkBAIC0xMzM5LDE0ICsxMzM3LDYgQEAKIAlkaWdpX3NldF9tb2RlbV9zaWduYWxzKHBvcnQsIG9uICogKFRJT0NNX0RUUnxUSU9DTV9SVFMpLCAxKTsKIH0KIAotc3RhdGljIGludCBkaWdpX2NhcnJpZXJfcmFpc2VkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCi17Ci0Jc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlpZiAocHJpdi0+ZHBfbW9kZW1fc2lnbmFscyAmIFRJT0NNX0NEKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBkaWdpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBhMjY2OGQwLi5mMzQ5YTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtMTAwLDYgKzEwMCw3IEBACiBzdGF0aWMgaW50ICAgZnRkaV9qdGFnX3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIGludCAgIGZ0ZGlfbXR4b3JiX2hhY2tfc2V0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgaW50ICAgZnRkaV9ORElfZGV2aWNlX3NldHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgIGZ0ZGlfc3RtY2xpdGVfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgdm9pZCAgZnRkaV9VU0JfVUlSVF9zZXR1cChzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2KTsKIHN0YXRpYyB2b2lkICBmdGRpX0hFX1RJUkExX3NldHVwKHN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYpOwogCkBAIC0xMjMsNiArMTI0LDEwIEBACiAJLnBvcnRfcHJvYmUgPSBmdGRpX0hFX1RJUkExX3NldHVwLAogfTsKIAorc3RhdGljIHN0cnVjdCBmdGRpX3Npb19xdWlyayBmdGRpX3N0bWNsaXRlX3F1aXJrID0geworCS5wcm9iZQk9IGZ0ZGlfc3RtY2xpdGVfcHJvYmUsCit9OworCiAvKgogICogVGhlIDhVMjMyQU0gaGFzIHRoZSBzYW1lIEFQSSBhcyB0aGUgc2lvIGV4Y2VwdCBmb3I6CiAgKiAtIGl0IGNhbiBzdXBwb3J0IE1VQ0ggaGlnaGVyIGJhdWRyYXRlczsgdXAgdG86CkBAIC02MTYsNiArNjIxLDcgQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfT0NFQU5JQ19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKFRUSV9WSUQsIFRUSV9RTDM1NVBfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9STV9DQU5WSUVXX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoQUNUT05fVklELCBBQ1RPTl9TUEVDVFJBUFJPX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoQ09OVEVDX1ZJRCwgQ09OVEVDX0NPTTFVU0JIX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoQkFOREJfVklELCBCQU5EQl9VU09UTDRfUElEKSB9LAogCXsgVVNCX0RFVklDRShCQU5EQl9WSUQsIEJBTkRCX1VTVEw0X1BJRCkgfSwKQEAgLTY3Niw3ICs2ODIsMTcgQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfUENESl9EQUMyX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfUlJDSVJLSVRTX0xPQ09CVUZGRVJfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9BU0tfUkRSNDAwX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoSUNPTV9JRDFfVklELCBJQ09NX0lEMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEXzFfUElEKSB9LAorCXsgVVNCX0RFVklDRShJQ09NX1ZJRCwgSUNPTV9PUENfVV9VQ19QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQMkMxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSUNPTV9WSUQsIElDT01fSURfUlAyQzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShJQ09NX1ZJRCwgSUNPTV9JRF9SUDJEX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSUNPTV9WSUQsIElDT01fSURfUlAyVlRfUElEKSB9LAorCXsgVVNCX0RFVklDRShJQ09NX1ZJRCwgSUNPTV9JRF9SUDJWUl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQNEtWVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQNEtWUl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQMktWVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQMktWUl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0FDR19IRkRVQUxfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9ZRUlfU0VSVk9DRU5URVIzMV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1RIT1JMQUJTX1BJRCkgfSwKQEAgLTgwMCw2ICs4MTYsOCBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9ET1RFQ19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKFFJSEFSRFdBUkVfVklELCBNSUxLWU1JU1RPTkVfSlRBR1NFUklBTF9QSUQpLAogCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmZ0ZGlfanRhZ19xdWlyayB9LAorCXsgVVNCX0RFVklDRShTVF9WSUQsIFNUX1NUTUNMVDEwMzBfUElEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmdGRpX3N0bWNsaXRlX3F1aXJrIH0sCiAJeyB9LAkJCQkJLyogT3B0aW9uYWwgcGFyYW1ldGVyIGVudHJ5ICovCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKQEAgLTE2OTksNiArMTcxNywyNSBAQAogfQogCiAvKgorICogRmlyc3QgYW5kIHNlY29uZCBwb3J0IG9uIFNUTUNMaXRlYWRhcHRvcnMgaXMgcmVzZXJ2ZWQgZm9yIEpUQUcgaW50ZXJmYWNlCisgKiBhbmQgdGhlIGZvcnRoIHBvcnQgZm9yIHBpbworICovCitzdGF0aWMgaW50IGZ0ZGlfc3RtY2xpdGVfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNlcmlhbC0+ZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBzZXJpYWwtPmludGVyZmFjZTsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwlpZiAoaW50ZXJmYWNlID09IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzJdKQorCQlyZXR1cm4gMDsKKworCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJJZ25vcmluZyBzZXJpYWwgcG9ydCByZXNlcnZlZCBmb3IgSlRBR1xuIik7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworLyoKICAqIFRoZSBNYXRyaXggT3JiaXRhbCBWSzIwNC0yNS1VU0IgaGFzIGFuIGludmFsaWQgSU4gZW5kcG9pbnQuCiAgKiBXZSBoYXZlIHRvIGNvcnJlY3QgaXQgaWYgd2Ugd2FudCB0byByZWFkIGZyb20gaXQuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaAppbmRleCBiZjA4NjcyLi4xMTdlOGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCkBAIC01MTgsNiArNTE4LDEyIEBACiAjZGVmaW5lIFJBVE9DX1BST0RVQ1RfSURfVVNCNjBGCTB4YjAyMAogCiAvKgorICogQWN0b24gUmVzZWFyY2ggQ29ycC4KKyAqLworI2RlZmluZSBBQ1RPTl9WSUQJCTB4MDY0NwkvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgQUNUT05fU1BFQ1RSQVBST19QSUQJMHgwMTAwCisKKy8qCiAgKiBDb250ZWMgcHJvZHVjdHMgKGh0dHA6Ly93d3cuY29udGVjLmNvbSkKICAqIFN1Ym1pdHRlZCBieSBEYW5pZWwgU2FuZ29ycmluCiAgKi8KQEAgLTU2OSwxMSArNTc1LDIzIEBACiAjZGVmaW5lIE9DVF9VUzEwMV9QSUQJCTB4MDQyMQkvKiBPQ1QgVVMxMDEgVVNCIHRvIFJTLTIzMiAqLwogCiAvKgotICogSWNvbSBJRC0xIGRpZ2l0YWwgdHJhbnNjZWl2ZXIKKyAqIERlZmluaXRpb25zIGZvciBJY29tIEluYy4gZGV2aWNlcwogICovCi0KLSNkZWZpbmUgSUNPTV9JRDFfVklEICAgICAgICAgICAgMHgwQzI2Ci0jZGVmaW5lIElDT01fSUQxX1BJRCAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBJQ09NX1ZJRAkJMHgwQzI2IC8qIEljb20gdmVuZG9yIElEICovCisvKiBOb3RlOiBJRC0xIGlzIGEgY29tbXVuaWNhdGlvbnMgdHJhbmNlaXZlciBmb3IgSEFNLXJhZGlvIG9wZXJhdG9ycyAqLworI2RlZmluZSBJQ09NX0lEXzFfUElECQkweDAwMDQgLyogSUQtMSBVU0IgdG8gUlMtMjMyICovCisvKiBOb3RlOiBPUEMgaXMgYW4gT3B0aW9uYWwgY2FibGUgdG8gY29ubmVjdCBhbiBJY29tIFRyYW5jZWl2ZXIgKi8KKyNkZWZpbmUgSUNPTV9PUENfVV9VQ19QSUQJMHgwMDE4IC8qIE9QQy00NzhVQywgT1BDLTExMjJVIGNsb25pbmcgY2FibGUgKi8KKy8qIE5vdGU6IElELVJQKiBkZXZpY2VzIGFyZSBJY29tIFJlcGVhdGVyIERldmljZXMgZm9yIEhBTS1yYWRpbyAqLworI2RlZmluZSBJQ09NX0lEX1JQMkMxX1BJRAkweDAwMDkgLyogSUQtUlAyQyBBc3NldCAxIHRvIFJTLTIzMiAqLworI2RlZmluZSBJQ09NX0lEX1JQMkMyX1BJRAkweDAwMEEgLyogSUQtUlAyQyBBc3NldCAyIHRvIFJTLTIzMiAqLworI2RlZmluZSBJQ09NX0lEX1JQMkRfUElECTB4MDAwQiAvKiBJRC1SUDJEIGNvbmZpZ3VyYXRpb24gcG9ydCovCisjZGVmaW5lIElDT01fSURfUlAyVlRfUElECTB4MDAwQyAvKiBJRC1SUDJWIFRyYW5zbWl0IGNvbmZpZyBwb3J0ICovCisjZGVmaW5lIElDT01fSURfUlAyVlJfUElECTB4MDAwRCAvKiBJRC1SUDJWIFJlY2VpdmUgY29uZmlnIHBvcnQgKi8KKyNkZWZpbmUgSUNPTV9JRF9SUDRLVlRfUElECTB4MDAxMCAvKiBJRC1SUDQwMDBWIFRyYW5zbWl0IGNvbmZpZyBwb3J0ICovCisjZGVmaW5lIElDT01fSURfUlA0S1ZSX1BJRAkweDAwMTEgLyogSUQtUlA0MDAwViBSZWNlaXZlIGNvbmZpZyBwb3J0ICovCisjZGVmaW5lIElDT01fSURfUlAyS1ZUX1BJRAkweDAwMTIgLyogSUQtUlAyMDAwViBUcmFuc21pdCBjb25maWcgcG9ydCAqLworI2RlZmluZSBJQ09NX0lEX1JQMktWUl9QSUQJMHgwMDEzIC8qIElELVJQMjAwMFYgUmVjZWl2ZSBjb25maWcgcG9ydCAqLwogCiAvKgogICogR04gT3RvbWV0cmljcyAoaHR0cDovL3d3dy5vdG9tZXRyaWNzLmNvbSkKQEAgLTEwMjIsNiArMTA0MCwxMiBAQAogI2RlZmluZSBXSFRfUElECQkJMHgwMDA0IC8qIFdpcmVsZXNzIEhhbmRoZWxkIFRlcm1pbmFsICovCiAKIC8qCisgKiBTVE1pY3JvZWxlY3RvbmljcworICovCisjZGVmaW5lIFNUX1ZJRAkJCTB4MDQ4MworI2RlZmluZSBTVF9TVE1DTFQxMDMwX1BJRAkweDM3NDcgLyogU1QgTWljcm8gQ29ubmVjdCBMaXRlIFNUTUNMVDEwMzAgKi8KKworLyoKICAqIFBhcG91Y2ggcHJvZHVjdHMgKGh0dHA6Ly93d3cucGFwb3VjaC5jb20vKQogICogU3VibWl0dGVkIGJ5IEZvbGtlcnQgdmFuIEhldXNkZW4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKaW5kZXggZTY4MzNlMi4uZTRkYjVhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCkBAIC00NzksNiArNDc5LDI2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2VyaWFsX2hhbmRsZV9icmVhayk7CiAKKy8qKgorICoJdXNiX3NlcmlhbF9oYW5kbGVfZGNkX2NoYW5nZSAtIGhhbmRsZSBhIGNoYW5nZSBvZiBjYXJyaWVyIGRldGVjdCBzdGF0ZQorICoJQHBvcnQ6IHVzYl9zZXJpYWxfcG9ydCBzdHJ1Y3R1cmUgZm9yIHRoZSBvcGVuIHBvcnQKKyAqCUB0dHk6IHR0eV9zdHJ1Y3Qgc3RydWN0dXJlIGZvciB0aGUgcG9ydAorICoJQHN0YXR1czogbmV3IGNhcnJpZXIgZGV0ZWN0IHN0YXR1cywgbm9uemVybyBpZiBhY3RpdmUKKyAqLwordm9pZCB1c2Jfc2VyaWFsX2hhbmRsZV9kY2RfY2hhbmdlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnVzYl9wb3J0LAorCQkJCXN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGludCBzdGF0dXMpCit7CisJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnVzYl9wb3J0LT5wb3J0OworCisJZGJnKCIlcyAtIHBvcnQgJWQsIHN0YXR1cyAlZCIsIF9fZnVuY19fLCB1c2JfcG9ydC0+bnVtYmVyLCBzdGF0dXMpOworCisJaWYgKHN0YXR1cykKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5vcGVuX3dhaXQpOworCWVsc2UgaWYgKHR0eSAmJiAhQ19DTE9DQUwodHR5KSkKKwkJdHR5X2hhbmd1cCh0dHkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9oYW5kbGVfZGNkX2NoYW5nZSk7CisKIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVzdW1lKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKaW5kZXggY2Q3NjllZi4uM2IyNDZkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKQEAgLTI4ODksOCArMjg4OSw4IEBACiAKIAlkYmcoIiVzICVkLiVkLiVkIiwgZndfaW5mbywgcmVjLT5kYXRhWzBdLCByZWMtPmRhdGFbMV0sIGJ1aWxkKTsKIAotCWVkZ2Vfc2VyaWFsLT5wcm9kdWN0X2luZm8uRmlybXdhcmVNYWpvclZlcnNpb24gPSBmdy0+ZGF0YVswXTsKLQllZGdlX3NlcmlhbC0+cHJvZHVjdF9pbmZvLkZpcm13YXJlTWlub3JWZXJzaW9uID0gZnctPmRhdGFbMV07CisJZWRnZV9zZXJpYWwtPnByb2R1Y3RfaW5mby5GaXJtd2FyZU1ham9yVmVyc2lvbiA9IHJlYy0+ZGF0YVswXTsKKwllZGdlX3NlcmlhbC0+cHJvZHVjdF9pbmZvLkZpcm13YXJlTWlub3JWZXJzaW9uID0gcmVjLT5kYXRhWzFdOwogCWVkZ2Vfc2VyaWFsLT5wcm9kdWN0X2luZm8uRmlybXdhcmVCdWlsZE51bWJlciA9IGNwdV90b19sZTE2KGJ1aWxkKTsKIAogCWZvciAocmVjID0gaWhleF9uZXh0X2JpbnJlYyhyZWMpOyByZWM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmgKaW5kZXggNmFiMmEzZi4uMTc4YjIyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RhYmxlcy5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190YWJsZXMuaApAQCAtMTk5LDYgKzE5OSw3IEBACiAJCS5uYW1lCQk9ICJlcGljIiwKIAl9LAogCS5kZXNjcmlwdGlvbgkJPSAiRVBpQyBkZXZpY2UiLAorCS51c2JfZHJpdmVyCQk9ICZpb19kcml2ZXIsCiAJLmlkX3RhYmxlCQk9IEVwaWNfcG9ydF9pZF90YWJsZSwKIAkubnVtX3BvcnRzCQk9IDEsCiAJLm9wZW4JCQk9IGVkZ2Vfb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKaW5kZXggMTJlZDU5NC4uOTliOTdjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKQEAgLTEyNzUsNiArMTI3NSw3IEBACiAJCSAgIC5uYW1lID0gIml1dV9waG9lbml4IiwKIAkJICAgfSwKIAkuaWRfdGFibGUgPSBpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9ICZpdXVfZHJpdmVyLAogCS5udW1fcG9ydHMgPSAxLAogCS5idWxrX2luX3NpemUgPSA1MTIsCiAJLmJ1bGtfb3V0X3NpemUgPSA1MTIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaAppbmRleCAyZDhiYWY2Li5jZTEzNGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKQEAgLTU0Niw2ICs1NDYsNyBAQAogCQkubmFtZQkJPSAia2V5c3Bhbl9ub19maXJtIiwKIAl9LAogCS5kZXNjcmlwdGlvbgkJPSAiS2V5c3BhbiAtICh3aXRob3V0IGZpcm13YXJlKSIsCisJLnVzYl9kcml2ZXIJCT0gJmtleXNwYW5fZHJpdmVyLAogCS5pZF90YWJsZQkJPSBrZXlzcGFuX3ByZV9pZHMsCiAJLm51bV9wb3J0cwkJPSAxLAogCS5hdHRhY2gJCQk9IGtleXNwYW5fZmFrZV9zdGFydHVwLApAQCAtNTU3LDYgKzU1OCw3IEBACiAJCS5uYW1lCQk9ICJrZXlzcGFuXzEiLAogCX0sCiAJLmRlc2NyaXB0aW9uCQk9ICJLZXlzcGFuIDEgcG9ydCBhZGFwdGVyIiwKKwkudXNiX2RyaXZlcgkJPSAma2V5c3Bhbl9kcml2ZXIsCiAJLmlkX3RhYmxlCQk9IGtleXNwYW5fMXBvcnRfaWRzLAogCS5udW1fcG9ydHMJCT0gMSwKIAkub3BlbgkJCT0ga2V5c3Bhbl9vcGVuLApAQCAtNTc5LDYgKzU4MSw3IEBACiAJCS5uYW1lCQk9ICJrZXlzcGFuXzIiLAogCX0sCiAJLmRlc2NyaXB0aW9uCQk9ICJLZXlzcGFuIDIgcG9ydCBhZGFwdGVyIiwKKwkudXNiX2RyaXZlcgkJPSAma2V5c3Bhbl9kcml2ZXIsCiAJLmlkX3RhYmxlCQk9IGtleXNwYW5fMnBvcnRfaWRzLAogCS5udW1fcG9ydHMJCT0gMiwKIAkub3BlbgkJCT0ga2V5c3Bhbl9vcGVuLApAQCAtNjAxLDYgKzYwNCw3IEBACiAJCS5uYW1lCQk9ICJrZXlzcGFuXzQiLAogCX0sCiAJLmRlc2NyaXB0aW9uCQk9ICJLZXlzcGFuIDQgcG9ydCBhZGFwdGVyIiwKKwkudXNiX2RyaXZlcgkJPSAma2V5c3Bhbl9kcml2ZXIsCiAJLmlkX3RhYmxlCQk9IGtleXNwYW5fNHBvcnRfaWRzLAogCS5udW1fcG9ydHMJCT0gNCwKIAkub3BlbgkJCT0ga2V5c3Bhbl9vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwppbmRleCBhMTBkZDU2Li41NTRhODY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwpAQCAtNjc5LDIyICs2NzksNiBAQAogCX0KIH0KIAotc3RhdGljIGludCBrZXlzcGFuX3BkYV9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQotewotCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7Ci0JdW5zaWduZWQgY2hhciBtb2RlbWJpdHM7Ci0KLQkvKiBJZiB3ZSBjYW4gcmVhZCB0aGUgbW9kZW0gc3RhdHVzIGFuZCB0aGUgRENEIGlzIGxvdyB0aGVuCi0JICAgY2FycmllciBpcyBub3QgcmFpc2VkIHlldCAqLwotCWlmIChrZXlzcGFuX3BkYV9nZXRfbW9kZW1faW5mbyhzZXJpYWwsICZtb2RlbWJpdHMpID49IDApIHsKLQkJaWYgKCEobW9kZW1iaXRzICYgKDE+PjYpKSkKLQkJCXJldHVybiAwOwotCX0KLQkvKiBDYXJyaWVyIHJhaXNlZCwgb3Igd2UgZmFpbGVkIChlZyBkaXNjb25uZWN0ZWQpIHNvCi0JICAgcHJvZ3Jlc3MgYWNjb3JkaW5nbHkgKi8KLQlyZXR1cm4gMTsKLX0KLQogCiBzdGF0aWMgaW50IGtleXNwYW5fcGRhX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKQEAgLTg4MSw3ICs4NjUsNiBAQAogCS5pZF90YWJsZSA9CQlpZF90YWJsZV9zdGQsCiAJLm51bV9wb3J0cyA9CQkxLAogCS5kdHJfcnRzID0JCWtleXNwYW5fcGRhX2R0cl9ydHMsCi0JLmNhcnJpZXJfcmFpc2VkCT0Ja2V5c3Bhbl9wZGFfY2Fycmllcl9yYWlzZWQsCiAJLm9wZW4gPQkJCWtleXNwYW5fcGRhX29wZW4sCiAJLmNsb3NlID0JCWtleXNwYW5fcGRhX2Nsb3NlLAogCS53cml0ZSA9CQlrZXlzcGFuX3BkYV93cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3RvX21vZGVtLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW90b19tb2RlbS5jCmluZGV4IGNmMTcxODMuLjY1MzQ2NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3RvX21vZGVtLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vdG9fbW9kZW0uYwpAQCAtNDQsNiArNDQsNyBAQAogCQkubmFtZSA9CQkibW90by1tb2RlbSIsCiAJfSwKIAkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLnVzYl9kcml2ZXIgPQkJJm1vdG9fZHJpdmVyLAogCS5udW1fcG9ydHMgPQkJMSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCA3NDg3NzgyLi41ZjQ2ODM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC0zODIsNyArMzgyLDE2IEBACiAjZGVmaW5lIEhBSUVSX1ZFTkRPUl9JRAkJCQkweDIwMWUKICNkZWZpbmUgSEFJRVJfUFJPRFVDVF9DRTEwMAkJCTB4MjAwOQogCi0jZGVmaW5lIENJTlRFUklPTl9WRU5ET1JfSUQJCQkweDA2ODEKKy8qIENpbnRlcmlvbiAoZm9ybWVybHkgU2llbWVucykgcHJvZHVjdHMgKi8KKyNkZWZpbmUgU0lFTUVOU19WRU5ET1JfSUQJCQkJMHgwNjgxCisjZGVmaW5lIENJTlRFUklPTl9WRU5ET1JfSUQJCQkJMHgxZTJkCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX0hDMjVfTURNCQkweDAwNDcKKyNkZWZpbmUgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyNV9NRE1ORVQJMHgwMDQwCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX0hDMjhfTURNCQkweDAwNEMKKyNkZWZpbmUgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyOF9NRE1ORVQJMHgwMDRBIC8qIHNhbWUgZm9yIEhDMjhKICovCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX0VVM19FCQkJMHgwMDUxCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX0VVM19QCQkJMHgwMDUyCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX1BIOAkJCTB4MDA1MwogCiAvKiBPbGl2ZXR0aSBwcm9kdWN0cyAqLwogI2RlZmluZSBPTElWRVRUSV9WRU5ET1JfSUQJCQkweDBiM2MKQEAgLTk0NCw3ICs5NTMsMTcgQEAKIAl7IFVTQl9ERVZJQ0UoUElSRUxMSV9WRU5ET1JfSUQsIFBJUkVMTElfUFJPRFVDVF8xMDBGKSB9LAogCXsgVVNCX0RFVklDRShQSVJFTExJX1ZFTkRPUl9JRCwgUElSRUxMSV9QUk9EVUNUXzEwMTEpfSwKIAl7IFVTQl9ERVZJQ0UoUElSRUxMSV9WRU5ET1JfSUQsIFBJUkVMTElfUFJPRFVDVF8xMDEyKX0sCi0JeyBVU0JfREVWSUNFKENJTlRFUklPTl9WRU5ET1JfSUQsIDB4MDA0NykgfSwKKwkvKiBDaW50ZXJpb24gKi8KKwl7IFVTQl9ERVZJQ0UoQ0lOVEVSSU9OX1ZFTkRPUl9JRCwgQ0lOVEVSSU9OX1BST0RVQ1RfRVUzX0UpIH0sCisJeyBVU0JfREVWSUNFKENJTlRFUklPTl9WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0VVM19QKSB9LAorCXsgVVNCX0RFVklDRShDSU5URVJJT05fVkVORE9SX0lELCBDSU5URVJJT05fUFJPRFVDVF9QSDgpIH0sCisJeyBVU0JfREVWSUNFKENJTlRFUklPTl9WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0hDMjhfTURNKSB9LCAKKwl7IFVTQl9ERVZJQ0UoQ0lOVEVSSU9OX1ZFTkRPUl9JRCwgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyOF9NRE1ORVQpIH0sCisJeyBVU0JfREVWSUNFKFNJRU1FTlNfVkVORE9SX0lELCBDSU5URVJJT05fUFJPRFVDVF9IQzI1X01ETSkgfSwKKwl7IFVTQl9ERVZJQ0UoU0lFTUVOU19WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0hDMjVfTURNTkVUKSB9LAorCXsgVVNCX0RFVklDRShTSUVNRU5TX1ZFTkRPUl9JRCwgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyOF9NRE0pIH0sIC8qIEhDMjggZW51bWVyYXRlcyB3aXRoIFNpZW1lbnMgb3IgQ2ludGVyaW9uIFZJRCBkZXBlbmRpbmcgb24gRlcgcmV2aXNpb24gKi8KKwl7IFVTQl9ERVZJQ0UoU0lFTUVOU19WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0hDMjhfTURNTkVUKSB9LAorCiAJeyBVU0JfREVWSUNFKE9MSVZFVFRJX1ZFTkRPUl9JRCwgT0xJVkVUVElfUFJPRFVDVF9PTElDQVJEMTAwKSB9LAogCXsgVVNCX0RFVklDRShDRUxPVF9WRU5ET1JfSUQsIENFTE9UX1BST0RVQ1RfQ1Q2ODBNKSB9LCAvKiBDVC02NTAgQ0RNQSA0NTAgMXhFVkRPIG1vZGVtICovCiAJeyBVU0JfREVWSUNFKE9OREFfVkVORE9SX0lELCBPTkRBX01UODI1VVApIH0sIC8qIE9OREEgTVQ4MjVVUCBtb2RlbSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKaW5kZXggNWJlODY2Yi4uNzM2MTMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jCkBAIC0xNTcsNiArMTU3LDcgQEAKIAkJLm5hbWUgPQkJIm90aTY4NTgiLAogCX0sCiAJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS51c2JfZHJpdmVyID0JCSZvdGk2ODU4X2RyaXZlciwKIAkubnVtX3BvcnRzID0JCTEsCiAJLm9wZW4gPQkJCW90aTY4NThfb3BlbiwKIAkuY2xvc2UgPQkJb3RpNjg1OF9jbG9zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwppbmRleCA4YWU0YzZjLi4wOGM5MTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCkBAIC01MCw2ICs1MCw3IEBACiAJeyBVU0JfREVWSUNFKFBMMjMwM19WRU5ET1JfSUQsIFBMMjMwM19QUk9EVUNUX0lEX01NWCkgfSwKIAl7IFVTQl9ERVZJQ0UoUEwyMzAzX1ZFTkRPUl9JRCwgUEwyMzAzX1BST0RVQ1RfSURfR1BSUykgfSwKIAl7IFVTQl9ERVZJQ0UoUEwyMzAzX1ZFTkRPUl9JRCwgUEwyMzAzX1BST0RVQ1RfSURfSENSMzMxKSB9LAorCXsgVVNCX0RFVklDRShQTDIzMDNfVkVORE9SX0lELCBQTDIzMDNfUFJPRFVDVF9JRF9NT1RPUk9MQSkgfSwKIAl7IFVTQl9ERVZJQ0UoSU9EQVRBX1ZFTkRPUl9JRCwgSU9EQVRBX1BST0RVQ1RfSUQpIH0sCiAJeyBVU0JfREVWSUNFKElPREFUQV9WRU5ET1JfSUQsIElPREFUQV9QUk9EVUNUX0lEX1JTQVE1KSB9LAogCXsgVVNCX0RFVklDRShBVEVOX1ZFTkRPUl9JRCwgQVRFTl9QUk9EVUNUX0lEKSB9LApAQCAtNjc3LDkgKzY3OCwxMSBAQAogewogCiAJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBzdGF0dXNfaWR4ID0gVUFSVF9TVEFURTsKIAl1OCBsZW5ndGggPSBVQVJUX1NUQVRFICsgMTsKKwl1OCBwcmV2X2xpbmVfc3RhdHVzOwogCXUxNiBpZHYsIGlkcDsKIAogCWlkdiA9IGxlMTZfdG9fY3B1KHBvcnQtPnNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKQEAgLTcwMSwxMSArNzA0LDIwIEBACiAKIAkvKiBTYXZlIG9mZiB0aGUgdWFydCBzdGF0dXMgZm9yIG90aGVycyB0byBsb29rIGF0ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcmV2X2xpbmVfc3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CiAJcHJpdi0+bGluZV9zdGF0dXMgPSBkYXRhW3N0YXR1c19pZHhdOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpZiAocHJpdi0+bGluZV9zdGF0dXMgJiBVQVJUX0JSRUFLX0VSUk9SKQogCQl1c2Jfc2VyaWFsX2hhbmRsZV9icmVhayhwb3J0KTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKKworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCWlmICghdHR5KQorCQlyZXR1cm47CisJaWYgKChwcml2LT5saW5lX3N0YXR1cyBeIHByZXZfbGluZV9zdGF0dXMpICYgVUFSVF9EQ0QpCisJCXVzYl9zZXJpYWxfaGFuZGxlX2RjZF9jaGFuZ2UocG9ydCwgdHR5LAorCQkJCXByaXYtPmxpbmVfc3RhdHVzICYgVUFSVF9EQ0QpOworCXR0eV9rcmVmX3B1dCh0dHkpOwogfQogCiBzdGF0aWMgdm9pZCBwbDIzMDNfcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCmluZGV4IDQzZWI5YmQuLjFiMDI1ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgUEwyMzAzX1BST0RVQ1RfSURfTU1YCQkweDA2MTIKICNkZWZpbmUgUEwyMzAzX1BST0RVQ1RfSURfR1BSUwkJMHgwNjA5CiAjZGVmaW5lIFBMMjMwM19QUk9EVUNUX0lEX0hDUjMzMQkweDMzMWEKKyNkZWZpbmUgUEwyMzAzX1BST0RVQ1RfSURfTU9UT1JPTEEJMHgwMzA3CiAKICNkZWZpbmUgQVRFTl9WRU5ET1JfSUQJCTB4MDU1NwogI2RlZmluZSBBVEVOX1ZFTkRPUl9JRDIJCTB4MDU0NwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3FjYXV4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcWNhdXguYwppbmRleCAyMTRhM2U1Li4zMGI3M2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcWNhdXguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcWNhdXguYwpAQCAtMzYsNiArMzYsNyBAQAogI2RlZmluZSBVVFNUQVJDT01fUFJPRFVDVF9VTTE3NV9WMQkJMHgzNzEyCiAjZGVmaW5lIFVUU1RBUkNPTV9QUk9EVUNUX1VNMTc1X1YyCQkweDM3MTQKICNkZWZpbmUgVVRTVEFSQ09NX1BST0RVQ1RfVU0xNzVfQUxMVEVMCQkweDM3MTUKKyNkZWZpbmUgUEFOVEVDSF9QUk9EVUNUX1VNTDI5MF9WWlcJCTB4MzcxOAogCiAvKiBDTU9URUNIIGRldmljZXMgKi8KICNkZWZpbmUgQ01PVEVDSF9WRU5ET1JfSUQJCQkweDE2ZDgKQEAgLTY2LDYgKzY3LDcgQEAKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKExHX1ZFTkRPUl9JRCwgTEdfUFJPRFVDVF9WWDQ0MDBfNjAwMCwgMHhmZiwgMHhmZiwgMHgwMCkgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFNBTllPX1ZFTkRPUl9JRCwgU0FOWU9fUFJPRFVDVF9LQVRBTkFfTFgsIDB4ZmYsIDB4ZmYsIDB4MDApIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhTQU1TVU5HX1ZFTkRPUl9JRCwgU0FNU1VOR19QUk9EVUNUX1U1MjAsIDB4ZmYsIDB4MDAsIDB4MDApIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhVVFNUQVJDT01fVkVORE9SX0lELCBQQU5URUNIX1BST0RVQ1RfVU1MMjkwX1ZaVywgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKQEAgLTg0LDYgKzg2LDcgQEAKIAkJLm5hbWUgPQkJInFjYXV4IiwKIAl9LAogCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9CQkmcWNhdXhfZHJpdmVyLAogCS5udW1fcG9ydHMgPQkJMSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVtZW5zX21waS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZW1lbnNfbXBpLmMKaW5kZXggY2I4MTk1Yy4uNzRjZDRjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZW1lbnNfbXBpLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZW1lbnNfbXBpLmMKQEAgLTQyLDYgKzQyLDcgQEAKIAkJLm5hbWUgPQkJInNpZW1lbnNfbXBpIiwKIAl9LAogCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9CQkmc2llbWVuc191c2JfbXBpX2RyaXZlciwKIAkubnVtX3BvcnRzID0JCTEsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKaW5kZXggNzQ4MWZmOC4uMDQ1NzgxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwpAQCAtMzAxLDYgKzMwMSw5IEBACiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHg2OEEzKSwgCS8qIFNpZXJyYSBXaXJlbGVzcyBEaXJlY3QgSVAgbW9kZW1zICovCiAJICAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmRpcmVjdF9pcF9pbnRlcmZhY2VfYmxhY2tsaXN0CiAJfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZjNkLCAweDY4QTMpLCAJLyogQWlycHJpbWUvU2llcnJhIFdpcmVsZXNzIERpcmVjdCBJUCBtb2RlbXMgKi8KKwkgIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmZGlyZWN0X2lwX2ludGVyZmFjZV9ibGFja2xpc3QKKwl9LAogICAgICAgIHsgVVNCX0RFVklDRSgweDQxM0MsIDB4MDgxMzMpIH0sIC8qIERlbGwgQ29tcHV0ZXIgQ29ycC4gV2lyZWxlc3MgNTcyMCBWWlcgTW9iaWxlIEJyb2FkYmFuZCAoRVZETyBSZXYtQSkgTWluaWNhcmQgR1BTIFBvcnQgKi8KIAogCXsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKaW5kZXggNzY1YWE5OC4uY2JmYjcwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAogLyogaG93IGNvbWUgPz8/ICovCiAjZGVmaW5lIFVBUlRfU1RBVEUJCQkweDA4Ci0jZGVmaW5lIFVBUlRfU1RBVEVfVFJBTlNJRU5UX01BU0sJMHg3NAorI2RlZmluZSBVQVJUX1NUQVRFX1RSQU5TSUVOVF9NQVNLCTB4NzUKICNkZWZpbmUgVUFSVF9EQ0QJCQkweDAxCiAjZGVmaW5lIFVBUlRfRFNSCQkJMHgwMgogI2RlZmluZSBVQVJUX0JSRUFLX0VSUk9SCQkweDA0CkBAIC01MjUsNiArNTI1LDEwIEBACiAJCS8qIG92ZXJydW4gaXMgc3BlY2lhbCwgbm90IGFzc29jaWF0ZWQgd2l0aCBhIGNoYXIgKi8KIAkJaWYgKHN0YXR1cyAmIFVBUlRfT1ZFUlJVTl9FUlJPUikKIAkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOworCisJCWlmIChzdGF0dXMgJiBVQVJUX0RDRCkKKwkJCXVzYl9zZXJpYWxfaGFuZGxlX2RjZF9jaGFuZ2UocG9ydCwgdHR5LAorCQkJCSAgIHByaXYtPmxpbmVfc3RhdHVzICYgTVNSX1NUQVRVU19MSU5FX0RDRCk7CiAJfQogCiAJdHR5X2luc2VydF9mbGlwX3N0cmluZ19maXhlZF9mbGFnKHR0eSwgZGF0YSwgdHR5X2ZsYWcsCkBAIC02NDUsNiArNjQ5LDcgQEAKIAkJLm5hbWUgPQkJIlNQQ1A4eDUiLAogCX0sCiAJLmlkX3RhYmxlCQk9IGlkX3RhYmxlLAorCS51c2JfZHJpdmVyCQk9ICZzcGNwOHg1X2RyaXZlciwKIAkubnVtX3BvcnRzCQk9IDEsCiAJLm9wZW4gCQkJPSBzcGNwOHg1X29wZW4sCiAJLmR0cl9ydHMJCT0gc3BjcDh4NV9kdHJfcnRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKaW5kZXggYjI5MDJmMy4uYTkxMDAwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCkBAIC0zNjksOSArMzY5LDkgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IHRpX2V4aXQodm9pZCkKIHsKKwl1c2JfZGVyZWdpc3RlcigmdGlfdXNiX2RyaXZlcik7CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ0aV8xcG9ydF9kZXZpY2UpOwogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmdGlfMnBvcnRfZGV2aWNlKTsKLQl1c2JfZGVyZWdpc3RlcigmdGlfdXNiX2RyaXZlcik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKaW5kZXggNjk1NGRlNS4uNTQ2YTUyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCkBAIC0xMzQ0LDExICsxMzQ0LDE1IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJZml4dXBfZ2VuZXJpYyhkcml2ZXIpOwotCWlmIChkcml2ZXItPnVzYl9kcml2ZXIpCi0JCWRyaXZlci0+dXNiX2RyaXZlci0+c3VwcG9ydHNfYXV0b3N1c3BlbmQgPSAxOwogCiAJaWYgKCFkcml2ZXItPmRlc2NyaXB0aW9uKQogCQlkcml2ZXItPmRlc2NyaXB0aW9uID0gZHJpdmVyLT5kcml2ZXIubmFtZTsKKwlpZiAoIWRyaXZlci0+dXNiX2RyaXZlcikgeworCQlXQVJOKDEsICJTZXJpYWwgZHJpdmVyICVzIGhhcyBubyB1c2JfZHJpdmVyXG4iLAorCQkJCWRyaXZlci0+ZGVzY3JpcHRpb24pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZHJpdmVyLT51c2JfZHJpdmVyLT5zdXBwb3J0c19hdXRvc3VzcGVuZCA9IDE7CiAKIAkvKiBBZGQgdGhpcyBkZXZpY2UgdG8gb3VyIGxpc3Qgb2YgZGV2aWNlcyAqLwogCW11dGV4X2xvY2soJnRhYmxlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl9kZWJ1Zy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl9kZWJ1Zy5jCmluZGV4IGYyZWQ2YTMuLjk1YTgyMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2JfZGVidWcuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX2RlYnVnLmMKQEAgLTc1LDYgKzc1LDcgQEAKIAkJLm5hbWUgPQkJImRlYnVnIiwKIAl9LAogCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9CQkmZGVidWdfZHJpdmVyLAogCS5udW1fcG9ydHMgPQkJMSwKIAkuYnVsa19vdXRfc2l6ZSA9CVVTQl9ERUJVR19NQVhfUEFDS0VUX1NJWkUsCiAJLmJyZWFrX2N0bCA9CQl1c2JfZGVidWdfYnJlYWtfY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl93d2FuLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX3d3YW4uYwppbmRleCBiMDA0YjJhLi45YzAxNGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX3d3YW4uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX3d3YW4uYwpAQCAtMjk1LDEyICsyOTUsMTUgQEAKIAkJICAgIF9fZnVuY19fLCBzdGF0dXMsIGVuZHBvaW50KTsKIAl9IGVsc2UgewogCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKLQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwotCQl9IGVsc2UKLQkJCWRiZygiJXM6IGVtcHR5IHJlYWQgdXJiIHJlY2VpdmVkIiwgX19mdW5jX18pOwotCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJaWYgKHR0eSkgeworCQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLAorCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJfSBlbHNlCisJCQkJZGJnKCIlczogZW1wdHkgcmVhZCB1cmIgcmVjZWl2ZWQiLCBfX2Z1bmNfXyk7CisJCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJfQogCiAJCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KIAkJaWYgKHN0YXR1cyAhPSAtRVNIVVRET1dOKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCmluZGV4IDE1YTVkODkuLjFjMTE5NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvY2RjLmg+CiAjaW5jbHVkZSAidmlzb3IuaCIKIAogLyoKQEAgLTQ3OSw2ICs0ODAsMTcgQEAKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKKwkvKgorCSAqIHNvbWUgU2Ftc3VuZyBBbmRyb2lkIHBob25lcyBpbiBtb2RlbSBtb2RlIGhhdmUgdGhlIHNhbWUgSUQKKwkgKiBhcyBTUEgtSTUwMCwgYnV0IHRoZXkgYXJlIEFDTSBkZXZpY2VzLCBzbyBkb250IGJpbmQgdG8gdGhlbQorCSAqLworCWlmIChpZC0+aWRWZW5kb3IgPT0gU0FNU1VOR19WRU5ET1JfSUQgJiYKKwkJaWQtPmlkUHJvZHVjdCA9PSBTQU1TVU5HX1NQSF9JNTAwX0lEICYmCisJCXNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcyA9PSBVU0JfQ0xBU1NfQ09NTSAmJgorCQlzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5iRGV2aWNlU3ViQ2xhc3MgPT0KKwkJCVVTQl9DRENfU1VCQ0xBU1NfQUNNKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmIChzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkgewogCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/P1xuIiwKIAkJCXNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfY3lwcmVzcy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2N5cHJlc3MuaAppbmRleCBjODU0ZmRlLi4yYzg1NTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfY3lwcmVzcy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9jeXByZXNzLmgKQEAgLTMxLDQgKzMxLDkgQEAKIAkJIkN5cHJlc3MgSVNELTMwMExQIiwKIAkJVVNCX1NDX0NZUF9BVEFDQiwgVVNCX1BSX0RFVklDRSwgTlVMTCwgMCksCiAKK1VOVVNVQUxfREVWKCAweDE0Y2QsIDB4NjExNiwgMHgwMDAwLCAweDk5OTksCisJCSJTdXBlciBUb3AiLAorCQkiVVNCIDIuMCAgU0FUQSBCUklER0UiLAorCQlVU0JfU0NfQ1lQX0FUQUNCLCBVU0JfUFJfREVWSUNFLCBOVUxMLCAwKSwKKwogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKaW5kZXggZmNjMWUzMi4uYzE2MDJiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC0xMDQ0LDYgKzEwNDQsMTUgQEAKIAkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfQlVMSzMyKSwKIAorLyogUmVwb3J0ZWQgYnkgPHR0a3NwYW1AZnJlZS5mcj4KKyAqIFRoZSBkZXZpY2UgcmVwb3J0cyBhIHZlbmRvci1zcGVjaWZpYyBkZXZpY2UgY2xhc3MsIHJlcXVpcmluZyBhbgorICogZXhwbGljaXQgdmVuZG9yL3Byb2R1Y3QgbWF0Y2guCisgKi8KK1VOVVNVQUxfREVWKCAgMHgwODUxLCAweDE1NDIsIDB4MDAwMiwgMHgwMDAyLAorCQkiTWFnaWNQaXhlbCIsCisJCSJGV19PbWVnYTIiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLCAwKSwKKwogLyogQW5kcmV3IEx1bm4gPGFuZHJld0BsdW5uLmNoPgogICogUGFuRGlnaXRhbCBEaWdpdGFsIFBpY3R1cmUgRnJhbWUuIERvZXMgbm90IGxpa2UgQUxMT1dfTUVESVVNX1JFTU9WQUwKICAqIG9uIExVTiA0LgpAQCAtMTM4OCw2ICsxMzk3LDEzIEBACiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCiAKKy8qIFN1Ym1pdHRlZCBieSBOaWNrIEhvbGxvd2F5ICovCitVTlVTVUFMX0RFViggMHgwZjg4LCAweDA0MmUsIDB4MDEwMCwgMHgwMTAwLAorCQkiVlRlY2giLAorCQkiS2lkaXpvb20iLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkgKSwKKwogLyogUmVwb3J0ZWQgYnkgTWljaGFlbCBTdGF0dG1hbm4gPG1pY2hhZWxAc3RhdHRtYW5uLmNvbT4gKi8KIFVOVVNVQUxfREVWKCAgMHgwZmNlLCAweGQwMDgsIDB4MDAwMCwgMHgwMDAwLAogCQkiU29ueSBFcmljc3NvbiIsCkBAIC0xODcyLDYgKzE4ODgsMjIgQEAKIAkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfTk9fUkVBRF9ESVNDX0lORk8gKSwKIAorLyogUGF0Y2ggYnkgUmljaGFyZCBTY2j8dHogPHIuc2NodHpAdC1vbmxpbmUuZGU+CisgKiBUaGlzIGV4dGVybmFsIGhhcmQgZHJpdmUgZW5jbG9zdXJlIHVzZXMgYSBKTWljcm9uIGNoaXAgd2hpY2gKKyAqIG5lZWRzIHRoZSBVU19GTF9JR05PUkVfUkVTSURVRSBmbGFnIHRvIHdvcmsgcHJvcGVybHkuICovCitVTlVTVUFMX0RFViggIDB4MWU2OCwgMHgwMDFiLCAweDAwMDAsIDB4MDAwMCwKKwkJIlRyZWtTdG9yIEdtYkggJiBDby4gS0ciLAorCQkiRGF0YVN0YXRpb24gbWF4aSBnLnUiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSB8IFVTX0ZMX1NBTkVfU0VOU0UgKSwKKworLyogUmVwb3J0ZWQgYnkgSmFzcGVyIE1hY2tlbnppZSA8c2NhcmxldHBpbXBlcm5hbEBob3RtYWlsLmNvbT4gKi8KK1VOVVNVQUxfREVWKCAweDFlNzQsIDB4NDYyMSwgMHgwMDAwLCAweDAwMDAsCisJCSJDb2J5IEVsZWN0cm9uaWNzIiwKKwkJIk1QMyBQbGF5ZXIiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9CVUxLX0lHTk9SRV9UQUcgfCBVU19GTF9NQVhfU0VDVE9SU182NCApLAorCiBVTlVTVUFMX0RFViggMHgyMTE2LCAweDAzMjAsIDB4MDAwMSwgMHgwMDAxLAogCQkiU1QiLAogCQkiMkEiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKaW5kZXggOWIzY2ExMC4uZjYxNmNlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuYworKysgYi9kcml2ZXJzL3Zob3N0L25ldC5jCkBAIC0xMjgsOCArMTI4LDcgQEAKIAlzaXplX3QgaGRyX3NpemU7CiAJc3RydWN0IHNvY2tldCAqc29jazsKIAotCS8qIFRPRE86IGNoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgZnJvbSB2aG9zdF93b3JrZXI/Ci0JICogTm90IHN1cmUgaXQncyB3b3J0aCBpdCwgaXQncyBzdHJhaWdodC1mb3J3YXJkIGVub3VnaC4gKi8KKwkvKiBUT0RPOiBjaGVjayB0aGF0IHdlIGFyZSBydW5uaW5nIGZyb20gdmhvc3Rfd29ya2VyPyAqLwogCXNvY2sgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2sodnEtPnByaXZhdGVfZGF0YSwgMSk7CiAJaWYgKCFzb2NrKQogCQlyZXR1cm47CkBAIC0zMDYsNyArMzA1LDggQEAKIAlzaXplX3QgbGVuLCB0b3RhbF9sZW4gPSAwOwogCWludCBlcnI7CiAJc2l6ZV90IGhkcl9zaXplOwotCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSByY3VfZGVyZWZlcmVuY2UodnEtPnByaXZhdGVfZGF0YSk7CisJLyogVE9ETzogY2hlY2sgdGhhdCB3ZSBhcmUgcnVubmluZyBmcm9tIHZob3N0X3dvcmtlcj8gKi8KKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHZxLT5wcml2YXRlX2RhdGEsIDEpOwogCWlmICghc29jayB8fCBza2JfcXVldWVfZW1wdHkoJnNvY2stPnNrLT5za19yZWNlaXZlX3F1ZXVlKSkKIAkJcmV0dXJuOwogCkBAIC00MTUsNyArNDE1LDggQEAKIAlpbnQgZXJyLCBoZWFkY291bnQ7CiAJc2l6ZV90IHZob3N0X2hsZW4sIHNvY2tfaGxlbjsKIAlzaXplX3Qgdmhvc3RfbGVuLCBzb2NrX2xlbjsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gcmN1X2RlcmVmZXJlbmNlKHZxLT5wcml2YXRlX2RhdGEpOworCS8qIFRPRE86IGNoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgZnJvbSB2aG9zdF93b3JrZXI/ICovCisJc3RydWN0IHNvY2tldCAqc29jayA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayh2cS0+cHJpdmF0ZV9kYXRhLCAxKTsKIAlpZiAoIXNvY2sgfHwgc2tiX3F1ZXVlX2VtcHR5KCZzb2NrLT5zay0+c2tfcmVjZWl2ZV9xdWV1ZSkpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5oIGIvZHJpdmVycy92aG9zdC92aG9zdC5oCmluZGV4IDJhZjQ0YjcuLmIzMzYzYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaAorKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKQEAgLTE3Myw5ICsxNzMsOSBAQAogewogCXVuc2lnbmVkIGFja2VkX2ZlYXR1cmVzOwogCi0JYWNrZWRfZmVhdHVyZXMgPQotCQlyY3VfZGVyZWZlcmVuY2VfaW5kZXhfY2hlY2soZGV2LT5hY2tlZF9mZWF0dXJlcywKLQkJCQkJICAgIGxvY2tkZXBfaXNfaGVsZCgmZGV2LT5tdXRleCkpOworCS8qIFRPRE86IGNoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgZnJvbSB2aG9zdF93b3JrZXIgb3IgZGV2IG11dGV4IGlzCisJICogaGVsZD8gKi8KKwlhY2tlZF9mZWF0dXJlcyA9IHJjdV9kZXJlZmVyZW5jZV9pbmRleF9jaGVjayhkZXYtPmFja2VkX2ZlYXR1cmVzLCAxKTsKIAlyZXR1cm4gYWNrZWRfZmVhdHVyZXMgJiAoMSA8PCBiaXQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggZDkxNmFjMC4uNmJhZmI1MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTEyMjcsNyArMTIyNyw3IEBACiAKIGNvbmZpZyBGQl9JTlRFTAogCXRyaXN0YXRlICJJbnRlbCA4MzBNLzg0NUcvODUyR00vODU1R00vODY1Ry85MTVHLzk0NUcvOTQ1R00vOTY1Ry85NjVHTSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIEZCICYmIFBDSSAmJiBYODYgJiYgQUdQX0lOVEVMICYmIEVNQkVEREVECisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgRkIgJiYgUENJICYmIFg4NiAmJiBBR1BfSU5URUwgJiYgRVhQRVJUCiAJc2VsZWN0IEZCX01PREVfSEVMUEVSUwogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Fya2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2Fya2ZiLmMKaW5kZXggZDU4M2JlYS4uMzkxYWM5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hcmtmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXJrZmIuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N2Z2EuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uc29sZS5oPiAvKiBXaHkgc2hvdWxkIGZiIGRyaXZlciBjYWxsIGNvbnNvbGUgZnVuY3Rpb25zPyBiZWNhdXNlIGFjcXVpcmVfY29uc29sZV9zZW0oKSAqLworI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4gLyogV2h5IHNob3VsZCBmYiBkcml2ZXIgY2FsbCBjb25zb2xlIGZ1bmN0aW9ucz8gYmVjYXVzZSBjb25zb2xlX2xvY2soKSAqLwogI2luY2x1ZGUgPHZpZGVvL3ZnYS5oPgogCiAjaWZkZWYgQ09ORklHX01UUlIKQEAgLTEwOTEsMTIgKzEwOTEsMTIgQEAKIAogCWRldl9pbmZvKGluZm8tPmRldmljZSwgInN1c3BlbmRcbiIpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCW11dGV4X2xvY2soJihwYXItPm9wZW5fbG9jaykpOwogCiAJaWYgKChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9GUkVFWkUpIHx8IChwYXItPnJlZl9jb3VudCA9PSAwKSkgewogCQltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTEwNyw3ICsxMTA3LDcgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgcGNpX2Nob29zZV9zdGF0ZShkZXYsIHN0YXRlKSk7CiAKIAltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTIyLDcgKzExMjIsNyBAQAogCiAJZGV2X2luZm8oaW5mby0+ZGV2aWNlLCAicmVzdW1lXG4iKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAltdXRleF9sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKIAogCWlmIChwYXItPnJlZl9jb3VudCA9PSAwKQpAQCAtMTE0MSw3ICsxMTQxLDcgQEAKIAogZmFpbDoKIAltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiAwOwogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCmluZGV4IGRkOWRlMmUuLjRjYjZhNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYwpAQCAtMTg2MCwxMSArMTg2MCwxMSBAQAogewogICAgICAgICBzdHJ1Y3QgYXR5MTI4ZmJfcGFyICpwYXIgPSBkYXRhOwogCi0JaWYgKHRyeV9hY3F1aXJlX2NvbnNvbGVfc2VtKCkpCisJaWYgKCFjb25zb2xlX3RyeWxvY2soKSkKIAkJcmV0dXJuOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBhci0+cGRldik7CiAJYXR5MTI4X2RvX3Jlc3VtZShwYXItPnBkZXYpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogfQogI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwogCkBAIC0yNDM4LDcgKzI0MzgsNyBAQAogCiAJcHJpbnRrKEtFUk5fREVCVUcgImF0eTEyOGZiOiBzdXNwZW5kaW5nLi4uXG4iKTsKIAkKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlmYl9zZXRfc3VzcGVuZChpbmZvLCAxKTsKIApAQCAtMjQ3MCw3ICsyNDcwLDcgQEAKIAlpZiAoc3RhdGUuZXZlbnQgIT0gUE1fRVZFTlRfT04pCiAJCWF0eTEyOF9zZXRfc3VzcGVuZChwYXIsIDEpOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKIApAQCAtMjUyNyw5ICsyNTI3LDkgQEAKIHsKIAlpbnQgcmM7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcmMgPSBhdHkxMjhfZG9fcmVzdW1lKHBkZXYpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCmluZGV4IDc2N2FiNGYuLjk0ZTI5M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKQEAgLTIwNjksNyArMjA2OSw3IEBACiAJaWYgKHN0YXRlLmV2ZW50ID09IHBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCkKIAkJcmV0dXJuIDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlmYl9zZXRfc3VzcGVuZChpbmZvLCAxKTsKIApAQCAtMjA5NywxNCArMjA5NywxNCBAQAogCQlwYXItPmxvY2tfYmxhbmsgPSAwOwogCQlhdHlmYl9ibGFuayhGQl9CTEFOS19VTkJMQU5LLCBpbmZvKTsKIAkJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogI2Vsc2UKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKICNlbmRpZgogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKIApAQCAtMjEzMyw3ICsyMTMzLDcgQEAKIAlpZiAocGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID09IFBNX0VWRU5UX09OKQogCQlyZXR1cm4gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCS8qCiAJICogUENJIHN0YXRlIHdpbGwgaGF2ZSBiZWVuIHJlc3RvcmVkIGJ5IHRoZSBjb3JlLCBzbwpAQCAtMjE2MSw3ICsyMTYxLDcgQEAKIAlwYXItPmxvY2tfYmxhbmsgPSAwOwogCWF0eWZiX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkssIGluZm8pOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jCmluZGV4IGM0ZTE3NjQuLjkyYmRhNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jCkBAIC0yNjI2LDcgKzI2MjYsNyBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMSk7CiAKQEAgLTI2OTAsNyArMjY5MCw3IEBACiAJaWYgKHJpbmZvLT5wbV9tb2RlICYgcmFkZW9uX3BtX2QyKQogCQlyYWRlb25fc2V0X3N1c3BlbmQocmluZm8sIDEpOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKICBkb25lOgogCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IG1lc2c7CkBAIC0yNzE1LDEwICsyNzE1LDEwIEBACiAJCXJldHVybiAwOwogCiAJaWYgKHJpbmZvLT5ub19zY2hlZHVsZSkgewotCQlpZiAodHJ5X2FjcXVpcmVfY29uc29sZV9zZW0oKSkKKwkJaWYgKCFjb25zb2xlX3RyeWxvY2soKSkKIAkJCXJldHVybiAwOwogCX0gZWxzZQotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgInJhZGVvbmZiICglcyk6IHJlc3VtaW5nIGZyb20gc3RhdGU6ICVkLi4uXG4iLAogCSAgICAgICBwY2lfbmFtZShwZGV2KSwgcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50KTsKQEAgLTI3ODMsNyArMjc4Myw3IEBACiAJcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKIAogIGJhaWw6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC84OHBtODYweF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvODhwbTg2MHhfYmwuYwppbmRleCBjNzg5YzQ2Li5iMjI0Mzk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC84OHBtODYweF9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0Lzg4cG04NjB4X2JsLmMKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgTUFYX0JSSUdIVE5FU1MJCSgweEZGKQogI2RlZmluZSBNSU5fQlJJR0hUTkVTUwkJKDApCiAKLSNkZWZpbmUgQ1VSUkVOVF9NQVNLCQkoMHgxRiA8PCAxKQorI2RlZmluZSBDVVJSRU5UX0JJVE1BU0sJCSgweDFGIDw8IDEpCiAKIHN0cnVjdCBwbTg2MHhfYmFja2xpZ2h0X2RhdGEgewogCXN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcDsKQEAgLTg1LDcgKzg1LDcgQEAKIAlpZiAoKGRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA9PSAwKSAmJiBicmlnaHRuZXNzKSB7CiAJCWlmIChkYXRhLT5pc2V0KSB7CiAJCQlyZXQgPSBwbTg2MHhfc2V0X2JpdHMoZGF0YS0+aTJjLCB3bGVkX2lkYyhkYXRhLT5wb3J0KSwKLQkJCQkJICAgICAgQ1VSUkVOVF9NQVNLLCBkYXRhLT5pc2V0KTsKKwkJCQkJICAgICAgQ1VSUkVOVF9CSVRNQVNLLCBkYXRhLT5pc2V0KTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWdvdG8gb3V0OwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JmNTM3LWxxMDM1LmMgYi9kcml2ZXJzL3ZpZGVvL2JmNTM3LWxxMDM1LmMKaW5kZXggMThjNTA3OC4uNDdjMjFmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iZjUzNy1scTAzNS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmY1MzctbHEwMzUuYwpAQCAtNjk2LDYgKzY5Niw3IEBACiB7CiAJc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOwogCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKwlpbnQgcmV0OwogCiAJaWYgKHJlcXVlc3RfZG1hKENIX1BQSSwgS0JVSUxEX01PRE5BTUUpKSB7CiAJCXByX2VycigiY291bGRuJ3QgcmVxdWVzdCBQUEkgRE1BXG4iKTsKQEAgLTcwNCwxNyArNzA1LDE2IEBACiAKIAlpZiAocmVxdWVzdF9wb3J0cygpKSB7CiAJCXByX2VycigiY291bGRuJ3QgcmVxdWVzdCBncGlvIHBvcnRcbiIpOwotCQlmcmVlX2RtYShDSF9QUEkpOwotCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXRfcG9ydHM7CiAJfQogCiAJZmJfYnVmZmVyID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIFRPVEFMX1ZJREVPX01FTV9TSVpFLAogCQkJCSAgICAgICAmZG1hX2hhbmRsZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGZiX2J1ZmZlciA9PSBOVUxMKSB7CiAJCXByX2VycigiY291bGRuJ3QgYWxsb2NhdGUgZG1hIGJ1ZmZlclxuIik7Ci0JCWZyZWVfZG1hKENIX1BQSSk7Ci0JCWZyZWVfcG9ydHMoKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2RtYV9jb2hlcmVudDsKIAl9CiAKIAlpZiAoTDFfREFUQV9BX0xFTkdUSCkKQEAgLTcyNSwxMCArNzI1LDggQEAKIAogCWlmIChkbWFfZGVzY190YWJsZSA9PSBOVUxMKSB7CiAJCXByX2VycigiY291bGRuJ3QgYWxsb2NhdGUgZG1hIGRlc2NyaXB0b3JcbiIpOwotCQlmcmVlX2RtYShDSF9QUEkpOwotCQlmcmVlX3BvcnRzKCk7Ci0JCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIFRPVEFMX1ZJREVPX01FTV9TSVpFLCBmYl9idWZmZXIsIDApOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfdGFibGU7CiAJfQogCiAJYmZpbl9scTAzNV9mYi5zY3JlZW5fYmFzZSA9ICh2b2lkICopZmJfYnVmZmVyOwpAQCAtNzcxLDMxICs3NjksMjEgQEAKIAliZmluX2xxMDM1X2ZiLnBzZXVkb19wYWxldHRlID0ga3phbGxvYyhzaXplb2YodTMyKSAqIDE2LCBHRlBfS0VSTkVMKTsKIAlpZiAoYmZpbl9scTAzNV9mYi5wc2V1ZG9fcGFsZXR0ZSA9PSBOVUxMKSB7CiAJCXByX2VycigiZmFpbGVkIHRvIGFsbG9jYXRlIHBzZXVkb19wYWxldHRlXG4iKTsKLQkJZnJlZV9kbWEoQ0hfUFBJKTsKLQkJZnJlZV9wb3J0cygpOwotCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBUT1RBTF9WSURFT19NRU1fU0laRSwgZmJfYnVmZmVyLCAwKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3BhbGV0dGU7CiAJfQogCiAJaWYgKGZiX2FsbG9jX2NtYXAoJmJmaW5fbHEwMzVfZmIuY21hcCwgTkJSX1BBTEVUVEUsIDApIDwgMCkgewogCQlwcl9lcnIoImZhaWxlZCB0byBhbGxvY2F0ZSBjb2xvcm1hcCAoJWQgZW50cmllcylcbiIsCiAJCQlOQlJfUEFMRVRURSk7Ci0JCWZyZWVfZG1hKENIX1BQSSk7Ci0JCWZyZWVfcG9ydHMoKTsKLQkJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgVE9UQUxfVklERU9fTUVNX1NJWkUsIGZiX2J1ZmZlciwgMCk7Ci0JCWtmcmVlKGJmaW5fbHEwMzVfZmIucHNldWRvX3BhbGV0dGUpOwotCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXRfY21hcDsKIAl9CiAKIAlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoJmJmaW5fbHEwMzVfZmIpIDwgMCkgewogCQlwcl9lcnIoInVuYWJsZSB0byByZWdpc3RlciBmcmFtZWJ1ZmZlclxuIik7Ci0JCWZyZWVfZG1hKENIX1BQSSk7Ci0JCWZyZWVfcG9ydHMoKTsKLQkJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgVE9UQUxfVklERU9fTUVNX1NJWkUsIGZiX2J1ZmZlciwgMCk7Ci0JCWZiX2J1ZmZlciA9IE5VTEw7Ci0JCWtmcmVlKGJmaW5fbHEwMzVfZmIucHNldWRvX3BhbGV0dGUpOwotCQlmYl9kZWFsbG9jX2NtYXAoJmJmaW5fbHEwMzVfZmIuY21hcCk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF9yZWc7CiAJfQogCiAJaTJjX2FkZF9kcml2ZXIoJmFkNTI4MF9kcml2ZXIpOwpAQCAtODA3LDExICs3OTUsMzEgQEAKIAogCWxjZF9kZXYgPSBsY2RfZGV2aWNlX3JlZ2lzdGVyKEtCVUlMRF9NT0ROQU1FLCAmcGRldi0+ZGV2LCBOVUxMLAogCQkJCSAgICAgICZiZmluX2xjZF9vcHMpOworCWlmIChJU19FUlIobGNkX2RldikpIHsKKwkJcHJfZXJyKCJ1bmFibGUgdG8gcmVnaXN0ZXIgbGNkXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihsY2RfZGV2KTsKKwkJZ290byBvdXRfbGNkOworCX0KIAlsY2RfZGV2LT5wcm9wcy5tYXhfY29udHJhc3QgPSAyNTUsCiAKIAlwcl9pbmZvKCJpbml0aWFsaXplZCIpOwogCiAJcmV0dXJuIDA7CitvdXRfbGNkOgorCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmJmaW5fbHEwMzVfZmIpOworb3V0X3JlZzoKKwlmYl9kZWFsbG9jX2NtYXAoJmJmaW5fbHEwMzVfZmIuY21hcCk7CitvdXRfY21hcDoKKwlrZnJlZShiZmluX2xxMDM1X2ZiLnBzZXVkb19wYWxldHRlKTsKK291dF9wYWxldHRlOgorb3V0X3RhYmxlOgorCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIFRPVEFMX1ZJREVPX01FTV9TSVpFLCBmYl9idWZmZXIsIDApOworCWZiX2J1ZmZlciA9IE5VTEw7CitvdXRfZG1hX2NvaGVyZW50OgorCWZyZWVfcG9ydHMoKTsKK291dF9wb3J0czoKKwlmcmVlX2RtYShDSF9QUEkpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGJmaW5fbHEwMzVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NoaXBzZmIuYyBiL2RyaXZlcnMvdmlkZW8vY2hpcHNmYi5jCmluZGV4IGQ2MzdlMWYuLmNmZjc0MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY2hpcHNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY2hpcHNmYi5jCkBAIC00NjAsMTAgKzQ2MCwxMCBAQAogCWlmICghKHN0YXRlLmV2ZW50ICYgUE1fRVZFTlRfU0xFRVApKQogCQlnb3RvIGRvbmU7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJY2hpcHNmYl9ibGFuaygxLCBwKTsKIAlmYl9zZXRfc3VzcGVuZChwLCAxKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKICBkb25lOgogCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOwogCXJldHVybiAwOwpAQCAtNDczLDEwICs0NzMsMTAgQEAKIHsKICAgICAgICAgc3RydWN0IGZiX2luZm8gKnAgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQocCwgMCk7CiAJY2hpcHNmYl9ibGFuaygwLCBwKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnCmluZGV4IDVhMzVmMjIuLjIyMDllMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnCkBAIC01LDcgKzUsNyBAQAogbWVudSAiQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0IgogCiBjb25maWcgVkdBX0NPTlNPTEUKLQlib29sICJWR0EgdGV4dCBjb25zb2xlIiBpZiBFTUJFRERFRCB8fCAhWDg2CisJYm9vbCAiVkdBIHRleHQgY29uc29sZSIgaWYgRVhQRVJUIHx8ICFYODYKIAlkZXBlbmRzIG9uICE0eHggJiYgITh4eCAmJiAhU1BBUkMgJiYgIU02OEsgJiYgIVBBUklTQyAmJiAhRlJWICYmICFTVVBFUkggJiYgIUJMQUNLRklOICYmICFBVlIzMiAmJiAhTU4xMDMwMCAmJiAoIUFSTSB8fCBBUkNIX0ZPT1RCUklER0UgfHwgQVJDSF9JTlRFR1JBVE9SIHx8IEFSQ0hfTkVUV0lOREVSKQogCWRlZmF1bHQgeQogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKaW5kZXggN2NjYzk2Ny4uOWMwOTJiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKQEAgLTM3NSwxNCArMzc1LDE0IEBACiAJaW50IGM7CiAJaW50IG1vZGU7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWYgKG9wcyAmJiBvcHMtPmN1cnJjb24gIT0gLTEpCiAJCXZjID0gdmNfY29uc1tvcHMtPmN1cnJjb25dLmQ7CiAKIAlpZiAoIXZjIHx8ICFDT05fSVNfVklTSUJMRSh2YykgfHwKICAJICAgIHJlZ2lzdGVyZWRfZmJbY29uMmZiX21hcFt2Yy0+dmNfbnVtXV0gIT0gaW5mbyB8fAogCSAgICB2Yy0+dmNfZGVjY20gIT0gMSkgewotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM5Miw3ICszOTIsNyBAQAogCQlDTV9FUkFTRSA6IENNX0RSQVc7CiAJb3BzLT5jdXJzb3IodmMsIGluZm8sIG1vZGUsIHNvZnRiYWNrX2xpbmVzLCBnZXRfY29sb3IodmMsIGluZm8sIGMsIDEpLAogCQkgICAgZ2V0X2NvbG9yKHZjLCBpbmZvLCBjLCAwKSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGN1cnNvcl90aW1lcl9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGV2X2FkZHIpCkBAIC04MzYsNyArODM2LDcgQEAKIAogCWZvdW5kID0gc2VhcmNoX2ZiX2luX21hcChuZXdpZHgpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWNvbjJmYl9tYXBbdW5pdF0gPSBuZXdpZHg7CiAJaWYgKCFlcnIgJiYgIWZvdW5kKQogIAkJZXJyID0gY29uMmZiX2FjcXVpcmVfbmV3aW5mbyh2YywgaW5mbywgdW5pdCwgb2xkaWR4KTsKQEAgLTg2Myw3ICs4NjMsNyBAQAogCWlmICghc2VhcmNoX2ZiX2luX21hcChpbmZvX2lkeCkpCiAJCWluZm9faWR4ID0gbmV3aWR4OwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAgCXJldHVybiBlcnI7CiB9CiAKQEAgLTMzMjEsNyArMzMyMSw3IEBACiAJaWYgKGZiY29uX2hhc19leGl0ZWQpCiAJCXJldHVybiBjb3VudDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZHggPSBjb24yZmJfbWFwW2ZnX2NvbnNvbGVdOwogCiAJaWYgKGlkeCA9PSAtMSB8fCByZWdpc3RlcmVkX2ZiW2lkeF0gPT0gTlVMTCkKQEAgLTMzMzEsNyArMzMzMSw3IEBACiAJcm90YXRlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBsYXN0LCAwKTsKIAlmYmNvbl9yb3RhdGUoaW5mbywgcm90YXRlKTsKIGVycjoKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTMzNDYsNyArMzM0Niw3IEBACiAJaWYgKGZiY29uX2hhc19leGl0ZWQpCiAJCXJldHVybiBjb3VudDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZHggPSBjb24yZmJfbWFwW2ZnX2NvbnNvbGVdOwogCiAJaWYgKGlkeCA9PSAtMSB8fCByZWdpc3RlcmVkX2ZiW2lkeF0gPT0gTlVMTCkKQEAgLTMzNTYsNyArMzM1Niw3IEBACiAJcm90YXRlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBsYXN0LCAwKTsKIAlmYmNvbl9yb3RhdGVfYWxsKGluZm8sIHJvdGF0ZSk7CiBlcnI6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0zMzY5LDcgKzMzNjksNyBAQAogCWlmIChmYmNvbl9oYXNfZXhpdGVkKQogCQlyZXR1cm4gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZHggPSBjb24yZmJfbWFwW2ZnX2NvbnNvbGVdOwogCiAJaWYgKGlkeCA9PSAtMSB8fCByZWdpc3RlcmVkX2ZiW2lkeF0gPT0gTlVMTCkKQEAgLTMzNzgsNyArMzM3OCw3IEBACiAJaW5mbyA9IHJlZ2lzdGVyZWRfZmJbaWR4XTsKIAlyb3RhdGUgPSBmYmNvbl9nZXRfcm90YXRlKGluZm8pOwogZXJyOgotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCByb3RhdGUpOwogfQogCkBAIC0zMzkyLDcgKzMzOTIsNyBAQAogCWlmIChmYmNvbl9oYXNfZXhpdGVkKQogCQlyZXR1cm4gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZHggPSBjb24yZmJfbWFwW2ZnX2NvbnNvbGVdOwogCiAJaWYgKGlkeCA9PSAtMSB8fCByZWdpc3RlcmVkX2ZiW2lkeF0gPT0gTlVMTCkKQEAgLTM0MDYsNyArMzQwNiw3IEBACiAKIAlibGluayA9IChvcHMtPmZsYWdzICYgRkJDT05fRkxBR1NfQ1VSU09SX1RJTUVSKSA/IDEgOiAwOwogZXJyOgotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBibGluayk7CiB9CiAKQEAgLTM0MjEsNyArMzQyMSw3IEBACiAJaWYgKGZiY29uX2hhc19leGl0ZWQpCiAJCXJldHVybiBjb3VudDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZHggPSBjb24yZmJfbWFwW2ZnX2NvbnNvbGVdOwogCiAJaWYgKGlkeCA9PSAtMSB8fCByZWdpc3RlcmVkX2ZiW2lkeF0gPT0gTlVMTCkKQEAgLTM0NDMsNyArMzQ0Myw3IEBACiAJfQogCiBlcnI6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0zNDgyLDcgKzM0ODIsNyBAQAogCWlmIChudW1fcmVnaXN0ZXJlZF9mYikgewogCQlpbnQgaTsKIAotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBGQl9NQVg7IGkrKykgewogCQkJaWYgKHJlZ2lzdGVyZWRfZmJbaV0gIT0gTlVMTCkgewpAQCAtMzQ5MSw3ICszNDkxLDcgQEAKIAkJCX0KIAkJfQogCi0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJZmJjb25fdGFrZW92ZXIoMCk7CiAJfQogfQpAQCAtMzU1Miw3ICszNTUyLDcgQEAKIHsKIAlpbnQgaTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9yZWdpc3Rlcl9jbGllbnQoJmZiY29uX2V2ZW50X25vdGlmaWVyKTsKIAlmYmNvbl9kZXZpY2UgPSBkZXZpY2VfY3JlYXRlKGZiX2NsYXNzLCBOVUxMLCBNS0RFVigwLCAwKSwgTlVMTCwKIAkJCQkgICAgICJmYmNvbiIpOwpAQCAtMzU2OCw3ICszNTY4LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX0NPTlNPTEVTOyBpKyspCiAJCWNvbjJmYl9tYXBbaV0gPSAtMTsKIAotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCWZiY29uX3N0YXJ0KCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zNTkxLDEyICszNTkxLDEyIEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBmYl9jb25zb2xlX2V4aXQodm9pZCkKIHsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfdW5yZWdpc3Rlcl9jbGllbnQoJmZiY29uX2V2ZW50X25vdGlmaWVyKTsKIAlmYmNvbl9kZWluaXRfZGV2aWNlKCk7CiAJZGV2aWNlX2Rlc3Ryb3koZmJfY2xhc3MsIE1LREVWKDAsIDApKTsKIAlmYmNvbl9leGl0KCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJdW5yZWdpc3Rlcl9jb25fZHJpdmVyKCZmYl9jb24pOwogfQkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCmluZGV4IGM5NzQ5MWIuLjkxNWZkNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKQEAgLTIwMiwxMSArMjAyLDcgQEAKIAl9CiB9CiAKLS8qCi0gKiBDYWxsZWQgb25seSBkdWluZyBpbml0IHNvIGNhbGwgb2YgYWxsb2NfYm9vdG1lbiBpcyBvay4KLSAqIE1hcmtlZCBfX2luaXRfcmVmb2sgdG8gc2lsZW5jZSBtb2Rwb3N0LgotICovCi1zdGF0aWMgdm9pZCBfX2luaXRfcmVmb2sgdmdhY29uX3Njcm9sbGJhY2tfc3RhcnR1cCh2b2lkKQorc3RhdGljIHZvaWQgdmdhY29uX3Njcm9sbGJhY2tfc3RhcnR1cCh2b2lkKQogewogCXZnYWNvbl9zY3JvbGxiYWNrID0ga2NhbGxvYyhDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDS19TSVpFLCAxMDI0LCBHRlBfTk9XQUlUKTsKIAl2Z2Fjb25fc2Nyb2xsYmFja19pbml0KHZnYV92aWRlb19udW1fY29sdW1ucyAqIDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jIGIvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jCmluZGV4IGMyNjVhZWQuLjhkNjFlZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMKQEAgLTEwOTIsOSArMTA5MiwxMCBAQAogCiBpcnFfZnJlcToKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKwlsY2RfZGE4eHhfY3B1ZnJlcV9kZXJlZ2lzdGVyKHBhcik7CisjZW5kaWYKIGVycl9jcHVfZnJlcToKIAl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGRhOHh4X2ZiX2luZm8pOwotI2VuZGlmCiAKIGVycl9kZWFsbG9jX2NtYXA6CiAJZmJfZGVhbGxvY19jbWFwKCZkYTh4eF9mYl9pbmZvLT5jbWFwKTsKQEAgLTExMzAsMTQgKzExMzEsMTQgQEAKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGRhOHh4X2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlmIChwYXItPnBhbmVsX3Bvd2VyX2N0cmwpCiAJCXBhci0+cGFuZWxfcG93ZXJfY3RybCgwKTsKIAogCWZiX3NldF9zdXNwZW5kKGluZm8sIDEpOwogCWxjZF9kaXNhYmxlX3Jhc3RlcigpOwogCWNsa19kaXNhYmxlKHBhci0+bGNkY19jbGspOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTQ2LDE0ICsxMTQ3LDE0IEBACiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBkYTh4eF9mYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZiAocGFyLT5wYW5lbF9wb3dlcl9jdHJsKQogCQlwYXItPnBhbmVsX3Bvd2VyX2N0cmwoMSk7CiAKIAljbGtfZW5hYmxlKHBhci0+bGNkY19jbGspOwogCWxjZF9lbmFibGVfcmFzdGVyKCk7CiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwppbmRleCA0YWMxMjAxLi5lMmJmOTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCkBAIC0xMDM2LDExICsxMDM2LDExIEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJaWYgKCFsb2NrX2ZiX2luZm8oaW5mbykpCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAkJaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX01JU0NfVVNFUkVWRU5UOwogCQlyZXQgPSBmYl9zZXRfdmFyKGluZm8sICZ2YXIpOwogCQlpbmZvLT5mbGFncyAmPSB+RkJJTkZPX01JU0NfVVNFUkVWRU5UOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXVubG9ja19mYl9pbmZvKGluZm8pOwogCQlpZiAoIXJldCAmJiBjb3B5X3RvX3VzZXIoYXJncCwgJnZhciwgc2l6ZW9mKHZhcikpKQogCQkJcmV0ID0gLUVGQVVMVDsKQEAgLTEwNzIsOSArMTA3Miw5IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJaWYgKCFsb2NrX2ZiX2luZm8oaW5mbykpCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAkJcmV0ID0gZmJfcGFuX2Rpc3BsYXkoaW5mbywgJnZhcik7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJdW5sb2NrX2ZiX2luZm8oaW5mbyk7CiAJCWlmIChyZXQgPT0gMCAmJiBjb3B5X3RvX3VzZXIoYXJncCwgJnZhciwgc2l6ZW9mKHZhcikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMTE5LDExICsxMTE5LDExIEBACiAJY2FzZSBGQklPQkxBTks6CiAJCWlmICghbG9ja19mYl9pbmZvKGluZm8pKQogCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCWluZm8tPmZsYWdzIHw9IEZCSU5GT19NSVNDX1VTRVJFVkVOVDsKIAkJcmV0ID0gZmJfYmxhbmsoaW5mbywgYXJnKTsKIAkJaW5mby0+ZmxhZ3MgJj0gfkZCSU5GT19NSVNDX1VTRVJFVkVOVDsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQl1bmxvY2tfZmJfaW5mbyhpbmZvKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJzeXNmcy5jIGIvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMKaW5kZXggMGEwOGYxMy4uZjRhMzI3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMKKysrIGIvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMKQEAgLTkwLDExICs5MCwxMSBAQAogCWludCBlcnI7CiAKIAl2YXItPmFjdGl2YXRlIHw9IEZCX0FDVElWQVRFX0ZPUkNFOwotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9pbmZvLT5mbGFncyB8PSBGQklORk9fTUlTQ19VU0VSRVZFTlQ7CiAJZXJyID0gZmJfc2V0X3ZhcihmYl9pbmZvLCB2YXIpOwogCWZiX2luZm8tPmZsYWdzICY9IH5GQklORk9fTUlTQ19VU0VSRVZFTlQ7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKQEAgLTE3NSw3ICsxNzUsNyBAQAogCWlmIChpICogc2l6ZW9mKHN0cnVjdCBmYl92aWRlb21vZGUpICE9IGNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlsaXN0X3NwbGljZSgmZmJfaW5mby0+bW9kZWxpc3QsICZvbGRfbGlzdCk7CiAJZmJfdmlkZW9tb2RlX3RvX21vZGVsaXN0KChjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICopYnVmLCBpLAogCQkJCSAmZmJfaW5mby0+bW9kZWxpc3QpOwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJfSBlbHNlCiAJCWZiX2Rlc3Ryb3lfbW9kZWxpc3QoJm9sZF9saXN0KTsKIAotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMDEsMTEgKzMwMSwxMSBAQAogCWNoYXIgKmxhc3QgPSBOVUxMOwogCWludCBlcnI7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX01JU0NfVVNFUkVWRU5UOwogCWVyciA9IGZiX2JsYW5rKGZiX2luZm8sIHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmxhc3QsIDApKTsKIAlmYl9pbmZvLT5mbGFncyAmPSB+RkJJTkZPX01JU0NfVVNFUkVWRU5UOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCXJldHVybiBjb3VudDsKQEAgLTM2NCw5ICszNjQsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl2YXIueW9mZnNldCA9IHNpbXBsZV9zdHJ0b3VsKGxhc3QsICZsYXN0LCAwKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAllcnIgPSBmYl9wYW5fZGlzcGxheShmYl9pbmZvLCAmdmFyKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMzk5LDkgKzM5OSw5IEBACiAKIAlzdGF0ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmxhc3QsIDApOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3NldF9zdXNwZW5kKGZiX2luZm8sIChpbnQpc3RhdGUpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9nZW9kZS9neGZiX2NvcmUuYyBiL2RyaXZlcnMvdmlkZW8vZ2VvZGUvZ3hmYl9jb3JlLmMKaW5kZXggNzBiMWQ5ZC4uYjRmMTlkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9nZW9kZS9neGZiX2NvcmUuYworKysgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL2d4ZmJfY29yZS5jCkBAIC0zNDQsMTAgKzM0NCwxMCBAQAogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpIHsKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAkJZ3hfcG93ZXJkb3duKGluZm8pOwogCQlmYl9zZXRfc3VzcGVuZChpbmZvLCAxKTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCX0KIAogCS8qIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gc2V0dGluZyBQQ0kgc3RhdGVzOyB3ZSBlbXVsYXRlIFBDSSwgc28KQEAgLTM2MSw3ICszNjEsNyBAQAogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCByZXQ7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcmV0ID0gZ3hfcG93ZXJ1cChpbmZvKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZ3hmYjogIHBvd2VyIHVwIGZhaWxlZCFcbiIpOwpAQCAtMzY5LDcgKzM2OSw3IEBACiAJfQogCiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZ2VvZGUvbHhmYl9jb3JlLmMgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL2x4ZmJfY29yZS5jCmluZGV4IDM5YmRiZWQuLjQxNjg1MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZ2VvZGUvbHhmYl9jb3JlLmMKKysrIGIvZHJpdmVycy92aWRlby9nZW9kZS9seGZiX2NvcmUuYwpAQCAtNDY1LDEwICs0NjUsMTAgQEAKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWlmIChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5EKSB7Ci0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCWx4X3Bvd2VyZG93bihpbmZvKTsKIAkJZmJfc2V0X3N1c3BlbmQoaW5mbywgMSk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAl9CiAKIAkvKiB0aGVyZSdzIG5vIHBvaW50IGluIHNldHRpbmcgUENJIHN0YXRlczsgd2UgZW11bGF0ZSBQQ0ksIHNvCkBAIC00ODIsNyArNDgyLDcgQEAKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlpbnQgcmV0OwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCXJldCA9IGx4X3Bvd2VydXAoaW5mbyk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgImx4ZmI6ICBwb3dlciB1cCBmYWlsZWQhXG4iKTsKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCX0KIAogCWZiX3NldF9zdXNwZW5kKGluZm8sIDApOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiAwOwogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYyBiL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYwppbmRleCA1NzQzZWEyLi4zMThmNmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMKKysrIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jCkBAIC0xNTc0LDcgKzE1NzQsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMSk7CiAKIAlpZiAoaW5mby0+ZmJvcHMtPmZiX3N5bmMpCkBAIC0xNTg3LDcgKzE1ODcsNyBAQAogCXBjaV9zYXZlX3N0YXRlKGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHBjaV9jaG9vc2Vfc3RhdGUoZGV2LCBtZXNnKSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MDUsNyArMTYwNSw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShkZXYpOwogCkBAIC0xNjIxLDcgKzE2MjEsNyBAQAogCWZiX3NldF9zdXNwZW5kIChpbmZvLCAwKTsKIAlpbmZvLT5mYm9wcy0+ZmJfYmxhbmsoVkVTQV9OT19CTEFOS0lORywgaW5mbyk7CiBmYWlsOgotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiAwOwogfQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2p6NDc0MF9mYi5jIGIvZHJpdmVycy92aWRlby9qejQ3NDBfZmIuYwppbmRleCA2NzBlY2FhLi5kZTM2NjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2p6NDc0MF9mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vano0NzQwX2ZiLmMKQEAgLTc3OCw5ICs3NzgsOSBAQAogewogCXN0cnVjdCBqemZiICpqemZiID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQoanpmYi0+ZmIsIDEpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJbXV0ZXhfbG9jaygmanpmYi0+bG9jayk7CiAJaWYgKGp6ZmItPmlzX2VuYWJsZWQpCkBAIC04MDAsOSArODAwLDkgQEAKIAkJanpmYl9lbmFibGUoanpmYik7CiAJbXV0ZXhfdW5sb2NrKCZqemZiLT5sb2NrKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9zZXRfc3VzcGVuZChqemZiLT5mYiwgMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXgzZmIuYyBiL2RyaXZlcnMvdmlkZW8vbXgzZmIuYwppbmRleCBjYjAxMzkxLi43ZTNhNDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL214M2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9teDNmYi5jCkBAIC0xMTc3LDkgKzExNzcsOSBAQAogCXN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gbXgzZmItPmZiaS0+cGFyOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3NldF9zdXNwZW5kKG14M2ZiLT5mYmksIDEpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJaWYgKG14M19mYmktPmJsYW5rID09IEZCX0JMQU5LX1VOQkxBTkspIHsKIAkJc2RjX2Rpc2FibGVfY2hhbm5lbChteDNfZmJpKTsKQEAgLTEyMDIsOSArMTIwMiw5IEBACiAJCXNkY19zZXRfYnJpZ2h0bmVzcyhteDNmYiwgbXgzZmItPmJhY2tsaWdodF9sZXZlbCk7CiAJfQogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3NldF9zdXNwZW5kKG14M2ZiLT5mYmksIDApOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL251YzkwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL251YzkwMGZiLmMKaW5kZXggNjI0OThiZC4uZjgzOGQ5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9udWM5MDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnVjOTAwZmIuYwpAQCAtNjk2LDYgKzY5Niw4IEBACiAJbnVjOTAwZmJfc3RvcF9sY2QoZmJpbmZvKTsKIAltc2xlZXAoMSk7CiAKKwl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGZiaW5mbyk7CisJbnVjOTAwZmJfY3B1ZnJlcV9kZXJlZ2lzdGVyKGZiaSk7CiAJbnVjOTAwZmJfdW5tYXBfdmlkZW9fbWVtb3J5KGZiaW5mbyk7CiAKIAlpb3VubWFwKGZiaS0+aW8pOwpAQCAtNzIzLDcgKzcyNSw3IEBACiAJc3RydWN0IGZiX2luZm8JICAgKmZiaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IG51YzkwMGZiX2luZm8gKmluZm8gPSBmYmluZm8tPnBhcjsKIAotCW51YzkwMGZiX3N0b3BfbGNkKCk7CisJbnVjOTAwZmJfc3RvcF9sY2QoZmJpbmZvKTsKIAltc2xlZXAoMSk7CiAJY2xrX2Rpc2FibGUoaW5mby0+Y2xrKTsKIAlyZXR1cm4gMDsKQEAgLTc0MCw3ICs3NDIsNyBAQAogCW1zbGVlcCgxKTsKIAogCW51YzkwMGZiX2luaXRfcmVnaXN0ZXJzKGZiaW5mbyk7Ci0JbnVjOTAwZmJfYWN0aXZhdGVfdmFyKGJmaW5mbyk7CisJbnVjOTAwZmJfYWN0aXZhdGVfdmFyKGZiaW5mbyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMKaW5kZXggZWZlMTBmZi4uMDgxZGM0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMKKysrIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMKQEAgLTEwNTcsNyArMTA1Nyw3IEBACiAKIAlpZiAobWVzZy5ldmVudCA9PSBQTV9FVkVOVF9QUkVUSEFXKQogCQltZXNnLmV2ZW50ID0gUE1fRVZFTlRfRlJFRVpFOwotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlwYXItPnBtX3N0YXRlID0gbWVzZy5ldmVudDsKIAogCWlmIChtZXNnLmV2ZW50ICYgUE1fRVZFTlRfU0xFRVApIHsKQEAgLTEwNzAsNyArMTA3MCw3IEBACiAJfQogCWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gbWVzZzsKIAotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDc5LDcgKzEwNzksNyBAQAogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IG52aWRpYV9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgUENJX0QwKTsKIAogCWlmIChwYXItPnBtX3N0YXRlICE9IFBNX0VWRU5UX0ZSRUVaRSkgewpAQCAtMTA5Nyw3ICsxMDk3LDcgQEAKIAludmlkaWFmYl9ibGFuayhGQl9CTEFOS19VTkJMQU5LLCBpbmZvKTsKIAogZmFpbDoKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gMDsKIH0KICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BzM2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BzM2ZiLmMKaW5kZXggOWMwMTQ0ZS4uNjU1NjBhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wczNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHMzZmIuYwpAQCAtNTEzLDkgKzUxMyw5IEBACiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnBzM2ZiLmZfY291bnQpKSB7CiAJCWlmIChhdG9taWNfcmVhZCgmcHMzZmIuZXh0X2ZsaXApKSB7CiAJCQlhdG9taWNfc2V0KCZwczNmYi5leHRfZmxpcCwgMCk7Ci0JCQlpZiAoIXRyeV9hY3F1aXJlX2NvbnNvbGVfc2VtKCkpIHsKKwkJCWlmIChjb25zb2xlX3RyeWxvY2soKSkgewogCQkJCXBzM2ZiX3N5bmMoaW5mbywgMCk7CS8qIHNpbmdsZSBidWZmZXIgKi8KLQkJCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQkJY29uc29sZV91bmxvY2soKTsKIAkJCX0KIAkJfQogCX0KQEAgLTgzMCwxNCArODMwLDE0IEBACiAJCQlpZiAodm1vZGUpIHsKIAkJCQl2YXIgPSBpbmZvLT52YXI7CiAJCQkJZmJfdmlkZW9tb2RlX3RvX3ZhcigmdmFyLCB2bW9kZSk7Ci0JCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQkJCWNvbnNvbGVfbG9jaygpOwogCQkJCWluZm8tPmZsYWdzIHw9IEZCSU5GT19NSVNDX1VTRVJFVkVOVDsKIAkJCQkvKiBGb3JjZSwgaW4gY2FzZSBvbmx5IHNwZWNpYWwgYml0cyBjaGFuZ2VkICovCiAJCQkJdmFyLmFjdGl2YXRlIHw9IEZCX0FDVElWQVRFX0ZPUkNFOwogCQkJCXBhci0+bmV3X21vZGVfaWQgPSB2YWw7CiAJCQkJcmV0dmFsID0gZmJfc2V0X3ZhcihpbmZvLCAmdmFyKTsKIAkJCQlpbmZvLT5mbGFncyAmPSB+RkJJTkZPX01JU0NfVVNFUkVWRU5UOwotCQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJCQljb25zb2xlX3VubG9jaygpOwogCQkJfQogCQkJYnJlYWs7CiAJCX0KQEAgLTg4MSw5ICs4ODEsOSBAQAogCQkJYnJlYWs7CiAKIAkJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJQUzNGQl9JT0NUTF9GU0VMOiVkXG4iLCB2YWwpOwotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQlyZXR2YWwgPSBwczNmYl9zeW5jKGluZm8sIHZhbCk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtOTAzLDkgKzkwMyw5IEBACiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCWlmIChwczNmYi5pc19raWNrZWQpIHsKIAkJCXBzM2ZiLmlzX2tpY2tlZCA9IDA7Ci0JCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX2xvY2soKTsKIAkJCXBzM2ZiX3N5bmMoaW5mbywgMCk7CS8qIHNpbmdsZSBidWZmZXIgKi8KLQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCX0KIAkJc2NoZWR1bGUoKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B4YTE2OGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3B4YTE2OGZiLmMKaW5kZXggY2VhNjQwMy4uMzVmNjFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9weGExNjhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHhhMTY4ZmIuYwpAQCAtNzAxLDE2ICs3MDEsMTIgQEAKIAkgKi8KIAlweGExNjhmYl9pbml0X21vZGUoaW5mbywgbWkpOwogCi0JcmV0ID0gcHhhMTY4ZmJfY2hlY2tfdmFyKCZpbmZvLT52YXIsIGluZm8pOwotCWlmIChyZXQpCi0JCWdvdG8gZmFpbGVkX2ZyZWVfZmJtZW07Ci0KIAkvKgogCSAqIEZpbGwgaW4gc2FuZSBkZWZhdWx0cy4KIAkgKi8KIAlyZXQgPSBweGExNjhmYl9jaGVja192YXIoJmluZm8tPnZhciwgaW5mbyk7CiAJaWYgKHJldCkKLQkJZ290byBmYWlsZWQ7CisJCWdvdG8gZmFpbGVkX2ZyZWVfZmJtZW07CiAKIAkvKgogCSAqIGVuYWJsZSBjb250cm9sbGVyIGNsb2NrCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B4YTN4eC1nY3UuYyBiL2RyaXZlcnMvdmlkZW8vcHhhM3h4LWdjdS5jCmluZGV4IGI4MTE2OGQuLmNmNGJlYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHhhM3h4LWdjdS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHhhM3h4LWdjdS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBweGEzeHgtZ2MuYyAtIExpbnV4IGtlcm5lbCBtb2R1bGUgZm9yIFBYQTN4eCBncmFwaGljcyBjb250cm9sbGVycworICogIHB4YTN4eC1nY3UuYyAtIExpbnV4IGtlcm5lbCBtb2R1bGUgZm9yIFBYQTN4eCBncmFwaGljcyBjb250cm9sbGVycwogICoKICAqICBUaGlzIGRyaXZlciBuZWVkcyBhIERpcmVjdEZCIGNvdW50ZXJwYXJ0IGluIHVzZXIgc3BhY2UsIGNvbW11bmljYXRpb24KICAqICBpcyBoYW5kbGVkIHZpYSBtbWFwKCllZCBtZW1vcnkgYXJlYXMgYW5kIGFuIGlvY3RsLgpAQCAtNDIxLDcgKzQyMSw3IEBACiAJCWJ1ZmZlci0+bmV4dCA9IHByaXYtPmZyZWU7CiAJCXByaXYtPmZyZWUgPSBidWZmZXI7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnNwaW5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiByZXQ7CisJCXJldHVybiAtRUZBVUxUOwogCX0KIAogCWJ1ZmZlci0+bGVuZ3RoID0gd29yZHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MzZmIuYyBiL2RyaXZlcnMvdmlkZW8vczNmYi5jCmluZGV4IGRjZThjOTcuLjc1NzM4YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vczNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vczNmYi5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3ZnYS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+IC8qIFdoeSBzaG91bGQgZmIgZHJpdmVyIGNhbGwgY29uc29sZSBmdW5jdGlvbnM/IGJlY2F1c2UgYWNxdWlyZV9jb25zb2xlX3NlbSgpICovCisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPiAvKiBXaHkgc2hvdWxkIGZiIGRyaXZlciBjYWxsIGNvbnNvbGUgZnVuY3Rpb25zPyBiZWNhdXNlIGNvbnNvbGVfbG9jaygpICovCiAjaW5jbHVkZSA8dmlkZW8vdmdhLmg+CiAKICNpZmRlZiBDT05GSUdfTVRSUgpAQCAtMTExMywxMiArMTExMywxMiBAQAogCiAJZGV2X2luZm8oaW5mby0+ZGV2aWNlLCAic3VzcGVuZFxuIik7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJbXV0ZXhfbG9jaygmKHBhci0+b3Blbl9sb2NrKSk7CiAKIAlpZiAoKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX0ZSRUVaRSkgfHwgKHBhci0+cmVmX2NvdW50ID09IDApKSB7CiAJCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMTI5LDcgKzExMjksNyBAQAogCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBwY2lfY2hvb3NlX3N0YXRlKGRldiwgc3RhdGUpKTsKIAogCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExNDUsMTIgKzExNDUsMTIgQEAKIAogCWRldl9pbmZvKGluZm8tPmRldmljZSwgInJlc3VtZVxuIik7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJbXV0ZXhfbG9jaygmKHBhci0+b3Blbl9sb2NrKSk7CiAKIAlpZiAocGFyLT5yZWZfY291bnQgPT0gMCkgewogCQltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTE1OSw3ICsxMTU5LDcgQEAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOwogCWlmIChlcnIpIHsKIAkJbXV0ZXhfdW5sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlkZXZfZXJyKGluZm8tPmRldmljZSwgImVycm9yICVkIGVuYWJsaW5nIGRldmljZSBmb3IgcmVzdW1lXG4iLCBlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTExNjksNyArMTE2OSw3IEBACiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7CiAKIAltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCmluZGV4IDg0MmQxNTcuLjQ4NzkxMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCkBAIC0yMzczLDcgKzIzNzMsNyBAQAogCWlmIChtZXNnLmV2ZW50ID09IFBNX0VWRU5UX0ZSRUVaRSkKIAkJcmV0dXJuIDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMSk7CiAKIAlpZiAoaW5mby0+ZmJvcHMtPmZiX3N5bmMpCkBAIC0yMzg1LDcgKzIzODUsNyBAQAogCXBjaV9zYXZlX3N0YXRlKGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHBjaV9jaG9vc2Vfc3RhdGUoZGV2LCBtZXNnKSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI0MDksNyArMjQwOSw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKGRldik7CkBAIC0yNDIzLDcgKzI0MjMsNyBAQAogCXNhdmFnZWZiX3NldF9wYXIoaW5mbyk7CiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7CiAJc2F2YWdlZmJfYmxhbmsoRkJfQkxBTktfVU5CTEFOSywgaW5mbyk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2hkbWkuYyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2hkbWkuYwppbmRleCA3NGQ5ZjU0Li4yYjllNTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9oZG1pLmMKKysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfaGRtaS5jCkBAIC0xMTUxLDcgKzExNTEsNyBAQAogCiAJCWNoID0gaW5mby0+cGFyOwogCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAKIAkJLyogSERNSSBwbHVnIGluICovCiAJCWlmICghc2hfaGRtaV9tdXN0X3JlY29uZmlndXJlKGhkbWkpICYmCkBAIC0xMTcxLDcgKzExNzEsNyBAQAogCQkJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7CiAJCX0KIAotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJfSBlbHNlIHsKIAkJcmV0ID0gMDsKIAkJaWYgKCFoZG1pLT5pbmZvKQpAQCAtMTE4MSwxMiArMTE4MSwxMiBAQAogCQlmYl9kZXN0cm95X21vZGVkYihoZG1pLT5tb25zcGVjLm1vZGVkYik7CiAJCWhkbWktPm1vbnNwZWMubW9kZWRiID0gTlVMTDsKIAotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCiAJCS8qIEhETUkgZGlzY29ubmVjdCAqLwogCQlmYl9zZXRfc3VzcGVuZChoZG1pLT5pbmZvLCAxKTsKIAotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXBtX3J1bnRpbWVfcHV0KGhkbWktPmRldik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCmluZGV4IGJkNDg0MGEuLmJmMTJlNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCkBAIC05MTIsOSArOTEyLDkgQEAKIAogCS8qIE5vdGhpbmcgdG8gcmVjb25maWd1cmUsIHdoZW4gY2FsbGVkIGZyb20gZmJjb24gKi8KIAlpZiAodXNlcikgewotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQlzaF9tb2JpbGVfZmJfcmVjb25maWcoaW5mbyk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAl9CiAKIAltdXRleF91bmxvY2soJmNoLT5vcGVuX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zbTUwMWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYwppbmRleCBiN2RjMTgwLi5iY2I0NGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYwpAQCAtMjAxMCw5ICsyMDEwLDkgQEAKIAogCS8qIHRlbGwgY29uc29sZS9mYiBkcml2ZXIgd2UgYXJlIHN1c3BlbmRpbmcgKi8KIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9zZXRfc3VzcGVuZChmYmksIDEpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJLyogYmFja3VwIGNvcGllcyBpbiBjYXNlIGNoaXAgaXMgcG93ZXJlZCBkb3duIG92ZXIgc3VzcGVuZCAqLwogCkBAIC0yMDY5LDkgKzIwNjksOSBAQAogCQltZW1jcHlfdG9pbyhwYXItPmN1cnNvci5rX2FkZHIsIHBhci0+c3RvcmVfY3Vyc29yLAogCQkJICAgIHBhci0+Y3Vyc29yLnNpemUpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3NldF9zdXNwZW5kKGZiaSwgMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAl2ZnJlZShwYXItPnN0b3JlX2ZiKTsKIAl2ZnJlZShwYXItPnN0b3JlX2N1cnNvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jIGIvZHJpdmVycy92aWRlby90bWlvZmIuYwppbmRleCA2OTEzZmUxLi5kZmVmODhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0vKiBXaHkgc2hvdWxkIGZiIGRyaXZlciBjYWxsIGNvbnNvbGUgZnVuY3Rpb25zPyBiZWNhdXNlIGFjcXVpcmVfY29uc29sZV9zZW0oKSAqLworLyogV2h5IHNob3VsZCBmYiBkcml2ZXIgY2FsbCBjb25zb2xlIGZ1bmN0aW9ucz8gYmVjYXVzZSBjb25zb2xlX2xvY2soKSAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CkBAIC05NDQsNyArOTQ0LDcgQEAKIAlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCByZXR2YWwgPSAwOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMSk7CiAKQEAgLTk2NSw3ICs5NjUsNyBAQAogCWlmIChjZWxsLT5zdXNwZW5kKQogCQlyZXR2YWwgPSBjZWxsLT5zdXNwZW5kKGRldik7CiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC05NzYsNyArOTc2LDcgQEAKIAlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCByZXR2YWwgPSAwOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCiAJaWYgKGNlbGwtPnJlc3VtZSkgewogCQlyZXR2YWwgPSBjZWxsLT5yZXN1bWUoZGV2KTsKQEAgLTk5Miw3ICs5OTIsNyBAQAogCiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7CiBvdXQ6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYwppbmRleCAyODllZGQ1Li40ZTY2MzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKQEAgLTE2NzQsMTcgKzE2NzQsMTcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgdmlhZmJfc3VzcGVuZCh2b2lkICp1bnVzZWQpCiB7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3NldF9zdXNwZW5kKHZpYWZiaW5mbywgMSk7CiAJdmlhZmJfc3luYyh2aWFmYmluZm8pOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlhZmJfcmVzdW1lKHZvaWQgKnVudXNlZCkKIHsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWYgKHZpYXBhcmluZm8tPnNoYXJlZC0+dmRldi0+ZW5naW5lX21taW8pCiAJCXZpYWZiX3Jlc2V0X2VuZ2luZSh2aWFwYXJpbmZvKTsKIAl2aWFmYl9zZXRfcGFyKHZpYWZiaW5mbyk7CkBAIC0xNjkyLDcgKzE2OTIsNyBAQAogCQl2aWFmYl9zZXRfcGFyKHZpYWZiaW5mbzEpOwogCWZiX3NldF9zdXNwZW5kKHZpYWZiaW5mbywgMCk7CiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92dDg2MjNmYi5jIGIvZHJpdmVycy92aWRlby92dDg2MjNmYi5jCmluZGV4IDg1ZDc2ZWMuLmEyOTY1YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdnQ4NjIzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3Z0ODYyM2ZiLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdmdhLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4gLyogV2h5IHNob3VsZCBmYiBkcml2ZXIgY2FsbCBjb25zb2xlIGZ1bmN0aW9ucz8gYmVjYXVzZSBhY3F1aXJlX2NvbnNvbGVfc2VtKCkgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+IC8qIFdoeSBzaG91bGQgZmIgZHJpdmVyIGNhbGwgY29uc29sZSBmdW5jdGlvbnM/IGJlY2F1c2UgY29uc29sZV9sb2NrKCkgKi8KICNpbmNsdWRlIDx2aWRlby92Z2EuaD4KIAogI2lmZGVmIENPTkZJR19NVFJSCkBAIC04MTksMTIgKzgxOSwxMiBAQAogCiAJZGV2X2luZm8oaW5mby0+ZGV2aWNlLCAic3VzcGVuZFxuIik7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJbXV0ZXhfbG9jaygmKHBhci0+b3Blbl9sb2NrKSk7CiAKIAlpZiAoKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX0ZSRUVaRSkgfHwgKHBhci0+cmVmX2NvdW50ID09IDApKSB7CiAJCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC04MzUsNyArODM1LDcgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgcGNpX2Nob29zZV9zdGF0ZShkZXYsIHN0YXRlKSk7CiAKIAltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04NTAsNyArODUwLDcgQEAKIAogCWRldl9pbmZvKGluZm8tPmRldmljZSwgInJlc3VtZVxuIik7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJbXV0ZXhfbG9jaygmKHBhci0+b3Blbl9sb2NrKSk7CiAKIAlpZiAocGFyLT5yZWZfY291bnQgPT0gMCkKQEAgLTg2OSw3ICs4NjksNyBAQAogCiBmYWlsOgogCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8veGVuLWZiZnJvbnQuYyBiL2RyaXZlcnMvdmlkZW8veGVuLWZiZnJvbnQuYwppbmRleCAzZTY5MzRkLi5hMjAyMThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3hlbi1mYmZyb250LmMKKysrIGIvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jCkBAIC00OTEsMTIgKzQ5MSwxMiBAQAogCWlmIChjb25zb2xlX3NldF9vbl9jbWRsaW5lKQogCQlyZXR1cm47CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZm9yX2VhY2hfY29uc29sZShjKSB7CiAJCWlmICghc3RyY21wKGMtPm5hbWUsICJ0dHkiKSAmJiBjLT5pbmRleCA9PSAwKQogCQkJYnJlYWs7CiAJfQotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCWlmIChjKSB7CiAJCXVucmVnaXN0ZXJfY29uc29sZShjKTsKIAkJYy0+ZmxhZ3MgfD0gQ09OX0NPTlNERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKaW5kZXggZWY4ZDlkNS4uNGZiNWIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwpAQCAtOTYsMTEgKzk2LDYgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHZpcnRpb19wY2lfaWRfdGFibGUpOwogCi0vKiBBIFBDSSBkZXZpY2UgaGFzIGl0J3Mgb3duIHN0cnVjdCBkZXZpY2UgYW5kIHNvIGRvZXMgYSB2aXJ0aW8gZGV2aWNlIHNvCi0gKiB3ZSBjcmVhdGUgYSBwbGFjZSBmb3IgdGhlIHZpcnRpbyBkZXZpY2VzIHRvIHNob3cgdXAgaW4gc3lzZnMuICBJIHRoaW5rIGl0Ci0gKiB3b3VsZCBtYWtlIG1vcmUgc2Vuc2UgZm9yIHZpcnRpbyB0byBub3QgaW5zaXN0IG9uIGhhdmluZyBpdCdzIG93biBkZXZpY2UuICovCi1zdGF0aWMgc3RydWN0IGRldmljZSAqdmlydGlvX3BjaV9yb290OwotCiAvKiBDb252ZXJ0IGEgZ2VuZXJpYyB2aXJ0aW8gZGV2aWNlIHRvIG91ciBzdHJ1Y3R1cmUgKi8KIHN0YXRpYyBzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2UgKnRvX3ZwX2RldmljZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIHsKQEAgLTYyOSw3ICs2MjQsNyBAQAogCWlmICh2cF9kZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQl2cF9kZXYtPnZkZXYuZGV2LnBhcmVudCA9IHZpcnRpb19wY2lfcm9vdDsKKwl2cF9kZXYtPnZkZXYuZGV2LnBhcmVudCA9ICZwY2lfZGV2LT5kZXY7CiAJdnBfZGV2LT52ZGV2LmRldi5yZWxlYXNlID0gdmlydGlvX3BjaV9yZWxlYXNlX2RldjsKIAl2cF9kZXYtPnZkZXYuY29uZmlnID0gJnZpcnRpb19wY2lfY29uZmlnX29wczsKIAl2cF9kZXYtPnBjaV9kZXYgPSBwY2lfZGV2OwpAQCAtNzE3LDE3ICs3MTIsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB2aXJ0aW9fcGNpX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyOwotCi0JdmlydGlvX3BjaV9yb290ID0gcm9vdF9kZXZpY2VfcmVnaXN0ZXIoInZpcnRpby1wY2kiKTsKLQlpZiAoSVNfRVJSKHZpcnRpb19wY2lfcm9vdCkpCi0JCXJldHVybiBQVFJfRVJSKHZpcnRpb19wY2lfcm9vdCk7Ci0KLQllcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZ2aXJ0aW9fcGNpX2RyaXZlcik7Ci0JaWYgKGVycikKLQkJcm9vdF9kZXZpY2VfdW5yZWdpc3Rlcih2aXJ0aW9fcGNpX3Jvb3QpOwotCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmdmlydGlvX3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdCh2aXJ0aW9fcGNpX2luaXQpOwpAQCAtNzM1LDcgKzcyMCw2IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgdmlydGlvX3BjaV9leGl0KHZvaWQpCiB7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ2aXJ0aW9fcGNpX2RyaXZlcik7Ci0Jcm9vdF9kZXZpY2VfdW5yZWdpc3Rlcih2aXJ0aW9fcGNpX3Jvb3QpOwogfQogCiBtb2R1bGVfZXhpdCh2aXJ0aW9fcGNpX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL29tYXBfaGRxLmMgYi9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYwppbmRleCAzYTdlOWZmLi4zOGU5NmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYwpAQCAtNTkzLDE5ICs1OTMsMTcgQEAKIAogCS8qIGdldCBpbnRlcmZhY2UgJiBmdW5jdGlvbmFsIGNsb2NrIG9iamVjdHMgKi8KIAloZHFfZGF0YS0+aGRxX2ljayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImljayIpOwotCWhkcV9kYXRhLT5oZHFfZmNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZmNrIik7CisJaWYgKElTX0VSUihoZHFfZGF0YS0+aGRxX2ljaykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiQ2FuJ3QgZ2V0IEhEUSBpY2sgY2xvY2sgb2JqZWN0XG4iKTsKKwkJcmV0ID0gUFRSX0VSUihoZHFfZGF0YS0+aGRxX2ljayk7CisJCWdvdG8gZXJyX2ljazsKKwl9CiAKLQlpZiAoSVNfRVJSKGhkcV9kYXRhLT5oZHFfaWNrKSB8fCBJU19FUlIoaGRxX2RhdGEtPmhkcV9mY2spKSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwgIkNhbid0IGdldCBIRFEgY2xvY2sgb2JqZWN0c1xuIik7Ci0JCWlmIChJU19FUlIoaGRxX2RhdGEtPmhkcV9pY2spKSB7Ci0JCQlyZXQgPSBQVFJfRVJSKGhkcV9kYXRhLT5oZHFfaWNrKTsKLQkJCWdvdG8gZXJyX2NsazsKLQkJfQotCQlpZiAoSVNfRVJSKGhkcV9kYXRhLT5oZHFfZmNrKSkgewotCQkJcmV0ID0gUFRSX0VSUihoZHFfZGF0YS0+aGRxX2Zjayk7Ci0JCQljbGtfcHV0KGhkcV9kYXRhLT5oZHFfaWNrKTsKLQkJCWdvdG8gZXJyX2NsazsKLQkJfQorCWhkcV9kYXRhLT5oZHFfZmNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZmNrIik7CisJaWYgKElTX0VSUihoZHFfZGF0YS0+aGRxX2ZjaykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiQ2FuJ3QgZ2V0IEhEUSBmY2sgY2xvY2sgb2JqZWN0XG4iKTsKKwkJcmV0ID0gUFRSX0VSUihoZHFfZGF0YS0+aGRxX2Zjayk7CisJCWdvdG8gZXJyX2ZjazsKIAl9CiAKIAloZHFfZGF0YS0+aGRxX3VzZWNvdW50ID0gMDsKQEAgLTY2NSwxMCArNjYzLDEyIEBACiAJY2xrX2Rpc2FibGUoaGRxX2RhdGEtPmhkcV9pY2spOwogCiBlcnJfaW50ZmNsazoKLQljbGtfcHV0KGhkcV9kYXRhLT5oZHFfaWNrKTsKIAljbGtfcHV0KGhkcV9kYXRhLT5oZHFfZmNrKTsKIAotZXJyX2NsazoKK2Vycl9mY2s6CisJY2xrX3B1dChoZHFfZGF0YS0+aGRxX2ljayk7CisKK2Vycl9pY2s6CiAJaW91bm1hcChoZHFfZGF0YS0+aGRxX2Jhc2UpOwogCiBlcnJfaW9yZW1hcDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCAyZTI0MDBlLi4zMTY0OWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC04NjIsMTIgKzg2MiwxMiBAQAogCiAjIE02OEsgQXJjaGl0ZWN0dXJlCiAKLWNvbmZpZyBNNTQ4eF9XQVRDSERPRwotCXRyaXN0YXRlICJNQ0Y1NDh4IHdhdGNoZG9nIHN1cHBvcnQiCitjb25maWcgTTU0eHhfV0FUQ0hET0cKKwl0cmlzdGF0ZSAiTUNGNTR4eCB3YXRjaGRvZyBzdXBwb3J0IgogCWRlcGVuZHMgb24gTTU0OHgKIAloZWxwCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtNTQ4eF93ZHQuCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbTU0eHhfd2R0LgogCiAjIE1JUFMgQXJjaGl0ZWN0dXJlCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUgYi9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCmluZGV4IGRkNzc2NjUuLjIwZTQ0YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKKysrIGIvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQpAQCAtMTA2LDcgKzEwNiw3IEBACiAjIE0zMlIgQXJjaGl0ZWN0dXJlCiAKICMgTTY4SyBBcmNoaXRlY3R1cmUKLW9iai0kKENPTkZJR19NNTQ4eF9XQVRDSERPRykgKz0gbTU0OHhfd2R0Lm8KK29iai0kKENPTkZJR19NNTR4eF9XQVRDSERPRykgKz0gbTU0eHhfd2R0Lm8KIAogIyBNSVBTIEFyY2hpdGVjdHVyZQogb2JqLSQoQ09ORklHX0FUSDc5X1dEVCkgKz0gYXRoNzlfd2R0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbTU0OHhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL201NHh4X3dkdC5jCnNpbWlsYXJpdHkgaW5kZXggODAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvd2F0Y2hkb2cvbTU0OHhfd2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvbTU0eHhfd2R0LmMKaW5kZXggY2FiYmNmZS4uNGQ0MzI4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tNTQ4eF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL201NHh4X3dkdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqIGRyaXZlcnMvd2F0Y2hkb2cvbTU0OHhfd2R0LmMKKyAqIGRyaXZlcnMvd2F0Y2hkb2cvbTU0eHhfd2R0LmMKICAqCi0gKiBXYXRjaGRvZyBkcml2ZXIgZm9yIENvbGRGaXJlIE1DRjU0OHggcHJvY2Vzc29ycworICogV2F0Y2hkb2cgZHJpdmVyIGZvciBDb2xkRmlyZSBNQ0Y1NDd4ICYgTUNGNTQ4eCBwcm9jZXNzb3JzCiAgKiBDb3B5cmlnaHQgMjAxMCAoYykgUGhpbGlwcGUgRGUgTXV5dGVyIDxwaGRtQG1hY3FlbC5iZT4KICAqCiAgKiBBZGFwdGVkIGZyb20gdGhlIElYUDR4eCB3YXRjaGRvZyBkcml2ZXIsIHdoaWNoIGNhcnJpZXMgdGhlc2Ugbm90aWNlczoKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKICNpbmNsdWRlIDxhc20vY29sZGZpcmUuaD4KLSNpbmNsdWRlIDxhc20vbTU0OHhzaW0uaD4KLSNpbmNsdWRlIDxhc20vbTU0OHhncHQuaD4KKyNpbmNsdWRlIDxhc20vbTU0eHhzaW0uaD4KKyNpbmNsdWRlIDxhc20vbTU0eHhncHQuaD4KIAogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwogc3RhdGljIHVuc2lnbmVkIGludCBoZWFydGJlYXQgPSAzMDsJLyogKHNlY3MpIERlZmF1bHQgaXMgMC41IG1pbnV0ZSAqLwpAQCAtNzYsNyArNzYsNyBAQAogCV9fcmF3X3dyaXRlbChnbXMwLCBNQ0ZfTUJBUiArIE1DRl9HUFRfR01TMCk7CiB9CiAKLXN0YXRpYyBpbnQgbTU0OHhfd2R0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IG01NHh4X3dkdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWlmICh0ZXN0X2FuZF9zZXRfYml0KFdEVF9JTl9VU0UsICZ3ZHRfc3RhdHVzKSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTg2LDcgKzg2LDcgQEAKIAlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IG01NDh4X3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqZGF0YSwKK3N0YXRpYyBzc2l6ZV90IG01NHh4X3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqZGF0YSwKIAkJCQkJCXNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKIHsKIAlpZiAobGVuKSB7CkBAIC0xMTIsMTAgKzExMiwxMCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0gewogCS5vcHRpb25zCT0gV0RJT0ZfTUFHSUNDTE9TRSB8IFdESU9GX1NFVFRJTUVPVVQgfAogCQkJCVdESU9GX0tFRVBBTElWRVBJTkcsCi0JLmlkZW50aXR5CT0gIkNvbGRmaXJlIE01NDh4IFdhdGNoZG9nIiwKKwkuaWRlbnRpdHkJPSAiQ29sZGZpcmUgTTU0eHggV2F0Y2hkb2ciLAogfTsKIAotc3RhdGljIGxvbmcgbTU0OHhfd2R0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorc3RhdGljIGxvbmcgbTU0eHhfd2R0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJCQkJCSB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgcmV0ID0gLUVOT1RUWTsKQEAgLTE2MSw3ICsxNjEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbTU0OHhfd2R0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IG01NHh4X3dkdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWlmICh0ZXN0X2JpdChXRFRfT0tfVE9fQ0xPU0UsICZ3ZHRfc3RhdHVzKSkKIAkJd2R0X2Rpc2FibGUoKTsKQEAgLTE3Nyw0NSArMTc3LDQ1IEBACiB9CiAKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbTU0OHhfd2R0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtNTR4eF93ZHRfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCi0JLndyaXRlCQk9IG01NDh4X3dkdF93cml0ZSwKLQkudW5sb2NrZWRfaW9jdGwJPSBtNTQ4eF93ZHRfaW9jdGwsCi0JLm9wZW4JCT0gbTU0OHhfd2R0X29wZW4sCi0JLnJlbGVhc2UJPSBtNTQ4eF93ZHRfcmVsZWFzZSwKKwkud3JpdGUJCT0gbTU0eHhfd2R0X3dyaXRlLAorCS51bmxvY2tlZF9pb2N0bAk9IG01NHh4X3dkdF9pb2N0bCwKKwkub3BlbgkJPSBtNTR4eF93ZHRfb3BlbiwKKwkucmVsZWFzZQk9IG01NHh4X3dkdF9yZWxlYXNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG01NDh4X3dkdF9taXNjZGV2ID0geworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG01NHh4X3dkdF9taXNjZGV2ID0gewogCS5taW5vcgkJPSBXQVRDSERPR19NSU5PUiwKIAkubmFtZQkJPSAid2F0Y2hkb2ciLAotCS5mb3BzCQk9ICZtNTQ4eF93ZHRfZm9wcywKKwkuZm9wcwkJPSAmbTU0eHhfd2R0X2ZvcHMsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBtNTQ4eF93ZHRfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbTU0eHhfd2R0X2luaXQodm9pZCkKIHsKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihNQ0ZfTUJBUiArIE1DRl9HUFRfR0NJUjAsIDQsCi0JCQkJCQkiQ29sZGZpcmUgTTU0OHggV2F0Y2hkb2ciKSkgeworCQkJCQkJIkNvbGRmaXJlIE01NHh4IFdhdGNoZG9nIikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSJDb2xkZmlyZSBNNTQ4eCBXYXRjaGRvZyA6IEkvTyByZWdpb24gYnVzeVxuIik7CisJCQkJIkNvbGRmaXJlIE01NHh4IFdhdGNoZG9nIDogSS9PIHJlZ2lvbiBidXN5XG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyAiQ29sZEZpcmUgd2F0Y2hkb2cgZHJpdmVyIGlzIGxvYWRlZC5cbiIpOwogCi0JcmV0dXJuIG1pc2NfcmVnaXN0ZXIoJm01NDh4X3dkdF9taXNjZGV2KTsKKwlyZXR1cm4gbWlzY19yZWdpc3RlcigmbTU0eHhfd2R0X21pc2NkZXYpOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgbTU0OHhfd2R0X2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBtNTR4eF93ZHRfZXhpdCh2b2lkKQogewotCW1pc2NfZGVyZWdpc3RlcigmbTU0OHhfd2R0X21pc2NkZXYpOworCW1pc2NfZGVyZWdpc3RlcigmbTU0eHhfd2R0X21pc2NkZXYpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihNQ0ZfTUJBUiArIE1DRl9HUFRfR0NJUjAsIDQpOwogfQogCi1tb2R1bGVfaW5pdChtNTQ4eF93ZHRfaW5pdCk7Ci1tb2R1bGVfZXhpdChtNTQ4eF93ZHRfZXhpdCk7Cittb2R1bGVfaW5pdChtNTR4eF93ZHRfaW5pdCk7Cittb2R1bGVfZXhpdChtNTR4eF93ZHRfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIlBoaWxpcHBlIERlIE11eXRlciA8cGhkbUBtYWNxZWwuYmU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkNvbGRmaXJlIE01NDh4IFdhdGNoZG9nIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbGRmaXJlIE01NHh4IFdhdGNoZG9nIik7CiAKIG1vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzIChkZWZhdWx0IDMwcykiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL21hbmFnZS5jIGIvZHJpdmVycy94ZW4vbWFuYWdlLmMKaW5kZXggZGI4YzRjNC4uMjQxNzcyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vbWFuYWdlLmMKKysrIGIvZHJpdmVycy94ZW4vbWFuYWdlLmMKQEAgLTM3LDExICszNywxOSBAQAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCB4ZW5faHZtX3N1c3BlbmQodm9pZCAqZGF0YSkKIHsKKwlpbnQgZXJyOwogCXN0cnVjdCBzY2hlZF9zaHV0ZG93biByID0geyAucmVhc29uID0gU0hVVERPV05fc3VzcGVuZCB9OwogCWludCAqY2FuY2VsbGVkID0gZGF0YTsKIAogCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKIAorCWVyciA9IHN5c2Rldl9zdXNwZW5kKFBNU0dfU1VTUEVORCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgInhlbl9odm1fc3VzcGVuZDogc3lzZGV2X3N1c3BlbmQgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCiAJKmNhbmNlbGxlZCA9IEhZUEVSVklTT1Jfc2NoZWRfb3AoU0NIRURPUF9zaHV0ZG93biwgJnIpOwogCiAJeGVuX2h2bV9wb3N0X3N1c3BlbmQoKmNhbmNlbGxlZCk7CkBAIC01Myw2ICs2MSw4IEBACiAJCXhlbl90aW1lcl9yZXN1bWUoKTsKIAl9CiAKKwlzeXNkZXZfcmVzdW1lKCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4veGVuZnMveGVuYnVzLmMgYi9kcml2ZXJzL3hlbi94ZW5mcy94ZW5idXMuYwppbmRleCAxYzEyMzYwLi5iYmQwMDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi94ZW5mcy94ZW5idXMuYworKysgYi9kcml2ZXJzL3hlbi94ZW5mcy94ZW5idXMuYwpAQCAtMTIyLDYgKzEyMiw3IEBACiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJnUtPnJlcGx5X211dGV4KTsKK2FnYWluOgogCXdoaWxlIChsaXN0X2VtcHR5KCZ1LT5yZWFkX2J1ZmZlcnMpKSB7CiAJCW11dGV4X3VubG9jaygmdS0+cmVwbHlfbXV0ZXgpOwogCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCkBAIC0xNDQsNyArMTQ1LDcgQEAKIAkJaSArPSBzeiAtIHJldDsKIAkJcmItPmNvbnMgKz0gc3ogLSByZXQ7CiAKLQkJaWYgKHJldCAhPSBzeikgeworCQlpZiAocmV0ICE9IDApIHsKIAkJCWlmIChpID09IDApCiAJCQkJaSA9IC1FRkFVTFQ7CiAJCQlnb3RvIG91dDsKQEAgLTE2MCw2ICsxNjEsOCBAQAogCQkJCQlzdHJ1Y3QgcmVhZF9idWZmZXIsIGxpc3QpOwogCQl9CiAJfQorCWlmIChpID09IDApCisJCWdvdG8gYWdhaW47CiAKIG91dDoKIAltdXRleF91bmxvY2soJnUtPnJlcGx5X211dGV4KTsKQEAgLTQwNyw2ICs0MTAsNyBAQAogCiAJCW11dGV4X2xvY2soJnUtPnJlcGx5X211dGV4KTsKIAkJcmMgPSBxdWV1ZV9yZXBseSgmdS0+cmVhZF9idWZmZXJzLCAmcmVwbHksIHNpemVvZihyZXBseSkpOworCQl3YWtlX3VwKCZ1LT5yZWFkX3dhaXRxKTsKIAkJbXV0ZXhfdW5sb2NrKCZ1LT5yZXBseV9tdXRleCk7CiAJfQogCkBAIC00NTUsNyArNDU5LDcgQEAKIAogCXJldCA9IGNvcHlfZnJvbV91c2VyKHUtPnUuYnVmZmVyICsgdS0+bGVuLCB1YnVmLCBsZW4pOwogCi0JaWYgKHJldCA9PSBsZW4pIHsKKwlpZiAocmV0ICE9IDApIHsKIAkJcmMgPSAtRUZBVUxUOwogCQlnb3RvIG91dDsKIAl9CkBAIC00ODgsMjEgKzQ5Miw2IEBACiAJbXNnX3R5cGUgPSB1LT51Lm1zZy50eXBlOwogCiAJc3dpdGNoIChtc2dfdHlwZSkgewotCWNhc2UgWFNfVFJBTlNBQ1RJT05fU1RBUlQ6Ci0JY2FzZSBYU19UUkFOU0FDVElPTl9FTkQ6Ci0JY2FzZSBYU19ESVJFQ1RPUlk6Ci0JY2FzZSBYU19SRUFEOgotCWNhc2UgWFNfR0VUX1BFUk1TOgotCWNhc2UgWFNfUkVMRUFTRToKLQljYXNlIFhTX0dFVF9ET01BSU5fUEFUSDoKLQljYXNlIFhTX1dSSVRFOgotCWNhc2UgWFNfTUtESVI6Ci0JY2FzZSBYU19STToKLQljYXNlIFhTX1NFVF9QRVJNUzoKLQkJLyogU2VuZCBvdXQgYSB0cmFuc2FjdGlvbiAqLwotCQlyZXQgPSB4ZW5idXNfd3JpdGVfdHJhbnNhY3Rpb24obXNnX3R5cGUsIHUpOwotCQlicmVhazsKLQogCWNhc2UgWFNfV0FUQ0g6CiAJY2FzZSBYU19VTldBVENIOgogCQkvKiAoVW4pQXNrIGZvciBzb21lIHBhdGggdG8gYmUgd2F0Y2hlZCBmb3IgY2hhbmdlcyAqLwpAQCAtNTEwLDcgKzQ5OSw4IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsKKwkJLyogU2VuZCBvdXQgYSB0cmFuc2FjdGlvbiAqLworCQlyZXQgPSB4ZW5idXNfd3JpdGVfdHJhbnNhY3Rpb24obXNnX3R5cGUsIHUpOwogCQlicmVhazsKIAl9CiAJaWYgKHJldCAhPSAwKQpAQCAtNTU1LDYgKzU0NSw3IEBACiAJc3RydWN0IHhlbmJ1c19maWxlX3ByaXYgKnUgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHhlbmJ1c190cmFuc2FjdGlvbl9ob2xkZXIgKnRyYW5zLCAqdG1wOwogCXN0cnVjdCB3YXRjaF9hZGFwdGVyICp3YXRjaCwgKnRtcF93YXRjaDsKKwlzdHJ1Y3QgcmVhZF9idWZmZXIgKnJiLCAqdG1wX3JiOwogCiAJLyoKIAkgKiBObyBuZWVkIGZvciBsb2NraW5nIGhlcmUgYmVjYXVzZSB0aGVyZSBhcmUgbm8gb3RoZXIgdXNlcnMsCkBAIC01NzMsNiArNTY0LDEwIEBACiAJCWZyZWVfd2F0Y2hfYWRhcHRlcih3YXRjaCk7CiAJfQogCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJiLCB0bXBfcmIsICZ1LT5yZWFkX2J1ZmZlcnMsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJnJiLT5saXN0KTsKKwkJa2ZyZWUocmIpOworCX0KIAlrZnJlZSh1KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggOWE3OTIxYS4uM2RiOWNhYSAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC01MCw3ICs1MCw3IEBACiAJdHJpc3RhdGUKIAogY29uZmlnIEZJTEVfTE9DS0lORwotCWJvb2wgIkVuYWJsZSBQT1NJWCBmaWxlIGxvY2tpbmcgQVBJIiBpZiBFTUJFRERFRAorCWJvb2wgIkVuYWJsZSBQT1NJWCBmaWxlIGxvY2tpbmcgQVBJIiBpZiBFWFBFUlQKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN0YW5kYXJkIGZpbGUgbG9ja2luZyBzdXBwb3J0LCByZXF1aXJlZApkaWZmIC0tZ2l0IGEvZnMvYWZzL3dyaXRlLmMgYi9mcy9hZnMvd3JpdGUuYwppbmRleCAxNTY5MGJiLi43ODliM2FmIDEwMDY0NAotLS0gYS9mcy9hZnMvd3JpdGUuYworKysgYi9mcy9hZnMvd3JpdGUuYwpAQCAtMTQwLDYgKzE0MCw3IEBACiAJY2FuZGlkYXRlLT5maXJzdCA9IGNhbmRpZGF0ZS0+bGFzdCA9IGluZGV4OwogCWNhbmRpZGF0ZS0+b2Zmc2V0X2ZpcnN0ID0gZnJvbTsKIAljYW5kaWRhdGUtPnRvX2xhc3QgPSB0bzsKKwlJTklUX0xJU1RfSEVBRCgmY2FuZGlkYXRlLT5saW5rKTsKIAljYW5kaWRhdGUtPnVzYWdlID0gMTsKIAljYW5kaWRhdGUtPnN0YXRlID0gQUZTX1dCQUNLX1BFTkRJTkc7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FuZGlkYXRlLT53YWl0cSk7CmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jCmluZGV4IGZjNTU3YTMuLjI2ODY5Y2QgMTAwNjQ0Ci0tLSBhL2ZzL2Fpby5jCisrKyBiL2ZzL2Fpby5jCkBAIC0yMzksMTUgKzIzOSwyMyBAQAogCWNhbGxfcmN1KCZjdHgtPnJjdV9oZWFkLCBjdHhfcmN1X2ZyZWUpOwogfQogCi0jZGVmaW5lIGdldF9pb2N0eChraW9jdHgpIGRvIHsJCQkJCQlcCi0JQlVHX09OKGF0b21pY19yZWFkKCYoa2lvY3R4KS0+dXNlcnMpIDw9IDApOwkJCVwKLQlhdG9taWNfaW5jKCYoa2lvY3R4KS0+dXNlcnMpOwkJCQkJXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUgcHV0X2lvY3R4KGtpb2N0eCkgZG8gewkJCQkJCVwKLQlCVUdfT04oYXRvbWljX3JlYWQoJihraW9jdHgpLT51c2VycykgPD0gMCk7CQkJXAotCWlmICh1bmxpa2VseShhdG9taWNfZGVjX2FuZF90ZXN0KCYoa2lvY3R4KS0+dXNlcnMpKSkgCQlcCi0JCV9fcHV0X2lvY3R4KGtpb2N0eCk7CQkJCQlcCi19IHdoaWxlICgwKQorc3RhdGljIGlubGluZSB2b2lkIGdldF9pb2N0eChzdHJ1Y3Qga2lvY3R4ICpraW9jdHgpCit7CisJQlVHX09OKGF0b21pY19yZWFkKCZraW9jdHgtPnVzZXJzKSA8PSAwKTsKKwlhdG9taWNfaW5jKCZraW9jdHgtPnVzZXJzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdHJ5X2dldF9pb2N0eChzdHJ1Y3Qga2lvY3R4ICpraW9jdHgpCit7CisJcmV0dXJuIGF0b21pY19pbmNfbm90X3plcm8oJmtpb2N0eC0+dXNlcnMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2lvY3R4KHN0cnVjdCBraW9jdHggKmtpb2N0eCkKK3sKKwlCVUdfT04oYXRvbWljX3JlYWQoJmtpb2N0eC0+dXNlcnMpIDw9IDApOworCWlmICh1bmxpa2VseShhdG9taWNfZGVjX2FuZF90ZXN0KCZraW9jdHgtPnVzZXJzKSkpCisJCV9fcHV0X2lvY3R4KGtpb2N0eCk7Cit9CiAKIC8qIGlvY3R4X2FsbG9jCiAgKglBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGFuIGlvY3R4LiAgUmV0dXJucyBhbiBFUlJfUFRSIGlmIGl0IGZhaWxlZC4KQEAgLTYwMSw4ICs2MDksMTMgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3R4LCBuLCAmbW0tPmlvY3R4X2xpc3QsIGxpc3QpIHsKLQkJaWYgKGN0eC0+dXNlcl9pZCA9PSBjdHhfaWQgJiYgIWN0eC0+ZGVhZCkgewotCQkJZ2V0X2lvY3R4KGN0eCk7CisJCS8qCisJCSAqIFJDVSBwcm90ZWN0cyB1cyBhZ2FpbnN0IGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgYnV0CisJCSAqIHdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZ2V0IGEgcmVmZXJlbmNlIHdoZW4gdGhlCisJCSAqIHJlZmVyZW5jZSBjb3VudCBhbHJlYWR5IGRyb3BwZWQgdG8gMCAoY3R4LT5kZWFkIHRlc3QKKwkJICogaXMgdW5yZWxpYWJsZSBiZWNhdXNlIG9mIHJhY2VzKS4KKwkJICovCisJCWlmIChjdHgtPnVzZXJfaWQgPT0gY3R4X2lkICYmICFjdHgtPmRlYWQgJiYgdHJ5X2dldF9pb2N0eChjdHgpKXsKIAkJCXJldCA9IGN0eDsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNjI5LDYgKzE2NDIsMjMgQEAKIAkJZ290byBvdXRfcHV0X3JlcTsKIAogCXNwaW5fbG9ja19pcnEoJmN0eC0+Y3R4X2xvY2spOworCS8qCisJICogV2UgY291bGQgaGF2ZSByYWNlZCB3aXRoIGlvX2Rlc3Ryb3koKSBhbmQgYXJlIGN1cnJlbnRseSBob2xkaW5nIGEKKwkgKiByZWZlcmVuY2UgdG8gY3R4IHdoaWNoIHNob3VsZCBiZSBkZXN0cm95ZWQuIFdlIGNhbm5vdCBzdWJtaXQgSU8KKwkgKiBzaW5jZSBjdHggZ2V0cyBmcmVlZCBhcyBzb29uIGFzIGlvX3N1Ym1pdCgpIHB1dHMgaXRzIHJlZmVyZW5jZS4gIFRoZQorCSAqIGNoZWNrIGhlcmUgaXMgcmVsaWFibGU6IGlvX2Rlc3Ryb3koKSBzZXRzIGN0eC0+ZGVhZCBiZWZvcmUgd2FpdGluZworCSAqIGZvciBvdXRzdGFuZGluZyBJTyBhbmQgdGhlIGJhcnJpZXIgYmV0d2VlbiB0aGVzZSB0d28gaXMgcmVhbGl6ZWQgYnkKKwkgKiB1bmxvY2sgb2YgbW0tPmlvY3R4X2xvY2sgYW5kIGxvY2sgb2YgY3R4LT5jdHhfbG9jay4gIEFuYWxvZ291c2x5IHdlCisJICogaW5jcmVtZW50IGN0eC0+cmVxc19hY3RpdmUgYmVmb3JlIGNoZWNraW5nIGZvciBjdHgtPmRlYWQgYW5kIHRoZQorCSAqIGJhcnJpZXIgaXMgcmVhbGl6ZWQgYnkgdW5sb2NrIGFuZCBsb2NrIG9mIGN0eC0+Y3R4X2xvY2suIFRodXMgaWYgd2UKKwkgKiBkb24ndCBzZWUgY3R4LT5kZWFkIHNldCBoZXJlLCBpb19kZXN0cm95KCkgd2FpdHMgZm9yIG91ciBJTyB0bworCSAqIGZpbmlzaC4KKwkgKi8KKwlpZiAoY3R4LT5kZWFkKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmY3R4LT5jdHhfbG9jayk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3B1dF9yZXE7CisJfQogCWFpb19ydW5faW9jYihyZXEpOwogCWlmICghbGlzdF9lbXB0eSgmY3R4LT5ydW5fbGlzdCkpIHsKIAkJLyogZHJhaW4gdGhlIHJ1biBsaXN0ICovCmRpZmYgLS1naXQgYS9mcy9ibG9ja19kZXYuYyBiL2ZzL2Jsb2NrX2Rldi5jCmluZGV4IDMzM2E3YmIuLmYwNWJmMTYgMTAwNjQ0Ci0tLSBhL2ZzL2Jsb2NrX2Rldi5jCisrKyBiL2ZzL2Jsb2NrX2Rldi5jCkBAIC04NzMsNiArODczLDExIEBACiAJcmV0ID0gYWRkX3N5bWxpbmsoYmRldi0+YmRfcGFydC0+aG9sZGVyX2RpciwgJmRpc2tfdG9fZGV2KGRpc2spLT5rb2JqKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9kZWw7CisJLyoKKwkgKiBiZGV2IGNvdWxkIGJlIGRlbGV0ZWQgYmVuZWF0aCB1cyB3aGljaCB3b3VsZCBpbXBsaWNpdGx5IGRlc3Ryb3kKKwkgKiB0aGUgaG9sZGVyIGRpcmVjdG9yeS4gIEhvbGQgb24gdG8gaXQuCisJICovCisJa29iamVjdF9nZXQoYmRldi0+YmRfcGFydC0+aG9sZGVyX2Rpcik7CiAKIAlsaXN0X2FkZCgmaG9sZGVyLT5saXN0LCAmYmRldi0+YmRfaG9sZGVyX2Rpc2tzKTsKIAlnb3RvIG91dF91bmxvY2s7CkBAIC05MDksNiArOTE0LDcgQEAKIAkJZGVsX3N5bWxpbmsoZGlzay0+c2xhdmVfZGlyLCAmcGFydF90b19kZXYoYmRldi0+YmRfcGFydCktPmtvYmopOwogCQlkZWxfc3ltbGluayhiZGV2LT5iZF9wYXJ0LT5ob2xkZXJfZGlyLAogCQkJICAgICZkaXNrX3RvX2RldihkaXNrKS0+a29iaik7CisJCWtvYmplY3RfcHV0KGJkZXYtPmJkX3BhcnQtPmhvbGRlcl9kaXIpOwogCQlsaXN0X2RlbF9pbml0KCZob2xkZXItPmxpc3QpOwogCQlrZnJlZShob2xkZXIpOwogCX0KQEAgLTkyNyw5ICs5MzMsOSBAQAogICogd2hlbiBhIGRpc2sgaGFzIGJlZW4gY2hhbmdlZCAtLSBlaXRoZXIgYnkgYSBtZWRpYSBjaGFuZ2Ugb3Igb25saW5lCiAgKiByZXNpemUuCiAgKi8KLXN0YXRpYyB2b2lkIGZsdXNoX2Rpc2soc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3N0YXRpYyB2b2lkIGZsdXNoX2Rpc2soc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYm9vbCBraWxsX2RpcnR5KQogewotCWlmIChfX2ludmFsaWRhdGVfZGV2aWNlKGJkZXYpKSB7CisJaWYgKF9faW52YWxpZGF0ZV9kZXZpY2UoYmRldiwga2lsbF9kaXJ0eSkpIHsKIAkJY2hhciBuYW1lW0JERVZOQU1FX1NJWkVdID0gIiI7CiAKIAkJaWYgKGJkZXYtPmJkX2Rpc2spCkBAIC05NjYsNyArOTcyLDcgQEAKIAkJICAgICAgICIlczogZGV0ZWN0ZWQgY2FwYWNpdHkgY2hhbmdlIGZyb20gJWxsZCB0byAlbGxkXG4iLAogCQkgICAgICAgbmFtZSwgYmRldl9zaXplLCBkaXNrX3NpemUpOwogCQlpX3NpemVfd3JpdGUoYmRldi0+YmRfaW5vZGUsIGRpc2tfc2l6ZSk7Ci0JCWZsdXNoX2Rpc2soYmRldik7CisJCWZsdXNoX2Rpc2soYmRldiwgZmFsc2UpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woY2hlY2tfZGlza19zaXplX2NoYW5nZSk7CkBAIC0xMDE5LDcgKzEwMjUsNyBAQAogCWlmICghKGV2ZW50cyAmIERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFKSkKIAkJcmV0dXJuIDA7CiAKLQlmbHVzaF9kaXNrKGJkZXYpOworCWZsdXNoX2Rpc2soYmRldiwgdHJ1ZSk7CiAJaWYgKGJkb3BzLT5yZXZhbGlkYXRlX2Rpc2spCiAJCWJkb3BzLT5yZXZhbGlkYXRlX2Rpc2soYmRldi0+YmRfZGlzayk7CiAJcmV0dXJuIDE7CkBAIC0xMjE1LDEyICsxMjIxLDYgQEAKIAogCXJlcyA9IF9fYmxrZGV2X2dldChiZGV2LCBtb2RlLCAwKTsKIAotCS8qIF9fYmxrZGV2X2dldCgpIG1heSBhbHRlciByZWFkIG9ubHkgc3RhdHVzLCBjaGVjayBpdCBhZnRlcndhcmRzICovCi0JaWYgKCFyZXMgJiYgKG1vZGUgJiBGTU9ERV9XUklURSkgJiYgYmRldl9yZWFkX29ubHkoYmRldikpIHsKLQkJX19ibGtkZXZfcHV0KGJkZXYsIG1vZGUsIDApOwotCQlyZXMgPSAtRUFDQ0VTOwotCX0KLQogCWlmICh3aG9sZSkgewogCQkvKiBmaW5pc2ggY2xhaW1pbmcgKi8KIAkJbXV0ZXhfbG9jaygmYmRldi0+YmRfbXV0ZXgpOwpAQCAtMTI5OCw2ICsxMjk4LDExIEBACiAJaWYgKGVycikKIAkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAorCWlmICgobW9kZSAmIEZNT0RFX1dSSVRFKSAmJiBiZGV2X3JlYWRfb25seShiZGV2KSkgeworCQlibGtkZXZfcHV0KGJkZXYsIG1vZGUpOworCQlyZXR1cm4gRVJSX1BUUigtRUFDQ0VTKTsKKwl9CisKIAlyZXR1cm4gYmRldjsKIH0KIEVYUE9SVF9TWU1CT0woYmxrZGV2X2dldF9ieV9wYXRoKTsKQEAgLTE2MDEsNyArMTYwNiw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGxvb2t1cF9iZGV2KTsKIAotaW50IF9faW52YWxpZGF0ZV9kZXZpY2Uoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK2ludCBfX2ludmFsaWRhdGVfZGV2aWNlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJvb2wga2lsbF9kaXJ0eSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZ2V0X3N1cGVyKGJkZXYpOwogCWludCByZXMgPSAwOwpAQCAtMTYxNCw3ICsxNjE5LDcgQEAKIAkJICogaG9sZCkuCiAJCSAqLwogCQlzaHJpbmtfZGNhY2hlX3NiKHNiKTsKLQkJcmVzID0gaW52YWxpZGF0ZV9pbm9kZXMoc2IpOworCQlyZXMgPSBpbnZhbGlkYXRlX2lub2RlcyhzYiwga2lsbF9kaXJ0eSk7CiAJCWRyb3Bfc3VwZXIoc2IpOwogCX0KIAlpbnZhbGlkYXRlX2JkZXYoYmRldik7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9hY2wuYyBiL2ZzL2J0cmZzL2FjbC5jCmluZGV4IDE1YjVjYTIuLjljOTQ5MzQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2FjbC5jCisrKyBiL2ZzL2J0cmZzL2FjbC5jCkBAIC0zNyw2ICszNyw5IEBACiAJY2hhciAqdmFsdWUgPSBOVUxMOwogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKIAorCWlmICghSVNfUE9TSVhBQ0woaW5vZGUpKQorCQlyZXR1cm4gTlVMTDsKKwogCWFjbCA9IGdldF9jYWNoZWRfYWNsKGlub2RlLCB0eXBlKTsKIAlpZiAoYWNsICE9IEFDTF9OT1RfQ0FDSEVEKQogCQlyZXR1cm4gYWNsOwpAQCAtODQsNiArODcsOSBAQAogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKIAlpbnQgcmV0ID0gMDsKIAorCWlmICghSVNfUE9TSVhBQ0woZGVudHJ5LT5kX2lub2RlKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCiAJYWNsID0gYnRyZnNfZ2V0X2FjbChkZW50cnktPmRfaW5vZGUsIHR5cGUpOwogCiAJaWYgKElTX0VSUihhY2wpKQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvY29tcHJlc3Npb24uYyBiL2ZzL2J0cmZzL2NvbXByZXNzaW9uLmMKaW5kZXggZjc0NTI4Ny4uNGQyMTEwZSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvY29tcHJlc3Npb24uYworKysgYi9mcy9idHJmcy9jb21wcmVzc2lvbi5jCkBAIC01NjIsNyArNTYyLDcgQEAKIAl1NjQgZW1fbGVuOwogCXU2NCBlbV9zdGFydDsKIAlzdHJ1Y3QgZXh0ZW50X21hcCAqZW07Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gLUVOT01FTTsKIAl1MzIgKnN1bXM7CiAKIAl0cmVlID0gJkJUUkZTX0koaW5vZGUpLT5pb190cmVlOwpAQCAtNTc3LDYgKzU3Nyw5IEBACiAKIAljb21wcmVzc2VkX2xlbiA9IGVtLT5ibG9ja19sZW47CiAJY2IgPSBrbWFsbG9jKGNvbXByZXNzZWRfYmlvX3NpemUocm9vdCwgY29tcHJlc3NlZF9sZW4pLCBHRlBfTk9GUyk7CisJaWYgKCFjYikKKwkJZ290byBvdXQ7CisKIAlhdG9taWNfc2V0KCZjYi0+cGVuZGluZ19iaW9zLCAwKTsKIAljYi0+ZXJyb3JzID0gMDsKIAljYi0+aW5vZGUgPSBpbm9kZTsKQEAgLTU5NywxMyArNjAwLDE4IEBACiAKIAlucl9wYWdlcyA9IChjb21wcmVzc2VkX2xlbiArIFBBR0VfQ0FDSEVfU0laRSAtIDEpIC8KIAkJCQkgUEFHRV9DQUNIRV9TSVpFOwotCWNiLT5jb21wcmVzc2VkX3BhZ2VzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBucl9wYWdlcywKKwljYi0+Y29tcHJlc3NlZF9wYWdlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWdlICopICogbnJfcGFnZXMsCiAJCQkJICAgICAgIEdGUF9OT0ZTKTsKKwlpZiAoIWNiLT5jb21wcmVzc2VkX3BhZ2VzKQorCQlnb3RvIGZhaWwxOworCiAJYmRldiA9IEJUUkZTX0koaW5vZGUpLT5yb290LT5mc19pbmZvLT5mc19kZXZpY2VzLT5sYXRlc3RfYmRldjsKIAogCWZvciAocGFnZV9pbmRleCA9IDA7IHBhZ2VfaW5kZXggPCBucl9wYWdlczsgcGFnZV9pbmRleCsrKSB7CiAJCWNiLT5jb21wcmVzc2VkX3BhZ2VzW3BhZ2VfaW5kZXhdID0gYWxsb2NfcGFnZShHRlBfTk9GUyB8CiAJCQkJCQkJICAgICAgX19HRlBfSElHSE1FTSk7CisJCWlmICghY2ItPmNvbXByZXNzZWRfcGFnZXNbcGFnZV9pbmRleF0pCisJCQlnb3RvIGZhaWwyOwogCX0KIAljYi0+bnJfcGFnZXMgPSBucl9wYWdlczsKIApAQCAtNjE0LDYgKzYyMiw4IEBACiAJY2ItPmxlbiA9IHVuY29tcHJlc3NlZF9sZW47CiAKIAljb21wX2JpbyA9IGNvbXByZXNzZWRfYmlvX2FsbG9jKGJkZXYsIGN1cl9kaXNrX2J5dGUsIEdGUF9OT0ZTKTsKKwlpZiAoIWNvbXBfYmlvKQorCQlnb3RvIGZhaWwyOwogCWNvbXBfYmlvLT5iaV9wcml2YXRlID0gY2I7CiAJY29tcF9iaW8tPmJpX2VuZF9pbyA9IGVuZF9jb21wcmVzc2VkX2Jpb19yZWFkOwogCWF0b21pY19pbmMoJmNiLT5wZW5kaW5nX2Jpb3MpOwpAQCAtNjgxLDYgKzY5MSwxNyBAQAogCiAJYmlvX3B1dChjb21wX2Jpbyk7CiAJcmV0dXJuIDA7CisKK2ZhaWwyOgorCWZvciAocGFnZV9pbmRleCA9IDA7IHBhZ2VfaW5kZXggPCBucl9wYWdlczsgcGFnZV9pbmRleCsrKQorCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2ItPmNvbXByZXNzZWRfcGFnZXNbcGFnZV9pbmRleF0pOworCisJa2ZyZWUoY2ItPmNvbXByZXNzZWRfcGFnZXMpOworZmFpbDE6CisJa2ZyZWUoY2IpOworb3V0OgorCWZyZWVfZXh0ZW50X21hcChlbSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgY29tcF9pZGxlX3dvcmtzcGFjZVtCVFJGU19DT01QUkVTU19UWVBFU107CkBAIC05MDAsNyArOTIxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIF9fZXhpdCBidHJmc19leGl0X2NvbXByZXNzKHZvaWQpCit2b2lkIGJ0cmZzX2V4aXRfY29tcHJlc3Modm9pZCkKIHsKIAlmcmVlX3dvcmtzcGFjZXMoKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2N0cmVlLmggYi9mcy9idHJmcy9jdHJlZS5oCmluZGV4IDJjOThiM2EuLjZmODIwZmEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2N0cmVlLmgKKysrIGIvZnMvYnRyZnMvY3RyZWUuaApAQCAtMTI1NCw2ICsxMjU0LDcgQEAKICNkZWZpbmUgQlRSRlNfTU9VTlRfU1BBQ0VfQ0FDSEUJCSgxIDw8IDEyKQogI2RlZmluZSBCVFJGU19NT1VOVF9DTEVBUl9DQUNIRQkJKDEgPDwgMTMpCiAjZGVmaW5lIEJUUkZTX01PVU5UX1VTRVJfU1VCVk9MX1JNX0FMTE9XRUQgKDEgPDwgMTQpCisjZGVmaW5lIEJUUkZTX01PVU5UX0VOT1NQQ19ERUJVRwkgKDEgPDwgMTUpCiAKICNkZWZpbmUgYnRyZnNfY2xlYXJfb3B0KG8sIG9wdCkJCSgobykgJj0gfkJUUkZTX01PVU5UXyMjb3B0KQogI2RlZmluZSBidHJmc19zZXRfb3B0KG8sIG9wdCkJCSgobykgfD0gQlRSRlNfTU9VTlRfIyNvcHQpCkBAIC0yMjE4LDYgKzIyMTksOCBAQAogCQkJCSAgIHU2NCBzdGFydCwgdTY0IGVuZCk7CiBpbnQgYnRyZnNfZXJyb3JfZGlzY2FyZF9leHRlbnQoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIsCiAJCQkgICAgICAgdTY0IG51bV9ieXRlcyk7CitpbnQgYnRyZnNfZm9yY2VfY2h1bmtfYWxsb2Moc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCB0eXBlKTsKIAogLyogY3RyZWUuYyAqLwogaW50IGJ0cmZzX2Jpbl9zZWFyY2goc3RydWN0IGV4dGVudF9idWZmZXIgKmViLCBzdHJ1Y3QgYnRyZnNfa2V5ICprZXksCmRpZmYgLS1naXQgYS9mcy9idHJmcy9kaXNrLWlvLmMgYi9mcy9idHJmcy9kaXNrLWlvLmMKaW5kZXggYjUzMWMzNi4uZTFhYThkNiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZGlzay1pby5jCisrKyBiL2ZzL2J0cmZzL2Rpc2staW8uYwpAQCAtMzU5LDEwICszNTksMTQgQEAKIAogCXRyZWUgPSAmQlRSRlNfSShwYWdlLT5tYXBwaW5nLT5ob3N0KS0+aW9fdHJlZTsKIAotCWlmIChwYWdlLT5wcml2YXRlID09IEVYVEVOVF9QQUdFX1BSSVZBVEUpCisJaWYgKHBhZ2UtPnByaXZhdGUgPT0gRVhURU5UX1BBR0VfUFJJVkFURSkgeworCQlXQVJOX09OKDEpOwogCQlnb3RvIG91dDsKLQlpZiAoIXBhZ2UtPnByaXZhdGUpCisJfQorCWlmICghcGFnZS0+cHJpdmF0ZSkgeworCQlXQVJOX09OKDEpOwogCQlnb3RvIG91dDsKKwl9CiAJbGVuID0gcGFnZS0+cHJpdmF0ZSA+PiAyOwogCVdBUk5fT04obGVuID09IDApOwogCkBAIC0xNTUwLDYgKzE1NTQsNyBAQAogCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+bmV3X3RyYW5zX2xvY2spOwogCiAJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJQlVHX09OKElTX0VSUih0cmFucykpOwogCQlpZiAodHJhbnNpZCA9PSB0cmFucy0+dHJhbnNpZCkgewogCQkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCUJVR19PTihyZXQpOwpAQCAtMjQ1MywxMCArMjQ1OCwxNCBAQAogCXVwX3dyaXRlKCZyb290LT5mc19pbmZvLT5jbGVhbnVwX3dvcmtfc2VtKTsKIAogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJQlVHX09OKHJldCk7CiAJLyogcnVuIGNvbW1pdCBhZ2FpbiB0byBkcm9wIHRoZSBvcmlnaW5hbCBzbmFwc2hvdCAqLwogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJcmV0ID0gYnRyZnNfd3JpdGVfYW5kX3dhaXRfdHJhbnNhY3Rpb24oTlVMTCwgcm9vdCk7CiAJQlVHX09OKHJldCk7CkBAIC0yNTU0LDYgKzI1NjMsOCBAQAogCWtmcmVlKGZzX2luZm8tPmNodW5rX3Jvb3QpOwogCWtmcmVlKGZzX2luZm8tPmRldl9yb290KTsKIAlrZnJlZShmc19pbmZvLT5jc3VtX3Jvb3QpOworCWtmcmVlKGZzX2luZm8pOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4cG9ydC5jIGIvZnMvYnRyZnMvZXhwb3J0LmMKaW5kZXggOTc4Njk2My4uZmYyN2Q3YSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXhwb3J0LmMKKysrIGIvZnMvYnRyZnMvZXhwb3J0LmMKQEAgLTE3MSw2ICsxNzEsOCBAQAogCWludCByZXQ7CiAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlpZiAoZGlyLT5pX2lubyA9PSBCVFJGU19GSVJTVF9GUkVFX09CSkVDVElEKSB7CiAJCWtleS5vYmplY3RpZCA9IHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKaW5kZXggYjU1MjY5My4uNTg4ZmY5OCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYworKysgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCkBAIC0zMjAsMTEgKzMyMCw2IEBACiAJaWYgKCFwYXRoKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWV4Y2x1ZGVfc3VwZXJfc3RyaXBlcyhleHRlbnRfcm9vdCwgYmxvY2tfZ3JvdXApOwotCXNwaW5fbG9jaygmYmxvY2tfZ3JvdXAtPnNwYWNlX2luZm8tPmxvY2spOwotCWJsb2NrX2dyb3VwLT5zcGFjZV9pbmZvLT5ieXRlc19yZWFkb25seSArPSBibG9ja19ncm91cC0+Ynl0ZXNfc3VwZXI7Ci0Jc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT5zcGFjZV9pbmZvLT5sb2NrKTsKLQogCWxhc3QgPSBtYXhfdCh1NjQsIGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQsIEJUUkZTX1NVUEVSX0lORk9fT0ZGU0VUKTsKIAogCS8qCkBAIC00NjcsOCArNDYyLDEwIEBACiAJCQljYWNoZS0+Y2FjaGVkID0gQlRSRlNfQ0FDSEVfTk87CiAJCX0KIAkJc3Bpbl91bmxvY2soJmNhY2hlLT5sb2NrKTsKLQkJaWYgKHJldCA9PSAxKQorCQlpZiAocmV0ID09IDEpIHsKKwkJCWZyZWVfZXhjbHVkZWRfZXh0ZW50cyhmc19pbmZvLT5leHRlbnRfcm9vdCwgY2FjaGUpOwogCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlpZiAobG9hZF9jYWNoZV9vbmx5KQpAQCAtMzM0NCw4ICszMzQxLDEwIEBACiAJdTY0IHJlc2VydmVkOwogCXU2NCBtYXhfcmVjbGFpbTsKIAl1NjQgcmVjbGFpbWVkID0gMDsKKwlsb25nIHRpbWVfbGVmdDsKIAlpbnQgcGF1c2UgPSAxOwogCWludCBucl9wYWdlcyA9ICgyICogMTAyNCAqIDEwMjQpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJaW50IGxvb3BzID0gMDsKIAogCWJsb2NrX3JzdiA9ICZyb290LT5mc19pbmZvLT5kZWxhbGxvY19ibG9ja19yc3Y7CiAJc3BhY2VfaW5mbyA9IGJsb2NrX3Jzdi0+c3BhY2VfaW5mbzsKQEAgLTMzNTgsNyArMzM1Nyw3IEBACiAKIAltYXhfcmVjbGFpbSA9IG1pbihyZXNlcnZlZCwgdG9fcmVjbGFpbSk7CiAKLQl3aGlsZSAoMSkgeworCXdoaWxlIChsb29wcyA8IDEwMjQpIHsKIAkJLyogaGF2ZSB0aGUgZmx1c2hlciB0aHJlYWRzIGp1bXAgaW4gYW5kIGRvIHNvbWUgSU8gKi8KIAkJc21wX21iKCk7CiAJCW5yX3BhZ2VzID0gbWluX3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsCkBAIC0zMzY2LDggKzMzNjUsMTIgQEAKIAkJd3JpdGViYWNrX2lub2Rlc19zYl9ucl9pZl9pZGxlKHJvb3QtPmZzX2luZm8tPnNiLCBucl9wYWdlcyk7CiAKIAkJc3Bpbl9sb2NrKCZzcGFjZV9pbmZvLT5sb2NrKTsKLQkJaWYgKHJlc2VydmVkID4gc3BhY2VfaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQpCisJCWlmIChyZXNlcnZlZCA+IHNwYWNlX2luZm8tPmJ5dGVzX3Jlc2VydmVkKSB7CisJCQlsb29wcyA9IDA7CiAJCQlyZWNsYWltZWQgKz0gcmVzZXJ2ZWQgLSBzcGFjZV9pbmZvLT5ieXRlc19yZXNlcnZlZDsKKwkJfSBlbHNlIHsKKwkJCWxvb3BzKys7CisJCX0KIAkJcmVzZXJ2ZWQgPSBzcGFjZV9pbmZvLT5ieXRlc19yZXNlcnZlZDsKIAkJc3Bpbl91bmxvY2soJnNwYWNlX2luZm8tPmxvY2spOwogCkBAIC0zMzc4LDcgKzMzODEsMTIgQEAKIAkJCXJldHVybiAtRUFHQUlOOwogCiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJc2NoZWR1bGVfdGltZW91dChwYXVzZSk7CisJCXRpbWVfbGVmdCA9IHNjaGVkdWxlX3RpbWVvdXQocGF1c2UpOworCisJCS8qIFdlIHdlcmUgaW50ZXJydXB0ZWQsIGV4aXQgKi8KKwkJaWYgKHRpbWVfbGVmdCkKKwkJCWJyZWFrOworCiAJCXBhdXNlIDw8PSAxOwogCQlpZiAocGF1c2UgPiBIWiAvIDEwKQogCQkJcGF1c2UgPSBIWiAvIDEwOwpAQCAtMzU4OCw4ICszNTk2LDIwIEBACiAKIAlpZiAobnVtX2J5dGVzID4gMCkgewogCQlpZiAoZGVzdCkgewotCQkJYmxvY2tfcnN2X2FkZF9ieXRlcyhkZXN0LCBudW1fYnl0ZXMsIDApOwotCQl9IGVsc2UgeworCQkJc3Bpbl9sb2NrKCZkZXN0LT5sb2NrKTsKKwkJCWlmICghZGVzdC0+ZnVsbCkgeworCQkJCXU2NCBieXRlc190b19hZGQ7CisKKwkJCQlieXRlc190b19hZGQgPSBkZXN0LT5zaXplIC0gZGVzdC0+cmVzZXJ2ZWQ7CisJCQkJYnl0ZXNfdG9fYWRkID0gbWluKG51bV9ieXRlcywgYnl0ZXNfdG9fYWRkKTsKKwkJCQlkZXN0LT5yZXNlcnZlZCArPSBieXRlc190b19hZGQ7CisJCQkJaWYgKGRlc3QtPnJlc2VydmVkID49IGRlc3QtPnNpemUpCisJCQkJCWRlc3QtPmZ1bGwgPSAxOworCQkJCW51bV9ieXRlcyAtPSBieXRlc190b19hZGQ7CisJCQl9CisJCQlzcGluX3VubG9jaygmZGVzdC0+bG9jayk7CisJCX0KKwkJaWYgKG51bV9ieXRlcykgewogCQkJc3Bpbl9sb2NrKCZzcGFjZV9pbmZvLT5sb2NrKTsKIAkJCXNwYWNlX2luZm8tPmJ5dGVzX3Jlc2VydmVkIC09IG51bV9ieXRlczsKIAkJCXNwaW5fdW5sb2NrKCZzcGFjZV9pbmZvLT5sb2NrKTsKQEAgLTQwMTIsNiArNDAzMiw3IEBACiAKIAludW1fYnl0ZXMgPSBBTElHTihudW1fYnl0ZXMsIHJvb3QtPnNlY3RvcnNpemUpOwogCWF0b21pY19kZWMoJkJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzKTsKKwlXQVJOX09OKGF0b21pY19yZWFkKCZCVFJGU19JKGlub2RlKS0+b3V0c3RhbmRpbmdfZXh0ZW50cykgPCAwKTsKIAogCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CiAJbnJfZXh0ZW50cyA9IGF0b21pY19yZWFkKCZCVFJGU19JKGlub2RlKS0+b3V0c3RhbmRpbmdfZXh0ZW50cyk7CkBAIC01MzU1LDcgKzUzNzYsNyBAQAogCQkJICAgICAgIG51bV9ieXRlcywgZGF0YSwgMSk7CiAJCWdvdG8gYWdhaW47CiAJfQotCWlmIChyZXQgPT0gLUVOT1NQQykgeworCWlmIChyZXQgPT0gLUVOT1NQQyAmJiBidHJmc190ZXN0X29wdChyb290LCBFTk9TUENfREVCVUcpKSB7CiAJCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICpzaW5mbzsKIAogCQlzaW5mbyA9IF9fZmluZF9zcGFjZV9pbmZvKHJvb3QtPmZzX2luZm8sIGRhdGEpOwpAQCAtNTYzMyw2ICs1NjU0LDcgQEAKIAkgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTMyIGJsb2Nrc2l6ZSkKIHsKIAlzdHJ1Y3QgYnRyZnNfYmxvY2tfcnN2ICpibG9ja19yc3Y7CisJc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqZ2xvYmFsX3JzdiA9ICZyb290LT5mc19pbmZvLT5nbG9iYWxfYmxvY2tfcnN2OwogCWludCByZXQ7CiAKIAlibG9ja19yc3YgPSBnZXRfYmxvY2tfcnN2KHRyYW5zLCByb290KTsKQEAgLTU2NDAsMTQgKzU2NjIsMzkgQEAKIAlpZiAoYmxvY2tfcnN2LT5zaXplID09IDApIHsKIAkJcmV0ID0gcmVzZXJ2ZV9tZXRhZGF0YV9ieXRlcyh0cmFucywgcm9vdCwgYmxvY2tfcnN2LAogCQkJCQkgICAgIGJsb2Nrc2l6ZSwgMCk7Ci0JCWlmIChyZXQpCisJCS8qCisJCSAqIElmIHdlIGNvdWxkbid0IHJlc2VydmUgbWV0YWRhdGEgYnl0ZXMgdHJ5IGFuZCB1c2Ugc29tZSBmcm9tCisJCSAqIHRoZSBnbG9iYWwgcmVzZXJ2ZS4KKwkJICovCisJCWlmIChyZXQgJiYgYmxvY2tfcnN2ICE9IGdsb2JhbF9yc3YpIHsKKwkJCXJldCA9IGJsb2NrX3Jzdl91c2VfYnl0ZXMoZ2xvYmFsX3JzdiwgYmxvY2tzaXplKTsKKwkJCWlmICghcmV0KQorCQkJCXJldHVybiBnbG9iYWxfcnN2OwogCQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwkJfSBlbHNlIGlmIChyZXQpIHsKKwkJCXJldHVybiBFUlJfUFRSKHJldCk7CisJCX0KIAkJcmV0dXJuIGJsb2NrX3JzdjsKIAl9CiAKIAlyZXQgPSBibG9ja19yc3ZfdXNlX2J5dGVzKGJsb2NrX3JzdiwgYmxvY2tzaXplKTsKIAlpZiAoIXJldCkKIAkJcmV0dXJuIGJsb2NrX3JzdjsKKwlpZiAocmV0KSB7CisJCVdBUk5fT04oMSk7CisJCXJldCA9IHJlc2VydmVfbWV0YWRhdGFfYnl0ZXModHJhbnMsIHJvb3QsIGJsb2NrX3JzdiwgYmxvY2tzaXplLAorCQkJCQkgICAgIDApOworCQlpZiAoIXJldCkgeworCQkJc3Bpbl9sb2NrKCZibG9ja19yc3YtPmxvY2spOworCQkJYmxvY2tfcnN2LT5zaXplICs9IGJsb2Nrc2l6ZTsKKwkJCXNwaW5fdW5sb2NrKCZibG9ja19yc3YtPmxvY2spOworCQkJcmV0dXJuIGJsb2NrX3JzdjsKKwkJfSBlbHNlIGlmIChyZXQgJiYgYmxvY2tfcnN2ICE9IGdsb2JhbF9yc3YpIHsKKwkJCXJldCA9IGJsb2NrX3Jzdl91c2VfYnl0ZXMoZ2xvYmFsX3JzdiwgYmxvY2tzaXplKTsKKwkJCWlmICghcmV0KQorCQkJCXJldHVybiBnbG9iYWxfcnN2OworCQl9CisJfQogCiAJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CiB9CkBAIC02MjIxLDYgKzYyNjgsOCBAQAogCUJVR19PTighd2MpOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbih0cmVlX3Jvb3QsIDApOworCUJVR19PTihJU19FUlIodHJhbnMpKTsKKwogCWlmIChibG9ja19yc3YpCiAJCXRyYW5zLT5ibG9ja19yc3YgPSBibG9ja19yc3Y7CiAKQEAgLTYzMTgsNiArNjM2Nyw3IEBACiAKIAkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgdHJlZV9yb290KTsKIAkJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24odHJlZV9yb290LCAwKTsKKwkJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAkJCWlmIChibG9ja19yc3YpCiAJCQkJdHJhbnMtPmJsb2NrX3JzdiA9IGJsb2NrX3JzdjsKIAkJfQpAQCAtNjQ0Niw2ICs2NDk2LDggQEAKIAlpbnQgcmV0ID0gMDsKIAogCXJhID0ga3phbGxvYyhzaXplb2YoKnJhKSwgR0ZQX05PRlMpOworCWlmICghcmEpCisJCXJldHVybiAtRU5PTUVNOwogCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWZpcnN0X2luZGV4ID0gc3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVDsKQEAgLTY1MzEsNyArNjU4Myw3IEBACiAJdTY0IGVuZCA9IHN0YXJ0ICsgZXh0ZW50X2tleS0+b2Zmc2V0IC0gMTsKIAogCWVtID0gYWxsb2NfZXh0ZW50X21hcChHRlBfTk9GUyk7Ci0JQlVHX09OKCFlbSB8fCBJU19FUlIoZW0pKTsKKwlCVUdfT04oIWVtKTsKIAogCWVtLT5zdGFydCA9IHN0YXJ0OwogCWVtLT5sZW4gPSBleHRlbnRfa2V5LT5vZmZzZXQ7CkBAIC03NDc3LDcgKzc1MjksNyBAQAogCQlCVUdfT04ocmVsb2Nfcm9vdC0+Y29tbWl0X3Jvb3QgIT0gTlVMTCk7CiAJCXdoaWxlICgxKSB7CiAJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JCQlCVUdfT04oIXRyYW5zKTsKKwkJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAogCQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+ZHJvcF9tdXRleCk7CiAJCQlyZXQgPSBidHJmc19kcm9wX3NuYXBzaG90KHRyYW5zLCByZWxvY19yb290KTsKQEAgLTc1MzUsNyArNzU4Nyw3IEBACiAKIAlpZiAoZm91bmQpIHsKIAkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKLQkJQlVHX09OKCF0cmFucyk7CisJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJQlVHX09OKHJldCk7CiAJfQpAQCAtNzc3OSw3ICs3ODMxLDcgQEAKIAogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihleHRlbnRfcm9vdCwgMSk7Ci0JQlVHX09OKCF0cmFucyk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCiAJaWYgKGV4dGVudF9rZXktPm9iamVjdGlkID09IDApIHsKIAkJcmV0ID0gZGVsX2V4dGVudF96ZXJvKHRyYW5zLCBleHRlbnRfcm9vdCwgcGF0aCwgZXh0ZW50X2tleSk7CkBAIC04MDEzLDYgKzgwNjUsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgYnRyZnNfZm9yY2VfY2h1bmtfYWxsb2Moc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCB0eXBlKQoreworCXU2NCBhbGxvY19mbGFncyA9IGdldF9hbGxvY19wcm9maWxlKHJvb3QsIHR5cGUpOworCXJldHVybiBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdCwgMiAqIDEwMjQgKiAxMDI0LCBhbGxvY19mbGFncywgMSk7Cit9CisKIC8qCiAgKiBoZWxwZXIgdG8gYWNjb3VudCB0aGUgdW51c2VkIHNwYWNlIG9mIGFsbCB0aGUgcmVhZG9ubHkgYmxvY2sgZ3JvdXAgaW4gdGhlCiAgKiBsaXN0LiB0YWtlcyBtaXJyb3JzIGludG8gYWNjb3VudC4KQEAgLTgyNzAsNiArODMyOSwxMyBAQAogCQlpZiAoYmxvY2tfZ3JvdXAtPmNhY2hlZCA9PSBCVFJGU19DQUNIRV9TVEFSVEVEKQogCQkJd2FpdF9ibG9ja19ncm91cF9jYWNoZV9kb25lKGJsb2NrX2dyb3VwKTsKIAorCQkvKgorCQkgKiBXZSBoYXZlbid0IGNhY2hlZCB0aGlzIGJsb2NrIGdyb3VwLCB3aGljaCBtZWFucyB3ZSBjb3VsZAorCQkgKiBwb3NzaWJseSBoYXZlIGV4Y2x1ZGVkIGV4dGVudHMgb24gdGhpcyBibG9jayBncm91cC4KKwkJICovCisJCWlmIChibG9ja19ncm91cC0+Y2FjaGVkID09IEJUUkZTX0NBQ0hFX05PKQorCQkJZnJlZV9leGNsdWRlZF9leHRlbnRzKGluZm8tPmV4dGVudF9yb290LCBibG9ja19ncm91cCk7CisKIAkJYnRyZnNfcmVtb3ZlX2ZyZWVfc3BhY2VfY2FjaGUoYmxvY2tfZ3JvdXApOwogCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwogCkBAIC04Mzg1LDYgKzg0NTEsMTMgQEAKIAkJY2FjaGUtPnNlY3RvcnNpemUgPSByb290LT5zZWN0b3JzaXplOwogCiAJCS8qCisJCSAqIFdlIG5lZWQgdG8gZXhjbHVkZSB0aGUgc3VwZXIgc3RyaXBlcyBub3cgc28gdGhhdCB0aGUgc3BhY2UKKwkJICogaW5mbyBoYXMgc3VwZXIgYnl0ZXMgYWNjb3VudGVkIGZvciwgb3RoZXJ3aXNlIHdlJ2xsIHRoaW5rCisJCSAqIHdlIGhhdmUgbW9yZSBzcGFjZSB0aGFuIHdlIGFjdHVhbGx5IGRvLgorCQkgKi8KKwkJZXhjbHVkZV9zdXBlcl9zdHJpcGVzKHJvb3QsIGNhY2hlKTsKKworCQkvKgogCQkgKiBjaGVjayBmb3IgdHdvIGNhc2VzLCBlaXRoZXIgd2UgYXJlIGZ1bGwsIGFuZCB0aGVyZWZvcmUKIAkJICogZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCB0aGUgY2FjaGluZyB3b3JrIHNpbmNlIHdlIHdvbid0CiAJCSAqIGZpbmQgYW55IHNwYWNlLCBvciB3ZSBhcmUgZW1wdHksIGFuZCB3ZSBjYW4ganVzdCBhZGQgYWxsCkBAIC04MzkyLDEyICs4NDY1LDEwIEBACiAJCSAqIHRpbWUsIHBhcnRpY3VsYXJseSBpbiB0aGUgZnVsbCBjYXNlLgogCQkgKi8KIAkJaWYgKGZvdW5kX2tleS5vZmZzZXQgPT0gYnRyZnNfYmxvY2tfZ3JvdXBfdXNlZCgmY2FjaGUtPml0ZW0pKSB7Ci0JCQlleGNsdWRlX3N1cGVyX3N0cmlwZXMocm9vdCwgY2FjaGUpOwogCQkJY2FjaGUtPmxhc3RfYnl0ZV90b191bnBpbiA9ICh1NjQpLTE7CiAJCQljYWNoZS0+Y2FjaGVkID0gQlRSRlNfQ0FDSEVfRklOSVNIRUQ7CiAJCQlmcmVlX2V4Y2x1ZGVkX2V4dGVudHMocm9vdCwgY2FjaGUpOwogCQl9IGVsc2UgaWYgKGJ0cmZzX2Jsb2NrX2dyb3VwX3VzZWQoJmNhY2hlLT5pdGVtKSA9PSAwKSB7Ci0JCQlleGNsdWRlX3N1cGVyX3N0cmlwZXMocm9vdCwgY2FjaGUpOwogCQkJY2FjaGUtPmxhc3RfYnl0ZV90b191bnBpbiA9ICh1NjQpLTE7CiAJCQljYWNoZS0+Y2FjaGVkID0gQlRSRlNfQ0FDSEVfRklOSVNIRUQ7CiAJCQlhZGRfbmV3X2ZyZWVfc3BhY2UoY2FjaGUsIHJvb3QtPmZzX2luZm8sCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfaW8uYyBiL2ZzL2J0cmZzL2V4dGVudF9pby5jCmluZGV4IDJlOTkzY2YuLmZkM2YxNzIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudF9pby5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9pby5jCkBAIC0xNDMzLDEyICsxNDMzLDEzIEBACiAgKi8KIHU2NCBjb3VudF9yYW5nZV9iaXRzKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKIAkJICAgICB1NjQgKnN0YXJ0LCB1NjQgc2VhcmNoX2VuZCwgdTY0IG1heF9ieXRlcywKLQkJICAgICB1bnNpZ25lZCBsb25nIGJpdHMpCisJCSAgICAgdW5zaWduZWQgbG9uZyBiaXRzLCBpbnQgY29udGlnKQogewogCXN0cnVjdCByYl9ub2RlICpub2RlOwogCXN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlOwogCXU2NCBjdXJfc3RhcnQgPSAqc3RhcnQ7CiAJdTY0IHRvdGFsX2J5dGVzID0gMDsKKwl1NjQgbGFzdCA9IDA7CiAJaW50IGZvdW5kID0gMDsKIAogCWlmIChzZWFyY2hfZW5kIDw9IGN1cl9zdGFydCkgewpAQCAtMTQ2Myw3ICsxNDY0LDkgQEAKIAkJc3RhdGUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgZXh0ZW50X3N0YXRlLCByYl9ub2RlKTsKIAkJaWYgKHN0YXRlLT5zdGFydCA+IHNlYXJjaF9lbmQpCiAJCQlicmVhazsKLQkJaWYgKHN0YXRlLT5lbmQgPj0gY3VyX3N0YXJ0ICYmIChzdGF0ZS0+c3RhdGUgJiBiaXRzKSkgeworCQlpZiAoY29udGlnICYmIGZvdW5kICYmIHN0YXRlLT5zdGFydCA+IGxhc3QgKyAxKQorCQkJYnJlYWs7CisJCWlmIChzdGF0ZS0+ZW5kID49IGN1cl9zdGFydCAmJiAoc3RhdGUtPnN0YXRlICYgYml0cykgPT0gYml0cykgewogCQkJdG90YWxfYnl0ZXMgKz0gbWluKHNlYXJjaF9lbmQsIHN0YXRlLT5lbmQpICsgMSAtCiAJCQkJICAgICAgIG1heChjdXJfc3RhcnQsIHN0YXRlLT5zdGFydCk7CiAJCQlpZiAodG90YWxfYnl0ZXMgPj0gbWF4X2J5dGVzKQpAQCAtMTQ3Miw2ICsxNDc1LDkgQEAKIAkJCQkqc3RhcnQgPSBzdGF0ZS0+c3RhcnQ7CiAJCQkJZm91bmQgPSAxOwogCQkJfQorCQkJbGFzdCA9IHN0YXRlLT5lbmQ7CisJCX0gZWxzZSBpZiAoY29udGlnICYmIGZvdW5kKSB7CisJCQlicmVhazsKIAkJfQogCQlub2RlID0gcmJfbmV4dChub2RlKTsKIAkJaWYgKCFub2RlKQpAQCAtMTg2NSw3ICsxODcxLDcgQEAKIAliaW9fZ2V0KGJpbyk7CiAKIAlpZiAodHJlZS0+b3BzICYmIHRyZWUtPm9wcy0+c3VibWl0X2Jpb19ob29rKQotCQl0cmVlLT5vcHMtPnN1Ym1pdF9iaW9faG9vayhwYWdlLT5tYXBwaW5nLT5ob3N0LCBydywgYmlvLAorCQlyZXQgPSB0cmVlLT5vcHMtPnN1Ym1pdF9iaW9faG9vayhwYWdlLT5tYXBwaW5nLT5ob3N0LCBydywgYmlvLAogCQkJCQkgICBtaXJyb3JfbnVtLCBiaW9fZmxhZ3MsIHN0YXJ0KTsKIAllbHNlCiAJCXN1Ym1pdF9iaW8ocncsIGJpbyk7CkBAIC0xOTIwLDYgKzE5MjYsOCBAQAogCQluciA9IGJpb19nZXRfbnJfdmVjcyhiZGV2KTsKIAogCWJpbyA9IGJ0cmZzX2Jpb19hbGxvYyhiZGV2LCBzZWN0b3IsIG5yLCBHRlBfTk9GUyB8IF9fR0ZQX0hJR0gpOworCWlmICghYmlvKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIHBhZ2Vfc2l6ZSwgb2Zmc2V0KTsKIAliaW8tPmJpX2VuZF9pbyA9IGVuZF9pb19mdW5jOwpAQCAtMTk0NCw2ICsxOTUyLDcgQEAKIAogc3RhdGljIHZvaWQgc2V0X3BhZ2VfZXh0ZW50X2hlYWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbGVuKQogeworCVdBUk5fT04oIVBhZ2VQcml2YXRlKHBhZ2UpKTsKIAlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIEVYVEVOVF9QQUdFX1BSSVZBVEVfRklSU1RfUEFHRSB8IGxlbiA8PCAyKTsKIH0KIApAQCAtMjEyNiw3ICsyMTM1LDcgQEAKIAlyZXQgPSBfX2V4dGVudF9yZWFkX2Z1bGxfcGFnZSh0cmVlLCBwYWdlLCBnZXRfZXh0ZW50LCAmYmlvLCAwLAogCQkJCSAgICAgICZiaW9fZmxhZ3MpOwogCWlmIChiaW8pCi0JCXN1Ym1pdF9vbmVfYmlvKFJFQUQsIGJpbywgMCwgYmlvX2ZsYWdzKTsKKwkJcmV0ID0gc3VibWl0X29uZV9iaW8oUkVBRCwgYmlvLCAwLCBiaW9fZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI4MTksOSArMjgyOCwxNyBAQAogCQkgKiBhdCB0aGlzIHBvaW50IHdlIGNhbiBzYWZlbHkgY2xlYXIgZXZlcnl0aGluZyBleGNlcHQgdGhlCiAJCSAqIGxvY2tlZCBiaXQgYW5kIHRoZSBub2RhdGFzdW0gYml0CiAJCSAqLwotCQljbGVhcl9leHRlbnRfYml0KHRyZWUsIHN0YXJ0LCBlbmQsCisJCXJldCA9IGNsZWFyX2V4dGVudF9iaXQodHJlZSwgc3RhcnQsIGVuZCwKIAkJCQkgfihFWFRFTlRfTE9DS0VEIHwgRVhURU5UX05PREFUQVNVTSksCiAJCQkJIDAsIDAsIE5VTEwsIG1hc2spOworCisJCS8qIGlmIGNsZWFyX2V4dGVudF9iaXQgZmFpbGVkIGZvciBlbm9tZW0gcmVhc29ucywKKwkJICogd2UgY2FuJ3QgYWxsb3cgdGhlIHJlbGVhc2UgdG8gY29udGludWUuCisJCSAqLworCQlpZiAocmV0IDwgMCkKKwkJCXJldCA9IDA7CisJCWVsc2UKKwkJCXJldCA9IDE7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0yOTAxLDYgKzI5MTgsNDYgQEAKIAlyZXR1cm4gc2VjdG9yOwogfQogCisvKgorICogaGVscGVyIGZ1bmN0aW9uIGZvciBmaWVtYXAsIHdoaWNoIGRvZXNuJ3Qgd2FudCB0byBzZWUgYW55IGhvbGVzLgorICogVGhpcyBtYXBzIHVudGlsIHdlIGZpbmQgc29tZXRoaW5nIHBhc3QgJ2xhc3QnCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZXh0ZW50X21hcCAqZ2V0X2V4dGVudF9za2lwX2hvbGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCQl1NjQgb2Zmc2V0LAorCQkJCQkJdTY0IGxhc3QsCisJCQkJCQlnZXRfZXh0ZW50X3QgKmdldF9leHRlbnQpCit7CisJdTY0IHNlY3RvcnNpemUgPSBCVFJGU19JKGlub2RlKS0+cm9vdC0+c2VjdG9yc2l6ZTsKKwlzdHJ1Y3QgZXh0ZW50X21hcCAqZW07CisJdTY0IGxlbjsKKworCWlmIChvZmZzZXQgPj0gbGFzdCkKKwkJcmV0dXJuIE5VTEw7CisKKwl3aGlsZSgxKSB7CisJCWxlbiA9IGxhc3QgLSBvZmZzZXQ7CisJCWlmIChsZW4gPT0gMCkKKwkJCWJyZWFrOworCQlsZW4gPSAobGVuICsgc2VjdG9yc2l6ZSAtIDEpICYgfihzZWN0b3JzaXplIC0gMSk7CisJCWVtID0gZ2V0X2V4dGVudChpbm9kZSwgTlVMTCwgMCwgb2Zmc2V0LCBsZW4sIDApOworCQlpZiAoIWVtIHx8IElTX0VSUihlbSkpCisJCQlyZXR1cm4gZW07CisKKwkJLyogaWYgdGhpcyBpc24ndCBhIGhvbGUgcmV0dXJuIGl0ICovCisJCWlmICghdGVzdF9iaXQoRVhURU5UX0ZMQUdfVkFDQU5DWSwgJmVtLT5mbGFncykgJiYKKwkJICAgIGVtLT5ibG9ja19zdGFydCAhPSBFWFRFTlRfTUFQX0hPTEUpIHsKKwkJCXJldHVybiBlbTsKKwkJfQorCisJCS8qIHRoaXMgaXMgYSBob2xlLCBhZHZhbmNlIHRvIHRoZSBuZXh0IGV4dGVudCAqLworCQlvZmZzZXQgPSBleHRlbnRfbWFwX2VuZChlbSk7CisJCWZyZWVfZXh0ZW50X21hcChlbSk7CisJCWlmIChvZmZzZXQgPj0gbGFzdCkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwogaW50IGV4dGVudF9maWVtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbyAqZmllaW5mbywKIAkJX191NjQgc3RhcnQsIF9fdTY0IGxlbiwgZ2V0X2V4dGVudF90ICpnZXRfZXh0ZW50KQogewpAQCAtMjkxMCwxNiArMjk2NywxOSBAQAogCXUzMiBmbGFncyA9IDA7CiAJdTMyIGZvdW5kX3R5cGU7CiAJdTY0IGxhc3Q7CisJdTY0IGxhc3RfZm9yX2dldF9leHRlbnQgPSAwOwogCXU2NCBkaXNrbyA9IDA7CisJdTY0IGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwogCXN0cnVjdCBidHJmc19rZXkgZm91bmRfa2V5OwogCXN0cnVjdCBleHRlbnRfbWFwICplbSA9IE5VTEw7CiAJc3RydWN0IGV4dGVudF9zdGF0ZSAqY2FjaGVkX3N0YXRlID0gTlVMTDsKIAlzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aDsKIAlzdHJ1Y3QgYnRyZnNfZmlsZV9leHRlbnRfaXRlbSAqaXRlbTsKIAlpbnQgZW5kID0gMDsKLQl1NjQgZW1fc3RhcnQgPSAwLCBlbV9sZW4gPSAwOworCXU2NCBlbV9zdGFydCA9IDA7CisJdTY0IGVtX2xlbiA9IDA7CisJdTY0IGVtX2VuZCA9IDA7CiAJdW5zaWduZWQgbG9uZyBlbWZsYWdzOwotCWludCBob2xlID0gMDsKIAogCWlmIChsZW4gPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yOTI5LDYgKzI5ODksMTAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOwogCisJLyoKKwkgKiBsb29rdXAgdGhlIGxhc3QgZmlsZSBleHRlbnQuICBXZSdyZSBub3QgdXNpbmcgaV9zaXplIGhlcmUKKwkgKiBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIHByZWFsbG9jYXRpb24gcGFzdCBpX3NpemUKKwkgKi8KIAlyZXQgPSBidHJmc19sb29rdXBfZmlsZV9leHRlbnQoTlVMTCwgQlRSRlNfSShpbm9kZSktPnJvb3QsCiAJCQkJICAgICAgIHBhdGgsIGlub2RlLT5pX2lubywgLTEsIDApOwogCWlmIChyZXQgPCAwKSB7CkBAIC0yOTQyLDE4ICszMDA2LDM4IEBACiAJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KHBhdGgtPm5vZGVzWzBdLCAmZm91bmRfa2V5LCBwYXRoLT5zbG90c1swXSk7CiAJZm91bmRfdHlwZSA9IGJ0cmZzX2tleV90eXBlKCZmb3VuZF9rZXkpOwogCi0JLyogTm8gZXh0ZW50cywganVzdCByZXR1cm4gKi8KKwkvKiBObyBleHRlbnRzLCBidXQgdGhlcmUgbWlnaHQgYmUgZGVsYWxsb2MgYml0cyAqLwogCWlmIChmb3VuZF9rZXkub2JqZWN0aWQgIT0gaW5vZGUtPmlfaW5vIHx8CiAJICAgIGZvdW5kX3R5cGUgIT0gQlRSRlNfRVhURU5UX0RBVEFfS0VZKSB7Ci0JCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKLQkJcmV0dXJuIDA7CisJCS8qIGhhdmUgdG8gdHJ1c3QgaV9zaXplIGFzIHRoZSBlbmQgKi8KKwkJbGFzdCA9ICh1NjQpLTE7CisJCWxhc3RfZm9yX2dldF9leHRlbnQgPSBpc2l6ZTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiByZW1lbWJlciB0aGUgc3RhcnQgb2YgdGhlIGxhc3QgZXh0ZW50LiAgVGhlcmUgYXJlIGEKKwkJICogYnVuY2ggb2YgZGlmZmVyZW50IGZhY3RvcnMgdGhhdCBnbyBpbnRvIHRoZSBsZW5ndGggb2YgdGhlCisJCSAqIGV4dGVudCwgc28gaXRzIG11Y2ggbGVzcyBjb21wbGV4IHRvIHJlbWVtYmVyIHdoZXJlIGl0IHN0YXJ0ZWQKKwkJICovCisJCWxhc3QgPSBmb3VuZF9rZXkub2Zmc2V0OworCQlsYXN0X2Zvcl9nZXRfZXh0ZW50ID0gbGFzdCArIDE7CiAJfQotCWxhc3QgPSBmb3VuZF9rZXkub2Zmc2V0OwogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKIAorCS8qCisJICogd2UgbWlnaHQgaGF2ZSBzb21lIGV4dGVudHMgYWxsb2NhdGVkIGJ1dCBtb3JlIGRlbGFsbG9jIHBhc3QgdGhvc2UKKwkgKiBleHRlbnRzLiAgc28sIHdlIHRydXN0IGlzaXplIHVubGVzcyB0aGUgc3RhcnQgb2YgdGhlIGxhc3QgZXh0ZW50IGlzCisJICogYmV5b25kIGlzaXplCisJICovCisJaWYgKGxhc3QgPCBpc2l6ZSkgeworCQlsYXN0ID0gKHU2NCktMTsKKwkJbGFzdF9mb3JfZ2V0X2V4dGVudCA9IGlzaXplOworCX0KKwogCWxvY2tfZXh0ZW50X2JpdHMoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBzdGFydCwgc3RhcnQgKyBsZW4sIDAsCiAJCQkgJmNhY2hlZF9zdGF0ZSwgR0ZQX05PRlMpOwotCWVtID0gZ2V0X2V4dGVudChpbm9kZSwgTlVMTCwgMCwgb2ZmLCBtYXggLSBvZmYsIDApOworCisJZW0gPSBnZXRfZXh0ZW50X3NraXBfaG9sZXMoaW5vZGUsIG9mZiwgbGFzdF9mb3JfZ2V0X2V4dGVudCwKKwkJCQkgICBnZXRfZXh0ZW50KTsKIAlpZiAoIWVtKQogCQlnb3RvIG91dDsKIAlpZiAoSVNfRVJSKGVtKSkgewpAQCAtMjk2MiwxOSArMzA0NiwxNCBAQAogCX0KIAogCXdoaWxlICghZW5kKSB7Ci0JCWhvbGUgPSAwOwotCQlvZmYgPSBlbS0+c3RhcnQgKyBlbS0+bGVuOworCQlvZmYgPSBleHRlbnRfbWFwX2VuZChlbSk7CiAJCWlmIChvZmYgPj0gbWF4KQogCQkJZW5kID0gMTsKIAotCQlpZiAoZW0tPmJsb2NrX3N0YXJ0ID09IEVYVEVOVF9NQVBfSE9MRSkgewotCQkJaG9sZSA9IDE7Ci0JCQlnb3RvIG5leHQ7Ci0JCX0KLQogCQllbV9zdGFydCA9IGVtLT5zdGFydDsKIAkJZW1fbGVuID0gZW0tPmxlbjsKLQorCQllbV9lbmQgPSBleHRlbnRfbWFwX2VuZChlbSk7CisJCWVtZmxhZ3MgPSBlbS0+ZmxhZ3M7CiAJCWRpc2tvID0gMDsKIAkJZmxhZ3MgPSAwOwogCkBAIC0yOTkzLDM3ICszMDcyLDI5IEBACiAJCWlmICh0ZXN0X2JpdChFWFRFTlRfRkxBR19DT01QUkVTU0VELCAmZW0tPmZsYWdzKSkKIAkJCWZsYWdzIHw9IEZJRU1BUF9FWFRFTlRfRU5DT0RFRDsKIAotbmV4dDoKLQkJZW1mbGFncyA9IGVtLT5mbGFnczsKIAkJZnJlZV9leHRlbnRfbWFwKGVtKTsKIAkJZW0gPSBOVUxMOwotCQlpZiAoIWVuZCkgewotCQkJZW0gPSBnZXRfZXh0ZW50KGlub2RlLCBOVUxMLCAwLCBvZmYsIG1heCAtIG9mZiwgMCk7Ci0JCQlpZiAoIWVtKQotCQkJCWdvdG8gb3V0OwotCQkJaWYgKElTX0VSUihlbSkpIHsKLQkJCQlyZXQgPSBQVFJfRVJSKGVtKTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWVtZmxhZ3MgPSBlbS0+ZmxhZ3M7Ci0JCX0KLQotCQlpZiAodGVzdF9iaXQoRVhURU5UX0ZMQUdfVkFDQU5DWSwgJmVtZmxhZ3MpKSB7CisJCWlmICgoZW1fc3RhcnQgPj0gbGFzdCkgfHwgZW1fbGVuID09ICh1NjQpLTEgfHwKKwkJICAgKGxhc3QgPT0gKHU2NCktMSAmJiBpc2l6ZSA8PSBlbV9lbmQpKSB7CiAJCQlmbGFncyB8PSBGSUVNQVBfRVhURU5UX0xBU1Q7CiAJCQllbmQgPSAxOwogCQl9CiAKLQkJaWYgKGVtX3N0YXJ0ID09IGxhc3QpIHsKKwkJLyogbm93IHNjYW4gZm9yd2FyZCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgdGhlIGxhc3QgZXh0ZW50LiAqLworCQllbSA9IGdldF9leHRlbnRfc2tpcF9ob2xlcyhpbm9kZSwgb2ZmLCBsYXN0X2Zvcl9nZXRfZXh0ZW50LAorCQkJCQkgICBnZXRfZXh0ZW50KTsKKwkJaWYgKElTX0VSUihlbSkpIHsKKwkJCXJldCA9IFBUUl9FUlIoZW0pOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKCFlbSkgewogCQkJZmxhZ3MgfD0gRklFTUFQX0VYVEVOVF9MQVNUOwogCQkJZW5kID0gMTsKIAkJfQotCi0JCWlmICghaG9sZSkgewotCQkJcmV0ID0gZmllbWFwX2ZpbGxfbmV4dF9leHRlbnQoZmllaW5mbywgZW1fc3RhcnQsIGRpc2tvLAotCQkJCQkJZW1fbGVuLCBmbGFncyk7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gb3V0X2ZyZWU7Ci0JCX0KKwkJcmV0ID0gZmllbWFwX2ZpbGxfbmV4dF9leHRlbnQoZmllaW5mbywgZW1fc3RhcnQsIGRpc2tvLAorCQkJCQkgICAgICBlbV9sZW4sIGZsYWdzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2ZyZWU7CiAJfQogb3V0X2ZyZWU6CiAJZnJlZV9leHRlbnRfbWFwKGVtKTsKQEAgLTMxOTIsNyArMzI2MywxMyBAQAogCQl9CiAJCWlmICghUGFnZVVwdG9kYXRlKHApKQogCQkJdXB0b2RhdGUgPSAwOwotCQl1bmxvY2tfcGFnZShwKTsKKworCQkvKgorCQkgKiBzZWUgYmVsb3cgYWJvdXQgaG93IHdlIGF2b2lkIGEgbmFzdHkgcmFjZSB3aXRoIHJlbGVhc2UgcGFnZQorCQkgKiBhbmQgd2h5IHdlIHVubG9jayBsYXRlcgorCQkgKi8KKwkJaWYgKGkgIT0gMCkKKwkJCXVubG9ja19wYWdlKHApOwogCX0KIAlpZiAodXB0b2RhdGUpCiAJCXNldF9iaXQoRVhURU5UX0JVRkZFUl9VUFRPREFURSwgJmViLT5iZmxhZ3MpOwpAQCAtMzIxNiw5ICszMjkzLDI2IEBACiAJYXRvbWljX2luYygmZWItPnJlZnMpOwogCXNwaW5fdW5sb2NrKCZ0cmVlLT5idWZmZXJfbG9jayk7CiAJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOworCisJLyoKKwkgKiB0aGVyZSBpcyBhIHJhY2Ugd2hlcmUgcmVsZWFzZSBwYWdlIG1heSBoYXZlCisJICogdHJpZWQgdG8gZmluZCB0aGlzIGV4dGVudCBidWZmZXIgaW4gdGhlIHJhZGl4CisJICogYnV0IGZhaWxlZC4gIEl0IHdpbGwgdGVsbCB0aGUgVk0gaXQgaXMgc2FmZSB0bworCSAqIHJlY2xhaW0gdGhlLCBhbmQgaXQgd2lsbCBjbGVhciB0aGUgcGFnZSBwcml2YXRlIGJpdC4KKwkgKiBXZSBtdXN0IG1ha2Ugc3VyZSB0byBzZXQgdGhlIHBhZ2UgcHJpdmF0ZSBiaXQgcHJvcGVybHkKKwkgKiBhZnRlciB0aGUgZXh0ZW50IGJ1ZmZlciBpcyBpbiB0aGUgcmFkaXggdHJlZSBzbworCSAqIGl0IGRvZXNuJ3QgZ2V0IGxvc3QKKwkgKi8KKwlzZXRfcGFnZV9leHRlbnRfbWFwcGVkKGViLT5maXJzdF9wYWdlKTsKKwlzZXRfcGFnZV9leHRlbnRfaGVhZChlYi0+Zmlyc3RfcGFnZSwgZWItPmxlbik7CisJaWYgKCFwYWdlMCkKKwkJdW5sb2NrX3BhZ2UoZWItPmZpcnN0X3BhZ2UpOwogCXJldHVybiBlYjsKIAogZnJlZV9lYjoKKwlpZiAoZWItPmZpcnN0X3BhZ2UgJiYgIXBhZ2UwKQorCQl1bmxvY2tfcGFnZShlYi0+Zmlyc3RfcGFnZSk7CisKIAlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJmViLT5yZWZzKSkKIAkJcmV0dXJuIGV4aXN0czsKIAlidHJmc19yZWxlYXNlX2V4dGVudF9idWZmZXIoZWIpOwpAQCAtMzI2OSwxMCArMzM2MywxMSBAQAogCQkJY29udGludWU7CiAKIAkJbG9ja19wYWdlKHBhZ2UpOworCQlXQVJOX09OKCFQYWdlUHJpdmF0ZShwYWdlKSk7CisKKwkJc2V0X3BhZ2VfZXh0ZW50X21hcHBlZChwYWdlKTsKIAkJaWYgKGkgPT0gMCkKIAkJCXNldF9wYWdlX2V4dGVudF9oZWFkKHBhZ2UsIGViLT5sZW4pOwotCQllbHNlCi0JCQlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIEVYVEVOVF9QQUdFX1BSSVZBVEUpOwogCiAJCWNsZWFyX3BhZ2VfZGlydHlfZm9yX2lvKHBhZ2UpOwogCQlzcGluX2xvY2tfaXJxKCZwYWdlLT5tYXBwaW5nLT50cmVlX2xvY2spOwpAQCAtMzQ2Miw2ICszNTU3LDEzIEBACiAKIAlmb3IgKGkgPSBzdGFydF9pOyBpIDwgbnVtX3BhZ2VzOyBpKyspIHsKIAkJcGFnZSA9IGV4dGVudF9idWZmZXJfcGFnZShlYiwgaSk7CisKKwkJV0FSTl9PTighUGFnZVByaXZhdGUocGFnZSkpOworCisJCXNldF9wYWdlX2V4dGVudF9tYXBwZWQocGFnZSk7CisJCWlmIChpID09IDApCisJCQlzZXRfcGFnZV9leHRlbnRfaGVhZChwYWdlLCBlYi0+bGVuKTsKKwogCQlpZiAoaW5jX2FsbF9wYWdlcykKIAkJCXBhZ2VfY2FjaGVfZ2V0KHBhZ2UpOwogCQlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkgewpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X2lvLmggYi9mcy9idHJmcy9leHRlbnRfaW8uaAppbmRleCA3MDgzY2ZhLi45MzE4ZGZlIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfaW8uaAorKysgYi9mcy9idHJmcy9leHRlbnRfaW8uaApAQCAtMTkxLDcgKzE5MSw3IEBACiAKIHU2NCBjb3VudF9yYW5nZV9iaXRzKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKIAkJICAgICB1NjQgKnN0YXJ0LCB1NjQgc2VhcmNoX2VuZCwKLQkJICAgICB1NjQgbWF4X2J5dGVzLCB1bnNpZ25lZCBsb25nIGJpdHMpOworCQkgICAgIHU2NCBtYXhfYnl0ZXMsIHVuc2lnbmVkIGxvbmcgYml0cywgaW50IGNvbnRpZyk7CiAKIHZvaWQgZnJlZV9leHRlbnRfc3RhdGUoc3RydWN0IGV4dGVudF9zdGF0ZSAqc3RhdGUpOwogaW50IHRlc3RfcmFuZ2VfYml0KHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X21hcC5jIGIvZnMvYnRyZnMvZXh0ZW50X21hcC5jCmluZGV4IGIwZTFmY2UuLjJiNmMxMmUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudF9tYXAuYworKysgYi9mcy9idHJmcy9leHRlbnRfbWFwLmMKQEAgLTUxLDggKzUxLDggQEAKIHsKIAlzdHJ1Y3QgZXh0ZW50X21hcCAqZW07CiAJZW0gPSBrbWVtX2NhY2hlX2FsbG9jKGV4dGVudF9tYXBfY2FjaGUsIG1hc2spOwotCWlmICghZW0gfHwgSVNfRVJSKGVtKSkKLQkJcmV0dXJuIGVtOworCWlmICghZW0pCisJCXJldHVybiBOVUxMOwogCWVtLT5pbl90cmVlID0gMDsKIAllbS0+ZmxhZ3MgPSAwOwogCWVtLT5jb21wcmVzc190eXBlID0gQlRSRlNfQ09NUFJFU1NfTk9ORTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZpbGUtaXRlbS5jIGIvZnMvYnRyZnMvZmlsZS1pdGVtLmMKaW5kZXggYTU2MmEyNS4uNGYxOWEzZSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZmlsZS1pdGVtLmMKKysrIGIvZnMvYnRyZnMvZmlsZS1pdGVtLmMKQEAgLTUzNiw2ICs1MzYsOCBAQAogCXJvb3QgPSByb290LT5mc19pbmZvLT5jc3VtX3Jvb3Q7CiAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAl3aGlsZSAoMSkgewogCQlrZXkub2JqZWN0aWQgPSBCVFJGU19FWFRFTlRfQ1NVTV9PQkpFQ1RJRDsKQEAgLTU0OCw3ICs1NTAsMTAgQEAKIAkJCWlmIChwYXRoLT5zbG90c1swXSA9PSAwKQogCQkJCWdvdG8gb3V0OwogCQkJcGF0aC0+c2xvdHNbMF0tLTsKKwkJfSBlbHNlIGlmIChyZXQgPCAwKSB7CisJCQlnb3RvIG91dDsKIAkJfQorCiAJCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKIAkJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KGxlYWYsICZrZXksIHBhdGgtPnNsb3RzWzBdKTsKIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZmlsZS5jIGIvZnMvYnRyZnMvZmlsZS5jCmluZGV4IGM4MDBkNTguLjcwODQxNDAgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZpbGUuYworKysgYi9mcy9idHJmcy9maWxlLmMKQEAgLTE4Niw2ICsxODYsNyBAQAogCQkJc3BsaXQgPSBhbGxvY19leHRlbnRfbWFwKEdGUF9OT0ZTKTsKIAkJaWYgKCFzcGxpdDIpCiAJCQlzcGxpdDIgPSBhbGxvY19leHRlbnRfbWFwKEdGUF9OT0ZTKTsKKwkJQlVHX09OKCFzcGxpdCB8fCAhc3BsaXQyKTsKIAogCQl3cml0ZV9sb2NrKCZlbV90cmVlLT5sb2NrKTsKIAkJZW0gPSBsb29rdXBfZXh0ZW50X21hcHBpbmcoZW1fdHJlZSwgc3RhcnQsIGxlbik7CkBAIC03OTMsOCArNzk0LDEyIEBACiAJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKSB7CiAJCXBhZ2VzW2ldID0gZ3JhYl9jYWNoZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGluZGV4ICsgaSk7CiAJCWlmICghcGFnZXNbaV0pIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlCVUdfT04oMSk7CisJCQlpbnQgYzsKKwkJCWZvciAoYyA9IGkgLSAxOyBjID49IDA7IGMtLSkgeworCQkJCXVubG9ja19wYWdlKHBhZ2VzW2NdKTsKKwkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZXNbY10pOworCQkJfQorCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJd2FpdF9vbl9wYWdlX3dyaXRlYmFjayhwYWdlc1tpXSk7CiAJfQpAQCAtOTQ2LDYgKzk1MSwxMCBAQAogCQkgICAgIFBBR0VfQ0FDSEVfU0laRSwgUEFHRV9DQUNIRV9TSVpFIC8KIAkJICAgICAoc2l6ZW9mKHN0cnVjdCBwYWdlICopKSk7CiAJcGFnZXMgPSBrbWFsbG9jKG5ycHRycyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYWdlcykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAKIAkvKiBnZW5lcmljX3dyaXRlX2NoZWNrcyBjYW4gY2hhbmdlIG91ciBwb3MgKi8KIAlzdGFydF9wb3MgPSBwb3M7CkBAIC05ODQsOCArOTkzLDggQEAKIAkJc2l6ZV90IHdyaXRlX2J5dGVzID0gbWluKGlvdl9pdGVyX2NvdW50KCZpKSwKIAkJCQkJIG5ycHRycyAqIChzaXplX3QpUEFHRV9DQUNIRV9TSVpFIC0KIAkJCQkJIG9mZnNldCk7Ci0JCXNpemVfdCBudW1fcGFnZXMgPSAod3JpdGVfYnl0ZXMgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PgotCQkJCQlQQUdFX0NBQ0hFX1NISUZUOworCQlzaXplX3QgbnVtX3BhZ2VzID0gKHdyaXRlX2J5dGVzICsgb2Zmc2V0ICsKKwkJCQkgICAgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAogCQlXQVJOX09OKG51bV9wYWdlcyA+IG5ycHRycyk7CiAJCW1lbXNldChwYWdlcywgMCwgc2l6ZW9mKHN0cnVjdCBwYWdlICopICogbnJwdHJzKTsKQEAgLTEwMTUsOCArMTAyNCw4IEBACiAKIAkJY29waWVkID0gYnRyZnNfY29weV9mcm9tX3VzZXIocG9zLCBudW1fcGFnZXMsCiAJCQkJCSAgIHdyaXRlX2J5dGVzLCBwYWdlcywgJmkpOwotCQlkaXJ0eV9wYWdlcyA9IChjb3BpZWQgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PgotCQkJCQlQQUdFX0NBQ0hFX1NISUZUOworCQlkaXJ0eV9wYWdlcyA9IChjb3BpZWQgKyBvZmZzZXQgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PgorCQkJCVBBR0VfQ0FDSEVfU0hJRlQ7CiAKIAkJaWYgKG51bV9wYWdlcyA+IGRpcnR5X3BhZ2VzKSB7CiAJCQlpZiAoY29waWVkID4gMCkKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYyBiL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYwppbmRleCA2MGQ2ODQyLi5hMDM5MDY1IDEwMDY0NAotLS0gYS9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKKysrIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCkBAIC05ODcsMTEgKzk4NywxOCBAQAogCXJldHVybiBlbnRyeTsKIH0KIAotc3RhdGljIHZvaWQgdW5saW5rX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKLQkJCSAgICAgIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvKQorc3RhdGljIGlubGluZSB2b2lkCitfX3VubGlua19mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCSAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbykKIHsKIAlyYl9lcmFzZSgmaW5mby0+b2Zmc2V0X2luZGV4LCAmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2Vfb2Zmc2V0KTsKIAlibG9ja19ncm91cC0+ZnJlZV9leHRlbnRzLS07Cit9CisKK3N0YXRpYyB2b2lkIHVubGlua19mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQkgICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbykKK3sKKwlfX3VubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBpbmZvKTsKIAlibG9ja19ncm91cC0+ZnJlZV9zcGFjZSAtPSBpbmZvLT5ieXRlczsKIH0KIApAQCAtMTAxNiwxNCArMTAyMywxOCBAQAogCXU2NCBtYXhfYnl0ZXM7CiAJdTY0IGJpdG1hcF9ieXRlczsKIAl1NjQgZXh0ZW50X2J5dGVzOworCXU2NCBzaXplID0gYmxvY2tfZ3JvdXAtPmtleS5vZmZzZXQ7CiAKIAkvKgogCSAqIFRoZSBnb2FsIGlzIHRvIGtlZXAgdGhlIHRvdGFsIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBwZXIgMWdiIG9mIHNwYWNlCiAJICogYXQgb3IgYmVsb3cgMzJrLCBzbyB3ZSBuZWVkIHRvIGFkanVzdCBob3cgbXVjaCBtZW1vcnkgd2UgYWxsb3cgdG8gYmUKIAkgKiB1c2VkIGJ5IGV4dGVudCBiYXNlZCBmcmVlIHNwYWNlIHRyYWNraW5nCiAJICovCi0JbWF4X2J5dGVzID0gTUFYX0NBQ0hFX0JZVEVTX1BFUl9HSUcgKgotCQkoZGl2NjRfdTY0KGJsb2NrX2dyb3VwLT5rZXkub2Zmc2V0LCAxMDI0ICogMTAyNCAqIDEwMjQpKTsKKwlpZiAoc2l6ZSA8IDEwMjQgKiAxMDI0ICogMTAyNCkKKwkJbWF4X2J5dGVzID0gTUFYX0NBQ0hFX0JZVEVTX1BFUl9HSUc7CisJZWxzZQorCQltYXhfYnl0ZXMgPSBNQVhfQ0FDSEVfQllURVNfUEVSX0dJRyAqCisJCQlkaXY2NF91NjQoc2l6ZSwgMTAyNCAqIDEwMjQgKiAxMDI0KTsKIAogCS8qCiAJICogd2Ugd2FudCB0byBhY2NvdW50IGZvciAxIG1vcmUgYml0bWFwIHRoYW4gd2hhdCB3ZSBoYXZlIHNvIHdlIGNhbiBtYWtlCkBAIC0xMTcxLDYgKzExODIsMTYgQEAKIAlyZWNhbGN1bGF0ZV90aHJlc2hvbGRzKGJsb2NrX2dyb3VwKTsKIH0KIAorc3RhdGljIHZvaWQgZnJlZV9iaXRtYXAoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpiaXRtYXBfaW5mbykKK3sKKwl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgYml0bWFwX2luZm8pOworCWtmcmVlKGJpdG1hcF9pbmZvLT5iaXRtYXApOworCWtmcmVlKGJpdG1hcF9pbmZvKTsKKwlibG9ja19ncm91cC0+dG90YWxfYml0bWFwcy0tOworCXJlY2FsY3VsYXRlX3RocmVzaG9sZHMoYmxvY2tfZ3JvdXApOworfQorCiBzdGF0aWMgbm9pbmxpbmUgaW50IHJlbW92ZV9mcm9tX2JpdG1hcChzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAogCQkJICAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmJpdG1hcF9pbmZvLAogCQkJICAgICAgdTY0ICpvZmZzZXQsIHU2NCAqYnl0ZXMpCkBAIC0xMTk1LDYgKzEyMTYsNyBAQAogCSAqLwogCXNlYXJjaF9zdGFydCA9ICpvZmZzZXQ7CiAJc2VhcmNoX2J5dGVzID0gKmJ5dGVzOworCXNlYXJjaF9ieXRlcyA9IG1pbihzZWFyY2hfYnl0ZXMsIGVuZCAtIHNlYXJjaF9zdGFydCArIDEpOwogCXJldCA9IHNlYXJjaF9iaXRtYXAoYmxvY2tfZ3JvdXAsIGJpdG1hcF9pbmZvLCAmc2VhcmNoX3N0YXJ0LAogCQkJICAgICZzZWFyY2hfYnl0ZXMpOwogCUJVR19PTihyZXQgPCAwIHx8IHNlYXJjaF9zdGFydCAhPSAqb2Zmc2V0KTsKQEAgLTEyMTEsMTMgKzEyMzMsOCBAQAogCiAJaWYgKCpieXRlcykgewogCQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX25leHQoJmJpdG1hcF9pbmZvLT5vZmZzZXRfaW5kZXgpOwotCQlpZiAoIWJpdG1hcF9pbmZvLT5ieXRlcykgewotCQkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGJpdG1hcF9pbmZvKTsKLQkJCWtmcmVlKGJpdG1hcF9pbmZvLT5iaXRtYXApOwotCQkJa2ZyZWUoYml0bWFwX2luZm8pOwotCQkJYmxvY2tfZ3JvdXAtPnRvdGFsX2JpdG1hcHMtLTsKLQkJCXJlY2FsY3VsYXRlX3RocmVzaG9sZHMoYmxvY2tfZ3JvdXApOwotCQl9CisJCWlmICghYml0bWFwX2luZm8tPmJ5dGVzKQorCQkJZnJlZV9iaXRtYXAoYmxvY2tfZ3JvdXAsIGJpdG1hcF9pbmZvKTsKIAogCQkvKgogCQkgKiBubyBlbnRyeSBhZnRlciB0aGlzIGJpdG1hcCwgYnV0IHdlIHN0aWxsIGhhdmUgYnl0ZXMgdG8KQEAgLTEyNTAsMTMgKzEyNjcsOCBAQAogCQkJcmV0dXJuIC1FQUdBSU47CiAKIAkJZ290byBhZ2FpbjsKLQl9IGVsc2UgaWYgKCFiaXRtYXBfaW5mby0+Ynl0ZXMpIHsKLQkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGJpdG1hcF9pbmZvKTsKLQkJa2ZyZWUoYml0bWFwX2luZm8tPmJpdG1hcCk7Ci0JCWtmcmVlKGJpdG1hcF9pbmZvKTsKLQkJYmxvY2tfZ3JvdXAtPnRvdGFsX2JpdG1hcHMtLTsKLQkJcmVjYWxjdWxhdGVfdGhyZXNob2xkcyhibG9ja19ncm91cCk7Ci0JfQorCX0gZWxzZSBpZiAoIWJpdG1hcF9pbmZvLT5ieXRlcykKKwkJZnJlZV9iaXRtYXAoYmxvY2tfZ3JvdXAsIGJpdG1hcF9pbmZvKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM1OSwyMiArMTM3MSwxNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBidHJmc19hZGRfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJIHU2NCBvZmZzZXQsIHU2NCBieXRlcykKK2Jvb2wgdHJ5X21lcmdlX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSAgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmluZm8sIGJvb2wgdXBkYXRlX3N0YXQpCiB7Ci0Jc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKnJpZ2h0X2luZm8gPSBOVUxMOwotCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpsZWZ0X2luZm8gPSBOVUxMOwotCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvID0gTlVMTDsKLQlpbnQgcmV0ID0gMDsKLQotCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSksIEdGUF9OT0ZTKTsKLQlpZiAoIWluZm8pCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaW5mby0+b2Zmc2V0ID0gb2Zmc2V0OwotCWluZm8tPmJ5dGVzID0gYnl0ZXM7Ci0KLQlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOworCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpsZWZ0X2luZm87CisJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKnJpZ2h0X2luZm87CisJYm9vbCBtZXJnZWQgPSBmYWxzZTsKKwl1NjQgb2Zmc2V0ID0gaW5mby0+b2Zmc2V0OworCXU2NCBieXRlcyA9IGluZm8tPmJ5dGVzOwogCiAJLyoKIAkgKiBmaXJzdCB3ZSB3YW50IHRvIHNlZSBpZiB0aGVyZSBpcyBmcmVlIHNwYWNlIGFkamFjZW50IHRvIHRoZSByYW5nZSB3ZQpAQCAtMTM4OCwzNyArMTM5Miw2MiBAQAogCWVsc2UKIAkJbGVmdF9pbmZvID0gdHJlZV9zZWFyY2hfb2Zmc2V0KGJsb2NrX2dyb3VwLCBvZmZzZXQgLSAxLCAwLCAwKTsKIAotCS8qCi0JICogSWYgdGhlcmUgd2FzIG5vIGV4dGVudCBkaXJlY3RseSB0byB0aGUgbGVmdCBvciByaWdodCBvZiB0aGlzIG5ldwotCSAqIGV4dGVudCB0aGVuIHdlIGtub3cgd2UncmUgZ29pbmcgdG8gaGF2ZSB0byBhbGxvY2F0ZSBhIG5ldyBleHRlbnQsIHNvCi0JICogYmVmb3JlIHdlIGRvIHRoYXQgc2VlIGlmIHdlIG5lZWQgdG8gZHJvcCB0aGlzIGludG8gYSBiaXRtYXAKLQkgKi8KLQlpZiAoKCFsZWZ0X2luZm8gfHwgbGVmdF9pbmZvLT5iaXRtYXApICYmCi0JICAgICghcmlnaHRfaW5mbyB8fCByaWdodF9pbmZvLT5iaXRtYXApKSB7Ci0JCXJldCA9IGluc2VydF9pbnRvX2JpdG1hcChibG9ja19ncm91cCwgaW5mbyk7Ci0KLQkJaWYgKHJldCA8IDApIHsKLQkJCWdvdG8gb3V0OwotCQl9IGVsc2UgaWYgKHJldCkgewotCQkJcmV0ID0gMDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCiAJaWYgKHJpZ2h0X2luZm8gJiYgIXJpZ2h0X2luZm8tPmJpdG1hcCkgewotCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgcmlnaHRfaW5mbyk7CisJCWlmICh1cGRhdGVfc3RhdCkKKwkJCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCByaWdodF9pbmZvKTsKKwkJZWxzZQorCQkJX191bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgcmlnaHRfaW5mbyk7CiAJCWluZm8tPmJ5dGVzICs9IHJpZ2h0X2luZm8tPmJ5dGVzOwogCQlrZnJlZShyaWdodF9pbmZvKTsKKwkJbWVyZ2VkID0gdHJ1ZTsKIAl9CiAKIAlpZiAobGVmdF9pbmZvICYmICFsZWZ0X2luZm8tPmJpdG1hcCAmJgogCSAgICBsZWZ0X2luZm8tPm9mZnNldCArIGxlZnRfaW5mby0+Ynl0ZXMgPT0gb2Zmc2V0KSB7Ci0JCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBsZWZ0X2luZm8pOworCQlpZiAodXBkYXRlX3N0YXQpCisJCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgbGVmdF9pbmZvKTsKKwkJZWxzZQorCQkJX191bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgbGVmdF9pbmZvKTsKIAkJaW5mby0+b2Zmc2V0ID0gbGVmdF9pbmZvLT5vZmZzZXQ7CiAJCWluZm8tPmJ5dGVzICs9IGxlZnRfaW5mby0+Ynl0ZXM7CiAJCWtmcmVlKGxlZnRfaW5mbyk7CisJCW1lcmdlZCA9IHRydWU7CiAJfQogCisJcmV0dXJuIG1lcmdlZDsKK30KKworaW50IGJ0cmZzX2FkZF9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQkgdTY0IG9mZnNldCwgdTY0IGJ5dGVzKQoreworCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvOworCWludCByZXQgPSAwOworCisJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBidHJmc19mcmVlX3NwYWNlKSwgR0ZQX05PRlMpOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbmZvLT5vZmZzZXQgPSBvZmZzZXQ7CisJaW5mby0+Ynl0ZXMgPSBieXRlczsKKworCXNwaW5fbG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CisKKwlpZiAodHJ5X21lcmdlX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGluZm8sIHRydWUpKQorCQlnb3RvIGxpbms7CisKKwkvKgorCSAqIFRoZXJlIHdhcyBubyBleHRlbnQgZGlyZWN0bHkgdG8gdGhlIGxlZnQgb3IgcmlnaHQgb2YgdGhpcyBuZXcKKwkgKiBleHRlbnQgdGhlbiB3ZSBrbm93IHdlJ3JlIGdvaW5nIHRvIGhhdmUgdG8gYWxsb2NhdGUgYSBuZXcgZXh0ZW50LCBzbworCSAqIGJlZm9yZSB3ZSBkbyB0aGF0IHNlZSBpZiB3ZSBuZWVkIHRvIGRyb3AgdGhpcyBpbnRvIGEgYml0bWFwCisJICovCisJcmV0ID0gaW5zZXJ0X2ludG9fYml0bWFwKGJsb2NrX2dyb3VwLCBpbmZvKTsKKwlpZiAocmV0IDwgMCkgeworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKHJldCkgeworCQlyZXQgPSAwOworCQlnb3RvIG91dDsKKwl9CitsaW5rOgogCXJldCA9IGxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgaW5mbyk7CiAJaWYgKHJldCkKIAkJa2ZyZWUoaW5mbyk7CkBAIC0xNjIxLDYgKzE2NTAsNyBAQAogCQlub2RlID0gcmJfbmV4dCgmZW50cnktPm9mZnNldF9pbmRleCk7CiAJCXJiX2VyYXNlKCZlbnRyeS0+b2Zmc2V0X2luZGV4LCAmY2x1c3Rlci0+cm9vdCk7CiAJCUJVR19PTihlbnRyeS0+Yml0bWFwKTsKKwkJdHJ5X21lcmdlX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGVudHJ5LCBmYWxzZSk7CiAJCXRyZWVfaW5zZXJ0X29mZnNldCgmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2Vfb2Zmc2V0LAogCQkJCSAgIGVudHJ5LT5vZmZzZXQsICZlbnRyeS0+b2Zmc2V0X2luZGV4LCAwKTsKIAl9CkBAIC0xNjg1LDEzICsxNzE1LDggQEAKIAlyZXQgPSBvZmZzZXQ7CiAJaWYgKGVudHJ5LT5iaXRtYXApIHsKIAkJYml0bWFwX2NsZWFyX2JpdHMoYmxvY2tfZ3JvdXAsIGVudHJ5LCBvZmZzZXQsIGJ5dGVzKTsKLQkJaWYgKCFlbnRyeS0+Ynl0ZXMpIHsKLQkJCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBlbnRyeSk7Ci0JCQlrZnJlZShlbnRyeS0+Yml0bWFwKTsKLQkJCWtmcmVlKGVudHJ5KTsKLQkJCWJsb2NrX2dyb3VwLT50b3RhbF9iaXRtYXBzLS07Ci0JCQlyZWNhbGN1bGF0ZV90aHJlc2hvbGRzKGJsb2NrX2dyb3VwKTsKLQkJfQorCQlpZiAoIWVudHJ5LT5ieXRlcykKKwkJCWZyZWVfYml0bWFwKGJsb2NrX2dyb3VwLCBlbnRyeSk7CiAJfSBlbHNlIHsKIAkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGVudHJ5KTsKIAkJZW50cnktPm9mZnNldCArPSBieXRlczsKQEAgLTE3ODksNiArMTgxNCw4IEBACiAKIAlyZXQgPSBzZWFyY2hfc3RhcnQ7CiAJYml0bWFwX2NsZWFyX2JpdHMoYmxvY2tfZ3JvdXAsIGVudHJ5LCByZXQsIGJ5dGVzKTsKKwlpZiAoZW50cnktPmJ5dGVzID09IDApCisJCWZyZWVfYml0bWFwKGJsb2NrX2dyb3VwLCBlbnRyeSk7CiBvdXQ6CiAJc3Bpbl91bmxvY2soJmNsdXN0ZXItPmxvY2spOwogCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKQEAgLTE4NDIsMTUgKzE4NjksMjYgQEAKIAkJZW50cnktPm9mZnNldCArPSBieXRlczsKIAkJZW50cnktPmJ5dGVzIC09IGJ5dGVzOwogCi0JCWlmIChlbnRyeS0+Ynl0ZXMgPT0gMCkgeworCQlpZiAoZW50cnktPmJ5dGVzID09IDApCiAJCQlyYl9lcmFzZSgmZW50cnktPm9mZnNldF9pbmRleCwgJmNsdXN0ZXItPnJvb3QpOwotCQkJa2ZyZWUoZW50cnkpOwotCQl9CiAJCWJyZWFrOwogCX0KIG91dDoKIAlzcGluX3VubG9jaygmY2x1c3Rlci0+bG9jayk7CiAKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOworCisJYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2UgLT0gYnl0ZXM7CisJaWYgKGVudHJ5LT5ieXRlcyA9PSAwKSB7CisJCWJsb2NrX2dyb3VwLT5mcmVlX2V4dGVudHMtLTsKKwkJa2ZyZWUoZW50cnkpOworCX0KKworCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKKwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lub2RlLmMgYi9mcy9idHJmcy9pbm9kZS5jCmluZGV4IDE2MGI1NWIuLjBlZmRiNjUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lub2RlLmMKKysrIGIvZnMvYnRyZnMvaW5vZGUuYwpAQCAtNDE2LDcgKzQxNiw3IEBACiAJfQogCWlmIChzdGFydCA9PSAwKSB7CiAJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKLQkJQlVHX09OKCF0cmFucyk7CisJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAkJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJCXRyYW5zLT5ibG9ja19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYmxvY2tfcnN2OwogCkBAIC02MTIsNiArNjEyLDcgQEAKIAkJCSAgICBHRlBfTk9GUyk7CiAKIAkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCXJldCA9IGJ0cmZzX3Jlc2VydmVfZXh0ZW50KHRyYW5zLCByb290LAogCQkJCQkgICBhc3luY19leHRlbnQtPmNvbXByZXNzZWRfc2l6ZSwKIAkJCQkJICAgYXN5bmNfZXh0ZW50LT5jb21wcmVzc2VkX3NpemUsCkBAIC02NDMsNiArNjQ0LDcgQEAKIAkJCQkJYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsIDApOwogCiAJCWVtID0gYWxsb2NfZXh0ZW50X21hcChHRlBfTk9GUyk7CisJCUJVR19PTighZW0pOwogCQllbS0+c3RhcnQgPSBhc3luY19leHRlbnQtPnN0YXJ0OwogCQllbS0+bGVuID0gYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZTsKIAkJZW0tPm9yaWdfc3RhcnQgPSBlbS0+c3RhcnQ7CkBAIC03NzEsNyArNzczLDcgQEAKIAogCUJVR19PTihyb290ID09IHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdCk7CiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwotCUJVR19PTighdHJhbnMpOworCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIApAQCAtODE5LDYgKzgyMSw3IEBACiAJCUJVR19PTihyZXQpOwogCiAJCWVtID0gYWxsb2NfZXh0ZW50X21hcChHRlBfTk9GUyk7CisJCUJVR19PTighZW0pOwogCQllbS0+c3RhcnQgPSBzdGFydDsKIAkJZW0tPm9yaWdfc3RhcnQgPSBlbS0+c3RhcnQ7CiAJCXJhbV9zaXplID0gaW5zLm9mZnNldDsKQEAgLTEwNDksNyArMTA1Miw3IEBACiAJfSBlbHNlIHsKIAkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwogCX0KLQlCVUdfT04oIXRyYW5zKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAKIAljb3dfc3RhcnQgPSAodTY0KS0xOwogCWN1cl9vZmZzZXQgPSBzdGFydDsKQEAgLTExNjgsNiArMTE3MSw3IEBACiAJCQlzdHJ1Y3QgZXh0ZW50X21hcF90cmVlICplbV90cmVlOwogCQkJZW1fdHJlZSA9ICZCVFJGU19JKGlub2RlKS0+ZXh0ZW50X3RyZWU7CiAJCQllbSA9IGFsbG9jX2V4dGVudF9tYXAoR0ZQX05PRlMpOworCQkJQlVHX09OKCFlbSk7CiAJCQllbS0+c3RhcnQgPSBjdXJfb2Zmc2V0OwogCQkJZW0tPm9yaWdfc3RhcnQgPSBlbS0+c3RhcnQ7CiAJCQllbS0+bGVuID0gbnVtX2J5dGVzOwpAQCAtMTU1Nyw2ICsxNTYxLDcgQEAKIG91dF9wYWdlOgogCXVubG9ja19wYWdlKHBhZ2UpOwogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwlrZnJlZShmaXh1cCk7CiB9CiAKIC8qCkBAIC0xNzAzLDcgKzE3MDgsNyBAQAogCQkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbl9ub2xvY2socm9vdCwgMSk7CiAJCQllbHNlCiAJCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwotCQkJQlVHX09OKCF0cmFucyk7CisJCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAkJCXRyYW5zLT5ibG9ja19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYmxvY2tfcnN2OwogCQkJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CkBAIC0xNzIwLDYgKzE3MjUsNyBAQAogCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb25fbm9sb2NrKHJvb3QsIDEpOwogCWVsc2UKIAkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIApAQCAtMTkwNyw3ICsxOTEzLDcgQEAKIAogCXByaXZhdGUgPSAwOwogCWlmIChjb3VudF9yYW5nZV9iaXRzKCZCVFJGU19JKGlub2RlKS0+aW9fZmFpbHVyZV90cmVlLCAmcHJpdmF0ZSwKLQkJCSAgICAgKHU2NCktMSwgMSwgRVhURU5UX0RJUlRZKSkgeworCQkJICAgICAodTY0KS0xLCAxLCBFWFRFTlRfRElSVFksIDApKSB7CiAJCXJldCA9IGdldF9zdGF0ZV9wcml2YXRlKCZCVFJGU19JKGlub2RlKS0+aW9fZmFpbHVyZV90cmVlLAogCQkJCQlzdGFydCwgJnByaXZhdGVfZmFpbHVyZSk7CiAJCWlmIChyZXQgPT0gMCkgewpAQCAtMjM1NCw2ICsyMzYwLDcgQEAKIAkJICovCiAJCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKSB7CiAJCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCQkJQlVHX09OKElTX0VSUih0cmFucykpOwogCQkJYnRyZnNfb3JwaGFuX2RlbCh0cmFucywgaW5vZGUpOwogCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCWlwdXQoaW5vZGUpOwpAQCAtMjM4MSw2ICsyMzg4LDcgQEAKIAogCWlmIChyb290LT5vcnBoYW5fYmxvY2tfcnN2IHx8IHJvb3QtPm9ycGhhbl9pdGVtX2luc2VydGVkKSB7CiAJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJQlVHX09OKElTX0VSUih0cmFucykpOwogCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCX0KIApAQCAtMjY0MSw3ICsyNjQ5LDcgQEAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwogCWlmICghcGF0aCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjsKKwkJZ290byBvdXQ7CiAJfQogCiAJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOwpAQCAtMjcxNCw5ICsyNzIyLDEwIEBACiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmViOwogCWludCBsZXZlbDsKIAl1NjQgcmVmcyA9IDE7Ci0JaW50IHVuaW5pdGlhbGl6ZWRfdmFyKHJldCk7CiAKIAlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPCBCVFJGU19NQVhfTEVWRUw7IGxldmVsKyspIHsKKwkJaW50IHJldDsKKwogCQlpZiAoIXBhdGgtPm5vZGVzW2xldmVsXSkKIAkJCWJyZWFrOwogCQllYiA9IHBhdGgtPm5vZGVzW2xldmVsXTsKQEAgLTI3MjcsNyArMjczNiw3IEBACiAJCWlmIChyZWZzID4gMSkKIAkJCXJldHVybiAxOwogCX0KLQlyZXR1cm4gcmV0OyAvKiBYWFggY2FsbGVycz8gKi8KKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTQxMzQsNyArNDE0Myw3IEBACiAJfQogCXNyY3VfcmVhZF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnN1YnZvbF9zcmN1LCBpbmRleCk7CiAKLQlpZiAocm9vdCAhPSBzdWJfcm9vdCkgeworCWlmICghSVNfRVJSKGlub2RlKSAmJiByb290ICE9IHN1Yl9yb290KSB7CiAJCWRvd25fcmVhZCgmcm9vdC0+ZnNfaW5mby0+Y2xlYW51cF93b3JrX3NlbSk7CiAJCWlmICghKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkKIAkJCWJ0cmZzX29ycGhhbl9jbGVhbnVwKHN1Yl9yb290KTsKQEAgLTQzNDcsNiArNDM1Niw4IEBACiAJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb25fbm9sb2NrKHJvb3QsIDEpOwogCQllbHNlCiAJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCWlmIChJU19FUlIodHJhbnMpKQorCQkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAkJaWYgKG5vbG9jaykKIAkJCXJldCA9IGJ0cmZzX2VuZF90cmFuc2FjdGlvbl9ub2xvY2sodHJhbnMsIHJvb3QpOwpAQCAtNDM3Miw2ICs0MzgzLDcgQEAKIAkJcmV0dXJuOwogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAogCXJldCA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwpAQCAtNTE3Niw2ICs1MTg4LDggQEAKIAkJCQllbSA9IE5VTEw7CiAJCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCQkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJCQlpZiAoSVNfRVJSKHRyYW5zKSkKKwkJCQkJcmV0dXJuIEVSUl9DQVNUKHRyYW5zKTsKIAkJCQlnb3RvIGFnYWluOwogCQkJfQogCQkJbWFwID0ga21hcChwYWdlKTsKQEAgLTUyNjYsNiArNTI4MCwxMjggQEAKIAlyZXR1cm4gZW07CiB9CiAKK3N0cnVjdCBleHRlbnRfbWFwICpidHJmc19nZXRfZXh0ZW50X2ZpZW1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJICAgc2l6ZV90IHBnX29mZnNldCwgdTY0IHN0YXJ0LCB1NjQgbGVuLAorCQkJCQkgICBpbnQgY3JlYXRlKQoreworCXN0cnVjdCBleHRlbnRfbWFwICplbTsKKwlzdHJ1Y3QgZXh0ZW50X21hcCAqaG9sZV9lbSA9IE5VTEw7CisJdTY0IHJhbmdlX3N0YXJ0ID0gc3RhcnQ7CisJdTY0IGVuZDsKKwl1NjQgZm91bmQ7CisJdTY0IGZvdW5kX2VuZDsKKwlpbnQgZXJyID0gMDsKKworCWVtID0gYnRyZnNfZ2V0X2V4dGVudChpbm9kZSwgcGFnZSwgcGdfb2Zmc2V0LCBzdGFydCwgbGVuLCBjcmVhdGUpOworCWlmIChJU19FUlIoZW0pKQorCQlyZXR1cm4gZW07CisJaWYgKGVtKSB7CisJCS8qCisJCSAqIGlmIG91ciBlbSBtYXBzIHRvIGEgaG9sZSwgdGhlcmUgbWlnaHQKKwkJICogYWN0dWFsbHkgYmUgZGVsYWxsb2MgYnl0ZXMgYmVoaW5kIGl0CisJCSAqLworCQlpZiAoZW0tPmJsb2NrX3N0YXJ0ICE9IEVYVEVOVF9NQVBfSE9MRSkKKwkJCXJldHVybiBlbTsKKwkJZWxzZQorCQkJaG9sZV9lbSA9IGVtOworCX0KKworCS8qIGNoZWNrIHRvIHNlZSBpZiB3ZSd2ZSB3cmFwcGVkIChsZW4gPT0gLTEgb3Igc2ltaWxhcikgKi8KKwllbmQgPSBzdGFydCArIGxlbjsKKwlpZiAoZW5kIDwgc3RhcnQpCisJCWVuZCA9ICh1NjQpLTE7CisJZWxzZQorCQllbmQgLT0gMTsKKworCWVtID0gTlVMTDsKKworCS8qIG9rLCB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZywgbGV0cyBsb29rIGZvciBkZWxhbGxvYyAqLworCWZvdW5kID0gY291bnRfcmFuZ2VfYml0cygmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsICZyYW5nZV9zdGFydCwKKwkJCQkgZW5kLCBsZW4sIEVYVEVOVF9ERUxBTExPQywgMSk7CisJZm91bmRfZW5kID0gcmFuZ2Vfc3RhcnQgKyBmb3VuZDsKKwlpZiAoZm91bmRfZW5kIDwgcmFuZ2Vfc3RhcnQpCisJCWZvdW5kX2VuZCA9ICh1NjQpLTE7CisKKwkvKgorCSAqIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nIHVzZWZ1bCwgcmV0dXJuCisJICogdGhlIG9yaWdpbmFsIHJlc3VsdHMgZnJvbSBnZXRfZXh0ZW50KCkKKwkgKi8KKwlpZiAocmFuZ2Vfc3RhcnQgPiBlbmQgfHwgZm91bmRfZW5kIDw9IHN0YXJ0KSB7CisJCWVtID0gaG9sZV9lbTsKKwkJaG9sZV9lbSA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGFkanVzdCB0aGUgcmFuZ2Vfc3RhcnQgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QKKwkgKiBnbyBiYWNrd2FyZHMgZnJvbSB0aGUgc3RhcnQgdGhleSBwYXNzZWQgaW4KKwkgKi8KKwlyYW5nZV9zdGFydCA9IG1heChzdGFydCxyYW5nZV9zdGFydCk7CisJZm91bmQgPSBmb3VuZF9lbmQgLSByYW5nZV9zdGFydDsKKworCWlmIChmb3VuZCA+IDApIHsKKwkJdTY0IGhvbGVfc3RhcnQgPSBzdGFydDsKKwkJdTY0IGhvbGVfbGVuID0gbGVuOworCisJCWVtID0gYWxsb2NfZXh0ZW50X21hcChHRlBfTk9GUyk7CisJCWlmICghZW0pIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCQkvKgorCQkgKiB3aGVuIGJ0cmZzX2dldF9leHRlbnQgY2FuJ3QgZmluZCBhbnl0aGluZyBpdAorCQkgKiByZXR1cm5zIG9uZSBodWdlIGhvbGUKKwkJICoKKwkJICogbWFrZSBzdXJlIHdoYXQgaXQgZm91bmQgcmVhbGx5IGZpdHMgb3VyIHJhbmdlLCBhbmQKKwkJICogYWRqdXN0IHRvIG1ha2Ugc3VyZSBpdCBpcyBiYXNlZCBvbiB0aGUgc3RhcnQgZnJvbQorCQkgKiB0aGUgY2FsbGVyCisJCSAqLworCQlpZiAoaG9sZV9lbSkgeworCQkJdTY0IGNhbGNfZW5kID0gZXh0ZW50X21hcF9lbmQoaG9sZV9lbSk7CisKKwkJCWlmIChjYWxjX2VuZCA8PSBzdGFydCB8fCAoaG9sZV9lbS0+c3RhcnQgPiBlbmQpKSB7CisJCQkJZnJlZV9leHRlbnRfbWFwKGhvbGVfZW0pOworCQkJCWhvbGVfZW0gPSBOVUxMOworCQkJfSBlbHNlIHsKKwkJCQlob2xlX3N0YXJ0ID0gbWF4KGhvbGVfZW0tPnN0YXJ0LCBzdGFydCk7CisJCQkJaG9sZV9sZW4gPSBjYWxjX2VuZCAtIGhvbGVfc3RhcnQ7CisJCQl9CisJCX0KKwkJZW0tPmJkZXYgPSBOVUxMOworCQlpZiAoaG9sZV9lbSAmJiByYW5nZV9zdGFydCA+IGhvbGVfc3RhcnQpIHsKKwkJCS8qIG91ciBob2xlIHN0YXJ0cyBiZWZvcmUgb3VyIGRlbGFsbG9jLCBzbyB3ZQorCQkJICogaGF2ZSB0byByZXR1cm4ganVzdCB0aGUgcGFydHMgb2YgdGhlIGhvbGUKKwkJCSAqIHRoYXQgZ28gdW50aWwgIHRoZSBkZWxhbGxvYyBzdGFydHMKKwkJCSAqLworCQkJZW0tPmxlbiA9IG1pbihob2xlX2xlbiwKKwkJCQkgICAgICByYW5nZV9zdGFydCAtIGhvbGVfc3RhcnQpOworCQkJZW0tPnN0YXJ0ID0gaG9sZV9zdGFydDsKKwkJCWVtLT5vcmlnX3N0YXJ0ID0gaG9sZV9zdGFydDsKKwkJCS8qCisJCQkgKiBkb24ndCBhZGp1c3QgYmxvY2sgc3RhcnQgYXQgYWxsLAorCQkJICogaXQgaXMgZml4ZWQgYXQgRVhURU5UX01BUF9IT0xFCisJCQkgKi8KKwkJCWVtLT5ibG9ja19zdGFydCA9IGhvbGVfZW0tPmJsb2NrX3N0YXJ0OworCQkJZW0tPmJsb2NrX2xlbiA9IGhvbGVfbGVuOworCQl9IGVsc2UgeworCQkJZW0tPnN0YXJ0ID0gcmFuZ2Vfc3RhcnQ7CisJCQllbS0+bGVuID0gZm91bmQ7CisJCQllbS0+b3JpZ19zdGFydCA9IHJhbmdlX3N0YXJ0OworCQkJZW0tPmJsb2NrX3N0YXJ0ID0gRVhURU5UX01BUF9ERUxBTExPQzsKKwkJCWVtLT5ibG9ja19sZW4gPSBmb3VuZDsKKwkJfQorCX0gZWxzZSBpZiAoaG9sZV9lbSkgeworCQlyZXR1cm4gaG9sZV9lbTsKKwl9CitvdXQ6CisKKwlmcmVlX2V4dGVudF9tYXAoaG9sZV9lbSk7CisJaWYgKGVycikgeworCQlmcmVlX2V4dGVudF9tYXAoZW0pOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKwlyZXR1cm4gZW07Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZXh0ZW50X21hcCAqYnRyZnNfbmV3X2V4dGVudF9kaXJlY3Qoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJCSAgdTY0IHN0YXJ0LCB1NjQgbGVuKQogewpAQCAtNTI4MCw4ICs1NDE2LDggQEAKIAlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgc3RhcnQsIHN0YXJ0ICsgbGVuIC0gMSwgMCk7CiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMCk7Ci0JaWYgKCF0cmFucykKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJaWYgKElTX0VSUih0cmFucykpCisJCXJldHVybiBFUlJfQ0FTVCh0cmFucyk7CiAKIAl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIApAQCAtNTUwNSw3ICs1NjQxLDcgQEAKIAkJICogd2hpbGUgd2UgbG9vayBmb3Igbm9jb3cgY3Jvc3MgcmVmcwogCQkgKi8KIAkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDApOwotCQlpZiAoIXRyYW5zKQorCQlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJCWdvdG8gbXVzdF9jb3c7CiAKIAkJaWYgKGNhbl9ub2Nvd19vZGlyZWN0KHRyYW5zLCBpbm9kZSwgc3RhcnQsIGxlbikgPT0gMSkgewpAQCAtNTY0MCw3ICs1Nzc2LDcgQEAKIAlCVUdfT04oIW9yZGVyZWQpOwogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwotCWlmICghdHJhbnMpIHsKKwlpZiAoSVNfRVJSKHRyYW5zKSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CkBAIC02MDg4LDcgKzYyMjQsNyBAQAogc3RhdGljIGludCBidHJmc19maWVtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbyAqZmllaW5mbywKIAkJX191NjQgc3RhcnQsIF9fdTY0IGxlbikKIHsKLQlyZXR1cm4gZXh0ZW50X2ZpZW1hcChpbm9kZSwgZmllaW5mbywgc3RhcnQsIGxlbiwgYnRyZnNfZ2V0X2V4dGVudCk7CisJcmV0dXJuIGV4dGVudF9maWVtYXAoaW5vZGUsIGZpZWluZm8sIHN0YXJ0LCBsZW4sIGJ0cmZzX2dldF9leHRlbnRfZmllbWFwKTsKIH0KIAogaW50IGJ0cmZzX3JlYWRwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lvY3RsLmMgYi9mcy9idHJmcy9pb2N0bC5jCmluZGV4IGE1MDZhMjIuLjVmZGIyYWIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lvY3RsLmMKKysrIGIvZnMvYnRyZnMvaW9jdGwuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAKIAogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKLQlCVUdfT04oIXRyYW5zKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAKIAlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKIAlCVUdfT04ocmV0KTsKQEAgLTkwNyw2ICs5MDcsMTAgQEAKIAogCWlmIChuZXdfc2l6ZSA+IG9sZF9zaXplKSB7CiAJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJCWlmIChJU19FUlIodHJhbnMpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHRyYW5zKTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQogCQlyZXQgPSBidHJmc19ncm93X2RldmljZSh0cmFucywgZGV2aWNlLCBuZXdfc2l6ZSk7CiAJCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJfSBlbHNlIHsKQEAgLTEwNjcsMTIgKzEwNzEsMTUgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmZsYWdzLCBhcmcsIHNpemVvZihmbGFncykpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChmbGFncyAmIH5CVFJGU19TVUJWT0xfQ1JFQVRFX0FTWU5DKQorCWlmIChmbGFncyAmIEJUUkZTX1NVQlZPTF9DUkVBVEVfQVNZTkMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGZsYWdzICYgfkJUUkZTX1NVQlZPTF9SRE9OTFkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAorCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKIAlkb3duX3dyaXRlKCZyb290LT5mc19pbmZvLT5zdWJ2b2xfc2VtKTsKIAogCS8qIG5vdGhpbmcgdG8gZG8gKi8KQEAgLTEwOTMsNyArMTEwMCw3IEBACiAJCWdvdG8gb3V0X3Jlc2V0OwogCX0KIAotCXJldCA9IGJ0cmZzX3VwZGF0ZV9yb290KHRyYW5zLCByb290LAorCXJldCA9IGJ0cmZzX3VwZGF0ZV9yb290KHRyYW5zLCByb290LT5mc19pbmZvLT50cmVlX3Jvb3QsCiAJCQkJJnJvb3QtPnJvb3Rfa2V5LCAmcm9vdC0+cm9vdF9pdGVtKTsKIAogCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CkBAIC0xODk4LDcgKzE5MDUsMTAgQEAKIAogCQkJbWVtY3B5KCZuZXdfa2V5LCAma2V5LCBzaXplb2YobmV3X2tleSkpOwogCQkJbmV3X2tleS5vYmplY3RpZCA9IGlub2RlLT5pX2lubzsKLQkJCW5ld19rZXkub2Zmc2V0ID0ga2V5Lm9mZnNldCArIGRlc3RvZmYgLSBvZmY7CisJCQlpZiAob2ZmIDw9IGtleS5vZmZzZXQpCisJCQkJbmV3X2tleS5vZmZzZXQgPSBrZXkub2Zmc2V0ICsgZGVzdG9mZiAtIG9mZjsKKwkJCWVsc2UKKwkJCQluZXdfa2V5Lm9mZnNldCA9IGRlc3RvZmY7CiAKIAkJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CiAJCQlpZiAoSVNfRVJSKHRyYW5zKSkgewpAQCAtMjA4Miw3ICsyMDkyLDcgQEAKIAogCXJldCA9IC1FTk9NRU07CiAJdHJhbnMgPSBidHJmc19zdGFydF9pb2N0bF90cmFuc2FjdGlvbihyb290LCAwKTsKLQlpZiAoIXRyYW5zKQorCWlmIChJU19FUlIodHJhbnMpKQogCQlnb3RvIG91dF9kcm9wOwogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdHJhbnM7CkBAIC0yMTM4LDkgKzIxNDgsOSBAQAogCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JaWYgKCF0cmFucykgeworCWlmIChJU19FUlIodHJhbnMpKSB7CiAJCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIAl9CiAKIAlkaXJfaWQgPSBidHJmc19zdXBlcl9yb290X2Rpcigmcm9vdC0+ZnNfaW5mby0+c3VwZXJfY29weSk7CkBAIC0yMjAxLDcgKzIyMTEsNyBAQAogCWludCBudW1fdHlwZXMgPSA0OwogCWludCBhbGxvY19zaXplOwogCWludCByZXQgPSAwOwotCWludCBzbG90X2NvdW50ID0gMDsKKwl1NjQgc2xvdF9jb3VudCA9IDA7CiAJaW50IGksIGM7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnNwYWNlX2FyZ3MsCkBAIC0yMjQwLDcgKzIyNTAsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlzbG90X2NvdW50ID0gbWluX3QoaW50LCBzcGFjZV9hcmdzLnNwYWNlX3Nsb3RzLCBzbG90X2NvdW50KTsKKwlzbG90X2NvdW50ID0gbWluX3QodTY0LCBzcGFjZV9hcmdzLnNwYWNlX3Nsb3RzLCBzbG90X2NvdW50KTsKIAogCWFsbG9jX3NpemUgPSBzaXplb2YoKmRlc3QpICogc2xvdF9jb3VudDsKIApAQCAtMjI2MCw2ICsyMjcwLDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3R5cGVzOyBpKyspIHsKIAkJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKnRtcDsKIAorCQlpZiAoIXNsb3RfY291bnQpCisJCQlicmVhazsKKwogCQlpbmZvID0gTlVMTDsKIAkJcmN1X3JlYWRfbG9jaygpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXAsICZyb290LT5mc19pbmZvLT5zcGFjZV9pbmZvLApAQCAtMjI4MSw3ICsyMjk0LDEwIEBACiAJCQkJbWVtY3B5KGRlc3QsICZzcGFjZSwgc2l6ZW9mKHNwYWNlKSk7CiAJCQkJZGVzdCsrOwogCQkJCXNwYWNlX2FyZ3MudG90YWxfc3BhY2VzKys7CisJCQkJc2xvdF9jb3VudC0tOwogCQkJfQorCQkJaWYgKCFzbG90X2NvdW50KQorCQkJCWJyZWFrOwogCQl9CiAJCXVwX3JlYWQoJmluZm8tPmdyb3Vwc19zZW0pOwogCX0KQEAgLTIzMzQsNiArMjM1MCw4IEBACiAJdTY0IHRyYW5zaWQ7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCWlmIChJU19FUlIodHJhbnMpKQorCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAJdHJhbnNpZCA9IHRyYW5zLT50cmFuc2lkOwogCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbl9hc3luYyh0cmFucywgcm9vdCwgMCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2x6by5jIGIvZnMvYnRyZnMvbHpvLmMKaW5kZXggY2M5YjQ1MC4uYTE3OGY1ZSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvbHpvLmMKKysrIGIvZnMvYnRyZnMvbHpvLmMKQEAgLTI4MCw2ICsyODAsNyBAQAogCXVuc2lnbmVkIGxvbmcgdG90X291dDsKIAl1bnNpZ25lZCBsb25nIHRvdF9sZW47CiAJY2hhciAqYnVmOworCWJvb2wgbWF5X2xhdGVfdW5tYXAsIG5lZWRfdW5tYXA7CiAKIAlkYXRhX2luID0ga21hcChwYWdlc19pblswXSk7CiAJdG90X2xlbiA9IHJlYWRfY29tcHJlc3NfbGVuZ3RoKGRhdGFfaW4pOwpAQCAtMzAwLDExICszMDEsMTMgQEAKIAogCQl0b3RfaW4gKz0gaW5fbGVuOwogCQl3b3JraW5nX2J5dGVzID0gaW5fbGVuOworCQltYXlfbGF0ZV91bm1hcCA9IG5lZWRfdW5tYXAgPSBmYWxzZTsKIAogCQkvKiBmYXN0IHBhdGg6IGF2b2lkIHVzaW5nIHRoZSB3b3JraW5nIGJ1ZmZlciAqLwogCQlpZiAoaW5fcGFnZV9ieXRlc19sZWZ0ID49IGluX2xlbikgewogCQkJYnVmID0gZGF0YV9pbiArIGluX29mZnNldDsKIAkJCWJ5dGVzID0gaW5fbGVuOworCQkJbWF5X2xhdGVfdW5tYXAgPSB0cnVlOwogCQkJZ290byBjb250OwogCQl9CiAKQEAgLTMyOSwxNCArMzMyLDE3IEBACiAJCQkJaWYgKHdvcmtpbmdfYnl0ZXMgPT0gMCAmJiB0b3RfaW4gPj0gdG90X2xlbikKIAkJCQkJYnJlYWs7CiAKLQkJCQlrdW5tYXAocGFnZXNfaW5bcGFnZV9pbl9pbmRleF0pOwotCQkJCXBhZ2VfaW5faW5kZXgrKzsKLQkJCQlpZiAocGFnZV9pbl9pbmRleCA+PSB0b3RhbF9wYWdlc19pbikgeworCQkJCWlmIChwYWdlX2luX2luZGV4ICsgMSA+PSB0b3RhbF9wYWdlc19pbikgewogCQkJCQlyZXQgPSAtMTsKLQkJCQkJZGF0YV9pbiA9IE5VTEw7CiAJCQkJCWdvdG8gZG9uZTsKIAkJCQl9Ci0JCQkJZGF0YV9pbiA9IGttYXAocGFnZXNfaW5bcGFnZV9pbl9pbmRleF0pOworCisJCQkJaWYgKG1heV9sYXRlX3VubWFwKQorCQkJCQluZWVkX3VubWFwID0gdHJ1ZTsKKwkJCQllbHNlCisJCQkJCWt1bm1hcChwYWdlc19pbltwYWdlX2luX2luZGV4XSk7CisKKwkJCQlkYXRhX2luID0ga21hcChwYWdlc19pblsrK3BhZ2VfaW5faW5kZXhdKTsKIAogCQkJCWluX3BhZ2VfYnl0ZXNfbGVmdCA9IFBBR0VfQ0FDSEVfU0laRTsKIAkJCQlpbl9vZmZzZXQgPSAwOwpAQCAtMzQ2LDYgKzM1Miw4IEBACiAJCW91dF9sZW4gPSBsem8xeF93b3JzdF9jb21wcmVzcyhQQUdFX0NBQ0hFX1NJWkUpOwogCQlyZXQgPSBsem8xeF9kZWNvbXByZXNzX3NhZmUoYnVmLCBpbl9sZW4sIHdvcmtzcGFjZS0+YnVmLAogCQkJCQkgICAgJm91dF9sZW4pOworCQlpZiAobmVlZF91bm1hcCkKKwkJCWt1bm1hcChwYWdlc19pbltwYWdlX2luX2luZGV4IC0gMV0pOwogCQlpZiAocmV0ICE9IExaT19FX09LKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHJmcyBkZWNvbXByZXNzIGZhaWxlZFxuIik7CiAJCQlyZXQgPSAtMTsKQEAgLTM2Myw4ICszNzEsNyBAQAogCQkJYnJlYWs7CiAJfQogZG9uZToKLQlpZiAoZGF0YV9pbikKLQkJa3VubWFwKHBhZ2VzX2luW3BhZ2VfaW5faW5kZXhdKTsKKwlrdW5tYXAocGFnZXNfaW5bcGFnZV9pbl9pbmRleF0pOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jIGIvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmMKaW5kZXggMmI2MWUxZC4uMDgzYTU1NCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmMKKysrIGIvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCQkJCQkgIHU2NCBmaWxlX29mZnNldCkKIHsKIAlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZ0cmVlLT50cmVlOwotCXN0cnVjdCByYl9ub2RlICpwcmV2OworCXN0cnVjdCByYl9ub2RlICpwcmV2ID0gTlVMTDsKIAlzdHJ1Y3QgcmJfbm9kZSAqcmV0OwogCXN0cnVjdCBidHJmc19vcmRlcmVkX2V4dGVudCAqZW50cnk7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3ByaW50LXRyZWUuYyBiL2ZzL2J0cmZzL3ByaW50LXRyZWUuYwppbmRleCAwZDEyNmJlLi5mYjI2MDVkIDEwMDY0NAotLS0gYS9mcy9idHJmcy9wcmludC10cmVlLmMKKysrIGIvZnMvYnRyZnMvcHJpbnQtdHJlZS5jCkBAIC0yNjAsNiArMjYwLDcgQEAKICNlbHNlCiAJCQlCVUcoKTsKICNlbmRpZgorCQkJYnJlYWs7CiAJCWNhc2UgQlRSRlNfQkxPQ0tfR1JPVVBfSVRFTV9LRVk6CiAJCQliaSA9IGJ0cmZzX2l0ZW1fcHRyKGwsIGksCiAJCQkJCSAgICBzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfaXRlbSk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9yZWxvY2F0aW9uLmMgYi9mcy9idHJmcy9yZWxvY2F0aW9uLmMKaW5kZXggMDQ1YzljMi4uMzFhZGU1OCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3JlbG9jYXRpb24uYwpAQCAtMTE1Nyw2ICsxMTU3LDcgQEAKIAluZXdfbm9kZS0+Ynl0ZW5yID0gZGVzdC0+bm9kZS0+c3RhcnQ7CiAJbmV3X25vZGUtPmxldmVsID0gbm9kZS0+bGV2ZWw7CiAJbmV3X25vZGUtPmxvd2VzdCA9IG5vZGUtPmxvd2VzdDsKKwluZXdfbm9kZS0+Y2hlY2tlZCA9IDE7CiAJbmV3X25vZGUtPnJvb3QgPSBkZXN0OwogCiAJaWYgKCFub2RlLT5sb3dlc3QpIHsKQEAgLTIwMjgsNiArMjAyOSw3IEBACiAKIAl3aGlsZSAoMSkgewogCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCXRyYW5zLT5ibG9ja19yc3YgPSByYy0+YmxvY2tfcnN2OwogCiAJCXJldCA9IGJ0cmZzX2Jsb2NrX3Jzdl9jaGVjayh0cmFucywgcm9vdCwgcmMtPmJsb2NrX3JzdiwKQEAgLTIxNDcsNiArMjE0OSwxMiBAQAogCX0KIAogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QsIDEpOworCWlmIChJU19FUlIodHJhbnMpKSB7CisJCWlmICghZXJyKQorCQkJYnRyZnNfYmxvY2tfcnN2X3JlbGVhc2UocmMtPmV4dGVudF9yb290LAorCQkJCQkJcmMtPmJsb2NrX3JzdiwgbnVtX2J5dGVzKTsKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOworCX0KIAogCWlmICghZXJyKSB7CiAJCWlmIChudW1fYnl0ZXMgIT0gcmMtPm1lcmdpbmdfcnN2X3NpemUpIHsKQEAgLTMyMjIsNiArMzIzMCw3IEBACiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDApOwogCWlmIChJU19FUlIodHJhbnMpKSB7CiAJCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwkJcmV0ID0gUFRSX0VSUih0cmFucyk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMzYyOCw2ICszNjM3LDcgQEAKIAlzZXRfcmVsb2NfY29udHJvbChyYyk7CiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocmMtPmV4dGVudF9yb290LCAxKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByYy0+ZXh0ZW50X3Jvb3QpOwogCXJldHVybiAwOwogfQpAQCAtMzY0NCw2ICszNjU0LDcgQEAKIAl1MzIgaXRlbV9zaXplOwogCWludCByZXQ7CiAJaW50IGVyciA9IDA7CisJaW50IHByb2dyZXNzID0gMDsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CiAJaWYgKCFwYXRoKQpAQCAtMzY1Niw4ICszNjY3LDEwIEBACiAJfQogCiAJd2hpbGUgKDEpIHsKKwkJcHJvZ3Jlc3MrKzsKIAkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QsIDApOwotCisJCUJVR19PTihJU19FUlIodHJhbnMpKTsKK3Jlc3RhcnQ6CiAJCWlmICh1cGRhdGVfYmFja3JlZl9jYWNoZSh0cmFucywgJnJjLT5iYWNrcmVmX2NhY2hlKSkgewogCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByYy0+ZXh0ZW50X3Jvb3QpOwogCQkJY29udGludWU7CkBAIC0zNzcwLDYgKzM3ODMsMTUgQEAKIAkJCX0KIAkJfQogCX0KKwlpZiAodHJhbnMgJiYgcHJvZ3Jlc3MgJiYgZXJyID09IC1FTk9TUEMpIHsKKwkJcmV0ID0gYnRyZnNfZm9yY2VfY2h1bmtfYWxsb2ModHJhbnMsIHJjLT5leHRlbnRfcm9vdCwKKwkJCQkJICAgICAgcmMtPmJsb2NrX2dyb3VwLT5mbGFncyk7CisJCWlmIChyZXQgPT0gMCkgeworCQkJZXJyID0gMDsKKwkJCXByb2dyZXNzID0gMDsKKwkJCWdvdG8gcmVzdGFydDsKKwkJfQorCX0KIAogCWJ0cmZzX3JlbGVhc2VfcGF0aChyYy0+ZXh0ZW50X3Jvb3QsIHBhdGgpOwogCWNsZWFyX2V4dGVudF9iaXRzKCZyYy0+cHJvY2Vzc2VkX2Jsb2NrcywgMCwgKHU2NCktMSwgRVhURU5UX0RJUlRZLApAQCAtMzgwNCw3ICszODI2LDEwIEBACiAKIAkvKiBnZXQgcmlkIG9mIHBpbm5lZCBleHRlbnRzICovCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMSk7Ci0JYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByYy0+ZXh0ZW50X3Jvb3QpOworCWlmIChJU19FUlIodHJhbnMpKQorCQllcnIgPSBQVFJfRVJSKHRyYW5zKTsKKwllbHNlCisJCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcmMtPmV4dGVudF9yb290KTsKIG91dF9mcmVlOgogCWJ0cmZzX2ZyZWVfYmxvY2tfcnN2KHJjLT5leHRlbnRfcm9vdCwgcmMtPmJsb2NrX3Jzdik7CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwpAQCAtNDAyMiw2ICs0MDQ3LDcgQEAKIAlpbnQgcmV0OwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LT5mc19pbmZvLT50cmVlX3Jvb3QsIDApOworCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAogCW1lbXNldCgmcm9vdC0+cm9vdF9pdGVtLmRyb3BfcHJvZ3Jlc3MsIDAsCiAJCXNpemVvZihyb290LT5yb290X2l0ZW0uZHJvcF9wcm9ncmVzcykpOwpAQCAtNDEyNSw2ICs0MTUxLDExIEBACiAJc2V0X3JlbG9jX2NvbnRyb2wocmMpOwogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMSk7CisJaWYgKElTX0VSUih0cmFucykpIHsKKwkJdW5zZXRfcmVsb2NfY29udHJvbChyYyk7CisJCWVyciA9IFBUUl9FUlIodHJhbnMpOworCQlnb3RvIG91dF9mcmVlOworCX0KIAogCXJjLT5tZXJnZV9yZWxvY190cmVlID0gMTsKIApAQCAtNDE1NCw5ICs0MTg1LDEzIEBACiAJdW5zZXRfcmVsb2NfY29udHJvbChyYyk7CiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocmMtPmV4dGVudF9yb290LCAxKTsKLQlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJjLT5leHRlbnRfcm9vdCk7Ci1vdXQ6CisJaWYgKElTX0VSUih0cmFucykpCisJCWVyciA9IFBUUl9FUlIodHJhbnMpOworCWVsc2UKKwkJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByYy0+ZXh0ZW50X3Jvb3QpOworb3V0X2ZyZWU6CiAJa2ZyZWUocmMpOworb3V0OgogCXdoaWxlICghbGlzdF9lbXB0eSgmcmVsb2Nfcm9vdHMpKSB7CiAJCXJlbG9jX3Jvb3QgPSBsaXN0X2VudHJ5KHJlbG9jX3Jvb3RzLm5leHQsCiAJCQkJCXN0cnVjdCBidHJmc19yb290LCByb290X2xpc3QpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvc3VwZXIuYyBiL2ZzL2J0cmZzL3N1cGVyLmMKaW5kZXggYjIxMzBjNC4uZDM5YTk4OSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvc3VwZXIuYworKysgYi9mcy9idHJmcy9zdXBlci5jCkBAIC0xNTUsNyArMTU1LDggQEAKIAlPcHRfbm9zc2QsIE9wdF9zc2Rfc3ByZWFkLCBPcHRfdGhyZWFkX3Bvb2wsIE9wdF9ub2FjbCwgT3B0X2NvbXByZXNzLAogCU9wdF9jb21wcmVzc190eXBlLCBPcHRfY29tcHJlc3NfZm9yY2UsIE9wdF9jb21wcmVzc19mb3JjZV90eXBlLAogCU9wdF9ub3RyZWVsb2csIE9wdF9yYXRpbywgT3B0X2ZsdXNob25jb21taXQsIE9wdF9kaXNjYXJkLAotCU9wdF9zcGFjZV9jYWNoZSwgT3B0X2NsZWFyX2NhY2hlLCBPcHRfdXNlcl9zdWJ2b2xfcm1fYWxsb3dlZCwgT3B0X2VyciwKKwlPcHRfc3BhY2VfY2FjaGUsIE9wdF9jbGVhcl9jYWNoZSwgT3B0X3VzZXJfc3Vidm9sX3JtX2FsbG93ZWQsCisJT3B0X2Vub3NwY19kZWJ1ZywgT3B0X2VyciwKIH07CiAKIHN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKQEAgLTE4NCw2ICsxODUsNyBAQAogCXtPcHRfc3BhY2VfY2FjaGUsICJzcGFjZV9jYWNoZSJ9LAogCXtPcHRfY2xlYXJfY2FjaGUsICJjbGVhcl9jYWNoZSJ9LAogCXtPcHRfdXNlcl9zdWJ2b2xfcm1fYWxsb3dlZCwgInVzZXJfc3Vidm9sX3JtX2FsbG93ZWQifSwKKwl7T3B0X2Vub3NwY19kZWJ1ZywgImVub3NwY19kZWJ1ZyJ9LAogCXtPcHRfZXJyLCBOVUxMfSwKIH07CiAKQEAgLTM1OCw2ICszNjAsOSBAQAogCQljYXNlIE9wdF91c2VyX3N1YnZvbF9ybV9hbGxvd2VkOgogCQkJYnRyZnNfc2V0X29wdChpbmZvLT5tb3VudF9vcHQsIFVTRVJfU1VCVk9MX1JNX0FMTE9XRUQpOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2Vub3NwY19kZWJ1ZzoKKwkJCWJ0cmZzX3NldF9vcHQoaW5mby0+bW91bnRfb3B0LCBFTk9TUENfREVCVUcpOworCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2VycjoKIAkJCXByaW50ayhLRVJOX0lORk8gImJ0cmZzOiB1bnJlY29nbml6ZWQgbW91bnQgb3B0aW9uICIKIAkJCSAgICAgICAiJyVzJ1xuIiwgcCk7CkBAIC0zODMsNyArMzg4LDcgQEAKIAkJc3RydWN0IGJ0cmZzX2ZzX2RldmljZXMgKipmc19kZXZpY2VzKQogewogCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKLQljaGFyICpvcHRzLCAqcDsKKwljaGFyICpvcHRzLCAqb3JpZywgKnA7CiAJaW50IGVycm9yID0gMDsKIAlpbnQgaW50YXJnOwogCkBAIC0zOTcsNiArNDAyLDcgQEAKIAlvcHRzID0ga3N0cmR1cChvcHRpb25zLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW9wdHMpCiAJCXJldHVybiAtRU5PTUVNOworCW9yaWcgPSBvcHRzOwogCiAJd2hpbGUgKChwID0gc3Ryc2VwKCZvcHRzLCAiLCIpKSAhPSBOVUxMKSB7CiAJCWludCB0b2tlbjsKQEAgLTQzMiw3ICs0MzgsNyBAQAogCX0KIAogIG91dF9mcmVlX29wdHM6Ci0Ja2ZyZWUob3B0cyk7CisJa2ZyZWUob3JpZyk7CiAgb3V0OgogCS8qCiAJICogSWYgbm8gc3Vidm9sdW1lIG5hbWUgaXMgc3BlY2lmaWVkIHdlIHVzZSB0aGUgZGVmYXVsdCBvbmUuICBBbGxvY2F0ZQpAQCAtNjIzLDYgKzYyOSw4IEBACiAJYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMocm9vdCwgMCwgMCk7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCWlmIChJU19FUlIodHJhbnMpKQorCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzYxLDYgKzc2OSw4IEBACiAJCX0KIAogCQlidHJmc19jbG9zZV9kZXZpY2VzKGZzX2RldmljZXMpOworCQlrZnJlZShmc19pbmZvKTsKKwkJa2ZyZWUodHJlZV9yb290KTsKIAl9IGVsc2UgewogCQljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5jCmluZGV4IGJhZTVjN2IuLjNkNzNjOGQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwpAQCAtMTE2MSw2ICsxMTYxLDExIEBACiAJSU5JVF9ERUxBWUVEX1dPUksoJmFjLT53b3JrLCBkb19hc3luY19jb21taXQpOwogCWFjLT5yb290ID0gcm9vdDsKIAlhYy0+bmV3dHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDApOworCWlmIChJU19FUlIoYWMtPm5ld3RyYW5zKSkgeworCQlpbnQgZXJyID0gUFRSX0VSUihhYy0+bmV3dHJhbnMpOworCQlrZnJlZShhYyk7CisJCXJldHVybiBlcnI7CisJfQogCiAJLyogdGFrZSB0cmFuc2FjdGlvbiByZWZlcmVuY2UgKi8KIAltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmVlLWxvZy5jIGIvZnMvYnRyZnMvdHJlZS1sb2cuYwppbmRleCAwNTQ3NDRhLi5hNGJiYjg1IDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmVlLWxvZy5jCisrKyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmMKQEAgLTMzOCw2ICszMzgsMTIgQEAKIAkJfQogCQlkc3RfY29weSA9IGttYWxsb2MoaXRlbV9zaXplLCBHRlBfTk9GUyk7CiAJCXNyY19jb3B5ID0ga21hbGxvYyhpdGVtX3NpemUsIEdGUF9OT0ZTKTsKKwkJaWYgKCFkc3RfY29weSB8fCAhc3JjX2NvcHkpIHsKKwkJCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKKwkJCWtmcmVlKGRzdF9jb3B5KTsKKwkJCWtmcmVlKHNyY19jb3B5KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CiAKIAkJcmVhZF9leHRlbnRfYnVmZmVyKGViLCBzcmNfY29weSwgc3JjX3B0ciwgaXRlbV9zaXplKTsKIApAQCAtNjY1LDYgKzY3MSw5IEBACiAJYnRyZnNfZGlyX2l0ZW1fa2V5X3RvX2NwdShsZWFmLCBkaSwgJmxvY2F0aW9uKTsKIAluYW1lX2xlbiA9IGJ0cmZzX2Rpcl9uYW1lX2xlbihsZWFmLCBkaSk7CiAJbmFtZSA9IGttYWxsb2MobmFtZV9sZW4sIEdGUF9OT0ZTKTsKKwlpZiAoIW5hbWUpCisJCXJldHVybiAtRU5PTUVNOworCiAJcmVhZF9leHRlbnRfYnVmZmVyKGxlYWYsIG5hbWUsICh1bnNpZ25lZCBsb25nKShkaSArIDEpLCBuYW1lX2xlbik7CiAJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCkBAIC03NDQsNiArNzUzLDkgQEAKIAlpbnQgbWF0Y2ggPSAwOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKKwlpZiAoIXBhdGgpCisJCXJldHVybiAtRU5PTUVNOworCiAJcmV0ID0gYnRyZnNfc2VhcmNoX3Nsb3QoTlVMTCwgbG9nLCBrZXksIHBhdGgsIDAsIDApOwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBvdXQ7CkBAIC05NjcsNiArOTc5LDggQEAKIAlrZXkub2Zmc2V0ID0gKHU2NCktMTsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CisJaWYgKCFwYXRoKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXdoaWxlICgxKSB7CiAJCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KE5VTEwsIHJvb3QsICZrZXksIHBhdGgsIDAsIDApOwpAQCAtMTE3OCw2ICsxMTkyLDkgQEAKIAogCW5hbWVfbGVuID0gYnRyZnNfZGlyX25hbWVfbGVuKGViLCBkaSk7CiAJbmFtZSA9IGttYWxsb2MobmFtZV9sZW4sIEdGUF9OT0ZTKTsKKwlpZiAoIW5hbWUpCisJCXJldHVybiAtRU5PTUVNOworCiAJbG9nX3R5cGUgPSBidHJmc19kaXJfdHlwZShlYiwgZGkpOwogCXJlYWRfZXh0ZW50X2J1ZmZlcihlYiwgbmFtZSwgKHVuc2lnbmVkIGxvbmcpKGRpICsgMSksCiAJCSAgIG5hbWVfbGVuKTsKQEAgLTE2OTIsNiArMTcwOSw4IEBACiAJCXJvb3Rfb3duZXIgPSBidHJmc19oZWFkZXJfb3duZXIocGFyZW50KTsKIAogCQluZXh0ID0gYnRyZnNfZmluZF9jcmVhdGVfdHJlZV9ibG9jayhyb290LCBieXRlbnIsIGJsb2Nrc2l6ZSk7CisJCWlmICghbmV4dCkKKwkJCXJldHVybiAtRU5PTUVNOwogCiAJCWlmICgqbGV2ZWwgPT0gMSkgewogCQkJd2MtPnByb2Nlc3NfZnVuYyhyb290LCBuZXh0LCB3YywgcHRyX2dlbik7CkBAIC0yMDMyLDYgKzIwNTEsNyBAQAogCQl3YWl0X2xvZ19jb21taXQodHJhbnMsIGxvZ19yb290X3RyZWUsCiAJCQkJbG9nX3Jvb3RfdHJlZS0+bG9nX3RyYW5zaWQpOwogCQltdXRleF91bmxvY2soJmxvZ19yb290X3RyZWUtPmxvZ19tdXRleCk7CisJCXJldCA9IDA7CiAJCWdvdG8gb3V0OwogCX0KIAlhdG9taWNfc2V0KCZsb2dfcm9vdF90cmVlLT5sb2dfY29tbWl0W2luZGV4Ml0sIDEpOwpAQCAtMjA5Niw3ICsyMTE2LDcgQEAKIAlzbXBfbWIoKTsKIAlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmcm9vdC0+bG9nX2NvbW1pdF93YWl0W2luZGV4MV0pKQogCQl3YWtlX3VwKCZyb290LT5sb2dfY29tbWl0X3dhaXRbaW5kZXgxXSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgZnJlZV9sb2dfdHJlZShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKQEAgLTIxOTQsNiArMjIxNCw5IEBACiAKIAlsb2cgPSByb290LT5sb2dfcm9vdDsKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlkaSA9IGJ0cmZzX2xvb2t1cF9kaXJfaXRlbSh0cmFucywgbG9nLCBwYXRoLCBkaXItPmlfaW5vLAogCQkJCSAgIG5hbWUsIG5hbWVfbGVuLCAtMSk7CiAJaWYgKElTX0VSUihkaSkpIHsKQEAgLTI1OTQsNiArMjYxNyw5IEBACiAKIAlpbnNfZGF0YSA9IGttYWxsb2MobnIgKiBzaXplb2Yoc3RydWN0IGJ0cmZzX2tleSkgKwogCQkJICAgbnIgKiBzaXplb2YodTMyKSwgR0ZQX05PRlMpOworCWlmICghaW5zX2RhdGEpCisJCXJldHVybiAtRU5PTUVNOworCiAJaW5zX3NpemVzID0gKHUzMiAqKWluc19kYXRhOwogCWluc19rZXlzID0gKHN0cnVjdCBidHJmc19rZXkgKikoaW5zX2RhdGEgKyBuciAqIHNpemVvZih1MzIpKTsKIApAQCAtMjcyNSw3ICsyNzUxLDEzIEBACiAJbG9nID0gcm9vdC0+bG9nX3Jvb3Q7CiAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJZHN0X3BhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CisJaWYgKCFkc3RfcGF0aCkgeworCQlidHJmc19mcmVlX3BhdGgocGF0aCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAogCW1pbl9rZXkub2JqZWN0aWQgPSBpbm9kZS0+aV9pbm87CiAJbWluX2tleS50eXBlID0gQlRSRlNfSU5PREVfSVRFTV9LRVk7CkBAIC0zMDgwLDYgKzMxMTIsNyBAQAogCUJVR19PTighcGF0aCk7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKGZzX2luZm8tPnRyZWVfcm9vdCwgMCk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCiAJd2MudHJhbnMgPSB0cmFuczsKIAl3Yy5waW4gPSAxOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdm9sdW1lcy5jIGIvZnMvYnRyZnMvdm9sdW1lcy5jCmluZGV4IGQxNTg1MzAuLmRkMTNlYjggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3ZvbHVtZXMuYworKysgYi9mcy9idHJmcy92b2x1bWVzLmMKQEAgLTEyMTMsNiArMTIxMywxMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJaWYgKElTX0VSUih0cmFucykpIHsKKwkJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOworCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CisJfQogCWtleS5vYmplY3RpZCA9IEJUUkZTX0RFVl9JVEVNU19PQkpFQ1RJRDsKIAlrZXkudHlwZSA9IEJUUkZTX0RFVl9JVEVNX0tFWTsKIAlrZXkub2Zmc2V0ID0gZGV2aWNlLT5kZXZpZDsKQEAgLTEzMzQsMTEgKzEzMzgsMTEgQEAKIAogCXJldCA9IGJ0cmZzX3Nocmlua19kZXZpY2UoZGV2aWNlLCAwKTsKIAlpZiAocmV0KQotCQlnb3RvIGVycm9yX2JyZWxzZTsKKwkJZ290byBlcnJvcl91bmRvOwogCiAJcmV0ID0gYnRyZnNfcm1fZGV2X2l0ZW0ocm9vdC0+ZnNfaW5mby0+Y2h1bmtfcm9vdCwgZGV2aWNlKTsKIAlpZiAocmV0KQotCQlnb3RvIGVycm9yX2JyZWxzZTsKKwkJZ290byBlcnJvcl91bmRvOwogCiAJZGV2aWNlLT5pbl9mc19tZXRhZGF0YSA9IDA7CiAKQEAgLTE0MTIsNiArMTQxNiwxMyBAQAogCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dm9sdW1lX211dGV4KTsKIAltdXRleF91bmxvY2soJnV1aWRfbXV0ZXgpOwogCXJldHVybiByZXQ7CitlcnJvcl91bmRvOgorCWlmIChkZXZpY2UtPndyaXRlYWJsZSkgeworCQlsaXN0X2FkZCgmZGV2aWNlLT5kZXZfYWxsb2NfbGlzdCwKKwkJCSAmcm9vdC0+ZnNfaW5mby0+ZnNfZGV2aWNlcy0+YWxsb2NfbGlzdCk7CisJCXJvb3QtPmZzX2luZm8tPmZzX2RldmljZXMtPnJ3X2RldmljZXMrKzsKKwl9CisJZ290byBlcnJvcl9icmVsc2U7CiB9CiAKIC8qCkBAIC0xNjAxLDExICsxNjEyLDE5IEBACiAKIAlyZXQgPSBmaW5kX25leHRfZGV2aWQocm9vdCwgJmRldmljZS0+ZGV2aWQpOwogCWlmIChyZXQpIHsKKwkJa2ZyZWUoZGV2aWNlLT5uYW1lKTsKIAkJa2ZyZWUoZGV2aWNlKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCWlmIChJU19FUlIodHJhbnMpKSB7CisJCWtmcmVlKGRldmljZS0+bmFtZSk7CisJCWtmcmVlKGRldmljZSk7CisJCXJldCA9IFBUUl9FUlIodHJhbnMpOworCQlnb3RvIGVycm9yOworCX0KKwogCWxvY2tfY2h1bmtzKHJvb3QpOwogCiAJZGV2aWNlLT53cml0ZWFibGUgPSAxOwpAQCAtMTYyMSw3ICsxNjQwLDcgQEAKIAlkZXZpY2UtPmRldl9yb290ID0gcm9vdC0+ZnNfaW5mby0+ZGV2X3Jvb3Q7CiAJZGV2aWNlLT5iZGV2ID0gYmRldjsKIAlkZXZpY2UtPmluX2ZzX21ldGFkYXRhID0gMTsKLQlkZXZpY2UtPm1vZGUgPSAwOworCWRldmljZS0+bW9kZSA9IEZNT0RFX0VYQ0w7CiAJc2V0X2Jsb2Nrc2l6ZShkZXZpY2UtPmJkZXYsIDQwOTYpOwogCiAJaWYgKHNlZWRpbmdfZGV2KSB7CkBAIC0xODczLDcgKzE4OTIsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKLQlCVUdfT04oIXRyYW5zKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAKIAlsb2NrX2NodW5rcyhyb290KTsKIApAQCAtMjA0Nyw3ICsyMDY2LDcgQEAKIAkJQlVHX09OKHJldCk7CiAKIAkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihkZXZfcm9vdCwgMCk7Ci0JCUJVR19PTighdHJhbnMpOworCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAKIAkJcmV0ID0gYnRyZnNfZ3Jvd19kZXZpY2UodHJhbnMsIGRldmljZSwgb2xkX3NpemUpOwogCQlCVUdfT04ocmV0KTsKQEAgLTIyMTMsNiArMjIzMiwxMSBAQAogCiAJLyogU2hyaW5raW5nIHN1Y2NlZWRlZCwgZWxzZSB3ZSB3b3VsZCBiZSBhdCAiZG9uZSIuICovCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkgeworCQlyZXQgPSBQVFJfRVJSKHRyYW5zKTsKKwkJZ290byBkb25lOworCX0KKwogCWxvY2tfY2h1bmtzKHJvb3QpOwogCiAJZGV2aWNlLT5kaXNrX3RvdGFsX2J5dGVzID0gbmV3X3NpemU7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2NhcHMuYyBiL2ZzL2NlcGgvY2Fwcy5jCmluZGV4IDYwZDI3YmMuLjZiNjFkZWQgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvY2Fwcy5jCisrKyBiL2ZzL2NlcGgvY2Fwcy5jCkBAIC0xNTYwLDkgKzE1NjAsMTAgQEAKIAkJLyogTk9URTogbm8gc2lkZS1lZmZlY3RzIGFsbG93ZWQsIHVudGlsIHdlIHRha2Ugc19tdXRleCAqLwogCiAJCXJldm9raW5nID0gY2FwLT5pbXBsZW1lbnRlZCAmIH5jYXAtPmlzc3VlZDsKLQkJaWYgKHJldm9raW5nKQotCQkJZG91dCgiIG1kcyVkIHJldm9raW5nICVzXG4iLCBjYXAtPm1kcywKLQkJCSAgICAgY2VwaF9jYXBfc3RyaW5nKHJldm9raW5nKSk7CisJCWRvdXQoIiBtZHMlZCBjYXAgJXAgaXNzdWVkICVzIGltcGxlbWVudGVkICVzIHJldm9raW5nICVzXG4iLAorCQkgICAgIGNhcC0+bWRzLCBjYXAsIGNlcGhfY2FwX3N0cmluZyhjYXAtPmlzc3VlZCksCisJCSAgICAgY2VwaF9jYXBfc3RyaW5nKGNhcC0+aW1wbGVtZW50ZWQpLAorCQkgICAgIGNlcGhfY2FwX3N0cmluZyhyZXZva2luZykpOwogCiAJCWlmIChjYXAgPT0gY2ktPmlfYXV0aF9jYXAgJiYKIAkJICAgIChjYXAtPmlzc3VlZCAmIENFUEhfQ0FQX0ZJTEVfV1IpKSB7CkBAIC0xNjU4LDYgKzE2NTksOCBAQAogCiAJCWlmIChjYXAgPT0gY2ktPmlfYXV0aF9jYXAgJiYgY2ktPmlfZGlydHlfY2FwcykKIAkJCWZsdXNoaW5nID0gX19tYXJrX2NhcHNfZmx1c2hpbmcoaW5vZGUsIHNlc3Npb24pOworCQllbHNlCisJCQlmbHVzaGluZyA9IDA7CiAKIAkJbWRzID0gY2FwLT5tZHM7ICAvKiByZW1lbWJlciBtZHMsIHNvIHdlIGRvbid0IHJlcGVhdCAqLwogCQlzZW50Kys7CkBAIC0xOTQwLDYgKzE5NDMsMzUgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGtpY2tfZmx1c2hpbmdfaW5vZGVfY2FwcyhzdHJ1Y3QgY2VwaF9tZHNfY2xpZW50ICptZHNjLAorCQkJCSAgICAgc3RydWN0IGNlcGhfbWRzX3Nlc3Npb24gKnNlc3Npb24sCisJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpID0gY2VwaF9pbm9kZShpbm9kZSk7CisJc3RydWN0IGNlcGhfY2FwICpjYXA7CisJaW50IGRlbGF5ZWQgPSAwOworCisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwljYXAgPSBjaS0+aV9hdXRoX2NhcDsKKwlkb3V0KCJraWNrX2ZsdXNoaW5nX2lub2RlX2NhcHMgJXAgZmx1c2hpbmcgJXMgZmx1c2hfc2VxICVsbGRcbiIsIGlub2RlLAorCSAgICAgY2VwaF9jYXBfc3RyaW5nKGNpLT5pX2ZsdXNoaW5nX2NhcHMpLCBjaS0+aV9jYXBfZmx1c2hfc2VxKTsKKwlfX2NlcGhfZmx1c2hfc25hcHMoY2ksICZzZXNzaW9uLCAxKTsKKwlpZiAoY2ktPmlfZmx1c2hpbmdfY2FwcykgeworCQlkZWxheWVkID0gX19zZW5kX2NhcChtZHNjLCBjYXAsIENFUEhfQ0FQX09QX0ZMVVNILAorCQkJCSAgICAgX19jZXBoX2NhcHNfdXNlZChjaSksCisJCQkJICAgICBfX2NlcGhfY2Fwc193YW50ZWQoY2kpLAorCQkJCSAgICAgY2FwLT5pc3N1ZWQgfCBjYXAtPmltcGxlbWVudGVkLAorCQkJCSAgICAgY2ktPmlfZmx1c2hpbmdfY2FwcywgTlVMTCk7CisJCWlmIChkZWxheWVkKSB7CisJCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCQkJX19jYXBfZGVsYXlfcmVxdWV1ZShtZHNjLCBjaSk7CisJCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJCX0KKwl9IGVsc2UgeworCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJfQorfQorCiAKIC8qCiAgKiBUYWtlIHJlZmVyZW5jZXMgdG8gY2FwYWJpbGl0aWVzIHdlIGhvbGQsIHNvIHRoYXQgd2UgZG9uJ3QgcmVsZWFzZQpAQCAtMjY4Nyw3ICsyNzE5LDcgQEAKIAljZXBoX2FkZF9jYXAoaW5vZGUsIHNlc3Npb24sIGNhcF9pZCwgLTEsCiAJCSAgICAgaXNzdWVkLCB3YW50ZWQsIHNlcSwgbXNlcSwgcmVhbG1pbm8sIENFUEhfQ0FQX0ZMQUdfQVVUSCwKIAkJICAgICBOVUxMIC8qIG5vIGNhcHMgY29udGV4dCAqLyk7Ci0JdHJ5X2ZsdXNoX2NhcHMoaW5vZGUsIHNlc3Npb24sIE5VTEwpOworCWtpY2tfZmx1c2hpbmdfaW5vZGVfY2FwcyhtZHNjLCBzZXNzaW9uLCBpbm9kZSk7CiAJdXBfcmVhZCgmbWRzYy0+c25hcF9yd3NlbSk7CiAKIAkvKiBtYWtlIHN1cmUgd2UgcmUtcmVxdWVzdCBtYXhfc2l6ZSwgaWYgbmVjZXNzYXJ5ICovCkBAIC0yNzg1LDggKzI4MTcsNyBAQAogCWNhc2UgQ0VQSF9DQVBfT1BfSU1QT1JUOgogCQloYW5kbGVfY2FwX2ltcG9ydChtZHNjLCBpbm9kZSwgaCwgc2Vzc2lvbiwKIAkJCQkgIHNuYXB0cmFjZSwgc25hcHRyYWNlX2xlbik7Ci0JCWNlcGhfY2hlY2tfY2FwcyhjZXBoX2lub2RlKGlub2RlKSwgQ0hFQ0tfQ0FQU19OT0RFTEFZLAotCQkJCXNlc3Npb24pOworCQljZXBoX2NoZWNrX2NhcHMoY2VwaF9pbm9kZShpbm9kZSksIDAsIHNlc3Npb24pOwogCQlnb3RvIGRvbmVfdW5sb2NrZWQ7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9jZXBoL2Rpci5jIGIvZnMvY2VwaC9kaXIuYwppbmRleCAwYmM2OGRlLi5mMGFlZjc4IDEwMDY0NAotLS0gYS9mcy9jZXBoL2Rpci5jCisrKyBiL2ZzL2NlcGgvZGlyLmMKQEAgLTYwLDYgKzYwLDcgQEAKIAl9CiAJZGktPmRlbnRyeSA9IGRlbnRyeTsKIAlkaS0+bGVhc2Vfc2Vzc2lvbiA9IE5VTEw7CisJZGktPnBhcmVudF9pbm9kZSA9IGlncmFiKGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUpOwogCWRlbnRyeS0+ZF9mc2RhdGEgPSBkaTsKIAlkZW50cnktPmRfdGltZSA9IGppZmZpZXM7CiAJY2VwaF9kZW50cnlfbHJ1X2FkZChkZW50cnkpOwpAQCAtMTAzMyw3ICsxMDM0LDcgQEAKIAl1NjQgc25hcGlkID0gQ0VQSF9OT1NOQVA7CiAKIAlpZiAoIUlTX1JPT1QoZGVudHJ5KSkgewotCQlwYXJlbnRfaW5vZGUgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlOworCQlwYXJlbnRfaW5vZGUgPSBkaS0+cGFyZW50X2lub2RlOwogCQlpZiAocGFyZW50X2lub2RlKQogCQkJc25hcGlkID0gY2VwaF9zbmFwKHBhcmVudF9pbm9kZSk7CiAJfQpAQCAtMTA1OCw2ICsxMDU5LDggQEAKIAkJa21lbV9jYWNoZV9mcmVlKGNlcGhfZGVudHJ5X2NhY2hlcCwgZGkpOwogCQlkZW50cnktPmRfZnNkYXRhID0gTlVMTDsKIAl9CisJaWYgKHBhcmVudF9pbm9kZSkKKwkJaXB1dChwYXJlbnRfaW5vZGUpOwogfQogCiBzdGF0aWMgaW50IGNlcGhfc25hcGRpcl9kX3JldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LApkaWZmIC0tZ2l0IGEvZnMvY2VwaC9pbm9kZS5jIGIvZnMvY2VwaC9pbm9kZS5jCmluZGV4IGU4MzVlZmYuLjU2MjU0NjMgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvaW5vZGUuYworKysgYi9mcy9jZXBoL2lub2RlLmMKQEAgLTcxMCwxMCArNzEwLDYgQEAKIAkJCWNpLT5pX2NlcGhfZmxhZ3MgfD0gQ0VQSF9JX0NPTVBMRVRFOwogCQkJY2ktPmlfbWF4X29mZnNldCA9IDI7CiAJCX0KLQotCQkvKiBpdCBtYXkgYmUgYmV0dGVyIHRvIHNldCBzdF9zaXplIGluIGdldGF0dHIgaW5zdGVhZD8gKi8KLQkJaWYgKGNlcGhfdGVzdF9tb3VudF9vcHQoY2VwaF9zYl90b19jbGllbnQoaW5vZGUtPmlfc2IpLCBSQllURVMpKQotCQkJaW5vZGUtPmlfc2l6ZSA9IGNpLT5pX3JieXRlczsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfZXJyKCJmaWxsX2lub2RlICVsbHguJWxseCBCQUQgbW9kZSAwJW9cbiIsCkBAIC0xODE5LDcgKzE4MTUsMTEgQEAKIAkJZWxzZQogCQkJc3RhdC0+ZGV2ID0gMDsKIAkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKLQkJCXN0YXQtPnNpemUgPSBjaS0+aV9yYnl0ZXM7CisJCQlpZiAoY2VwaF90ZXN0X21vdW50X29wdChjZXBoX3NiX3RvX2NsaWVudChpbm9kZS0+aV9zYiksCisJCQkJCQlSQllURVMpKQorCQkJCXN0YXQtPnNpemUgPSBjaS0+aV9yYnl0ZXM7CisJCQllbHNlCisJCQkJc3RhdC0+c2l6ZSA9IGNpLT5pX2ZpbGVzICsgY2ktPmlfc3ViZGlyczsKIAkJCXN0YXQtPmJsb2NrcyA9IDA7CiAJCQlzdGF0LT5ibGtzaXplID0gNjU1MzY7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL2NlcGgvbWRzX2NsaWVudC5jIGIvZnMvY2VwaC9tZHNfY2xpZW50LmMKaW5kZXggMWUzMGQxOS4uYTFlZThmYSAxMDA2NDQKLS0tIGEvZnMvY2VwaC9tZHNfY2xpZW50LmMKKysrIGIvZnMvY2VwaC9tZHNfY2xpZW50LmMKQEAgLTY5Myw5ICs2OTMsMTEgQEAKIAkJCQlkb3V0KCJjaG9vc2VfbWRzICVwICVsbHguJWxseCAiCiAJCQkJICAgICAiZnJhZyAldSBtZHMlZCAoJWQvJWQpXG4iLAogCQkJCSAgICAgaW5vZGUsIGNlcGhfdmlub3AoaW5vZGUpLAotCQkJCSAgICAgZnJhZy5mcmFnLCBmcmFnLm1kcywKKwkJCQkgICAgIGZyYWcuZnJhZywgbWRzLAogCQkJCSAgICAgKGludClyLCBmcmFnLm5kaXN0KTsKLQkJCQlyZXR1cm4gbWRzOworCQkJCWlmIChjZXBoX21kc21hcF9nZXRfc3RhdGUobWRzYy0+bWRzbWFwLCBtZHMpID49CisJCQkJICAgIENFUEhfTURTX1NUQVRFX0FDVElWRSkKKwkJCQkJcmV0dXJuIG1kczsKIAkJCX0KIAogCQkJLyogc2luY2UgdGhpcyBmaWxlL2RpciB3YXNuJ3Qga25vd24gdG8gYmUKQEAgLTcwOCw3ICs3MTAsOSBAQAogCQkJCWRvdXQoImNob29zZV9tZHMgJXAgJWxseC4lbGx4ICIKIAkJCQkgICAgICJmcmFnICV1IG1kcyVkIChhdXRoKVxuIiwKIAkJCQkgICAgIGlub2RlLCBjZXBoX3Zpbm9wKGlub2RlKSwgZnJhZy5mcmFnLCBtZHMpOwotCQkJCXJldHVybiBtZHM7CisJCQkJaWYgKGNlcGhfbWRzbWFwX2dldF9zdGF0ZShtZHNjLT5tZHNtYXAsIG1kcykgPj0KKwkJCQkgICAgQ0VQSF9NRFNfU1RBVEVfQUNUSVZFKQorCQkJCQlyZXR1cm4gbWRzOwogCQkJfQogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9zbmFwLmMgYi9mcy9jZXBoL3NuYXAuYwppbmRleCAzOWMyNDNhLi5mNDBiOTEzIDEwMDY0NAotLS0gYS9mcy9jZXBoL3NuYXAuYworKysgYi9mcy9jZXBoL3NuYXAuYwpAQCAtNTg0LDEwICs1ODQsMTQgQEAKIAlpZiAobGFzdGlub2RlKQogCQlpcHV0KGxhc3Rpbm9kZSk7CiAKLQlkb3V0KCJxdWV1ZV9yZWFsbV9jYXBfc25hcHMgJXAgJWxseCBjaGlsZHJlblxuIiwgcmVhbG0sIHJlYWxtLT5pbm8pOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZyZWFsbS0+Y2hpbGRyZW4sIGNoaWxkX2l0ZW0pCi0JCXF1ZXVlX3JlYWxtX2NhcF9zbmFwcyhjaGlsZCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGlsZCwgJnJlYWxtLT5jaGlsZHJlbiwgY2hpbGRfaXRlbSkgeworCQlkb3V0KCJxdWV1ZV9yZWFsbV9jYXBfc25hcHMgJXAgJWxseCBxdWV1ZSBjaGlsZCAlcCAlbGx4XG4iLAorCQkgICAgIHJlYWxtLCByZWFsbS0+aW5vLCBjaGlsZCwgY2hpbGQtPmlubyk7CisJCWxpc3RfZGVsX2luaXQoJmNoaWxkLT5kaXJ0eV9pdGVtKTsKKwkJbGlzdF9hZGQoJmNoaWxkLT5kaXJ0eV9pdGVtLCAmcmVhbG0tPmRpcnR5X2l0ZW0pOworCX0KIAorCWxpc3RfZGVsX2luaXQoJnJlYWxtLT5kaXJ0eV9pdGVtKTsKIAlkb3V0KCJxdWV1ZV9yZWFsbV9jYXBfc25hcHMgJXAgJWxseCBkb25lXG4iLCByZWFsbSwgcmVhbG0tPmlubyk7CiB9CiAKQEAgLTY4Myw3ICs2ODcsOSBAQAogCSAqIHF1ZXVlIGNhcCBzbmFwcyBfYWZ0ZXJfIHdlJ3ZlIGJ1aWx0IHRoZSBuZXcgc25hcCBjb250ZXh0cywKIAkgKiBzbyB0aGF0IGlfaGVhZF9zbmFwYyBjYW4gYmUgc2V0IGFwcHJvcHJpYXRlbHkuCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShyZWFsbSwgJmRpcnR5X3JlYWxtcywgZGlydHlfaXRlbSkgeworCXdoaWxlICghbGlzdF9lbXB0eSgmZGlydHlfcmVhbG1zKSkgeworCQlyZWFsbSA9IGxpc3RfZmlyc3RfZW50cnkoJmRpcnR5X3JlYWxtcywgc3RydWN0IGNlcGhfc25hcF9yZWFsbSwKKwkJCQkJIGRpcnR5X2l0ZW0pOwogCQlxdWV1ZV9yZWFsbV9jYXBfc25hcHMocmVhbG0pOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvY2VwaC9zdXBlci5jIGIvZnMvY2VwaC9zdXBlci5jCmluZGV4IGJmNmYwZjMuLjljNTA4NTQgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvc3VwZXIuYworKysgYi9mcy9jZXBoL3N1cGVyLmMKQEAgLTI5MCw2ICsyOTAsOCBAQAogCiAgICAgICAgIGZzb3B0LT5yc2l6ZSA9IENFUEhfTU9VTlRfUlNJWkVfREVGQVVMVDsKICAgICAgICAgZnNvcHQtPnNuYXBkaXJfbmFtZSA9IGtzdHJkdXAoQ0VQSF9TTkFQRElSTkFNRV9ERUZBVUxULCBHRlBfS0VSTkVMKTsKKwlmc29wdC0+Y2Fwc193YW50ZWRfZGVsYXlfbWluID0gQ0VQSF9DQVBTX1dBTlRFRF9ERUxBWV9NSU5fREVGQVVMVDsKKwlmc29wdC0+Y2Fwc193YW50ZWRfZGVsYXlfbWF4ID0gQ0VQSF9DQVBTX1dBTlRFRF9ERUxBWV9NQVhfREVGQVVMVDsKICAgICAgICAgZnNvcHQtPmNhcF9yZWxlYXNlX3NhZmV0eSA9IENFUEhfQ0FQX1JFTEVBU0VfU0FGRVRZX0RFRkFVTFQ7CiAgICAgICAgIGZzb3B0LT5tYXhfcmVhZGRpciA9IENFUEhfTUFYX1JFQURESVJfREVGQVVMVDsKICAgICAgICAgZnNvcHQtPm1heF9yZWFkZGlyX2J5dGVzID0gQ0VQSF9NQVhfUkVBRERJUl9CWVRFU19ERUZBVUxUOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9zdXBlci5oIGIvZnMvY2VwaC9zdXBlci5oCmluZGV4IDIwYjkwN2QuLjg4ZmNhYTIgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvc3VwZXIuaAorKysgYi9mcy9jZXBoL3N1cGVyLmgKQEAgLTIwNyw2ICsyMDcsNyBAQAogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAl1NjQgdGltZTsKIAl1NjQgb2Zmc2V0OworCXN0cnVjdCBpbm9kZSAqcGFyZW50X2lub2RlOwogfTsKIAogc3RydWN0IGNlcGhfaW5vZGVfeGF0dHJzX2luZm8gewpkaWZmIC0tZ2l0IGEvZnMvY2VwaC94YXR0ci5jIGIvZnMvY2VwaC94YXR0ci5jCmluZGV4IDZlMTJhNmIuLjhjOWViYTYgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgveGF0dHIuYworKysgYi9mcy9jZXBoL3hhdHRyLmMKQEAgLTIxOSw2ICsyMTksNyBAQAogCXN0cnVjdCByYl9ub2RlICoqcDsKIAlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKIAlzdHJ1Y3QgY2VwaF9pbm9kZV94YXR0ciAqeGF0dHIgPSBOVUxMOworCWludCBuYW1lX2xlbiA9IHN0cmxlbihuYW1lKTsKIAlpbnQgYzsKIAogCXAgPSAmY2ktPmlfeGF0dHJzLmluZGV4LnJiX25vZGU7CkBAIC0yMjYsNiArMjI3LDggQEAKIAkJcGFyZW50ID0gKnA7CiAJCXhhdHRyID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgY2VwaF9pbm9kZV94YXR0ciwgbm9kZSk7CiAJCWMgPSBzdHJuY21wKG5hbWUsIHhhdHRyLT5uYW1lLCB4YXR0ci0+bmFtZV9sZW4pOworCQlpZiAoYyA9PSAwICYmIG5hbWVfbGVuID4geGF0dHItPm5hbWVfbGVuKQorCQkJYyA9IDE7CiAJCWlmIChjIDwgMCkKIAkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKIAkJZWxzZSBpZiAoYyA+IDApCmRpZmYgLS1naXQgYS9mcy9jaWZzL0tjb25maWcgYi9mcy9jaWZzL0tjb25maWcKaW5kZXggZWU0NTY0OC4uN2NiMGY3ZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9LY29uZmlnCisrKyBiL2ZzL2NpZnMvS2NvbmZpZwpAQCAtMyw2ICszLDcgQEAKIAlkZXBlbmRzIG9uIElORVQKIAlzZWxlY3QgTkxTCiAJc2VsZWN0IENSWVBUTworCXNlbGVjdCBDUllQVE9fTUQ0CiAJc2VsZWN0IENSWVBUT19NRDUKIAlzZWxlY3QgQ1JZUFRPX0hNQUMKIAlzZWxlY3QgQ1JZUFRPX0FSQzQKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvTWFrZWZpbGUgYi9mcy9jaWZzL01ha2VmaWxlCmluZGV4IDQzYjE5ZGQuLmQ4NzU1ODQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvTWFrZWZpbGUKKysrIGIvZnMvY2lmcy9NYWtlZmlsZQpAQCAtNSw3ICs1LDcgQEAKIAogY2lmcy15IDo9IGNpZnNmcy5vIGNpZnNzbWIubyBjaWZzX2RlYnVnLm8gY29ubmVjdC5vIGRpci5vIGZpbGUubyBpbm9kZS5vIFwKIAkgIGxpbmsubyBtaXNjLm8gbmV0bWlzYy5vIHNtYmRlcy5vIHNtYmVuY3J5cHQubyB0cmFuc3BvcnQubyBhc24xLm8gXAotCSAgbWQ0Lm8gbWQ1Lm8gY2lmc191bmljb2RlLm8gbnRlcnIubyB4YXR0ci5vIGNpZnNlbmNyeXB0Lm8gXAorCSAgY2lmc191bmljb2RlLm8gbnRlcnIubyB4YXR0ci5vIGNpZnNlbmNyeXB0Lm8gXAogCSAgcmVhZGRpci5vIGlvY3RsLm8gc2Vzcy5vIGV4cG9ydC5vCiAKIGNpZnMtJChDT05GSUdfQ0lGU19BQ0wpICs9IGNpZnNhY2wubwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9SRUFETUUgYi9mcy9jaWZzL1JFQURNRQppbmRleCA0NmFmOTlhLi5mZTE2ODM1IDEwMDY0NAotLS0gYS9mcy9jaWZzL1JFQURNRQorKysgYi9mcy9jaWZzL1JFQURNRQpAQCAtNDUyLDYgKzQ1MiwxMSBAQAogCQlpZiBvcGxvY2sgKGNhY2hpbmcgdG9rZW4pIGlzIGdyYW50ZWQgYW5kIGhlbGQuIE5vdGUgdGhhdAogCQlkaXJlY3QgYWxsb3dzIHdyaXRlIG9wZXJhdGlvbnMgbGFyZ2VyIHRoYW4gcGFnZSBzaXplCiAJCXRvIGJlIHNlbnQgdG8gdGhlIHNlcnZlci4KKyAgc3RyaWN0Y2FjaGUgICBVc2UgZm9yIHN3aXRjaGluZyBvbiBzdHJpY3QgY2FjaGUgbW9kZS4gSW4gdGhpcyBtb2RlIHRoZQorCQljbGllbnQgcmVhZCBmcm9tIHRoZSBjYWNoZSBhbGwgdGhlIHRpbWUgaXQgaGFzIE9wbG9jayBMZXZlbCBJSSwKKwkJb3RoZXJ3aXNlIC0gcmVhZCBmcm9tIHRoZSBzZXJ2ZXIuIEFsbCB3cml0dGVuIGRhdGEgYXJlIHN0b3JlZAorCQlpbiB0aGUgY2FjaGUsIGJ1dCBpZiB0aGUgY2xpZW50IGRvZXNuJ3QgaGF2ZSBFeGNsdXNpdmUgT3Bsb2NrLAorCQlpdCB3cml0ZXMgdGhlIGRhdGEgdG8gdGhlIHNlcnZlci4KICAgYWNsICAgCUFsbG93IHNldGZhY2wgYW5kIGdldGZhY2wgdG8gbWFuYWdlIHBvc2l4IEFDTHMgaWYgc2VydmVyCiAJCXN1cHBvcnRzIHRoZW0uICAoZGVmYXVsdCkKICAgbm9hY2wgCURvIG5vdCBhbGxvdyBzZXRmYWNsIGFuZCBnZXRmYWNsIGNhbGxzIG9uIHRoaXMgbW91bnQKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmMKaW5kZXggZWRlOTgzMC4uNjU4MjlkMyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2RlYnVnLmMKKysrIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmMKQEAgLTc5LDExICs3OSwxMSBAQAogCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOwogCWxpc3RfZm9yX2VhY2godG1wLCAmc2VydmVyLT5wZW5kaW5nX21pZF9xKSB7CiAJCW1pZF9lbnRyeSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgbWlkX3FfZW50cnksIHFoZWFkKTsKLQkJY0VSUk9SKDEsICJTdGF0ZTogJWQgQ21kOiAlZCBQaWQ6ICVkIFRzazogJXAgTWlkICVkIiwKKwkJY0VSUk9SKDEsICJTdGF0ZTogJWQgQ21kOiAlZCBQaWQ6ICVkIENiZGF0YTogJXAgTWlkICVkIiwKIAkJCW1pZF9lbnRyeS0+bWlkU3RhdGUsCiAJCQkoaW50KW1pZF9lbnRyeS0+Y29tbWFuZCwKIAkJCW1pZF9lbnRyeS0+cGlkLAotCQkJbWlkX2VudHJ5LT50c2ssCisJCQltaWRfZW50cnktPmNhbGxiYWNrX2RhdGEsCiAJCQltaWRfZW50cnktPm1pZCk7CiAjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCiAJCWNFUlJPUigxLCAiSXNMYXJnZTogJWQgYnVmOiAlcCB0aW1lIHJjdjogJWxkIG5vdzogJWxkIiwKQEAgLTIxOCwxMSArMjE4LDExIEBACiAJCQkJbWlkX2VudHJ5ID0gbGlzdF9lbnRyeSh0bXAzLCBzdHJ1Y3QgbWlkX3FfZW50cnksCiAJCQkJCXFoZWFkKTsKIAkJCQlzZXFfcHJpbnRmKG0sICJcdFN0YXRlOiAlZCBjb206ICVkIHBpZDoiCi0JCQkJCQkiICVkIHRzazogJXAgbWlkICVkXG4iLAorCQkJCQkJIiAlZCBjYmRhdGE6ICVwIG1pZCAlZFxuIiwKIAkJCQkJCW1pZF9lbnRyeS0+bWlkU3RhdGUsCiAJCQkJCQkoaW50KW1pZF9lbnRyeS0+Y29tbWFuZCwKIAkJCQkJCW1pZF9lbnRyeS0+cGlkLAotCQkJCQkJbWlkX2VudHJ5LT50c2ssCisJCQkJCQltaWRfZW50cnktPmNhbGxiYWNrX2RhdGEsCiAJCQkJCQltaWRfZW50cnktPm1pZCk7CiAJCQl9CiAJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwpAQCAtMzMxLDcgKzMzMSw3IEBACiAJCQkJYXRvbWljX3JlYWQoJnRvdFNtQnVmQWxsb2NDb3VudCkpOwogI2VuZGlmIC8qIENPTkZJR19DSUZTX1NUQVRTMiAqLwogCi0Jc2VxX3ByaW50ZihtLCAiT3BlcmF0aW9ucyAoTUlEcyk6ICVkXG4iLCBtaWRDb3VudC5jb3VudGVyKTsKKwlzZXFfcHJpbnRmKG0sICJPcGVyYXRpb25zIChNSURzKTogJWRcbiIsIGF0b21pY19yZWFkKCZtaWRDb3VudCkpOwogCXNlcV9wcmludGYobSwKIAkJIlxuJWQgc2Vzc2lvbiAlZCBzaGFyZSByZWNvbm5lY3RzXG4iLAogCQl0Y3BTZXNSZWNvbm5lY3RDb3VudC5jb3VudGVyLCB0Y29uSW5mb1JlY29ubmVjdENvdW50LmNvdW50ZXIpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYyBiL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKaW5kZXggN2VkMzY1My4uMGEyNjVhZCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYworKysgYi9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCkBAIC0yODIsOCArMjgyLDYgQEAKIAljRllJKDEsICJpbiAlcyIsIF9fZnVuY19fKTsKIAlCVUdfT04oSVNfUk9PVChtbnRwdCkpOwogCi0JeGlkID0gR2V0WGlkKCk7Ci0KIAkvKgogCSAqIFRoZSBNU0RGUyBzcGVjIHN0YXRlcyB0aGF0IHBhdGhzIGluIERGUyByZWZlcnJhbCByZXF1ZXN0cyBhbmQKIAkgKiByZXNwb25zZXMgbXVzdCBiZSBwcmVmaXhlZCBieSBhIHNpbmdsZSAnXCcgY2hhcmFjdGVyIGluc3RlYWQgb2YKQEAgLTI5MywyMCArMjkxLDIxIEBACiAJbW50ID0gRVJSX1BUUigtRU5PTUVNKTsKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KG1udHB0KTsKIAlpZiAoZnVsbF9wYXRoID09IE5VTEwpCi0JCWdvdG8gZnJlZV94aWQ7CisJCWdvdG8gY2RkYV9leGl0OwogCiAJY2lmc19zYiA9IENJRlNfU0IobW50cHQtPmRfaW5vZGUtPmlfc2IpOwogCXRsaW5rID0gY2lmc19zYl90bGluayhjaWZzX3NiKTsKLQltbnQgPSBFUlJfUFRSKC1FSU5WQUwpOwogCWlmIChJU19FUlIodGxpbmspKSB7CiAJCW1udCA9IEVSUl9DQVNUKHRsaW5rKTsKIAkJZ290byBmcmVlX2Z1bGxfcGF0aDsKIAl9CiAJc2VzID0gdGxpbmtfdGNvbih0bGluayktPnNlczsKIAorCXhpZCA9IEdldFhpZCgpOwogCXJjID0gZ2V0X2Rmc19wYXRoKHhpZCwgc2VzLCBmdWxsX3BhdGggKyAxLCBjaWZzX3NiLT5sb2NhbF9ubHMsCiAJCSZudW1fcmVmZXJyYWxzLCAmcmVmZXJyYWxzLAogCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKKwlGcmVlWGlkKHhpZCk7CiAKIAljaWZzX3B1dF90bGluayh0bGluayk7CiAKQEAgLTMzOSw4ICszMzgsNyBAQAogCWZyZWVfZGZzX2luZm9fYXJyYXkocmVmZXJyYWxzLCBudW1fcmVmZXJyYWxzKTsKIGZyZWVfZnVsbF9wYXRoOgogCWtmcmVlKGZ1bGxfcGF0aCk7Ci1mcmVlX3hpZDoKLQlGcmVlWGlkKHhpZCk7CitjZGRhX2V4aXQ6CiAJY0ZZSSgxLCAibGVhdmluZyAlcyIgLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIG1udDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19mc19zYi5oIGIvZnMvY2lmcy9jaWZzX2ZzX3NiLmgKaW5kZXggNzg1MmNkNi4uYWM1MWNkMiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2ZzX3NiLmgKKysrIGIvZnMvY2lmcy9jaWZzX2ZzX3NiLmgKQEAgLTQwLDYgKzQwLDcgQEAKICNkZWZpbmUgQ0lGU19NT1VOVF9GU0NBQ0hFCTB4ODAwMCAvKiBsb2NhbCBjYWNoaW5nIGVuYWJsZWQgKi8KICNkZWZpbmUgQ0lGU19NT1VOVF9NRl9TWU1MSU5LUwkweDEwMDAwIC8qIE1pbnNoYWxsK0ZyZW5jaCBTeW1saW5rcyBlbmFibGVkICovCiAjZGVmaW5lIENJRlNfTU9VTlRfTVVMVElVU0VSCTB4MjAwMDAgLyogbXVsdGl1c2VyIG1vdW50ICovCisjZGVmaW5lIENJRlNfTU9VTlRfU1RSSUNUX0lPCTB4NDAwMDAgLyogc3RyaWN0IGNhY2hlIG1vZGUgKi8KIAogc3RydWN0IGNpZnNfc2JfaW5mbyB7CiAJc3RydWN0IHJiX3Jvb3QgdGxpbmtfdHJlZTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc191bmljb2RlLmMgYi9mcy9jaWZzL2NpZnNfdW5pY29kZS5jCmluZGV4IDQzMGY1MTAuLmZjMGZkNGYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc191bmljb2RlLmMKKysrIGIvZnMvY2lmcy9jaWZzX3VuaWNvZGUuYwpAQCAtNDQsMTAgKzQ0LDE0IEBACiAJaW50IGNoYXJsZW4sIG91dGxlbiA9IDA7CiAJaW50IG1heHdvcmRzID0gbWF4Ynl0ZXMgLyAyOwogCWNoYXIgdG1wW05MU19NQVhfQ0hBUlNFVF9TSVpFXTsKKwlfX3UxNiBmdG1wOwogCi0JZm9yIChpID0gMDsgaSA8IG1heHdvcmRzICYmIGZyb21baV07IGkrKykgewotCQljaGFybGVuID0gY29kZXBhZ2UtPnVuaTJjaGFyKGxlMTZfdG9fY3B1KGZyb21baV0pLCB0bXAsCi0JCQkJCSAgICAgTkxTX01BWF9DSEFSU0VUX1NJWkUpOworCWZvciAoaSA9IDA7IGkgPCBtYXh3b3JkczsgaSsrKSB7CisJCWZ0bXAgPSBnZXRfdW5hbGlnbmVkX2xlMTYoJmZyb21baV0pOworCQlpZiAoZnRtcCA9PSAwKQorCQkJYnJlYWs7CisKKwkJY2hhcmxlbiA9IGNvZGVwYWdlLT51bmkyY2hhcihmdG1wLCB0bXAsIE5MU19NQVhfQ0hBUlNFVF9TSVpFKTsKIAkJaWYgKGNoYXJsZW4gPiAwKQogCQkJb3V0bGVuICs9IGNoYXJsZW47CiAJCWVsc2UKQEAgLTU4LDkgKzYyLDkgQEAKIH0KIAogLyoKLSAqIGNpZnNfbWFwY2hhciAtIGNvbnZlcnQgYSBsaXR0bGUtZW5kaWFuIGNoYXIgdG8gcHJvcGVyIGNoYXIgaW4gY29kZXBhZ2UKKyAqIGNpZnNfbWFwY2hhciAtIGNvbnZlcnQgYSBob3N0LWVuZGlhbiBjaGFyIHRvIHByb3BlciBjaGFyIGluIGNvZGVwYWdlCiAgKiBAdGFyZ2V0IC0gd2hlcmUgY29udmVydGVkIGNoYXJhY3RlciBzaG91bGQgYmUgY29waWVkCi0gKiBAc3JjX2NoYXIgLSAyIGJ5dGUgbGl0dGxlLWVuZGlhbiBzb3VyY2UgY2hhcmFjdGVyCisgKiBAc3JjX2NoYXIgLSAyIGJ5dGUgaG9zdC1lbmRpYW4gc291cmNlIGNoYXJhY3RlcgogICogQGNwIC0gY29kZXBhZ2UgdG8gd2hpY2ggY2hhcmFjdGVyIHNob3VsZCBiZSBjb252ZXJ0ZWQKICAqIEBtYXBjaGFyIC0gc2hvdWxkIGNoYXJhY3RlciBiZSBtYXBwZWQgYWNjb3JkaW5nIHRvIG1hcGNoYXJzIG1vdW50IG9wdGlvbj8KICAqCkBAIC02OSw3ICs3Myw3IEBACiAgKiBlbm91Z2ggdG8gaG9sZCB0aGUgcmVzdWx0IG9mIHRoZSBjb252ZXJzaW9uIChhdCBsZWFzdCBOTFNfTUFYX0NIQVJTRVRfU0laRSkuCiAgKi8KIHN0YXRpYyBpbnQKLWNpZnNfbWFwY2hhcihjaGFyICp0YXJnZXQsIGNvbnN0IF9fbGUxNiBzcmNfY2hhciwgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqY3AsCitjaWZzX21hcGNoYXIoY2hhciAqdGFyZ2V0LCBjb25zdCBfX3UxNiBzcmNfY2hhciwgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqY3AsCiAJICAgICBib29sIG1hcGNoYXIpCiB7CiAJaW50IGxlbiA9IDE7CkBAIC04Miw3ICs4Niw3IEBACiAJICogICAgIGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkgYXJlIG1vZGlmaWVkLCBhcyB0aGV5IHVzZSBzbGFzaCBhcwogCSAqICAgICBzZXBhcmF0b3IuCiAJICovCi0Jc3dpdGNoIChsZTE2X3RvX2NwdShzcmNfY2hhcikpIHsKKwlzd2l0Y2ggKHNyY19jaGFyKSB7CiAJY2FzZSBVTklfQ09MT046CiAJCSp0YXJnZXQgPSAnOic7CiAJCWJyZWFrOwpAQCAtMTA5LDggKzExMyw3IEBACiAJcmV0dXJuIGxlbjsKIAogY3BfY29udmVydDoKLQlsZW4gPSBjcC0+dW5pMmNoYXIobGUxNl90b19jcHUoc3JjX2NoYXIpLCB0YXJnZXQsCi0JCQkgICBOTFNfTUFYX0NIQVJTRVRfU0laRSk7CisJbGVuID0gY3AtPnVuaTJjaGFyKHNyY19jaGFyLCB0YXJnZXQsIE5MU19NQVhfQ0hBUlNFVF9TSVpFKTsKIAlpZiAobGVuIDw9IDApIHsKIAkJKnRhcmdldCA9ICc/JzsKIAkJbGVuID0gMTsKQEAgLTE0OSw2ICsxNTIsNyBAQAogCWludCBudWxsc2l6ZSA9IG5sc19udWxsc2l6ZShjb2RlcGFnZSk7CiAJaW50IGZyb213b3JkcyA9IGZyb21sZW4gLyAyOwogCWNoYXIgdG1wW05MU19NQVhfQ0hBUlNFVF9TSVpFXTsKKwlfX3UxNiBmdG1wOwogCiAJLyoKIAkgKiBiZWNhdXNlIHRoZSBjaGFycyBjYW4gYmUgb2YgdmFyeWluZyB3aWR0aHMsIHdlIG5lZWQgdG8gdGFrZSBjYXJlCkBAIC0xNTgsMTkgKzE2MiwyMyBAQAogCSAqLwogCXNhZmVsZW4gPSB0b2xlbiAtIChOTFNfTUFYX0NIQVJTRVRfU0laRSArIG51bGxzaXplKTsKIAotCWZvciAoaSA9IDA7IGkgPCBmcm9td29yZHMgJiYgZnJvbVtpXTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGZyb213b3JkczsgaSsrKSB7CisJCWZ0bXAgPSBnZXRfdW5hbGlnbmVkX2xlMTYoJmZyb21baV0pOworCQlpZiAoZnRtcCA9PSAwKQorCQkJYnJlYWs7CisKIAkJLyoKIAkJICogY2hlY2sgdG8gc2VlIGlmIGNvbnZlcnRpbmcgdGhpcyBjaGFyYWN0ZXIgbWlnaHQgbWFrZSB0aGUKIAkJICogY29udmVyc2lvbiBibGVlZCBpbnRvIHRoZSBudWxsIHRlcm1pbmF0b3IKIAkJICovCiAJCWlmIChvdXRsZW4gPj0gc2FmZWxlbikgewotCQkJY2hhcmxlbiA9IGNpZnNfbWFwY2hhcih0bXAsIGZyb21baV0sIGNvZGVwYWdlLCBtYXBjaGFyKTsKKwkJCWNoYXJsZW4gPSBjaWZzX21hcGNoYXIodG1wLCBmdG1wLCBjb2RlcGFnZSwgbWFwY2hhcik7CiAJCQlpZiAoKG91dGxlbiArIGNoYXJsZW4pID4gKHRvbGVuIC0gbnVsbHNpemUpKQogCQkJCWJyZWFrOwogCQl9CiAKIAkJLyogcHV0IGNvbnZlcnRlZCBjaGFyIGludG8gJ3RvJyBidWZmZXIgKi8KLQkJY2hhcmxlbiA9IGNpZnNfbWFwY2hhcigmdG9bb3V0bGVuXSwgZnJvbVtpXSwgY29kZXBhZ2UsIG1hcGNoYXIpOworCQljaGFybGVuID0gY2lmc19tYXBjaGFyKCZ0b1tvdXRsZW5dLCBmdG1wLCBjb2RlcGFnZSwgbWFwY2hhcik7CiAJCW91dGxlbiArPSBjaGFybGVuOwogCX0KIApAQCAtMTkzLDI0ICsyMDEsMjEgQEAKIHsKIAlpbnQgY2hhcmxlbjsKIAlpbnQgaTsKLQl3Y2hhcl90ICp3Y2hhcl90byA9ICh3Y2hhcl90ICopdG87IC8qIG5lZWRlZCB0byBxdWlldCBzcGFyc2UgKi8KKwl3Y2hhcl90IHdjaGFyX3RvOyAvKiBuZWVkZWQgdG8gcXVpZXQgc3BhcnNlICovCiAKIAlmb3IgKGkgPSAwOyBsZW4gJiYgKmZyb207IGkrKywgZnJvbSArPSBjaGFybGVuLCBsZW4gLT0gY2hhcmxlbikgewotCi0JCS8qIHdvcmtzIGZvciAyLjQuMCBrZXJuZWwgb3IgbGF0ZXIgKi8KLQkJY2hhcmxlbiA9IGNvZGVwYWdlLT5jaGFyMnVuaShmcm9tLCBsZW4sICZ3Y2hhcl90b1tpXSk7CisJCWNoYXJsZW4gPSBjb2RlcGFnZS0+Y2hhcjJ1bmkoZnJvbSwgbGVuLCAmd2NoYXJfdG8pOwogCQlpZiAoY2hhcmxlbiA8IDEpIHsKLQkJCWNFUlJPUigxLCAic3RydG9VQ1M6IGNoYXIydW5pIG9mICVkIHJldHVybmVkICVkIiwKLQkJCQkoaW50KSpmcm9tLCBjaGFybGVuKTsKKwkJCWNFUlJPUigxLCAic3RydG9VQ1M6IGNoYXIydW5pIG9mIDB4JXggcmV0dXJuZWQgJWQiLAorCQkJCSpmcm9tLCBjaGFybGVuKTsKIAkJCS8qIEEgcXVlc3Rpb24gbWFyayAqLwotCQkJdG9baV0gPSBjcHVfdG9fbGUxNigweDAwM2YpOworCQkJd2NoYXJfdG8gPSAweDAwM2Y7CiAJCQljaGFybGVuID0gMTsKLQkJfSBlbHNlCi0JCQl0b1tpXSA9IGNwdV90b19sZTE2KHdjaGFyX3RvW2ldKTsKLQorCQl9CisJCXB1dF91bmFsaWduZWRfbGUxNih3Y2hhcl90bywgJnRvW2ldKTsKIAl9CiAKLQl0b1tpXSA9IDA7CisJcHV0X3VuYWxpZ25lZF9sZTE2KDAsICZ0b1tpXSk7CiAJcmV0dXJuIGk7CiB9CiAKQEAgLTI1MiwzICsyNTcsNzkgQEAKIAlyZXR1cm4gZHN0OwogfQogCisvKgorICogQ29udmVydCAxNiBiaXQgVW5pY29kZSBwYXRobmFtZSB0byB3aXJlIGZvcm1hdCBmcm9tIHN0cmluZyBpbiBjdXJyZW50IGNvZGUKKyAqIHBhZ2UuIENvbnZlcnNpb24gbWF5IGludm9sdmUgcmVtYXBwaW5nIHVwIHRoZSBzaXggY2hhcmFjdGVycyB0aGF0IGFyZQorICogb25seSBsZWdhbCBpbiBQT1NJWC1saWtlIE9TIChpZiB0aGV5IGFyZSBwcmVzZW50IGluIHRoZSBzdHJpbmcpLiBQYXRoCisgKiBuYW1lcyBhcmUgbGl0dGxlIGVuZGlhbiAxNiBiaXQgVW5pY29kZSBvbiB0aGUgd2lyZQorICovCitpbnQKK2NpZnNDb252ZXJ0VG9VQ1MoX19sZTE2ICp0YXJnZXQsIGNvbnN0IGNoYXIgKnNvdXJjZSwgaW50IG1heGxlbiwKKwkJIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKmNwLCBpbnQgbWFwQ2hhcnMpCit7CisJaW50IGksIGosIGNoYXJsZW47CisJaW50IGxlbl9yZW1haW5pbmcgPSBtYXhsZW47CisJY2hhciBzcmNfY2hhcjsKKwlfX3UxNiB0ZW1wOworCisJaWYgKCFtYXBDaGFycykKKwkJcmV0dXJuIGNpZnNfc3RydG9VQ1ModGFyZ2V0LCBzb3VyY2UsIFBBVEhfTUFYLCBjcCk7CisKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG1heGxlbjsgaisrKSB7CisJCXNyY19jaGFyID0gc291cmNlW2ldOworCQlzd2l0Y2ggKHNyY19jaGFyKSB7CisJCWNhc2UgMDoKKwkJCXB1dF91bmFsaWduZWRfbGUxNigwLCAmdGFyZ2V0W2pdKTsKKwkJCWdvdG8gY3RvVUNTX291dDsKKwkJY2FzZSAnOic6CisJCQl0ZW1wID0gVU5JX0NPTE9OOworCQkJYnJlYWs7CisJCWNhc2UgJyonOgorCQkJdGVtcCA9IFVOSV9BU1RFUklLOworCQkJYnJlYWs7CisJCWNhc2UgJz8nOgorCQkJdGVtcCA9IFVOSV9RVUVTVElPTjsKKwkJCWJyZWFrOworCQljYXNlICc8JzoKKwkJCXRlbXAgPSBVTklfTEVTU1RIQU47CisJCQlicmVhazsKKwkJY2FzZSAnPic6CisJCQl0ZW1wID0gVU5JX0dSVFJUSEFOOworCQkJYnJlYWs7CisJCWNhc2UgJ3wnOgorCQkJdGVtcCA9IFVOSV9QSVBFOworCQkJYnJlYWs7CisJCS8qCisJCSAqIEZJWE1FOiBXZSBjYW4gbm90IGhhbmRsZSByZW1hcHBpbmcgYmFja3NsYXNoIChVTklfU0xBU0gpCisJCSAqIHVudGlsIGFsbCB0aGUgY2FsbHMgdG8gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeSBhcmUgbW9kaWZpZWQsCisJCSAqIGFzIHRoZXkgdXNlIGJhY2tzbGFzaCBhcyBzZXBhcmF0b3IuCisJCSAqLworCQlkZWZhdWx0OgorCQkJY2hhcmxlbiA9IGNwLT5jaGFyMnVuaShzb3VyY2UraSwgbGVuX3JlbWFpbmluZywKKwkJCQkJCSZ0ZW1wKTsKKwkJCS8qCisJCQkgKiBpZiBubyBtYXRjaCwgdXNlIHF1ZXN0aW9uIG1hcmssIHdoaWNoIGF0IGxlYXN0IGluCisJCQkgKiBzb21lIGNhc2VzIHNlcnZlcyBhcyB3aWxkIGNhcmQKKwkJCSAqLworCQkJaWYgKGNoYXJsZW4gPCAxKSB7CisJCQkJdGVtcCA9IDB4MDAzZjsKKwkJCQljaGFybGVuID0gMTsKKwkJCX0KKwkJCWxlbl9yZW1haW5pbmcgLT0gY2hhcmxlbjsKKwkJCS8qCisJCQkgKiBjaGFyYWN0ZXIgbWF5IHRha2UgbW9yZSB0aGFuIG9uZSBieXRlIGluIHRoZSBzb3VyY2UKKwkJCSAqIHN0cmluZywgYnV0IHdpbGwgdGFrZSBleGFjdGx5IHR3byBieXRlcyBpbiB0aGUKKwkJCSAqIHRhcmdldCBzdHJpbmcKKwkJCSAqLworCQkJaSArPSBjaGFybGVuOworCQkJY29udGludWU7CisJCX0KKwkJcHV0X3VuYWxpZ25lZF9sZTE2KHRlbXAsICZ0YXJnZXRbal0pOworCQlpKys7IC8qIG1vdmUgdG8gbmV4dCBjaGFyIGluIHNvdXJjZSBzdHJpbmcgKi8KKwkJbGVuX3JlbWFpbmluZy0tOworCX0KKworY3RvVUNTX291dDoKKwlyZXR1cm4gaTsKK30KKwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzYWNsLmMgYi9mcy9jaWZzL2NpZnNhY2wuYwppbmRleCBhNDM3ZWMzLi5iZWVlYmYxIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNhY2wuYworKysgYi9mcy9jaWZzL2NpZnNhY2wuYwpAQCAtNDEsOSArNDEsMTIgQEAKIDsKIAogCi0vKiBzZWN1cml0eSBpZCBmb3IgZXZlcnlvbmUgKi8KKy8qIHNlY3VyaXR5IGlkIGZvciBldmVyeW9uZS93b3JsZCBzeXN0ZW0gZ3JvdXAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2lmc19zaWQgc2lkX2V2ZXJ5b25lID0gewogCTEsIDEsIHswLCAwLCAwLCAwLCAwLCAxfSwgezB9IH07CisvKiBzZWN1cml0eSBpZCBmb3IgQXV0aGVudGljYXRlZCBVc2VycyBzeXN0ZW0gZ3JvdXAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2lmc19zaWQgc2lkX2F1dGh1c2VycyA9IHsKKwkxLCAxLCB7MCwgMCwgMCwgMCwgMCwgNX0sIHsxMX0gfTsKIC8qIGdyb3VwIHVzZXJzICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNpZnNfc2lkIHNpZF91c2VyID0gezEsIDIgLCB7MCwgMCwgMCwgMCwgMCwgNX0sIHt9IH07CiAKQEAgLTM2NSwxMCArMzY4LDE0IEBACiAJaWYgKG51bV9hY2VzICA+IDApIHsKIAkJdW1vZGVfdCB1c2VyX21hc2sgPSBTX0lSV1hVOwogCQl1bW9kZV90IGdyb3VwX21hc2sgPSBTX0lSV1hHOwotCQl1bW9kZV90IG90aGVyX21hc2sgPSBTX0lSV1hPOworCQl1bW9kZV90IG90aGVyX21hc2sgPSBTX0lSV1hVIHwgU19JUldYRyB8IFNfSVJXWE87CiAKIAkJcHBhY2UgPSBrbWFsbG9jKG51bV9hY2VzICogc2l6ZW9mKHN0cnVjdCBjaWZzX2FjZSAqKSwKIAkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcGFjZSkgeworCQkJY0VSUk9SKDEsICJEQUNMIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIik7CisJCQlyZXR1cm47CisJCX0KIAogCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2FjZXM7ICsraSkgewogCQkJcHBhY2VbaV0gPSAoc3RydWN0IGNpZnNfYWNlICopIChhY2xfYmFzZSArIGFjbF9zaXplKTsKQEAgLTM5MCw2ICszOTcsMTIgQEAKIAkJCQkJCSAgICAgcHBhY2VbaV0tPnR5cGUsCiAJCQkJCQkgICAgICZmYXR0ci0+Y2ZfbW9kZSwKIAkJCQkJCSAgICAgJm90aGVyX21hc2spOworCQkJaWYgKGNvbXBhcmVfc2lkcygmKHBwYWNlW2ldLT5zaWQpLCAmc2lkX2F1dGh1c2VycykpCisJCQkJYWNjZXNzX2ZsYWdzX3RvX21vZGUocHBhY2VbaV0tPmFjY2Vzc19yZXEsCisJCQkJCQkgICAgIHBwYWNlW2ldLT50eXBlLAorCQkJCQkJICAgICAmZmF0dHItPmNmX21vZGUsCisJCQkJCQkgICAgICZvdGhlcl9tYXNrKTsKKwogCiAvKgkJCW1lbWNweSgodm9pZCAqKSgmKGNpZnNjcmVkLT5hY2VzW2ldKSksCiAJCQkJKHZvaWQgKilwcGFjZVtpXSwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwppbmRleCA2NmYzZDUwLi5hNTE1ODVmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKKysrIGIvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSAiY2lmc3BkdS5oIgogI2luY2x1ZGUgImNpZnNnbG9iLmgiCiAjaW5jbHVkZSAiY2lmc19kZWJ1Zy5oIgotI2luY2x1ZGUgIm1kNS5oIgogI2luY2x1ZGUgImNpZnNfdW5pY29kZS5oIgogI2luY2x1ZGUgImNpZnNwcm90by5oIgogI2luY2x1ZGUgIm50bG1zc3AuaCIKQEAgLTM3LDExICszNiw2IEBACiAvKiBOb3RlIHRoYXQgdGhlIHNtYiBoZWFkZXIgc2lnbmF0dXJlIGZpZWxkIG9uIGlucHV0IGNvbnRhaW5zIHRoZQogCXNlcXVlbmNlIG51bWJlciBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgKi8KIAotZXh0ZXJuIHZvaWQgbWRmb3VyKHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIGludCBuKTsKLWV4dGVybiB2b2lkIEVfbWQ0aGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHVuc2lnbmVkIGNoYXIgKnAxNik7Ci1leHRlcm4gdm9pZCBTTUJlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCi0JCSAgICAgICB1bnNpZ25lZCBjaGFyICpwMjQpOwotCiBzdGF0aWMgaW50IGNpZnNfY2FsY3VsYXRlX3NpZ25hdHVyZShjb25zdCBzdHJ1Y3Qgc21iX2hkciAqY2lmc19wZHUsCiAJCQkJc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBjaGFyICpzaWduYXR1cmUpCiB7CkBAIC0yMzQsNiArMjI4LDcgQEAKIC8qIGZpcnN0IGNhbGN1bGF0ZSAyNCBieXRlcyBudGxtIHJlc3BvbnNlIGFuZCB0aGVuIDE2IGJ5dGUgc2Vzc2lvbiBrZXkgKi8KIGludCBzZXR1cF9udGxtX3Jlc3BvbnNlKHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzKQogeworCWludCByYyA9IDA7CiAJdW5zaWduZWQgaW50IHRlbXBfbGVuID0gQ0lGU19TRVNTX0tFWV9TSVpFICsgQ0lGU19BVVRIX1JFU1BfU0laRTsKIAljaGFyIHRlbXBfa2V5W0NJRlNfU0VTU19LRVlfU0laRV07CiAKQEAgLTI0NywxMyArMjQyLDI2IEBACiAJfQogCXNlcy0+YXV0aF9rZXkubGVuID0gdGVtcF9sZW47CiAKLQlTTUJOVGVuY3J5cHQoc2VzLT5wYXNzd29yZCwgc2VzLT5zZXJ2ZXItPmNyeXB0a2V5LAorCXJjID0gU01CTlRlbmNyeXB0KHNlcy0+cGFzc3dvcmQsIHNlcy0+c2VydmVyLT5jcnlwdGtleSwKIAkJCXNlcy0+YXV0aF9rZXkucmVzcG9uc2UgKyBDSUZTX1NFU1NfS0VZX1NJWkUpOworCWlmIChyYykgeworCQljRllJKDEsICIlcyBDYW4ndCBnZW5lcmF0ZSBOVExNIHJlc3BvbnNlLCBlcnJvcjogJWQiLAorCQkJX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAotCUVfbWQ0aGFzaChzZXMtPnBhc3N3b3JkLCB0ZW1wX2tleSk7Ci0JbWRmb3VyKHNlcy0+YXV0aF9rZXkucmVzcG9uc2UsIHRlbXBfa2V5LCBDSUZTX1NFU1NfS0VZX1NJWkUpOworCXJjID0gRV9tZDRoYXNoKHNlcy0+cGFzc3dvcmQsIHRlbXBfa2V5KTsKKwlpZiAocmMpIHsKKwkJY0ZZSSgxLCAiJXMgQ2FuJ3QgZ2VuZXJhdGUgTlQgaGFzaCwgZXJyb3I6ICVkIiwgX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAotCXJldHVybiAwOworCXJjID0gbWRmb3VyKHNlcy0+YXV0aF9rZXkucmVzcG9uc2UsIHRlbXBfa2V5LCBDSUZTX1NFU1NfS0VZX1NJWkUpOworCWlmIChyYykKKwkJY0ZZSSgxLCAiJXMgQ2FuJ3QgZ2VuZXJhdGUgTlRMTSBzZXNzaW9uIGtleSwgZXJyb3I6ICVkIiwKKwkJCV9fZnVuY19fLCByYyk7CisKKwlyZXR1cm4gcmM7CiB9CiAKICNpZmRlZiBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0gKQEAgLTY0OSw5ICs2NTcsMTAgQEAKIAlnZXRfcmFuZG9tX2J5dGVzKHNlY19rZXksIENJRlNfU0VTU19LRVlfU0laRSk7CiAKIAl0Zm1fYXJjNCA9IGNyeXB0b19hbGxvY19ibGtjaXBoZXIoImVjYihhcmM0KSIsIDAsIENSWVBUT19BTEdfQVNZTkMpOwotCWlmICghdGZtX2FyYzQgfHwgSVNfRVJSKHRmbV9hcmM0KSkgeworCWlmIChJU19FUlIodGZtX2FyYzQpKSB7CisJCXJjID0gUFRSX0VSUih0Zm1fYXJjNCk7CiAJCWNFUlJPUigxLCAiY291bGQgbm90IGFsbG9jYXRlIGNyeXB0byBBUEkgYXJjNFxuIik7Ci0JCXJldHVybiBQVFJfRVJSKHRmbV9hcmM0KTsKKwkJcmV0dXJuIHJjOwogCX0KIAogCWRlc2MudGZtID0gdGZtX2FyYzQ7CkBAIC03MDAsMTQgKzcwOSwxMyBAQAogCXVuc2lnbmVkIGludCBzaXplOwogCiAJc2VydmVyLT5zZWNtZWNoLmhtYWNtZDUgPSBjcnlwdG9fYWxsb2Nfc2hhc2goImhtYWMobWQ1KSIsIDAsIDApOwotCWlmICghc2VydmVyLT5zZWNtZWNoLmhtYWNtZDUgfHwKLQkJCUlTX0VSUihzZXJ2ZXItPnNlY21lY2guaG1hY21kNSkpIHsKKwlpZiAoSVNfRVJSKHNlcnZlci0+c2VjbWVjaC5obWFjbWQ1KSkgewogCQljRVJST1IoMSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjcnlwdG8gaG1hY21kNVxuIik7CiAJCXJldHVybiBQVFJfRVJSKHNlcnZlci0+c2VjbWVjaC5obWFjbWQ1KTsKIAl9CiAKIAlzZXJ2ZXItPnNlY21lY2gubWQ1ID0gY3J5cHRvX2FsbG9jX3NoYXNoKCJtZDUiLCAwLCAwKTsKLQlpZiAoIXNlcnZlci0+c2VjbWVjaC5tZDUgfHwgSVNfRVJSKHNlcnZlci0+c2VjbWVjaC5tZDUpKSB7CisJaWYgKElTX0VSUihzZXJ2ZXItPnNlY21lY2gubWQ1KSkgewogCQljRVJST1IoMSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjcnlwdG8gbWQ1XG4iKTsKIAkJcmMgPSBQVFJfRVJSKHNlcnZlci0+c2VjbWVjaC5tZDUpOwogCQlnb3RvIGNyeXB0b19hbGxvY2F0ZV9tZDVfZmFpbDsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuaCBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVkMmVjMC4uMDAwMDAwMAotLS0gYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogICBmcy9jaWZzL2NpZnNlbmNyeXB0LmgKLSAqCi0gKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDUKLSAqICAgQXV0aG9yKHMpOiBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKLSAqCi0gKiAgIEV4dGVybnMgZm9yIG1pc2MuIHNtYWxsIGVuY3J5cHRpb24gcm91dGluZXMKLSAqICAgc28gd2UgZG8gbm90IGhhdmUgdG8gcHV0IHRoZW0gaW4gY2lmc3Byb3RvLmgKLSAqCi0gKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAotICogICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCi0gKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLS8qIG1kNC5jICovCi1leHRlcm4gdm9pZCBtZGZvdXIodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICppbiwgaW50IG4pOwotLyogc21iZGVzLmMgKi8KLWV4dGVybiB2b2lkIEVfUDE2KHVuc2lnbmVkIGNoYXIgKnAxNCwgdW5zaWduZWQgY2hhciAqcDE2KTsKLWV4dGVybiB2b2lkIEVfUDI0KHVuc2lnbmVkIGNoYXIgKnAyMSwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCi0JCSAgdW5zaWduZWQgY2hhciAqcDI0KTsKLQotCi0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmMgYi9mcy9jaWZzL2NpZnNmcy5jCmluZGV4IGQ5ZjY1MmEuLmYyOTcwMTMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtNzcsNyArNzcsMTEgQEAKIG1vZHVsZV9wYXJhbShjaWZzX21heF9wZW5kaW5nLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhjaWZzX21heF9wZW5kaW5nLCAiU2ltdWx0YW5lb3VzIHJlcXVlc3RzIHRvIHNlcnZlci4gIgogCQkJCSAgICJEZWZhdWx0OiA1MCBSYW5nZTogMiB0byAyNTYiKTsKLQordW5zaWduZWQgc2hvcnQgZWNob19yZXRyaWVzID0gNTsKK21vZHVsZV9wYXJhbShlY2hvX3JldHJpZXMsIHVzaG9ydCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGVjaG9fcmV0cmllcywgIk51bWJlciBvZiBlY2hvIGF0dGVtcHRzIGJlZm9yZSBnaXZpbmcgdXAgYW5kICIKKwkJCSAgICAgICAicmVjb25uZWN0aW5nIHNlcnZlci4gRGVmYXVsdDogNS4gMCBtZWFucyAiCisJCQkgICAgICAgIm5ldmVyIHJlY29ubmVjdC4iKTsKIGV4dGVybiBtZW1wb29sX3QgKmNpZnNfc21fcmVxX3Bvb2xwOwogZXh0ZXJuIG1lbXBvb2xfdCAqY2lmc19yZXFfcG9vbHA7CiBleHRlcm4gbWVtcG9vbF90ICpjaWZzX21pZF9wb29scDsKQEAgLTU5NiwxMCArNjAwLDE3IEBACiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItPmtpX2ZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3NpemVfdCB3cml0dGVuOworCWludCByYzsKIAogCXdyaXR0ZW4gPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlKGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKLQlpZiAoIUNJRlNfSShpbm9kZSktPmNsaWVudENhbkNhY2hlQWxsKQotCQlmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7CisKKwlpZiAoQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVBbGwpCisJCXJldHVybiB3cml0dGVuOworCisJcmMgPSBmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7CisJaWYgKHJjKQorCQljRllJKDEsICJjaWZzX2ZpbGVfYWlvX3dyaXRlOiAlZCByYyBvbiAlcCBpbm9kZSIsIHJjLCBpbm9kZSk7CisKIAlyZXR1cm4gd3JpdHRlbjsKIH0KIApAQCAtNzI5LDYgKzc0MCwyNSBAQAogCS5zZXRsZWFzZSA9IGNpZnNfc2V0bGVhc2UsCiB9OwogCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpZnNfZmlsZV9zdHJpY3Rfb3BzID0geworCS5yZWFkID0gZG9fc3luY19yZWFkLAorCS53cml0ZSA9IGRvX3N5bmNfd3JpdGUsCisJLmFpb19yZWFkID0gY2lmc19zdHJpY3RfcmVhZHYsCisJLmFpb193cml0ZSA9IGNpZnNfc3RyaWN0X3dyaXRldiwKKwkub3BlbiA9IGNpZnNfb3BlbiwKKwkucmVsZWFzZSA9IGNpZnNfY2xvc2UsCisJLmxvY2sgPSBjaWZzX2xvY2ssCisJLmZzeW5jID0gY2lmc19zdHJpY3RfZnN5bmMsCisJLmZsdXNoID0gY2lmc19mbHVzaCwKKwkubW1hcCA9IGNpZnNfZmlsZV9zdHJpY3RfbW1hcCwKKwkuc3BsaWNlX3JlYWQgPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQsCisJLmxsc2VlayA9IGNpZnNfbGxzZWVrLAorI2lmZGVmIENPTkZJR19DSUZTX1BPU0lYCisJLnVubG9ja2VkX2lvY3RsCT0gY2lmc19pb2N0bCwKKyNlbmRpZiAvKiBDT05GSUdfQ0lGU19QT1NJWCAqLworCS5zZXRsZWFzZSA9IGNpZnNfc2V0bGVhc2UsCit9OworCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpZnNfZmlsZV9kaXJlY3Rfb3BzID0gewogCS8qIG5vIGFpbywgbm8gcmVhZHYgLQogCSAgIEJCIHJlZXZhbHVhdGUgd2hldGhlciB0aGV5IGNhbiBiZSBkb25lIHdpdGggZGlyZWN0aW8sIG5vIGNhY2hlICovCkBAIC03NDcsNiArNzc3LDcgQEAKIAkubGxzZWVrID0gY2lmc19sbHNlZWssCiAJLnNldGxlYXNlID0gY2lmc19zZXRsZWFzZSwKIH07CisKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2lmc19maWxlX25vYnJsX29wcyA9IHsKIAkucmVhZCA9IGRvX3N5bmNfcmVhZCwKIAkud3JpdGUgPSBkb19zeW5jX3dyaXRlLApAQCAtNzY1LDYgKzc5NiwyNCBAQAogCS5zZXRsZWFzZSA9IGNpZnNfc2V0bGVhc2UsCiB9OwogCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpZnNfZmlsZV9zdHJpY3Rfbm9icmxfb3BzID0geworCS5yZWFkID0gZG9fc3luY19yZWFkLAorCS53cml0ZSA9IGRvX3N5bmNfd3JpdGUsCisJLmFpb19yZWFkID0gY2lmc19zdHJpY3RfcmVhZHYsCisJLmFpb193cml0ZSA9IGNpZnNfc3RyaWN0X3dyaXRldiwKKwkub3BlbiA9IGNpZnNfb3BlbiwKKwkucmVsZWFzZSA9IGNpZnNfY2xvc2UsCisJLmZzeW5jID0gY2lmc19zdHJpY3RfZnN5bmMsCisJLmZsdXNoID0gY2lmc19mbHVzaCwKKwkubW1hcCA9IGNpZnNfZmlsZV9zdHJpY3RfbW1hcCwKKwkuc3BsaWNlX3JlYWQgPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQsCisJLmxsc2VlayA9IGNpZnNfbGxzZWVrLAorI2lmZGVmIENPTkZJR19DSUZTX1BPU0lYCisJLnVubG9ja2VkX2lvY3RsCT0gY2lmc19pb2N0bCwKKyNlbmRpZiAvKiBDT05GSUdfQ0lGU19QT1NJWCAqLworCS5zZXRsZWFzZSA9IGNpZnNfc2V0bGVhc2UsCit9OworCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpZnNfZmlsZV9kaXJlY3Rfbm9icmxfb3BzID0gewogCS8qIG5vIG1tYXAsIG5vIGFpbywgbm8gcmVhZHYgLQogCSAgIEJCIHJlZXZhbHVhdGUgd2hldGhlciB0aGV5IGNhbiBiZSBkb25lIHdpdGggZGlyZWN0aW8sIG5vIGNhY2hlICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5oIGIvZnMvY2lmcy9jaWZzZnMuaAppbmRleCA4NTEwMzBmLi5hOTM3MWI2IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5oCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmgKQEAgLTYxLDYgKzYxLDcgQEAKIAkJICAgICAgIHN0cnVjdCBkZW50cnkgKik7CiBleHRlcm4gaW50IGNpZnNfcmV2YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxwKTsKIGV4dGVybiBpbnQgY2lmc19yZXZhbGlkYXRlX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICopOworZXh0ZXJuIHZvaWQgY2lmc19pbnZhbGlkYXRlX21hcHBpbmcoc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gaW50IGNpZnNfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXQgKik7CiBleHRlcm4gaW50IGNpZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKIApAQCAtNzIsMTkgKzczLDI3IEBACiAvKiBGdW5jdGlvbnMgcmVsYXRlZCB0byBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpZnNfZmlsZV9vcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjaWZzX2ZpbGVfZGlyZWN0X29wczsgLyogaWYgZGlyZWN0aW8gbW50ICovCi1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjaWZzX2ZpbGVfbm9icmxfb3BzOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2lmc19maWxlX2RpcmVjdF9ub2JybF9vcHM7IC8qIG5vIGJybG9ja3MgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpZnNfZmlsZV9zdHJpY3Rfb3BzOyAvKiBpZiBzdHJpY3RpbyBtbnQgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpZnNfZmlsZV9ub2JybF9vcHM7IC8qIG5vIGJybG9ja3MgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpZnNfZmlsZV9kaXJlY3Rfbm9icmxfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2lmc19maWxlX3N0cmljdF9ub2JybF9vcHM7CiBleHRlcm4gaW50IGNpZnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBleHRlcm4gaW50IGNpZnNfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogZXh0ZXJuIGludCBjaWZzX2Nsb3NlZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIGV4dGVybiBzc2l6ZV90IGNpZnNfdXNlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqcmVhZF9kYXRhLAotCQkJIHNpemVfdCByZWFkX3NpemUsIGxvZmZfdCAqcG9mZnNldCk7CisJCQkgICAgICBzaXplX3QgcmVhZF9zaXplLCBsb2ZmX3QgKnBvZmZzZXQpOworZXh0ZXJuIHNzaXplX3QgY2lmc19zdHJpY3RfcmVhZHYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCQkgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKTsKIGV4dGVybiBzc2l6ZV90IGNpZnNfdXNlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKndyaXRlX2RhdGEsCi0JCQkgc2l6ZV90IHdyaXRlX3NpemUsIGxvZmZfdCAqcG9mZnNldCk7CisJCQkgICAgICAgc2l6ZV90IHdyaXRlX3NpemUsIGxvZmZfdCAqcG9mZnNldCk7CitleHRlcm4gc3NpemVfdCBjaWZzX3N0cmljdF93cml0ZXYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcyk7CiBleHRlcm4gaW50IGNpZnNfbG9jayhzdHJ1Y3QgZmlsZSAqLCBpbnQsIHN0cnVjdCBmaWxlX2xvY2sgKik7CiBleHRlcm4gaW50IGNpZnNfZnN5bmMoc3RydWN0IGZpbGUgKiwgaW50KTsKK2V4dGVybiBpbnQgY2lmc19zdHJpY3RfZnN5bmMoc3RydWN0IGZpbGUgKiwgaW50KTsKIGV4dGVybiBpbnQgY2lmc19mbHVzaChzdHJ1Y3QgZmlsZSAqLCBmbF9vd25lcl90IGlkKTsKIGV4dGVybiBpbnQgY2lmc19maWxlX21tYXAoc3RydWN0IGZpbGUgKiAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKK2V4dGVybiBpbnQgY2lmc19maWxlX3N0cmljdF9tbWFwKHN0cnVjdCBmaWxlICogLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjaWZzX2Rpcl9vcHM7CiBleHRlcm4gaW50IGNpZnNfZGlyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogZXh0ZXJuIGludCBjaWZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmRpcmVudHJ5LCBmaWxsZGlyX3QgZmlsbGRpcik7CkBAIC0xMTgsNSArMTI3LDUgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgY2lmc19leHBvcnRfb3BzOwogI2VuZGlmIC8qIEVYUEVSSU1FTlRBTCAqLwogCi0jZGVmaW5lIENJRlNfVkVSU0lPTiAgICIxLjY4IgorI2RlZmluZSBDSUZTX1ZFUlNJT04gICAiMS43MSIKICNlbmRpZgkJCQkvKiBfQ0lGU0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2dsb2IuaCBiL2ZzL2NpZnMvY2lmc2dsb2IuaAppbmRleCA2MDZjYThiLi4xN2FmYjBmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNnbG9iLmgKKysrIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCkBAIC0xNjEsNDYgKzE2MSw0MSBAQAogCWludCBzcnZfY291bnQ7IC8qIHJlZmVyZW5jZSBjb3VudGVyICovCiAJLyogMTUgY2hhcmFjdGVyIHNlcnZlciBuYW1lICsgMHgyMCAxNnRoIGJ5dGUgaW5kaWNhdGluZyB0eXBlID0gc3J2ICovCiAJY2hhciBzZXJ2ZXJfUkZDMTAwMV9uYW1lW1JGQzEwMDFfTkFNRV9MRU5fV0lUSF9OVUxMXTsKKwllbnVtIHN0YXR1c0VudW0gdGNwU3RhdHVzOyAvKiB3aGF0IHdlIHRoaW5rIHRoZSBzdGF0dXMgaXMgKi8KIAljaGFyICpob3N0bmFtZTsgLyogaG9zdG5hbWUgcG9ydGlvbiBvZiBVTkMgc3RyaW5nICovCiAJc3RydWN0IHNvY2tldCAqc3NvY2tldDsKIAlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBkc3RhZGRyOwogCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNyY2FkZHI7IC8qIGxvY2FsbHkgYmluZCB0byB0aGlzIElQICovCisjaWZkZWYgQ09ORklHX05FVF9OUworCXN0cnVjdCBuZXQgKm5ldDsKKyNlbmRpZgogCXdhaXRfcXVldWVfaGVhZF90IHJlc3BvbnNlX3E7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmVxdWVzdF9xOyAvKiBpZiBtb3JlIHRoYW4gbWF4bXB4IHRvIHNydnIgbXVzdCBibG9jayovCiAJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX21pZF9xOwotCXZvaWQgKlNlcnZlcl9ObHNJbmZvOwkvKiBCQiAtIHBsYWNlaG9sZGVyIGZvciBmdXR1cmUgTkxTIGluZm8gICovCi0JdW5zaWduZWQgc2hvcnQgc2VydmVyX2NvZGVwYWdlOwkvKiBjb2RlcGFnZSBmb3IgdGhlIHNlcnZlciAgICAqLwotCWVudW0gcHJvdG9jb2xFbnVtIHByb3RvY29sVHlwZTsKLQljaGFyIHZlcnNpb25NYWpvcjsKLQljaGFyIHZlcnNpb25NaW5vcjsKLQlib29sIHN2bG9jYWw6MTsJCQkvKiBsb2NhbCBzZXJ2ZXIgb3IgcmVtb3RlICovCiAJYm9vbCBub2Jsb2Nrc25kOwkJLyogdXNlIGJsb2NraW5nIHNlbmRtc2cgKi8KIAlib29sIG5vYXV0b3R1bmU7CQkvKiBkbyBub3QgYXV0b3R1bmUgc2VuZCBidWYgc2l6ZXMgKi8KIAlib29sIHRjcF9ub2RlbGF5OwogCWF0b21pY190IGluRmxpZ2h0OyAgLyogbnVtYmVyIG9mIHJlcXVlc3RzIG9uIHRoZSB3aXJlIHRvIHNlcnZlciAqLwotI2lmZGVmIENPTkZJR19DSUZTX1NUQVRTMgotCWF0b21pY190IGluU2VuZDsgLyogcmVxdWVzdHMgdHJ5aW5nIHRvIHNlbmQgKi8KLQlhdG9taWNfdCBudW1fd2FpdGVyczsgICAvKiBibG9ja2VkIHdhaXRpbmcgdG8gZ2V0IGluIHNlbmRyZWN2ICovCi0jZW5kaWYKLQllbnVtIHN0YXR1c0VudW0gdGNwU3RhdHVzOyAvKiB3aGF0IHdlIHRoaW5rIHRoZSBzdGF0dXMgaXMgKi8KIAlzdHJ1Y3QgbXV0ZXggc3J2X211dGV4OwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCWNoYXIgc2VydmVyX0dVSURbMTZdOwogCWNoYXIgc2VjTW9kZTsKKwlib29sIHNlc3Npb25fZXN0YWI7IC8qIG1hcmsgd2hlbiB2ZXJ5IGZpcnN0IHNlc3MgaXMgZXN0YWJsaXNoZWQgKi8KKwl1MTYgZGlhbGVjdDsgLyogZGlhbGVjdCBpbmRleCB0aGF0IHNlcnZlciBjaG9zZSAqLwogCWVudW0gc2VjdXJpdHlFbnVtIHNlY1R5cGU7CiAJdW5zaWduZWQgaW50IG1heFJlcTsJLyogQ2xpZW50cyBzaG91bGQgc3VibWl0IG5vIG1vcmUgKi8KIAkvKiB0aGFuIG1heFJlcSBkaXN0aW5jdCB1bmFuc3dlcmVkIFNNQnMgdG8gdGhlIHNlcnZlciB3aGVuIHVzaW5nICAqLwogCS8qIG11bHRpcGxleGVkIHJlYWRzIG9yIHdyaXRlcyAqLwogCXVuc2lnbmVkIGludCBtYXhCdWY7CS8qIG1heEJ1ZiBzcGVjaWZpZXMgdGhlIG1heGltdW0gKi8KIAkvKiBtZXNzYWdlIHNpemUgdGhlIHNlcnZlciBjYW4gc2VuZCBvciByZWNlaXZlIGZvciBub24tcmF3IFNNQnMgKi8KKwkvKiBtYXhCdWYgaXMgcmV0dXJuZWQgYnkgU01CIE5lZ290aWF0ZVByb3RvY29sIHNvIG1heEJ1ZiBpcyBvbmx5IDAgKi8KKwkvKiB3aGVuIHNvY2tldCBpcyBzZXR1cCAoYW5kIGR1cmluZyByZWNvbm5lY3QpIGJlZm9yZSBOZWdQcm90IHNlbnQgKi8KIAl1bnNpZ25lZCBpbnQgbWF4X3J3OwkvKiBtYXhSdyBzcGVjaWZpZXMgdGhlIG1heGltdW0gKi8KIAkvKiBtZXNzYWdlIHNpemUgdGhlIHNlcnZlciBjYW4gc2VuZCBvciByZWNlaXZlIGZvciAqLwogCS8qIFNNQl9DT01fV1JJVEVfUkFXIG9yIFNNQl9DT01fUkVBRF9SQVcuICovCiAJdW5zaWduZWQgaW50IG1heF92Y3M7CS8qIG1heGltdW0gbnVtYmVyIG9mIHNtYiBzZXNzaW9ucywgYXQgbGVhc3QKIAkJCQkgICB0aG9zZSB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgdW5pcXVlbHkgd2l0aAogCQkJCSAgIHZjbnVtYmVycyAqLwotCWNoYXIgc2Vzc2lkWzRdOwkJLyogdW5pcXVlIHRva2VuIGlkIGZvciB0aGlzIHNlc3Npb24gKi8KLQkvKiAocmV0dXJuZWQgb24gTmVnb3RpYXRlICovCiAJaW50IGNhcGFiaWxpdGllczsgLyogYWxsb3cgc2VsZWN0aXZlIGRpc2FibGluZyBvZiBjYXBzIGJ5IHNtYiBzZXNzICovCiAJaW50IHRpbWVBZGo7ICAvKiBBZGp1c3QgZm9yIGRpZmZlcmVuY2UgaW4gc2VydmVyIHRpbWUgem9uZSBpbiBzZWMgKi8KIAlfX3UxNiBDdXJyZW50TWlkOyAgICAgICAgIC8qIG11bHRpcGxleCBpZCAtIHJvdGF0aW5nIGNvdW50ZXIgKi8KQEAgLTIxMCwyMCArMjA1LDUzIEBACiAJX191MzIgc2VxdWVuY2VfbnVtYmVyOyAvKiBmb3Igc2lnbmluZywgcHJvdGVjdGVkIGJ5IHNydl9tdXRleCAqLwogCXN0cnVjdCBzZXNzaW9uX2tleSBzZXNzaW9uX2tleTsKIAl1bnNpZ25lZCBsb25nIGxzdHJwOyAvKiB3aGVuIHdlIGdvdCBsYXN0IHJlc3BvbnNlIGZyb20gdGhpcyBzZXJ2ZXIgKi8KLQl1MTYgZGlhbGVjdDsgLyogZGlhbGVjdCBpbmRleCB0aGF0IHNlcnZlciBjaG9zZSAqLwogCXN0cnVjdCBjaWZzX3NlY21lY2ggc2VjbWVjaDsgLyogY3J5cHRvIHNlYyBtZWNoIGZ1bmN0cywgZGVzY3JpcHRvcnMgKi8KIAkvKiBleHRlbmRlZCBzZWN1cml0eSBmbGF2b3JzIHRoYXQgc2VydmVyIHN1cHBvcnRzICovCisJYm9vbAlzZWNfbnRsbXNzcDsJCS8qIHN1cHBvcnRzIE5UTE1TU1AgKi8KKwlib29sCXNlY19rZXJiZXJvc3UydTsJLyogc3VwcG9ydHMgVTJVIEtlcmJlcm9zICovCiAJYm9vbAlzZWNfa2VyYmVyb3M7CQkvKiBzdXBwb3J0cyBwbGFpbiBLZXJiZXJvcyAqLwogCWJvb2wJc2VjX21za2VyYmVyb3M7CQkvKiBzdXBwb3J0cyBsZWdhY3kgTVMgS2VyYmVyb3MgKi8KLQlib29sCXNlY19rZXJiZXJvc3UydTsJLyogc3VwcG9ydHMgVTJVIEtlcmJlcm9zICovCi0JYm9vbAlzZWNfbnRsbXNzcDsJCS8qIHN1cHBvcnRzIE5UTE1TU1AgKi8KLQlib29sIHNlc3Npb25fZXN0YWI7IC8qIG1hcmsgd2hlbiB2ZXJ5IGZpcnN0IHNlc3MgaXMgZXN0YWJsaXNoZWQgKi8KKwlzdHJ1Y3QgZGVsYXllZF93b3JrCWVjaG87IC8qIGVjaG8gcGluZyB3b3JrcXVldWUgam9iICovCiAjaWZkZWYgQ09ORklHX0NJRlNfRlNDQUNIRQogCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAgICpmc2NhY2hlOyAvKiBjbGllbnQgaW5kZXggY2FjaGUgY29va2llICovCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ0lGU19TVEFUUzIKKwlhdG9taWNfdCBpblNlbmQ7IC8qIHJlcXVlc3RzIHRyeWluZyB0byBzZW5kICovCisJYXRvbWljX3QgbnVtX3dhaXRlcnM7ICAgLyogYmxvY2tlZCB3YWl0aW5nIHRvIGdldCBpbiBzZW5kcmVjdiAqLworI2VuZGlmCiB9OwogCiAvKgorICogTWFjcm9zIHRvIGFsbG93IHRoZSBUQ1BfU2VydmVyX0luZm8tPm5ldCBmaWVsZCBhbmQgcmVsYXRlZCBjb2RlIHRvIGRyb3Agb3V0CisgKiB3aGVuIENPTkZJR19ORVRfTlMgaXNuJ3Qgc2V0LgorICovCisKKyNpZmRlZiBDT05GSUdfTkVUX05TCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqY2lmc19uZXRfbnMoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc3J2KQoreworCXJldHVybiBzcnYtPm5ldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNpZnNfc2V0X25ldF9ucyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzcnYsIHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzcnYtPm5ldCA9IG5ldDsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpjaWZzX25ldF9ucyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzcnYpCit7CisJcmV0dXJuICZpbml0X25ldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNpZnNfc2V0X25ldF9ucyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzcnYsIHN0cnVjdCBuZXQgKm5ldCkKK3sKK30KKworI2VuZGlmCisKKy8qCiAgKiBTZXNzaW9uIHN0cnVjdHVyZS4gIE9uZSBvZiB0aGVzZSBmb3IgZWFjaCB1aWQgc2Vzc2lvbiB3aXRoIGEgcGFydGljdWxhciBob3N0CiAgKi8KIHN0cnVjdCBjaWZzU2VzSW5mbyB7CkBAIC00NDYsMTEgKzQ3NCwxMSBAQAogCS8qIEJCIGFkZCBpbiBsaXN0cyBmb3IgZGlydHkgcGFnZXMgaS5lLiB3cml0ZSBjYWNoaW5nIGluZm8gZm9yIG9wbG9jayAqLwogCXN0cnVjdCBsaXN0X2hlYWQgb3BlbkZpbGVMaXN0OwogCV9fdTMyIGNpZnNBdHRyczsgLyogZS5nLiBET1MgYXJjaGl2ZSBiaXQsIHNwYXJzZSwgY29tcHJlc3NlZCwgc3lzdGVtICovCi0JdW5zaWduZWQgbG9uZyB0aW1lOwkvKiBqaWZmaWVzIG9mIGxhc3QgdXBkYXRlL2NoZWNrIG9mIGlub2RlICovCi0JYm9vbCBjbGllbnRDYW5DYWNoZVJlYWQ6MTsJLyogcmVhZCBvcGxvY2sgKi8KLQlib29sIGNsaWVudENhbkNhY2hlQWxsOjE7CS8qIHJlYWQgYW5kIHdyaXRlYmVoaW5kIG9wbG9jayAqLwotCWJvb2wgZGVsZXRlX3BlbmRpbmc6MTsJCS8qIERFTEVURV9PTl9DTE9TRSBpcyBzZXQgKi8KLQlib29sIGludmFsaWRfbWFwcGluZzoxOwkJLyogcGFnZWNhY2hlIGlzIGludmFsaWQgKi8KKwlib29sIGNsaWVudENhbkNhY2hlUmVhZDsJLyogcmVhZCBvcGxvY2sgKi8KKwlib29sIGNsaWVudENhbkNhY2hlQWxsOwkJLyogcmVhZCBhbmQgd3JpdGViZWhpbmQgb3Bsb2NrICovCisJYm9vbCBkZWxldGVfcGVuZGluZzsJCS8qIERFTEVURV9PTl9DTE9TRSBpcyBzZXQgKi8KKwlib29sIGludmFsaWRfbWFwcGluZzsJCS8qIHBhZ2VjYWNoZSBpcyBpbnZhbGlkICovCisJdW5zaWduZWQgbG9uZyB0aW1lOwkJLyogamlmZmllcyBvZiBsYXN0IHVwZGF0ZSBvZiBpbm9kZSAqLwogCXU2NCAgc2VydmVyX2VvZjsJCS8qIGN1cnJlbnQgZmlsZSBzaXplIG9uIHNlcnZlciAqLwogCXU2NCAgdW5pcXVlaWQ7CQkJLyogc2VydmVyIGlub2RlIG51bWJlciAqLwogCXU2NCAgY3JlYXRldGltZTsJCS8qIGNyZWF0aW9uIHRpbWUgb24gc2VydmVyICovCkBAIC01MDgsNiArNTM2LDE4IEBACiAKICNlbmRpZgogCitzdHJ1Y3QgbWlkX3FfZW50cnk7CisKKy8qCisgKiBUaGlzIGlzIHRoZSBwcm90b3R5cGUgZm9yIHRoZSBtaWQgY2FsbGJhY2sgZnVuY3Rpb24uIFdoZW4gY3JlYXRpbmcgb25lLAorICogdGFrZSBzcGVjaWFsIGNhcmUgdG8gYXZvaWQgZGVhZGxvY2tzLiBUaGluZ3MgdG8gYmVhciBpbiBtaW5kOgorICoKKyAqIC0gaXQgd2lsbCBiZSBjYWxsZWQgYnkgY2lmc2QKKyAqIC0gdGhlIEdsb2JhbE1pZF9Mb2NrIHdpbGwgYmUgaGVsZAorICogLSB0aGUgbWlkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBwZW5kaW5nX21pZF9xIGxpc3QKKyAqLwordHlwZWRlZiB2b2lkIChtaWRfY2FsbGJhY2tfdCkoc3RydWN0IG1pZF9xX2VudHJ5ICptaWQpOworCiAvKiBvbmUgb2YgdGhlc2UgZm9yIGV2ZXJ5IHBlbmRpbmcgQ0lGUyByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgKi8KIHN0cnVjdCBtaWRfcV9lbnRyeSB7CiAJc3RydWN0IGxpc3RfaGVhZCBxaGVhZDsJLyogbWlkcyB3YWl0aW5nIG9uIHJlcGx5IGZyb20gdGhpcyBzZXJ2ZXIgKi8KQEAgLTUxOSw3ICs1NTksOCBAQAogCXVuc2lnbmVkIGxvbmcgd2hlbl9zZW50OyAvKiB0aW1lIHdoZW4gc21iIHNlbmQgZmluaXNoZWQgKi8KIAl1bnNpZ25lZCBsb25nIHdoZW5fcmVjZWl2ZWQ7IC8qIHdoZW4gZGVtdXggY29tcGxldGUgKHRha2VuIG9mZiB3aXJlKSAqLwogI2VuZGlmCi0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CS8qIHRhc2sgd2FpdGluZyBmb3IgcmVzcG9uc2UgKi8KKwltaWRfY2FsbGJhY2tfdCAqY2FsbGJhY2s7IC8qIGNhbGwgY29tcGxldGlvbiBjYWxsYmFjayAqLworCXZvaWQgKmNhbGxiYWNrX2RhdGE7CSAgLyogZ2VuZXJhbCBwdXJwb3NlIHBvaW50ZXIgZm9yIGNhbGxiYWNrICovCiAJc3RydWN0IHNtYl9oZHIgKnJlc3BfYnVmOwkvKiByZXNwb25zZSBidWZmZXIgKi8KIAlpbnQgbWlkU3RhdGU7CS8qIHdpc2ggdGhpcyB3ZXJlIGVudW0gYnV0IGNhbiBub3QgcGFzcyB0byB3YWl0X2V2ZW50ICovCiAJX191OCBjb21tYW5kOwkvKiBzbWIgY29tbWFuZCBjb2RlICovCkBAIC02MTMsNyArNjU0LDcgQEAKICNkZWZpbmUgICBNSURfUkVRVUVTVF9TVUJNSVRURUQgMgogI2RlZmluZSAgIE1JRF9SRVNQT05TRV9SRUNFSVZFRCA0CiAjZGVmaW5lICAgTUlEX1JFVFJZX05FRURFRCAgICAgIDggLyogc2Vzc2lvbiBjbG9zZWQgd2hpbGUgdGhpcyByZXF1ZXN0IG91dCAqLwotI2RlZmluZSAgIE1JRF9OT19SRVNQX05FRURFRCAweDEwCisjZGVmaW5lICAgTUlEX1JFU1BPTlNFX01BTEZPUk1FRCAweDEwCiAKIC8qIFR5cGVzIG9mIHJlc3BvbnNlIGJ1ZmZlciByZXR1cm5lZCBmcm9tIFNlbmRSZWNlaXZlMiAqLwogI2RlZmluZSAgIENJRlNfTk9fQlVGRkVSICAgICAgICAwICAgIC8qIFJlc3BvbnNlIGJ1ZmZlciBub3QgcmV0dXJuZWQgKi8KQEAgLTYyMiwxMiArNjYzLDkgQEAKICNkZWZpbmUgICBDSUZTX0lPVkVDICAgICAgICAgICAgNCAgICAvKiBhcnJheSBvZiByZXNwb25zZSBidWZmZXJzICovCiAKIC8qIFR5cGUgb2YgUmVxdWVzdCB0byBTZW5kUmVjZWl2ZTIgKi8KLSNkZWZpbmUgICBDSUZTX1NURF9PUAkgICAgICAgIDAgICAgLyogbm9ybWFsIHJlcXVlc3QgdGltZW91dCAqLwotI2RlZmluZSAgIENJRlNfTE9OR19PUCAgICAgICAgICAxICAgIC8qIGxvbmcgb3AgKHVwIHRvIDQ1IHNlYywgb3Bsb2NrIHRpbWUpICovCi0jZGVmaW5lICAgQ0lGU19WTE9OR19PUCAgICAgICAgIDIgICAgLyogc2xvb3cgb3AgLSBjYW4gdGFrZSB1cCB0byAxODAgc2Vjb25kcyAqLwotI2RlZmluZSAgIENJRlNfQkxPQ0tJTkdfT1AgICAgICA0ICAgIC8qIG9wZXJhdGlvbiBjYW4gYmxvY2sgKi8KLSNkZWZpbmUgICBDSUZTX0FTWU5DX09QICAgICAgICAgOCAgICAvKiBkbyBub3Qgd2FpdCBmb3IgcmVzcG9uc2UgKi8KLSNkZWZpbmUgICBDSUZTX1RJTUVPVVRfTUFTSyAweDAwRiAgICAvKiBvbmx5IG9uZSBvZiA1IGFib3ZlIHNldCBpbiByZXEgKi8KKyNkZWZpbmUgICBDSUZTX0JMT0NLSU5HX09QICAgICAgMSAgICAvKiBvcGVyYXRpb24gY2FuIGJsb2NrICovCisjZGVmaW5lICAgQ0lGU19BU1lOQ19PUCAgICAgICAgIDIgICAgLyogZG8gbm90IHdhaXQgZm9yIHJlc3BvbnNlICovCisjZGVmaW5lICAgQ0lGU19USU1FT1VUX01BU0sgMHgwMDMgICAgLyogb25seSBvbmUgb2YgYWJvdmUgc2V0IGluIHJlcSAqLwogI2RlZmluZSAgIENJRlNfTE9HX0VSUk9SICAgIDB4MDEwICAgIC8qIGxvZyBOVCBTVEFUVVMgaWYgbm9uLXplcm8gKi8KICNkZWZpbmUgICBDSUZTX0xBUkdFX0JVRl9PUCAweDAyMCAgICAvKiBsYXJnZSByZXF1ZXN0IGJ1ZmZlciAqLwogI2RlZmluZSAgIENJRlNfTk9fUkVTUCAgICAgIDB4MDQwICAgIC8qIG5vIHJlc3BvbnNlIGJ1ZmZlciByZXF1aXJlZCAqLwpAQCAtNzkwLDYgKzgyOCw5IEBACiBHTE9CQUxfRVhURVJOIHVuc2lnbmVkIGludCBjaWZzX21pbl9zbWFsbDsgIC8qIG1pbiBzaXplIG9mIHNtYWxsIGJ1ZiBwb29sICovCiBHTE9CQUxfRVhURVJOIHVuc2lnbmVkIGludCBjaWZzX21heF9wZW5kaW5nOyAvKiBNQVggcmVxdWVzdHMgYXQgb25jZSB0byBzZXJ2ZXIqLwogCisvKiByZWNvbm5lY3QgYWZ0ZXIgdGhpcyBtYW55IGZhaWxlZCBlY2hvIGF0dGVtcHRzICovCitHTE9CQUxfRVhURVJOIHVuc2lnbmVkIHNob3J0IGVjaG9fcmV0cmllczsKKwogdm9pZCBjaWZzX29wbG9ja19icmVhayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBjaWZzX29wbG9ja19icmVha19nZXQoc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUpOwogdm9pZCBjaWZzX29wbG9ja19icmVha19wdXQoc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcGR1LmggYi9mcy9jaWZzL2NpZnNwZHUuaAppbmRleCBkZTM2YjA5Li5iNWM4Y2M1IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNwZHUuaAorKysgYi9mcy9jaWZzL2NpZnNwZHUuaApAQCAtMjMsNiArMjMsNyBAQAogI2RlZmluZSBfQ0lGU1BEVV9ICiAKICNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlICJzbWJmc2N0bC5oIgogCiAjaWZkZWYgQ09ORklHX0NJRlNfV0VBS19QV19IQVNICkBAIC01MCw2ICs1MSw3IEBACiAjZGVmaW5lIFNNQl9DT01fU0VUQVRUUiAgICAgICAgICAgICAgIDB4MDkgLyogdHJpdmlhbCByZXNwb25zZSAqLwogI2RlZmluZSBTTUJfQ09NX0xPQ0tJTkdfQU5EWCAgICAgICAgICAweDI0IC8qIHRyaXZpYWwgcmVzcG9uc2UgKi8KICNkZWZpbmUgU01CX0NPTV9DT1BZICAgICAgICAgICAgICAgICAgMHgyOSAvKiB0cml2aWFsIHJzcCwgZmFpbCBmaWxlbmFtZSBpZ25yZCovCisjZGVmaW5lIFNNQl9DT01fRUNITyAgICAgICAgICAgICAgICAgIDB4MkIgLyogZWNobyByZXF1ZXN0ICovCiAjZGVmaW5lIFNNQl9DT01fT1BFTl9BTkRYICAgICAgICAgICAgIDB4MkQgLyogTGVnYWN5IG9wZW4gZm9yIG9sZCBzZXJ2ZXJzICovCiAjZGVmaW5lIFNNQl9DT01fUkVBRF9BTkRYICAgICAgICAgICAgIDB4MkUKICNkZWZpbmUgU01CX0NPTV9XUklURV9BTkRYICAgICAgICAgICAgMHgyRgpAQCAtNDI1LDExICs0MjcsNDkgQEAKIAlfX3UxNiBNaWQ7CiAJX191OCBXb3JkQ291bnQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotLyogZ2l2ZW4gYSBwb2ludGVyIHRvIGFuIHNtYl9oZHIgcmV0cmlldmUgdGhlIHZhbHVlIG9mIGJ5dGUgY291bnQgKi8KLSNkZWZpbmUgQkNDKHNtYl92YXIpICgqKF9fdTE2ICopKChjaGFyICopKHNtYl92YXIpICsgc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSArICgyICogKHNtYl92YXIpLT5Xb3JkQ291bnQpKSkKLSNkZWZpbmUgQkNDX0xFKHNtYl92YXIpICgqKF9fbGUxNiAqKSgoY2hhciAqKShzbWJfdmFyKSArIHNpemVvZihzdHJ1Y3Qgc21iX2hkcikgKyAoMiAqIChzbWJfdmFyKS0+V29yZENvdW50KSkpCisKKy8qIGdpdmVuIGEgcG9pbnRlciB0byBhbiBzbWJfaGRyIHJldHJpZXZlIGEgY2hhciBwb2ludGVyIHRvIHRoZSBieXRlIGNvdW50ICovCisjZGVmaW5lIEJDQyhzbWJfdmFyKSAoKHVuc2lnbmVkIGNoYXIgKikoc21iX3ZhcikgKyBzaXplb2Yoc3RydWN0IHNtYl9oZHIpICsgXAorCQkJICgyICogKHNtYl92YXIpLT5Xb3JkQ291bnQpKQorCiAvKiBnaXZlbiBhIHBvaW50ZXIgdG8gYW4gc21iX2hkciByZXRyaWV2ZSB0aGUgcG9pbnRlciB0byB0aGUgYnl0ZSBhcmVhICovCi0jZGVmaW5lIHBCeXRlQXJlYShzbWJfdmFyKSAoKHVuc2lnbmVkIGNoYXIgKikoc21iX3ZhcikgKyBzaXplb2Yoc3RydWN0IHNtYl9oZHIpICsgKDIgKiAoc21iX3ZhciktPldvcmRDb3VudCkgKyAyKQorI2RlZmluZSBwQnl0ZUFyZWEoc21iX3ZhcikgKEJDQyhzbWJfdmFyKSArIDIpCisKKy8qIGdldCB0aGUgY29udmVydGVkIEJ5dGVDb3VudCBmb3IgYSBTTUIgcGFja2V0IGFuZCByZXR1cm4gaXQgKi8KK3N0YXRpYyBpbmxpbmUgX191MTYKK2dldF9iY2Moc3RydWN0IHNtYl9oZHIgKmhkcikKK3sKKwlfX3UxNiAqYmNfcHRyID0gKF9fdTE2ICopQkNDKGhkcik7CisKKwlyZXR1cm4gZ2V0X3VuYWxpZ25lZChiY19wdHIpOworfQorCisvKiBnZXQgdGhlIHVuY29udmVydGVkIEJ5dGVDb3VudCBmb3IgYSBTTUIgcGFja2V0IGFuZCByZXR1cm4gaXQgKi8KK3N0YXRpYyBpbmxpbmUgX191MTYKK2dldF9iY2NfbGUoc3RydWN0IHNtYl9oZHIgKmhkcikKK3sKKwlfX2xlMTYgKmJjX3B0ciA9IChfX2xlMTYgKilCQ0MoaGRyKTsKKworCXJldHVybiBnZXRfdW5hbGlnbmVkX2xlMTYoYmNfcHRyKTsKK30KKworLyogc2V0IHRoZSBCeXRlQ291bnQgZm9yIGEgU01CIHBhY2tldCBpbiBob3N0LWJ5dGUgb3JkZXIgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorcHV0X2JjYyhfX3UxNiBjb3VudCwgc3RydWN0IHNtYl9oZHIgKmhkcikKK3sKKwlfX3UxNiAqYmNfcHRyID0gKF9fdTE2ICopQkNDKGhkcik7CisKKwlwdXRfdW5hbGlnbmVkKGNvdW50LCBiY19wdHIpOworfQorCisvKiBzZXQgdGhlIEJ5dGVDb3VudCBmb3IgYSBTTUIgcGFja2V0IGluIGxpdHRsZS1lbmRpYW4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorcHV0X2JjY19sZShfX3UxNiBjb3VudCwgc3RydWN0IHNtYl9oZHIgKmhkcikKK3sKKwlfX2xlMTYgKmJjX3B0ciA9IChfX2xlMTYgKilCQ0MoaGRyKTsKKworCXB1dF91bmFsaWduZWRfbGUxNihjb3VudCwgYmNfcHRyKTsKK30KIAogLyoKICAqIENvbXB1dGVyIE5hbWUgTGVuZ3RoIChzaW5jZSBOZXRiaW9zIG5hbWUgd2FzIGxlbmd0aCAxNiB3aXRoIGxhc3QgYnl0ZSAweDIwKQpAQCAtNzYwLDYgKzgwMCwyMCBAQAogICoKICAqLwogCit0eXBlZGVmIHN0cnVjdCBzbWJfY29tX2VjaG9fcmVxIHsKKwlzdHJ1Y3QJc21iX2hkciBoZHI7CisJX19sZTE2CUVjaG9Db3VudDsKKwlfX2xlMTYJQnl0ZUNvdW50OworCWNoYXIJRGF0YVsxXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgRUNIT19SRVE7CisKK3R5cGVkZWYgc3RydWN0IHNtYl9jb21fZWNob19yc3AgeworCXN0cnVjdAlzbWJfaGRyIGhkcjsKKwlfX2xlMTYJU2VxdWVuY2VOdW1iZXI7CisJX19sZTE2CUJ5dGVDb3VudDsKKwljaGFyCURhdGFbMV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIEVDSE9fUlNQOworCiB0eXBlZGVmIHN0cnVjdCBzbWJfY29tX2xvZ29mZl9hbmR4X3JlcSB7CiAJc3RydWN0IHNtYl9oZHIgaGRyOwkvKiB3Y3QgPSAyICovCiAJX191OCBBbmRYQ29tbWFuZDsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3Byb3RvLmggYi9mcy9jaWZzL2NpZnNwcm90by5oCmluZGV4IGU2ZDE0ODEuLjgwOTZmMjcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3Byb3RvLmgKKysrIGIvZnMvY2lmcy9jaWZzcHJvdG8uaApAQCAtNjEsNiArNjEsMTIgQEAKIAkJY29uc3QgY2hhciAqZnVsbHBhdGgsIGNvbnN0IHN0cnVjdCBkZnNfaW5mbzNfcGFyYW0gKnJlZiwKIAkJY2hhciAqKmRldm5hbWUpOwogLyogZXh0ZXJuIHZvaWQgcmVuZXdfcGFyZW50YWxfdGltZXN0YW1wcyhzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSk7Ki8KK2V4dGVybiBzdHJ1Y3QgbWlkX3FfZW50cnkgKkFsbG9jTWlkUUVudHJ5KGNvbnN0IHN0cnVjdCBzbWJfaGRyICpzbWJfYnVmZmVyLAorCQkJCQlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpOworZXh0ZXJuIHZvaWQgRGVsZXRlTWlkUUVudHJ5KHN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkRW50cnkpOworZXh0ZXJuIGludCBjaWZzX2NhbGxfYXN5bmMoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLAorCQkJICAgc3RydWN0IHNtYl9oZHIgKmluX2J1ZiwgbWlkX2NhbGxiYWNrX3QgKmNhbGxiYWNrLAorCQkJICAgdm9pZCAqY2JkYXRhKTsKIGV4dGVybiBpbnQgU2VuZFJlY2VpdmUoY29uc3QgdW5zaWduZWQgaW50IC8qIHhpZCAqLyAsIHN0cnVjdCBjaWZzU2VzSW5mbyAqLAogCQkJc3RydWN0IHNtYl9oZHIgKiAvKiBpbnB1dCAqLyAsCiAJCQlzdHJ1Y3Qgc21iX2hkciAqIC8qIG91dCAqLyAsCkBAIC03OSw2ICs4NSw4IEBACiBleHRlcm4gYm9vbCBpc192YWxpZF9vcGxvY2tfYnJlYWsoc3RydWN0IHNtYl9oZHIgKnNtYiwKIAkJCQkgIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKik7CiBleHRlcm4gYm9vbCBpc19zaXplX3NhZmVfdG9fY2hhbmdlKHN0cnVjdCBjaWZzSW5vZGVJbmZvICosIF9fdTY0IGVvZik7CitleHRlcm4gdm9pZCBjaWZzX3VwZGF0ZV9lb2Yoc3RydWN0IGNpZnNJbm9kZUluZm8gKmNpZnNpLCBsb2ZmX3Qgb2Zmc2V0LAorCQkJICAgIHVuc2lnbmVkIGludCBieXRlc193cml0dGVuKTsKIGV4dGVybiBzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpmaW5kX3dyaXRhYmxlX2ZpbGUoc3RydWN0IGNpZnNJbm9kZUluZm8gKiwgYm9vbCk7CiBleHRlcm4gc3RydWN0IGNpZnNGaWxlSW5mbyAqZmluZF9yZWFkYWJsZV9maWxlKHN0cnVjdCBjaWZzSW5vZGVJbmZvICosIGJvb2wpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBzbWJDYWxjU2l6ZShzdHJ1Y3Qgc21iX2hkciAqcHRyKTsKQEAgLTM0NywxMiArMzU1LDEzIEBACiAJCQljb25zdCBfX3UxNiBuZXRmaWQsIGNvbnN0IF9fdTY0IGxlbiwKIAkJCWNvbnN0IF9fdTY0IG9mZnNldCwgY29uc3QgX191MzIgbnVtVW5sb2NrLAogCQkJY29uc3QgX191MzIgbnVtTG9jaywgY29uc3QgX191OCBsb2NrVHlwZSwKLQkJCWNvbnN0IGJvb2wgd2FpdEZsYWcpOworCQkJY29uc3QgYm9vbCB3YWl0RmxhZywgY29uc3QgX191OCBvcGxvY2tfbGV2ZWwpOwogZXh0ZXJuIGludCBDSUZTU01CUG9zaXhMb2NrKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQljb25zdCBfX3UxNiBzbWJfZmlsZV9pZCwgY29uc3QgaW50IGdldF9mbGFnLAogCQkJY29uc3QgX191NjQgbGVuLCBzdHJ1Y3QgZmlsZV9sb2NrICosCiAJCQljb25zdCBfX3UxNiBsb2NrX3R5cGUsIGNvbnN0IGJvb2wgd2FpdEZsYWcpOwogZXh0ZXJuIGludCBDSUZTU01CVERpcyhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uKTsKK2V4dGVybiBpbnQgQ0lGU1NNQkVjaG8oc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyKTsKIGV4dGVybiBpbnQgQ0lGU1NNQkxvZ29mZihjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcyk7CiAKIGV4dGVybiBzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlc0luZm9BbGxvYyh2b2lkKTsKQEAgLTM2Niw3ICszNzUsNyBAQAogZXh0ZXJuIGludCBjaWZzX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IHNtYl9oZHIgKiwKIAkJCQkgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLAogCQkJCV9fdTMyIGV4cGVjdGVkX3NlcXVlbmNlX251bWJlcik7Ci1leHRlcm4gdm9pZCBTTUJOVGVuY3J5cHQodW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CitleHRlcm4gaW50IFNNQk5UZW5jcnlwdCh1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKIGV4dGVybiBpbnQgc2V0dXBfbnRsbV9yZXNwb25zZShzdHJ1Y3QgY2lmc1Nlc0luZm8gKik7CiBleHRlcm4gaW50IHNldHVwX250bG12Ml9yc3Aoc3RydWN0IGNpZnNTZXNJbmZvICosIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKik7CiBleHRlcm4gaW50IGNpZnNfY3J5cHRvX3NoYXNoX2FsbG9jYXRlKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKik7CkBAIC00MTYsNCArNDI1LDExIEBACiBleHRlcm4gaW50IENJRlNDaGVja01GU3ltbGluayhzdHJ1Y3QgY2lmc19mYXR0ciAqZmF0dHIsCiAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhdGgsCiAJCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsIGludCB4aWQpOworZXh0ZXJuIGludCBtZGZvdXIodW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIGludCk7CitleHRlcm4gaW50IEVfbWQ0aGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHVuc2lnbmVkIGNoYXIgKnAxNik7CitleHRlcm4gdm9pZCBTTUJlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCisJCQl1bnNpZ25lZCBjaGFyICpwMjQpOworZXh0ZXJuIHZvaWQgRV9QMTYodW5zaWduZWQgY2hhciAqcDE0LCB1bnNpZ25lZCBjaGFyICpwMTYpOworZXh0ZXJuIHZvaWQgRV9QMjQodW5zaWduZWQgY2hhciAqcDIxLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjOCwKKwkJCXVuc2lnbmVkIGNoYXIgKnAyNCk7CiAjZW5kaWYJCQkvKiBfQ0lGU1BST1RPX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggMmY2Nzk1ZS4uOTA0YWE0NyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTEzNiw5ICsxMzYsNiBAQAogCQl9CiAJfQogCi0JaWYgKHNlcy0+c3RhdHVzID09IENpZnNFeGl0aW5nKQotCQlyZXR1cm4gLUVJTzsKLQogCS8qCiAJICogR2l2ZSBkZW11bHRpcGxleCB0aHJlYWQgdXAgdG8gMTAgc2Vjb25kcyB0byByZWNvbm5lY3QsIHNob3VsZCBiZQogCSAqIGdyZWF0ZXIgdGhhbiBjaWZzIHNvY2tldCB0aW1lb3V0IHdoaWNoIGlzIDcgc2Vjb25kcwpAQCAtMTU2LDcgKzE1Myw3IEBACiAJCSAqIHJldHJ5aW5nIHVudGlsIHByb2Nlc3MgaXMga2lsbGVkIG9yIHNlcnZlciBjb21lcwogCQkgKiBiYWNrIG9uLWxpbmUKIAkJICovCi0JCWlmICghdGNvbi0+cmV0cnkgfHwgc2VzLT5zdGF0dXMgPT0gQ2lmc0V4aXRpbmcpIHsKKwkJaWYgKCF0Y29uLT5yZXRyeSkgewogCQkJY0ZZSSgxLCAiZ2F2ZSB1cCB3YWl0aW5nIG9uIHJlY29ubmVjdCBpbiBzbWJfaW5pdCIpOwogCQkJcmV0dXJuIC1FSE9TVERPV047CiAJCX0KQEAgLTMzMSwzNyArMzI4LDM1IEBACiAKIHN0YXRpYyBpbnQgdmFsaWRhdGVfdDIoc3RydWN0IHNtYl90Ml9yc3AgKnBTTUIpCiB7Ci0JaW50IHJjID0gLUVJTlZBTDsKLQlpbnQgdG90YWxfc2l6ZTsKLQljaGFyICpwQkNDOworCXVuc2lnbmVkIGludCB0b3RhbF9zaXplOwogCi0JLyogY2hlY2sgZm9yIHBsYXVzaWJsZSB3Y3QsIGJjYyBhbmQgdDIgZGF0YSBhbmQgcGFybSBzaXplcyAqLworCS8qIGNoZWNrIGZvciBwbGF1c2libGUgd2N0ICovCisJaWYgKHBTTUItPmhkci5Xb3JkQ291bnQgPCAxMCkKKwkJZ290byB2dDJfZXJyOworCiAJLyogY2hlY2sgZm9yIHBhcm0gYW5kIGRhdGEgb2Zmc2V0IGdvaW5nIGJleW9uZCBlbmQgb2Ygc21iICovCi0JaWYgKHBTTUItPmhkci5Xb3JkQ291bnQgPj0gMTApIHsKLQkJaWYgKChsZTE2X3RvX2NwdShwU01CLT50Ml9yc3AuUGFyYW1ldGVyT2Zmc2V0KSA8PSAxMDI0KSAmJgotCQkgICAobGUxNl90b19jcHUocFNNQi0+dDJfcnNwLkRhdGFPZmZzZXQpIDw9IDEwMjQpKSB7Ci0JCQkvKiBjaGVjayB0aGF0IGJjYyBpcyBhdCBsZWFzdCBhcyBiaWcgYXMgcGFybXMgKyBkYXRhICovCi0JCQkvKiBjaGVjayB0aGF0IGJjYyBpcyBsZXNzIHRoYW4gbmVnb3RpYXRlZCBzbWIgYnVmZmVyICovCi0JCQl0b3RhbF9zaXplID0gbGUxNl90b19jcHUocFNNQi0+dDJfcnNwLlBhcmFtZXRlckNvdW50KTsKLQkJCWlmICh0b3RhbF9zaXplIDwgNTEyKSB7Ci0JCQkJdG90YWxfc2l6ZSArPQotCQkJCQlsZTE2X3RvX2NwdShwU01CLT50Ml9yc3AuRGF0YUNvdW50KTsKLQkJCQkvKiBCQ0MgbGUgY29udmVydGVkIGluIFNlbmRSZWNlaXZlICovCi0JCQkJcEJDQyA9IChwU01CLT5oZHIuV29yZENvdW50ICogMikgKwotCQkJCQlzaXplb2Yoc3RydWN0IHNtYl9oZHIpICsKLQkJCQkJKGNoYXIgKilwU01COwotCQkJCWlmICgodG90YWxfc2l6ZSA8PSAoKih1MTYgKilwQkNDKSkgJiYKLQkJCQkgICAodG90YWxfc2l6ZSA8Ci0JCQkJCUNJRlNNYXhCdWZTaXplK01BWF9DSUZTX0hEUl9TSVpFKSkgewotCQkJCQlyZXR1cm4gMDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9CisJaWYgKGdldF91bmFsaWduZWRfbGUxNigmcFNNQi0+dDJfcnNwLlBhcmFtZXRlck9mZnNldCkgPiAxMDI0IHx8CisJICAgIGdldF91bmFsaWduZWRfbGUxNigmcFNNQi0+dDJfcnNwLkRhdGFPZmZzZXQpID4gMTAyNCkKKwkJZ290byB2dDJfZXJyOworCisJLyogY2hlY2sgdGhhdCBiY2MgaXMgYXQgbGVhc3QgYXMgYmlnIGFzIHBhcm1zICsgZGF0YSAqLworCS8qIGNoZWNrIHRoYXQgYmNjIGlzIGxlc3MgdGhhbiBuZWdvdGlhdGVkIHNtYiBidWZmZXIgKi8KKwl0b3RhbF9zaXplID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZwU01CLT50Ml9yc3AuUGFyYW1ldGVyQ291bnQpOworCWlmICh0b3RhbF9zaXplID49IDUxMikKKwkJZ290byB2dDJfZXJyOworCisJdG90YWxfc2l6ZSArPSBnZXRfdW5hbGlnbmVkX2xlMTYoJnBTTUItPnQyX3JzcC5EYXRhQ291bnQpOworCWlmICh0b3RhbF9zaXplID4gZ2V0X2JjYygmcFNNQi0+aGRyKSB8fAorCSAgICB0b3RhbF9zaXplID49IENJRlNNYXhCdWZTaXplICsgTUFYX0NJRlNfSERSX1NJWkUpCisJCWdvdG8gdnQyX2VycjsKKworCXJldHVybiAwOwordnQyX2VycjoKIAljaWZzX2R1bXBfbWVtKCJJbnZhbGlkIHRyYW5zYWN0MiBTTUI6ICIsIChjaGFyICopcFNNQiwKIAkJc2l6ZW9mKHN0cnVjdCBzbWJfdDJfcnNwKSArIDE2KTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIC1FSU5WQUw7CiB9CisKIGludAogQ0lGU1NNQk5lZ290aWF0ZSh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcykKIHsKQEAgLTQ1Miw3ICs0NDcsNiBAQAogCQlzZXJ2ZXItPm1heEJ1ZiA9IG1pbigoX191MzIpbGUxNl90b19jcHUocnNwLT5NYXhCdWZTaXplKSwKIAkJCQkoX191MzIpQ0lGU01heEJ1ZlNpemUgKyBNQVhfQ0lGU19IRFJfU0laRSk7CiAJCXNlcnZlci0+bWF4X3ZjcyA9IGxlMTZfdG9fY3B1KHJzcC0+TWF4TnVtYmVyVmNzKTsKLQkJR0VUVTMyKHNlcnZlci0+c2Vzc2lkKSA9IGxlMzJfdG9fY3B1KHJzcC0+U2Vzc2lvbktleSk7CiAJCS8qIGV2ZW4gdGhvdWdoIHdlIGRvIG5vdCB1c2UgcmF3IHdlIG1pZ2h0IGFzIHdlbGwgc2V0IHRoaXMKIAkJYWNjdXJhdGVseSwgaW4gY2FzZSB3ZSBldmVyIGZpbmQgYSBuZWVkIGZvciBpdCAqLwogCQlpZiAoKGxlMTZfdG9fY3B1KHJzcC0+UmF3TW9kZSkgJiBSQVdfRU5BQkxFKSA9PSBSQVdfRU5BQkxFKSB7CkBAIC01NjYsNyArNTYwLDYgQEAKIAkJCShfX3UzMikgQ0lGU01heEJ1ZlNpemUgKyBNQVhfQ0lGU19IRFJfU0laRSk7CiAJc2VydmVyLT5tYXhfcncgPSBsZTMyX3RvX2NwdShwU01Cci0+TWF4UmF3U2l6ZSk7CiAJY0ZZSShEQkcyLCAiTWF4IGJ1ZiA9ICVkIiwgc2VzLT5zZXJ2ZXItPm1heEJ1Zik7Ci0JR0VUVTMyKHNlcy0+c2VydmVyLT5zZXNzaWQpID0gbGUzMl90b19jcHUocFNNQnItPlNlc3Npb25LZXkpOwogCXNlcnZlci0+Y2FwYWJpbGl0aWVzID0gbGUzMl90b19jcHUocFNNQnItPkNhcGFiaWxpdGllcyk7CiAJc2VydmVyLT50aW1lQWRqID0gKGludCkoX19zMTYpbGUxNl90b19jcHUocFNNQnItPlNlcnZlclRpbWVab25lKTsKIAlzZXJ2ZXItPnRpbWVBZGogKj0gNjA7CkBAIC03MDYsNiArNjk5LDUzIEBACiAJcmV0dXJuIHJjOwogfQogCisvKgorICogVGhpcyBpcyBhIG5vLW9wIGZvciBub3cuIFdlJ3JlIG5vdCByZWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgcmVwbHksIGJ1dAorICogcmF0aGVyIGluIHRoZSBmYWN0IHRoYXQgdGhlIHNlcnZlciBzZW50IG9uZSBhbmQgdGhhdCBzZXJ2ZXItPmxzdHJwCisgKiBnZXRzIHVwZGF0ZWQuCisgKgorICogRklYTUU6IG1heWJlIHdlIHNob3VsZCBjb25zaWRlciBjaGVja2luZyB0aGF0IHRoZSByZXBseSBtYXRjaGVzIHJlcXVlc3Q/CisgKi8KK3N0YXRpYyB2b2lkCitjaWZzX2VjaG9fY2FsbGJhY2soc3RydWN0IG1pZF9xX2VudHJ5ICptaWQpCit7CisJc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyID0gbWlkLT5jYWxsYmFja19kYXRhOworCisJRGVsZXRlTWlkUUVudHJ5KG1pZCk7CisJYXRvbWljX2RlYygmc2VydmVyLT5pbkZsaWdodCk7CisJd2FrZV91cCgmc2VydmVyLT5yZXF1ZXN0X3EpOworfQorCitpbnQKK0NJRlNTTUJFY2hvKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcikKK3sKKwlFQ0hPX1JFUSAqc21iOworCWludCByYyA9IDA7CisKKwljRllJKDEsICJJbiBlY2hvIHJlcXVlc3QiKTsKKworCXJjID0gc21hbGxfc21iX2luaXQoU01CX0NPTV9FQ0hPLCAwLCBOVUxMLCAodm9pZCAqKikmc21iKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCS8qIHNldCB1cCBlY2hvIHJlcXVlc3QgKi8KKwlzbWItPmhkci5UaWQgPSBjcHVfdG9fbGUxNigweGZmZmYpOworCXNtYi0+aGRyLldvcmRDb3VudCA9IDE7CisJcHV0X3VuYWxpZ25lZF9sZTE2KDEsICZzbWItPkVjaG9Db3VudCk7CisJcHV0X2JjY19sZSgxLCAmc21iLT5oZHIpOworCXNtYi0+RGF0YVswXSA9ICdhJzsKKwlzbWItPmhkci5zbWJfYnVmX2xlbmd0aCArPSAzOworCisJcmMgPSBjaWZzX2NhbGxfYXN5bmMoc2VydmVyLCAoc3RydWN0IHNtYl9oZHIgKilzbWIsCisJCQkJY2lmc19lY2hvX2NhbGxiYWNrLCBzZXJ2ZXIpOworCWlmIChyYykKKwkJY0ZZSSgxLCAiRWNobyByZXF1ZXN0IGZhaWxlZDogJWQiLCByYyk7CisKKwljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKHNtYik7CisKKwlyZXR1cm4gcmM7Cit9CisKIGludAogQ0lGU1NNQkxvZ29mZihjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcykKIHsKQEAgLTExOTMsNyArMTIzMyw3IEBACiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoY291bnQpOwogCS8qIGxvbmdfb3Agc2V0IHRvIDEgdG8gYWxsb3cgZm9yIG9wbG9jayBicmVhayB0aW1lb3V0cyAqLwogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAotCQkJKHN0cnVjdCBzbWJfaGRyICopcFNNQnIsICZieXRlc19yZXR1cm5lZCwgQ0lGU19MT05HX09QKTsKKwkJCShzdHJ1Y3Qgc21iX2hkciAqKXBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwogCWNpZnNfc3RhdHNfaW5jKCZ0Y29uLT5udW1fb3BlbnMpOwogCWlmIChyYykgewogCQljRllJKDEsICJFcnJvciBpbiBPcGVuID0gJWQiLCByYyk7CkBAIC0xMzA2LDcgKzEzNDYsNyBAQAogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGNvdW50KTsKIAkvKiBsb25nX29wIHNldCB0byAxIHRvIGFsbG93IGZvciBvcGxvY2sgYnJlYWsgdGltZW91dHMgKi8KIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKLQkJCShzdHJ1Y3Qgc21iX2hkciAqKXBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIENJRlNfTE9OR19PUCk7CisJCQkoc3RydWN0IHNtYl9oZHIgKilwU01CciwgJmJ5dGVzX3JldHVybmVkLCAwKTsKIAljaWZzX3N0YXRzX2luYygmdGNvbi0+bnVtX29wZW5zKTsKIAlpZiAocmMpIHsKIAkJY0ZZSSgxLCAiRXJyb3IgaW4gT3BlbiA9ICVkIiwgcmMpOwpAQCAtMTM4OCw3ICsxNDI4LDcgQEAKIAlpb3ZbMF0uaW92X2Jhc2UgPSAoY2hhciAqKXBTTUI7CiAJaW92WzBdLmlvdl9sZW4gPSBwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKyA0OwogCXJjID0gU2VuZFJlY2VpdmUyKHhpZCwgdGNvbi0+c2VzLCBpb3YsIDEgLyogbnVtIGlvdmVjcyAqLywKLQkJCSAmcmVzcF9idWZfdHlwZSwgQ0lGU19TVERfT1AgfCBDSUZTX0xPR19FUlJPUik7CisJCQkgJnJlc3BfYnVmX3R5cGUsIENJRlNfTE9HX0VSUk9SKTsKIAljaWZzX3N0YXRzX2luYygmdGNvbi0+bnVtX3JlYWRzKTsKIAlwU01CciA9IChSRUFEX1JTUCAqKWlvdlswXS5pb3ZfYmFzZTsKIAlpZiAocmMpIHsKQEAgLTE2NjMsNyArMTcwMyw4IEBACiBDSUZTU01CTG9jayhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCSAgICBjb25zdCBfX3UxNiBzbWJfZmlsZV9pZCwgY29uc3QgX191NjQgbGVuLAogCSAgICBjb25zdCBfX3U2NCBvZmZzZXQsIGNvbnN0IF9fdTMyIG51bVVubG9jaywKLQkgICAgY29uc3QgX191MzIgbnVtTG9jaywgY29uc3QgX191OCBsb2NrVHlwZSwgY29uc3QgYm9vbCB3YWl0RmxhZykKKwkgICAgY29uc3QgX191MzIgbnVtTG9jaywgY29uc3QgX191OCBsb2NrVHlwZSwKKwkgICAgY29uc3QgYm9vbCB3YWl0RmxhZywgY29uc3QgX191OCBvcGxvY2tfbGV2ZWwpCiB7CiAJaW50IHJjID0gMDsKIAlMT0NLX1JFUSAqcFNNQiA9IE5VTEw7CkBAIC0xNjkxLDYgKzE3MzIsNyBAQAogCXBTTUItPk51bWJlck9mTG9ja3MgPSBjcHVfdG9fbGUxNihudW1Mb2NrKTsKIAlwU01CLT5OdW1iZXJPZlVubG9ja3MgPSBjcHVfdG9fbGUxNihudW1VbmxvY2spOwogCXBTTUItPkxvY2tUeXBlID0gbG9ja1R5cGU7CisJcFNNQi0+T3Bsb2NrTGV2ZWwgPSBvcGxvY2tfbGV2ZWw7CiAJcFNNQi0+QW5kWENvbW1hbmQgPSAweEZGOwkvKiBub25lICovCiAJcFNNQi0+RmlkID0gc21iX2ZpbGVfaWQ7IC8qIG5ldGZpZCBzdGF5cyBsZSAqLwogCkBAIC0zMDg3LDcgKzMxMjksNyBAQAogCWlvdlswXS5pb3ZfbGVuID0gcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICsgNDsKIAogCXJjID0gU2VuZFJlY2VpdmUyKHhpZCwgdGNvbi0+c2VzLCBpb3YsIDEgLyogbnVtIGlvdmVjICovLCAmYnVmX3R5cGUsCi0JCQkgQ0lGU19TVERfT1ApOworCQkJIDApOwogCWNpZnNfc3RhdHNfaW5jKCZ0Y29uLT5udW1fYWNsX2dldCk7CiAJaWYgKHJjKSB7CiAJCWNGWUkoMSwgIlNlbmQgZXJyb3IgaW4gUXVlcnlTZWNEZXNjID0gJWQiLCByYyk7CkBAIC00ODY5LDcgKzQ5MTEsNiBAQAogCQkgICBfX3UxNiBmaWQsIF9fdTMyIHBpZF9vZl9vcGVuZXIsIGJvb2wgU2V0QWxsb2NhdGlvbikKIHsKIAlzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfc2ZpX3JlcSAqcFNNQiAgPSBOVUxMOwotCWNoYXIgKmRhdGFfb2Zmc2V0OwogCXN0cnVjdCBmaWxlX2VuZF9vZl9maWxlX2luZm8gKnBhcm1fZGF0YTsKIAlpbnQgcmMgPSAwOwogCV9fdTE2IHBhcmFtcywgcGFyYW1fb2Zmc2V0LCBvZmZzZXQsIGJ5dGVfY291bnQsIGNvdW50OwpAQCAtNDg5Myw4ICs0OTM0LDYgQEAKIAlwYXJhbV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfc2ZpX3JlcSwgRmlkKSAtIDQ7CiAJb2Zmc2V0ID0gcGFyYW1fb2Zmc2V0ICsgcGFyYW1zOwogCi0JZGF0YV9vZmZzZXQgPSAoY2hhciAqKSAoJnBTTUItPmhkci5Qcm90b2NvbCkgKyBvZmZzZXQ7Ci0KIAljb3VudCA9IHNpemVvZihzdHJ1Y3QgZmlsZV9lbmRfb2ZfZmlsZV9pbmZvKTsKIAlwU01CLT5NYXhQYXJhbWV0ZXJDb3VudCA9IGNwdV90b19sZTE2KDIpOwogCS8qIEJCIGZpbmQgZXhhY3QgbWF4IFNNQiBQRFUgZnJvbSBzZXNzIHN0cnVjdHVyZSBCQiAqLwpAQCAtNTU2Miw3ICs1NjAxLDcgQEAKIAl9CiAKIAkvKiBtYWtlIHN1cmUgbGlzdF9sZW4gZG9lc24ndCBnbyBwYXN0IGVuZCBvZiBTTUIgKi8KLQllbmRfb2Zfc21iID0gKGNoYXIgKilwQnl0ZUFyZWEoJnBTTUJyLT5oZHIpICsgQkNDKCZwU01Cci0+aGRyKTsKKwllbmRfb2Zfc21iID0gKGNoYXIgKilwQnl0ZUFyZWEoJnBTTUJyLT5oZHIpICsgZ2V0X2JjYygmcFNNQnItPmhkcik7CiAJaWYgKChjaGFyICopZWFfcmVzcG9uc2VfZGF0YSArIGxpc3RfbGVuID4gZW5kX29mX3NtYikgewogCQljRllJKDEsICJFQSBsaXN0IGFwcGVhcnMgdG8gZ28gYmV5b25kIFNNQiIpOwogCQlyYyA9IC1FSU87CmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IDlmNTk4ODcuLjhkNmMxN2EgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY29ubmVjdC5jCisrKyBiL2ZzL2NpZnMvY29ubmVjdC5jCkBAIC01Miw4ICs1Miw4IEBACiAjZGVmaW5lIENJRlNfUE9SVCA0NDUKICNkZWZpbmUgUkZDMTAwMV9QT1JUIDEzOQogCi1leHRlcm4gdm9pZCBTTUJOVGVuY3J5cHQodW5zaWduZWQgY2hhciAqcGFzc3dkLCB1bnNpZ25lZCBjaGFyICpjOCwKLQkJCSB1bnNpZ25lZCBjaGFyICpwMjQpOworLyogU01CIGVjaG8gInRpbWVvdXQiIC0tIEZJWE1FOiB0dW5hYmxlPyAqLworI2RlZmluZSBTTUJfRUNIT19JTlRFUlZBTCAoNjAgKiBIWikKIAogZXh0ZXJuIG1lbXBvb2xfdCAqY2lmc19yZXFfcG9vbHA7CiAKQEAgLTg0LDYgKzg0LDcgQEAKIAlib29sIG5vX3hhdHRyOjE7ICAgLyogc2V0IGlmIHhhdHRyIChFQSkgc3VwcG9ydCBzaG91bGQgYmUgZGlzYWJsZWQqLwogCWJvb2wgc2VydmVyX2lubzoxOyAvKiB1c2UgaW5vZGUgbnVtYmVycyBmcm9tIHNlcnZlciBpZSBVbmlxdWVJZCAqLwogCWJvb2wgZGlyZWN0X2lvOjE7CisJYm9vbCBzdHJpY3RfaW86MTsgLyogc3RyaWN0IGNhY2hlIGJlaGF2aW9yICovCiAJYm9vbCByZW1hcDoxOyAgICAgIC8qIHNldCB0byByZW1hcCBzZXZlbiByZXNlcnZlZCBjaGFycyBpbiBmaWxlbmFtZXMgKi8KIAlib29sIHBvc2l4X3BhdGhzOjE7IC8qIHVuc2V0IHRvIG5vdCBhc2sgZm9yIHBvc2l4IHBhdGhuYW1lcy4gKi8KIAlib29sIG5vX2xpbnV4X2V4dDoxOwpAQCAtMTUyLDYgKzE1Myw3IEBACiAKIAkvKiBiZWZvcmUgcmVjb25uZWN0aW5nIHRoZSB0Y3Agc2Vzc2lvbiwgbWFyayB0aGUgc21iIHNlc3Npb24gKHVpZCkKIAkJYW5kIHRoZSB0aWQgYmFkIHNvIHRoZXkgYXJlIG5vdCB1c2VkIHVudGlsIHJlY29ubmVjdGVkICovCisJY0ZZSSgxLCAiJXM6IG1hcmtpbmcgc2Vzc2lvbnMgYW5kIHRjb25zIGZvciByZWNvbm5lY3QiLCBfX2Z1bmNfXyk7CiAJc3Bpbl9sb2NrKCZjaWZzX3RjcF9zZXNfbG9jayk7CiAJbGlzdF9mb3JfZWFjaCh0bXAsICZzZXJ2ZXItPnNtYl9zZXNfbGlzdCkgewogCQlzZXMgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGNpZnNTZXNJbmZvLCBzbWJfc2VzX2xpc3QpOwpAQCAtMTYzLDcgKzE2NSw5IEBACiAJCX0KIAl9CiAJc3Bpbl91bmxvY2soJmNpZnNfdGNwX3Nlc19sb2NrKTsKKwogCS8qIGRvIG5vdCB3YW50IHRvIGJlIHNlbmRpbmcgZGF0YSBvbiBhIHNvY2tldCB3ZSBhcmUgZnJlZWluZyAqLworCWNGWUkoMSwgIiVzOiB0ZWFyaW5nIGRvd24gc29ja2V0IiwgX19mdW5jX18pOwogCW11dGV4X2xvY2soJnNlcnZlci0+c3J2X211dGV4KTsKIAlpZiAoc2VydmVyLT5zc29ja2V0KSB7CiAJCWNGWUkoMSwgIlN0YXRlOiAweCV4IEZsYWdzOiAweCVseCIsIHNlcnZlci0+c3NvY2tldC0+c3RhdGUsCkBAIC0xODAsMjIgKzE4NCwyMCBAQAogCWtmcmVlKHNlcnZlci0+c2Vzc2lvbl9rZXkucmVzcG9uc2UpOwogCXNlcnZlci0+c2Vzc2lvbl9rZXkucmVzcG9uc2UgPSBOVUxMOwogCXNlcnZlci0+c2Vzc2lvbl9rZXkubGVuID0gMDsKKwlzZXJ2ZXItPmxzdHJwID0gamlmZmllczsKKwltdXRleF91bmxvY2soJnNlcnZlci0+c3J2X211dGV4KTsKIAorCS8qIG1hcmsgc3VibWl0dGVkIE1JRHMgZm9yIHJldHJ5IGFuZCBpc3N1ZSBjYWxsYmFjayAqLworCWNGWUkoMSwgIiVzOiBpc3N1aW5nIG1pZCBjYWxsYmFja3MiLCBfX2Z1bmNfXyk7CiAJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7Ci0JbGlzdF9mb3JfZWFjaCh0bXAsICZzZXJ2ZXItPnBlbmRpbmdfbWlkX3EpIHsKLQkJbWlkX2VudHJ5ID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdAotCQkJCQltaWRfcV9lbnRyeSwKLQkJCQkJcWhlYWQpOwotCQlpZiAobWlkX2VudHJ5LT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpIHsKLQkJCQkvKiBNYXJrIG90aGVyIGludHJhbnNpdCByZXF1ZXN0cyBhcyBuZWVkaW5nCi0JCQkJICAgcmV0cnkgc28gd2UgZG8gbm90IGltbWVkaWF0ZWx5IG1hcmsgdGhlCi0JCQkJICAgc2Vzc2lvbiBiYWQgYWdhaW4gKGllIGFmdGVyIHdlIHJlY29ubmVjdAotCQkJCSAgIGJlbG93KSBhcyB0aGV5IHRpbWVvdXQgdG9vICovCisJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMiwgJnNlcnZlci0+cGVuZGluZ19taWRfcSkgeworCQltaWRfZW50cnkgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IG1pZF9xX2VudHJ5LCBxaGVhZCk7CisJCWlmIChtaWRfZW50cnktPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkKIAkJCW1pZF9lbnRyeS0+bWlkU3RhdGUgPSBNSURfUkVUUllfTkVFREVEOwotCQl9CisJCWxpc3RfZGVsX2luaXQoJm1pZF9lbnRyeS0+cWhlYWQpOworCQltaWRfZW50cnktPmNhbGxiYWNrKG1pZF9lbnRyeSk7CiAJfQogCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7Ci0JbXV0ZXhfdW5sb2NrKCZzZXJ2ZXItPnNydl9tdXRleCk7CiAKIAl3aGlsZSAoKHNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNFeGl0aW5nKSAmJgogCSAgICAgICAoc2VydmVyLT50Y3BTdGF0dXMgIT0gQ2lmc0dvb2QpKSB7CkBAIC0yMTIsMTAgKzIxNCw5IEBACiAJCQlpZiAoc2VydmVyLT50Y3BTdGF0dXMgIT0gQ2lmc0V4aXRpbmcpCiAJCQkJc2VydmVyLT50Y3BTdGF0dXMgPSBDaWZzR29vZDsKIAkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7Ci0JLyoJCWF0b21pY19zZXQoJnNlcnZlci0+aW5GbGlnaHQsMCk7Ki8KLQkJCXdha2VfdXAoJnNlcnZlci0+cmVzcG9uc2VfcSk7CiAJCX0KIAl9CisKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTIyOSw5ICsyMzAsOCBAQAogc3RhdGljIGludCBjaGVjazJuZFQyKHN0cnVjdCBzbWJfaGRyICpwU01CLCB1bnNpZ25lZCBpbnQgbWF4QnVmU2l6ZSkKIHsKIAlzdHJ1Y3Qgc21iX3QyX3JzcCAqcFNNQnQ7Ci0JaW50IHRvdGFsX2RhdGFfc2l6ZTsKLQlpbnQgZGF0YV9pbl90aGlzX3JzcDsKIAlpbnQgcmVtYWluaW5nOworCV9fdTE2IHRvdGFsX2RhdGFfc2l6ZSwgZGF0YV9pbl90aGlzX3JzcDsKIAogCWlmIChwU01CLT5Db21tYW5kICE9IFNNQl9DT01fVFJBTlNBQ1RJT04yKQogCQlyZXR1cm4gMDsKQEAgLTI0NSw4ICsyNDUsOCBAQAogCiAJcFNNQnQgPSAoc3RydWN0IHNtYl90Ml9yc3AgKilwU01COwogCi0JdG90YWxfZGF0YV9zaXplID0gbGUxNl90b19jcHUocFNNQnQtPnQyX3JzcC5Ub3RhbERhdGFDb3VudCk7Ci0JZGF0YV9pbl90aGlzX3JzcCA9IGxlMTZfdG9fY3B1KHBTTUJ0LT50Ml9yc3AuRGF0YUNvdW50KTsKKwl0b3RhbF9kYXRhX3NpemUgPSBnZXRfdW5hbGlnbmVkX2xlMTYoJnBTTUJ0LT50Ml9yc3AuVG90YWxEYXRhQ291bnQpOworCWRhdGFfaW5fdGhpc19yc3AgPSBnZXRfdW5hbGlnbmVkX2xlMTYoJnBTTUJ0LT50Ml9yc3AuRGF0YUNvdW50KTsKIAogCXJlbWFpbmluZyA9IHRvdGFsX2RhdGFfc2l6ZSAtIGRhdGFfaW5fdGhpc19yc3A7CiAKQEAgLTI3MiwyMSArMjcyLDE4IEBACiB7CiAJc3RydWN0IHNtYl90Ml9yc3AgKnBTTUIyID0gKHN0cnVjdCBzbWJfdDJfcnNwICopcHNlY29uZDsKIAlzdHJ1Y3Qgc21iX3QyX3JzcCAqcFNNQnQgID0gKHN0cnVjdCBzbWJfdDJfcnNwICopcFRhcmdldFNNQjsKLQlpbnQgdG90YWxfZGF0YV9zaXplOwotCWludCB0b3RhbF9pbl9idWY7Ci0JaW50IHJlbWFpbmluZzsKLQlpbnQgdG90YWxfaW5fYnVmMjsKIAljaGFyICpkYXRhX2FyZWFfb2ZfdGFyZ2V0OwogCWNoYXIgKmRhdGFfYXJlYV9vZl9idWYyOwotCV9fdTE2IGJ5dGVfY291bnQ7CisJaW50IHJlbWFpbmluZzsKKwlfX3UxNiBieXRlX2NvdW50LCB0b3RhbF9kYXRhX3NpemUsIHRvdGFsX2luX2J1ZiwgdG90YWxfaW5fYnVmMjsKIAotCXRvdGFsX2RhdGFfc2l6ZSA9IGxlMTZfdG9fY3B1KHBTTUJ0LT50Ml9yc3AuVG90YWxEYXRhQ291bnQpOworCXRvdGFsX2RhdGFfc2l6ZSA9IGdldF91bmFsaWduZWRfbGUxNigmcFNNQnQtPnQyX3JzcC5Ub3RhbERhdGFDb3VudCk7CiAKLQlpZiAodG90YWxfZGF0YV9zaXplICE9IGxlMTZfdG9fY3B1KHBTTUIyLT50Ml9yc3AuVG90YWxEYXRhQ291bnQpKSB7CisJaWYgKHRvdGFsX2RhdGFfc2l6ZSAhPQorCSAgICBnZXRfdW5hbGlnbmVkX2xlMTYoJnBTTUIyLT50Ml9yc3AuVG90YWxEYXRhQ291bnQpKQogCQljRllJKDEsICJ0b3RhbCBkYXRhIHNpemUgb2YgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IHQyIGRpZmZlciIpOwotCX0KIAotCXRvdGFsX2luX2J1ZiA9IGxlMTZfdG9fY3B1KHBTTUJ0LT50Ml9yc3AuRGF0YUNvdW50KTsKKwl0b3RhbF9pbl9idWYgPSBnZXRfdW5hbGlnbmVkX2xlMTYoJnBTTUJ0LT50Ml9yc3AuRGF0YUNvdW50KTsKIAogCXJlbWFpbmluZyA9IHRvdGFsX2RhdGFfc2l6ZSAtIHRvdGFsX2luX2J1ZjsKIApAQCAtMjk2LDI4ICsyOTMsMjggQEAKIAlpZiAocmVtYWluaW5nID09IDApIC8qIG5vdGhpbmcgdG8gZG8sIGlnbm9yZSAqLwogCQlyZXR1cm4gMDsKIAotCXRvdGFsX2luX2J1ZjIgPSBsZTE2X3RvX2NwdShwU01CMi0+dDJfcnNwLkRhdGFDb3VudCk7CisJdG90YWxfaW5fYnVmMiA9IGdldF91bmFsaWduZWRfbGUxNigmcFNNQjItPnQyX3JzcC5EYXRhQ291bnQpOwogCWlmIChyZW1haW5pbmcgPCB0b3RhbF9pbl9idWYyKSB7CiAJCWNGWUkoMSwgInRyYW5zYWN0MiAybmQgcmVzcG9uc2UgY29udGFpbnMgdG9vIG11Y2ggZGF0YSIpOwogCX0KIAogCS8qIGZpbmQgZW5kIG9mIGZpcnN0IFNNQiBkYXRhIGFyZWEgKi8KIAlkYXRhX2FyZWFfb2ZfdGFyZ2V0ID0gKGNoYXIgKikmcFNNQnQtPmhkci5Qcm90b2NvbCArCi0JCQkJbGUxNl90b19jcHUocFNNQnQtPnQyX3JzcC5EYXRhT2Zmc2V0KTsKKwkJCQlnZXRfdW5hbGlnbmVkX2xlMTYoJnBTTUJ0LT50Ml9yc3AuRGF0YU9mZnNldCk7CiAJLyogdmFsaWRhdGUgdGFyZ2V0IGFyZWEgKi8KIAotCWRhdGFfYXJlYV9vZl9idWYyID0gKGNoYXIgKikgJnBTTUIyLT5oZHIuUHJvdG9jb2wgKwotCQkJCQlsZTE2X3RvX2NwdShwU01CMi0+dDJfcnNwLkRhdGFPZmZzZXQpOworCWRhdGFfYXJlYV9vZl9idWYyID0gKGNoYXIgKikmcFNNQjItPmhkci5Qcm90b2NvbCArCisJCQkJZ2V0X3VuYWxpZ25lZF9sZTE2KCZwU01CMi0+dDJfcnNwLkRhdGFPZmZzZXQpOwogCiAJZGF0YV9hcmVhX29mX3RhcmdldCArPSB0b3RhbF9pbl9idWY7CiAKIAkvKiBjb3B5IHNlY29uZCBidWZmZXIgaW50byBlbmQgb2YgZmlyc3QgYnVmZmVyICovCiAJbWVtY3B5KGRhdGFfYXJlYV9vZl90YXJnZXQsIGRhdGFfYXJlYV9vZl9idWYyLCB0b3RhbF9pbl9idWYyKTsKIAl0b3RhbF9pbl9idWYgKz0gdG90YWxfaW5fYnVmMjsKLQlwU01CdC0+dDJfcnNwLkRhdGFDb3VudCA9IGNwdV90b19sZTE2KHRvdGFsX2luX2J1Zik7Ci0JYnl0ZV9jb3VudCA9IGxlMTZfdG9fY3B1KEJDQ19MRShwVGFyZ2V0U01CKSk7CisJcHV0X3VuYWxpZ25lZF9sZTE2KHRvdGFsX2luX2J1ZiwgJnBTTUJ0LT50Ml9yc3AuRGF0YUNvdW50KTsKKwlieXRlX2NvdW50ID0gZ2V0X2JjY19sZShwVGFyZ2V0U01CKTsKIAlieXRlX2NvdW50ICs9IHRvdGFsX2luX2J1ZjI7Ci0JQkNDX0xFKHBUYXJnZXRTTUIpID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CisJcHV0X2JjY19sZShieXRlX2NvdW50LCBwVGFyZ2V0U01CKTsKIAogCWJ5dGVfY291bnQgPSBwVGFyZ2V0U01CLT5zbWJfYnVmX2xlbmd0aDsKIAlieXRlX2NvdW50ICs9IHRvdGFsX2luX2J1ZjI7CkBAIC0zMzEsNyArMzI4LDMxIEBACiAJCXJldHVybiAwOyAvKiB3ZSBhcmUgZG9uZSAqLwogCX0gZWxzZSAvKiBtb3JlIHJlc3BvbnNlcyB0byBnbyAqLwogCQlyZXR1cm4gMTsKK30KIAorc3RhdGljIHZvaWQKK2NpZnNfZWNob19yZXF1ZXN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlpbnQgcmM7CisJc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyID0gY29udGFpbmVyX29mKHdvcmssCisJCQkJCXN0cnVjdCBUQ1BfU2VydmVyX0luZm8sIGVjaG8ud29yayk7CisKKwkvKgorCSAqIFdlIGNhbm5vdCBzZW5kIGFuIGVjaG8gdW50aWwgdGhlIE5FR09USUFURV9QUk9UT0NPTCByZXF1ZXN0IGlzCisJICogZG9uZSwgd2hpY2ggaXMgaW5kaWNhdGVkIGJ5IG1heEJ1ZiAhPSAwLiBBbHNvLCBubyBuZWVkIHRvIHBpbmcgaWYKKwkgKiB3ZSBnb3QgYSByZXNwb25zZSByZWNlbnRseQorCSAqLworCWlmIChzZXJ2ZXItPm1heEJ1ZiA9PSAwIHx8CisJICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIHNlcnZlci0+bHN0cnAgKyBTTUJfRUNIT19JTlRFUlZBTCAtIEhaKSkKKwkJZ290byByZXF1ZXVlX2VjaG87CisKKwlyYyA9IENJRlNTTUJFY2hvKHNlcnZlcik7CisJaWYgKHJjKQorCQljRllJKDEsICJVbmFibGUgdG8gc2VuZCBlY2hvIHJlcXVlc3QgdG8gc2VydmVyOiAlcyIsCisJCQlzZXJ2ZXItPmhvc3RuYW1lKTsKKworcmVxdWV1ZV9lY2hvOgorCXF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fbnJ0X3dxLCAmc2VydmVyLT5lY2hvLCBTTUJfRUNIT19JTlRFUlZBTCk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTM0NSw4ICszNjYsNyBAQAogCXN0cnVjdCBtc2doZHIgc21iX21zZzsKIAlzdHJ1Y3Qga3ZlYyBpb3Y7CiAJc3RydWN0IHNvY2tldCAqY3NvY2tldCA9IHNlcnZlci0+c3NvY2tldDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7Ci0Jc3RydWN0IGNpZnNTZXNJbmZvICpzZXM7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wLCAqdG1wMjsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfdG9fd2FrZSA9IE5VTEw7CiAJc3RydWN0IG1pZF9xX2VudHJ5ICptaWRfZW50cnk7CiAJY2hhciB0ZW1wOwpAQCAtMzk5LDcgKzQxOSwyMCBAQAogCQlzbWJfbXNnLm1zZ19jb250cm9sID0gTlVMTDsKIAkJc21iX21zZy5tc2dfY29udHJvbGxlbiA9IDA7CiAJCXBkdV9sZW5ndGggPSA0OyAvKiBlbm91Z2ggdG8gZ2V0IFJGQzEwMDEgaGVhZGVyICovCisKIGluY29tcGxldGVfcmN2OgorCQlpZiAoZWNob19yZXRyaWVzID4gMCAmJgorCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBzZXJ2ZXItPmxzdHJwICsKKwkJCQkJKGVjaG9fcmV0cmllcyAqIFNNQl9FQ0hPX0lOVEVSVkFMKSkpIHsKKwkJCWNFUlJPUigxLCAiU2VydmVyICVzIGhhcyBub3QgcmVzcG9uZGVkIGluICVkIHNlY29uZHMuICIKKwkJCQkgICJSZWNvbm5lY3RpbmcuLi4iLCBzZXJ2ZXItPmhvc3RuYW1lLAorCQkJCSAgKGVjaG9fcmV0cmllcyAqIFNNQl9FQ0hPX0lOVEVSVkFMIC8gSFopKTsKKwkJCWNpZnNfcmVjb25uZWN0KHNlcnZlcik7CisJCQljc29ja2V0ID0gc2VydmVyLT5zc29ja2V0OworCQkJd2FrZV91cCgmc2VydmVyLT5yZXNwb25zZV9xKTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJbGVuZ3RoID0KIAkJICAgIGtlcm5lbF9yZWN2bXNnKGNzb2NrZXQsICZzbWJfbXNnLAogCQkJCSZpb3YsIDEsIHBkdV9sZW5ndGgsIDAgLyogQkIgb3RoZXIgZmxhZ3M/ICovKTsKQEAgLTU1MCwyNSArNTgzLDM2IEBACiAJCWVsc2UgaWYgKHJlY29ubmVjdCA9PSAxKQogCQkJY29udGludWU7CiAKLQkJbGVuZ3RoICs9IDQ7IC8qIGFjY291bnQgZm9yIHJmYzEwMDIgaGRyICovCisJCXRvdGFsX3JlYWQgKz0gNDsgLyogYWNjb3VudCBmb3IgcmZjMTAwMiBoZHIgKi8KIAorCQlkdW1wX3NtYihzbWJfYnVmZmVyLCB0b3RhbF9yZWFkKTsKIAotCQlkdW1wX3NtYihzbWJfYnVmZmVyLCBsZW5ndGgpOwotCQlpZiAoY2hlY2tTTUIoc21iX2J1ZmZlciwgc21iX2J1ZmZlci0+TWlkLCB0b3RhbF9yZWFkKzQpKSB7Ci0JCQljaWZzX2R1bXBfbWVtKCJCYWQgU01COiAiLCBzbWJfYnVmZmVyLCA0OCk7Ci0JCQljb250aW51ZTsKLQkJfQorCQkvKgorCQkgKiBXZSBrbm93IHRoYXQgd2UgcmVjZWl2ZWQgZW5vdWdoIHRvIGdldCB0byB0aGUgTUlEIGFzIHdlCisJCSAqIGNoZWNrZWQgdGhlIHBkdV9sZW5ndGggZWFybGllci4gTm93IGNoZWNrIHRvIHNlZQorCQkgKiBpZiB0aGUgcmVzdCBvZiB0aGUgaGVhZGVyIGlzIE9LLiBXZSBib3Jyb3cgdGhlIGxlbmd0aAorCQkgKiB2YXIgZm9yIHRoZSByZXN0IG9mIHRoZSBsb29wIHRvIGF2b2lkIGEgbmV3IHN0YWNrIHZhci4KKwkJICoKKwkJICogNDggYnl0ZXMgaXMgZW5vdWdoIHRvIGRpc3BsYXkgdGhlIGhlYWRlciBhbmQgYSBsaXR0bGUgYml0CisJCSAqIGludG8gdGhlIHBheWxvYWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKwkJICovCisJCWxlbmd0aCA9IGNoZWNrU01CKHNtYl9idWZmZXIsIHNtYl9idWZmZXItPk1pZCwgdG90YWxfcmVhZCk7CisJCWlmIChsZW5ndGggIT0gMCkKKwkJCWNpZnNfZHVtcF9tZW0oIkJhZCBTTUI6ICIsIHNtYl9idWZmZXIsCisJCQkJCW1pbl90KHVuc2lnbmVkIGludCwgdG90YWxfcmVhZCwgNDgpKTsKIAorCQltaWRfZW50cnkgPSBOVUxMOworCQlzZXJ2ZXItPmxzdHJwID0gamlmZmllczsKIAotCQl0YXNrX3RvX3dha2UgPSBOVUxMOwogCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLQkJbGlzdF9mb3JfZWFjaCh0bXAsICZzZXJ2ZXItPnBlbmRpbmdfbWlkX3EpIHsKKwkJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMiwgJnNlcnZlci0+cGVuZGluZ19taWRfcSkgewogCQkJbWlkX2VudHJ5ID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBtaWRfcV9lbnRyeSwgcWhlYWQpOwogCiAJCQlpZiAoKG1pZF9lbnRyeS0+bWlkID09IHNtYl9idWZmZXItPk1pZCkgJiYKIAkJCSAgICAobWlkX2VudHJ5LT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpICYmCiAJCQkgICAgKG1pZF9lbnRyeS0+Y29tbWFuZCA9PSBzbWJfYnVmZmVyLT5Db21tYW5kKSkgewotCQkJCWlmIChjaGVjazJuZFQyKHNtYl9idWZmZXIsc2VydmVyLT5tYXhCdWYpID4gMCkgeworCQkJCWlmIChsZW5ndGggPT0gMCAmJgorCQkJCSAgIGNoZWNrMm5kVDIoc21iX2J1ZmZlciwgc2VydmVyLT5tYXhCdWYpID4gMCkgewogCQkJCQkvKiBXZSBoYXZlIGEgbXVsdGlwYXJ0IHRyYW5zYWN0MiByZXNwICovCiAJCQkJCWlzTXVsdGlSc3AgPSB0cnVlOwogCQkJCQlpZiAobWlkX2VudHJ5LT5yZXNwX2J1ZikgewpAQCAtNjAzLDIwICs2NDcsMjQgQEAKIAkJCQltaWRfZW50cnktPnJlc3BfYnVmID0gc21iX2J1ZmZlcjsKIAkJCQltaWRfZW50cnktPmxhcmdlQnVmID0gaXNMYXJnZUJ1ZjsKIG11bHRpX3QyX2ZuZDoKLQkJCQl0YXNrX3RvX3dha2UgPSBtaWRfZW50cnktPnRzazsKLQkJCQltaWRfZW50cnktPm1pZFN0YXRlID0gTUlEX1JFU1BPTlNFX1JFQ0VJVkVEOworCQkJCWlmIChsZW5ndGggPT0gMCkKKwkJCQkJbWlkX2VudHJ5LT5taWRTdGF0ZSA9CisJCQkJCQkJTUlEX1JFU1BPTlNFX1JFQ0VJVkVEOworCQkJCWVsc2UKKwkJCQkJbWlkX2VudHJ5LT5taWRTdGF0ZSA9CisJCQkJCQkJTUlEX1JFU1BPTlNFX01BTEZPUk1FRDsKICNpZmRlZiBDT05GSUdfQ0lGU19TVEFUUzIKIAkJCQltaWRfZW50cnktPndoZW5fcmVjZWl2ZWQgPSBqaWZmaWVzOwogI2VuZGlmCi0JCQkJLyogc28gd2UgZG8gbm90IHRpbWUgb3V0IHJlcXVlc3RzIHRvICBzZXJ2ZXIKLQkJCQl3aGljaCBpcyBzdGlsbCByZXNwb25kaW5nIChzaW5jZSBzZXJ2ZXIgY291bGQKLQkJCQliZSBidXN5IGJ1dCBub3QgZGVhZCkgKi8KLQkJCQlzZXJ2ZXItPmxzdHJwID0gamlmZmllczsKKwkJCQlsaXN0X2RlbF9pbml0KCZtaWRfZW50cnktPnFoZWFkKTsKKwkJCQltaWRfZW50cnktPmNhbGxiYWNrKG1pZF9lbnRyeSk7CiAJCQkJYnJlYWs7CiAJCQl9CisJCQltaWRfZW50cnkgPSBOVUxMOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7Ci0JCWlmICh0YXNrX3RvX3dha2UpIHsKKworCQlpZiAobWlkX2VudHJ5ICE9IE5VTEwpIHsKIAkJCS8qIFdhcyBwcmV2aW91cyBidWYgcHV0IGluIG1weCBzdHJ1Y3QgZm9yIG11bHRpLXJzcD8gKi8KIAkJCWlmICghaXNNdWx0aVJzcCkgewogCQkJCS8qIHNtYiBidWZmZXIgd2lsbCBiZSBmcmVlZCBieSB1c2VyIHRocmVhZCAqLwpAQCAtNjI1LDExICs2NzMsMTMgQEAKIAkJCQllbHNlCiAJCQkJCXNtYWxsYnVmID0gTlVMTDsKIAkJCX0KLQkJCXdha2VfdXBfcHJvY2Vzcyh0YXNrX3RvX3dha2UpOworCQl9IGVsc2UgaWYgKGxlbmd0aCAhPSAwKSB7CisJCQkvKiByZXNwb25zZSBzYW5pdHkgY2hlY2tzIGZhaWxlZCAqLworCQkJY29udGludWU7CiAJCX0gZWxzZSBpZiAoIWlzX3ZhbGlkX29wbG9ja19icmVhayhzbWJfYnVmZmVyLCBzZXJ2ZXIpICYmCiAJCQkgICAhaXNNdWx0aVJzcCkgewogCQkJY0VSUk9SKDEsICJObyB0YXNrIHRvIHdha2UsIHVua25vd24gZnJhbWUgcmVjZWl2ZWQhICIKLQkJCQkgICAiTnVtTWlkcyAlZCIsIG1pZENvdW50LmNvdW50ZXIpOworCQkJCSAgICJOdW1NaWRzICVkIiwgYXRvbWljX3JlYWQoJm1pZENvdW50KSk7CiAJCQljaWZzX2R1bXBfbWVtKCJSZWNlaXZlZCBEYXRhIGlzOiAiLCAoY2hhciAqKXNtYl9idWZmZXIsCiAJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSk7CiAjaWZkZWYgQ09ORklHX0NJRlNfREVCVUcyCkBAIC02NzcsNDQgKzcyNywxNiBAQAogCWlmIChzbWFsbGJ1ZikgLyogbm8gc2Vuc2UgbG9nZ2luZyBhIGRlYnVnIG1lc3NhZ2UgaWYgTlVMTCAqLwogCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKHNtYWxsYnVmKTsKIAotCS8qCi0JICogQkI6IHdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIGFueSBvZiB0aGlzLiBJdCBzaG91bGRuJ3QgYmUKLQkgKiBwb3NzaWJsZSB0byBleGl0IGZyb20gdGhlIHRocmVhZCB3aXRoIGFjdGl2ZSBTTUIgc2Vzc2lvbnMKLQkgKi8KLQlzcGluX2xvY2soJmNpZnNfdGNwX3Nlc19sb2NrKTsKLQlpZiAobGlzdF9lbXB0eSgmc2VydmVyLT5wZW5kaW5nX21pZF9xKSkgewotCQkvKiBsb29wIHRocm91Z2ggc2VydmVyIHNlc3Npb24gc3RydWN0dXJlcyBhdHRhY2hlZCB0byB0aGlzIGFuZAotCQkgICAgbWFyayB0aGVtIGRlYWQgKi8KLQkJbGlzdF9mb3JfZWFjaCh0bXAsICZzZXJ2ZXItPnNtYl9zZXNfbGlzdCkgewotCQkJc2VzID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBjaWZzU2VzSW5mbywKLQkJCQkJIHNtYl9zZXNfbGlzdCk7Ci0JCQlzZXMtPnN0YXR1cyA9IENpZnNFeGl0aW5nOwotCQkJc2VzLT5zZXJ2ZXIgPSBOVUxMOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZjaWZzX3RjcF9zZXNfbG9jayk7Ci0JfSBlbHNlIHsKLQkJLyogYWx0aG91Z2ggd2UgY2FuIG5vdCB6ZXJvIHRoZSBzZXJ2ZXIgc3RydWN0IHBvaW50ZXIgeWV0LAotCQlzaW5jZSB0aGVyZSBhcmUgYWN0aXZlIHJlcXVlc3RzIHdoaWNoIG1heSBkZXBuZCBvbiB0aGVtLAotCQltYXJrIHRoZSBjb3JyZXNwb25kaW5nIFNNQiBzZXNzaW9ucyBhcyBleGl0aW5nIHRvbyAqLwotCQlsaXN0X2Zvcl9lYWNoKHRtcCwgJnNlcnZlci0+c21iX3Nlc19saXN0KSB7Ci0JCQlzZXMgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGNpZnNTZXNJbmZvLAotCQkJCQkgc21iX3Nlc19saXN0KTsKLQkJCXNlcy0+c3RhdHVzID0gQ2lmc0V4aXRpbmc7Ci0JCX0KLQorCWlmICghbGlzdF9lbXB0eSgmc2VydmVyLT5wZW5kaW5nX21pZF9xKSkgewogCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLQkJbGlzdF9mb3JfZWFjaCh0bXAsICZzZXJ2ZXItPnBlbmRpbmdfbWlkX3EpIHsKLQkJbWlkX2VudHJ5ID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBtaWRfcV9lbnRyeSwgcWhlYWQpOwotCQkJaWYgKG1pZF9lbnRyeS0+bWlkU3RhdGUgPT0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEKSB7Ci0JCQkJY0ZZSSgxLCAiQ2xlYXJpbmcgTWlkIDB4JXggLSB3YWtpbmcgdXAgIiwKKwkJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMiwgJnNlcnZlci0+cGVuZGluZ19taWRfcSkgeworCQkJbWlkX2VudHJ5ID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBtaWRfcV9lbnRyeSwgcWhlYWQpOworCQkJY0ZZSSgxLCAiQ2xlYXJpbmcgTWlkIDB4JXggLSBpc3N1aW5nIGNhbGxiYWNrIiwKIAkJCQkJIG1pZF9lbnRyeS0+bWlkKTsKLQkJCQl0YXNrX3RvX3dha2UgPSBtaWRfZW50cnktPnRzazsKLQkJCQlpZiAodGFza190b193YWtlKQotCQkJCQl3YWtlX3VwX3Byb2Nlc3ModGFza190b193YWtlKTsKLQkJCX0KKwkJCWxpc3RfZGVsX2luaXQoJm1pZF9lbnRyeS0+cWhlYWQpOworCQkJbWlkX2VudHJ5LT5jYWxsYmFjayhtaWRfZW50cnkpOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7Ci0JCXNwaW5fdW5sb2NrKCZjaWZzX3RjcF9zZXNfbG9jayk7CiAJCS8qIDEvOHRoIG9mIHNlYyBpcyBtb3JlIHRoYW4gZW5vdWdoIHRpbWUgZm9yIHRoZW0gdG8gZXhpdCAqLwogCQltc2xlZXAoMTI1KTsKIAl9CkBAIC03MzIsMTggKzc1NCw2IEBACiAJCWNvbWluZyBob21lIG5vdCBtdWNoIGVsc2Ugd2UgY2FuIGRvIGJ1dCBmcmVlIHRoZSBtZW1vcnkgKi8KIAl9CiAKLQkvKiBsYXN0IGNoYW5jZSB0byBtYXJrIHNlcyBwb2ludGVycyBpbnZhbGlkCi0JaWYgdGhlcmUgYXJlIGFueSBwb2ludGluZyB0byB0aGlzIChlLmcKLQlpZiBhIGNyYXp5IHJvb3QgdXNlciB0cmllZCB0byBraWxsIGNpZnNkCi0Ja2VybmVsIHRocmVhZCBleHBsaWNpdGx5IHRoaXMgbWlnaHQgaGFwcGVuKSAqLwotCS8qIEJCOiBUaGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnksIHNlZSBhYm92ZSAqLwotCXNwaW5fbG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOwotCWxpc3RfZm9yX2VhY2godG1wLCAmc2VydmVyLT5zbWJfc2VzX2xpc3QpIHsKLQkJc2VzID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBjaWZzU2VzSW5mbywgc21iX3Nlc19saXN0KTsKLQkJc2VzLT5zZXJ2ZXIgPSBOVUxMOwotCX0KLQlzcGluX3VubG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOwotCiAJa2ZyZWUoc2VydmVyLT5ob3N0bmFtZSk7CiAJdGFza190b193YWtlID0geGNoZygmc2VydmVyLT50c2ssIE5VTEwpOwogCWtmcmVlKHNlcnZlcik7CkBAIC0xMzU1LDYgKzEzNjUsOCBAQAogCQkJdm9sLT5kaXJlY3RfaW8gPSAxOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJmb3JjZWRpcmVjdGlvIiwgMTMpID09IDApIHsKIAkJCXZvbC0+ZGlyZWN0X2lvID0gMTsKKwkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAic3RyaWN0Y2FjaGUiLCAxMSkgPT0gMCkgeworCQkJdm9sLT5zdHJpY3RfaW8gPSAxOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJub2FjIiwgNCkgPT0gMCkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogTW91bnQgb3B0aW9uIG5vYWMgbm90ICIKIAkJCQkic3VwcG9ydGVkLiBJbnN0ZWFkIHNldCAiCkBAIC0xNTc5LDYgKzE1OTEsOSBAQAogCiAJc3Bpbl9sb2NrKCZjaWZzX3RjcF9zZXNfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZXJ2ZXIsICZjaWZzX3RjcF9zZXNfbGlzdCwgdGNwX3Nlc19saXN0KSB7CisJCWlmICghbmV0X2VxKGNpZnNfbmV0X25zKHNlcnZlciksIGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucykpCisJCQljb250aW51ZTsKKwogCQlpZiAoIW1hdGNoX2FkZHJlc3Moc2VydmVyLCBhZGRyLAogCQkJCSAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmdm9sLT5zcmNhZGRyKSkKIAkJCWNvbnRpbnVlOwpAQCAtMTYwOSw5ICsxNjI0LDEzIEBACiAJCXJldHVybjsKIAl9CiAKKwlwdXRfbmV0KGNpZnNfbmV0X25zKHNlcnZlcikpOworCiAJbGlzdF9kZWxfaW5pdCgmc2VydmVyLT50Y3Bfc2VzX2xpc3QpOwogCXNwaW5fdW5sb2NrKCZjaWZzX3RjcF9zZXNfbG9jayk7CiAKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNlcnZlci0+ZWNobyk7CisKIAlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAlzZXJ2ZXItPnRjcFN0YXR1cyA9IENpZnNFeGl0aW5nOwogCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CkBAIC0xNjgxLDYgKzE3MDAsNyBAQAogCQlnb3RvIG91dF9lcnI7CiAJfQogCisJY2lmc19zZXRfbmV0X25zKHRjcF9zZXMsIGdldF9uZXQoY3VycmVudC0+bnNwcm94eS0+bmV0X25zKSk7CiAJdGNwX3Nlcy0+aG9zdG5hbWUgPSBleHRyYWN0X2hvc3RuYW1lKHZvbHVtZV9pbmZvLT5VTkMpOwogCWlmIChJU19FUlIodGNwX3Nlcy0+aG9zdG5hbWUpKSB7CiAJCXJjID0gUFRSX0VSUih0Y3Bfc2VzLT5ob3N0bmFtZSk7CkBAIC0xNzAxLDggKzE3MjEsMTAgQEAKIAkJdm9sdW1lX2luZm8tPnRhcmdldF9yZmMxMDAxX25hbWUsIFJGQzEwMDFfTkFNRV9MRU5fV0lUSF9OVUxMKTsKIAl0Y3Bfc2VzLT5zZXNzaW9uX2VzdGFiID0gZmFsc2U7CiAJdGNwX3Nlcy0+c2VxdWVuY2VfbnVtYmVyID0gMDsKKwl0Y3Bfc2VzLT5sc3RycCA9IGppZmZpZXM7CiAJSU5JVF9MSVNUX0hFQUQoJnRjcF9zZXMtPnRjcF9zZXNfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJnRjcF9zZXMtPnNtYl9zZXNfbGlzdCk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnRjcF9zZXMtPmVjaG8sIGNpZnNfZWNob19yZXF1ZXN0KTsKIAogCS8qCiAJICogYXQgdGhpcyBwb2ludCB3ZSBhcmUgdGhlIG9ubHkgb25lcyB3aXRoIHRoZSBwb2ludGVyCkBAIC0xNzUxLDExICsxNzczLDE2IEBACiAKIAljaWZzX2ZzY2FjaGVfZ2V0X2NsaWVudF9jb29raWUodGNwX3Nlcyk7CiAKKwkvKiBxdWV1ZSBlY2hvIHJlcXVlc3QgZGVsYXllZCB3b3JrICovCisJcXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9ucnRfd3EsICZ0Y3Bfc2VzLT5lY2hvLCBTTUJfRUNIT19JTlRFUlZBTCk7CisKIAlyZXR1cm4gdGNwX3NlczsKIAogb3V0X2Vycl9jcnlwdG9fcmVsZWFzZToKIAljaWZzX2NyeXB0b19zaGFzaF9yZWxlYXNlKHRjcF9zZXMpOwogCisJcHV0X25ldChjaWZzX25ldF9ucyh0Y3Bfc2VzKSk7CisKIG91dF9lcnI6CiAJaWYgKHRjcF9zZXMpIHsKIAkJaWYgKCFJU19FUlIodGNwX3Nlcy0+aG9zdG5hbWUpKQpAQCAtMjI2Nyw4ICsyMjk0LDggQEAKIAl9CiAKIAlpZiAoc29ja2V0ID09IE5VTEwpIHsKLQkJcmMgPSBzb2NrX2NyZWF0ZV9rZXJuKHNmYW1pbHksIFNPQ0tfU1RSRUFNLAotCQkJCSAgICAgIElQUFJPVE9fVENQLCAmc29ja2V0KTsKKwkJcmMgPSBfX3NvY2tfY3JlYXRlKGNpZnNfbmV0X25zKHNlcnZlciksIHNmYW1pbHksIFNPQ0tfU1RSRUFNLAorCQkJCSAgIElQUFJPVE9fVENQLCAmc29ja2V0LCAxKTsKIAkJaWYgKHJjIDwgMCkgewogCQkJY0VSUk9SKDEsICJFcnJvciAlZCBjcmVhdGluZyBzb2NrZXQiLCByYyk7CiAJCQlzZXJ2ZXItPnNzb2NrZXQgPSBOVUxMOwpAQCAtMjU4MCw2ICsyNjA3LDggQEAKIAlpZiAocHZvbHVtZV9pbmZvLT5tdWx0aXVzZXIpCiAJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IChDSUZTX01PVU5UX01VTFRJVVNFUiB8CiAJCQkJCSAgICBDSUZTX01PVU5UX05PX1BFUk0pOworCWlmIChwdm9sdW1lX2luZm8tPnN0cmljdF9pbykKKwkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgfD0gQ0lGU19NT1VOVF9TVFJJQ1RfSU87CiAJaWYgKHB2b2x1bWVfaW5mby0+ZGlyZWN0X2lvKSB7CiAJCWNGWUkoMSwgIm1vdW50aW5nIHNoYXJlIHVzaW5nIGRpcmVjdCBpL28iKTsKIAkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgfD0gQ0lGU19NT1VOVF9ESVJFQ1RfSU87CkBAIC0yOTM2LDggKzI5NjUsOCBAQAogCVRDT05YX1JTUCAqcFNNQnI7CiAJdW5zaWduZWQgY2hhciAqYmNjX3B0cjsKIAlpbnQgcmMgPSAwOwotCWludCBsZW5ndGgsIGJ5dGVzX2xlZnQ7Ci0JX191MTYgY291bnQ7CisJaW50IGxlbmd0aDsKKwlfX3UxNiBieXRlc19sZWZ0LCBjb3VudDsKIAogCWlmIChzZXMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU87CkBAIC0yOTY1LDcgKzI5OTQsNyBAQAogCQliY2NfcHRyKys7ICAgICAgICAgICAgICAvKiBza2lwIHBhc3N3b3JkICovCiAJCS8qIGFscmVhZHkgYWxpZ25lZCBzbyBubyBuZWVkIHRvIGRvIGl0IGJlbG93ICovCiAJfSBlbHNlIHsKLQkJcFNNQi0+UGFzc3dvcmRMZW5ndGggPSBjcHVfdG9fbGUxNihDSUZTX1NFU1NfS0VZX1NJWkUpOworCQlwU01CLT5QYXNzd29yZExlbmd0aCA9IGNwdV90b19sZTE2KENJRlNfQVVUSF9SRVNQX1NJWkUpOwogCQkvKiBCQiBGSVhNRSBhZGQgY29kZSB0byBmYWlsIHRoaXMgaWYgTlRMTXYyIG9yIEtlcmJlcm9zCiAJCSAgIHNwZWNpZmllZCBhcyByZXF1aXJlZCAod2hlbiB0aGF0IHN1cHBvcnQgaXMgYWRkZWQgdG8KIAkJICAgdGhlIHZmcyBpbiB0aGUgZnV0dXJlKSBhcyBvbmx5IE5UTE0gb3IgdGhlIG11Y2gKQEAgLTI5ODEsOSArMzAxMCwxMCBAQAogCQkJCQkgYmNjX3B0cik7CiAJCWVsc2UKICNlbmRpZiAvKiBDSUZTX1dFQUtfUFdfSEFTSCAqLwotCQlTTUJOVGVuY3J5cHQodGNvbi0+cGFzc3dvcmQsIHNlcy0+c2VydmVyLT5jcnlwdGtleSwgYmNjX3B0cik7CisJCXJjID0gU01CTlRlbmNyeXB0KHRjb24tPnBhc3N3b3JkLCBzZXMtPnNlcnZlci0+Y3J5cHRrZXksCisJCQkJCWJjY19wdHIpOwogCi0JCWJjY19wdHIgKz0gQ0lGU19TRVNTX0tFWV9TSVpFOworCQliY2NfcHRyICs9IENJRlNfQVVUSF9SRVNQX1NJWkU7CiAJCWlmIChzZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklDT0RFKSB7CiAJCQkvKiBtdXN0IGFsaWduIHVuaWNvZGUgc3RyaW5ncyAqLwogCQkJKmJjY19wdHIgPSAwOyAvKiBudWxsIGJ5dGUgcGFzc3dvcmQgKi8KQEAgLTMwMjEsNyArMzA1MSw3IEBACiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHNlcywgc21iX2J1ZmZlciwgc21iX2J1ZmZlcl9yZXNwb25zZSwgJmxlbmd0aCwKLQkJCSBDSUZTX1NURF9PUCk7CisJCQkgMCk7CiAKIAkvKiBhYm92ZSBub3cgZG9uZSBpbiBTZW5kUmVjZWl2ZSAqLwogCWlmICgocmMgPT0gMCkgJiYgKHRjb24gIT0gTlVMTCkpIHsKQEAgLTMwMzEsNyArMzA2MSw3IEBACiAJCXRjb24tPm5lZWRfcmVjb25uZWN0ID0gZmFsc2U7CiAJCXRjb24tPnRpZCA9IHNtYl9idWZmZXJfcmVzcG9uc2UtPlRpZDsKIAkJYmNjX3B0ciA9IHBCeXRlQXJlYShzbWJfYnVmZmVyX3Jlc3BvbnNlKTsKLQkJYnl0ZXNfbGVmdCA9IEJDQyhzbWJfYnVmZmVyX3Jlc3BvbnNlKTsKKwkJYnl0ZXNfbGVmdCA9IGdldF9iY2Moc21iX2J1ZmZlcl9yZXNwb25zZSk7CiAJCWxlbmd0aCA9IHN0cm5sZW4oYmNjX3B0ciwgYnl0ZXNfbGVmdCAtIDIpOwogCQlpZiAoc21iX2J1ZmZlci0+RmxhZ3MyICYgU01CRkxHMl9VTklDT0RFKQogCQkJaXNfdW5pY29kZSA9IHRydWU7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IGQ4NDM2MzEuLmU5NjRiMWMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC0yODcsNiArMjg3LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY2lmc19maWxlLT5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiA9IHRsaW5rX3Rjb24oY2lmc19maWxlLT50bGluayk7CiAJc3RydWN0IGNpZnNJbm9kZUluZm8gKmNpZnNpID0gQ0lGU19JKGlub2RlKTsKKwlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CiAJc3RydWN0IGNpZnNMb2NrSW5mbyAqbGksICp0bXA7CiAKIAlzcGluX2xvY2soJmNpZnNfZmlsZV9saXN0X2xvY2spOwpAQCAtMzAyLDYgKzMwMywxMyBAQAogCWlmIChsaXN0X2VtcHR5KCZjaWZzaS0+b3BlbkZpbGVMaXN0KSkgewogCQljRllJKDEsICJjbG9zaW5nIGxhc3Qgb3BlbiBpbnN0YW5jZSBmb3IgaW5vZGUgJXAiLAogCQkJY2lmc19maWxlLT5kZW50cnktPmRfaW5vZGUpOworCisJCS8qIGluIHN0cmljdCBjYWNoZSBtb2RlIHdlIG5lZWQgaW52YWxpZGF0ZSBtYXBwaW5nIG9uIHRoZSBsYXN0CisJCSAgIGNsb3NlICBiZWNhdXNlIGl0IG1heSBjYXVzZSBhIGVycm9yIHdoZW4gd2Ugb3BlbiB0aGlzIGZpbGUKKwkJICAgYWdhaW4gYW5kIGdldCBhdCBsZWFzdCBsZXZlbCBJSSBvcGxvY2sgKi8KKwkJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9TVFJJQ1RfSU8pCisJCQlDSUZTX0koaW5vZGUpLT5pbnZhbGlkX21hcHBpbmcgPSB0cnVlOworCiAJCWNpZnNfc2V0X29wbG9ja19sZXZlbChjaWZzaSwgMCk7CiAJfQogCXNwaW5fdW5sb2NrKCZjaWZzX2ZpbGVfbGlzdF9sb2NrKTsKQEAgLTMzOCw3ICszNDYsNiBAQAogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CiAJc3RydWN0IHRjb25fbGluayAqdGxpbms7CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlID0gTlVMTDsKLQlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZTsKIAljaGFyICpmdWxsX3BhdGggPSBOVUxMOwogCWJvb2wgcG9zaXhfb3Blbl9vayA9IGZhbHNlOwogCV9fdTE2IG5ldGZpZDsKQEAgLTM1Myw4ICszNjAsNiBAQAogCX0KIAl0Y29uID0gdGxpbmtfdGNvbih0bGluayk7CiAKLQlwQ2lmc0lub2RlID0gQ0lGU19JKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwotCiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShmaWxlLT5mX3BhdGguZGVudHJ5KTsKIAlpZiAoZnVsbF9wYXRoID09IE5VTEwpIHsKIAkJcmMgPSAtRU5PTUVNOwpAQCAtNzI2LDEyICs3MzEsMTIgQEAKIAogCQkvKiBCQiB3ZSBjb3VsZCBjaGFpbiB0aGVzZSBpbnRvIG9uZSBsb2NrIHJlcXVlc3QgQkIgKi8KIAkJcmMgPSBDSUZTU01CTG9jayh4aWQsIHRjb24sIG5ldGZpZCwgbGVuZ3RoLCBwZkxvY2stPmZsX3N0YXJ0LAotCQkJCSAwLCAxLCBsb2NrVHlwZSwgMCAvKiB3YWl0IGZsYWcgKi8gKTsKKwkJCQkgMCwgMSwgbG9ja1R5cGUsIDAgLyogd2FpdCBmbGFnICovLCAwKTsKIAkJaWYgKHJjID09IDApIHsKIAkJCXJjID0gQ0lGU1NNQkxvY2soeGlkLCB0Y29uLCBuZXRmaWQsIGxlbmd0aCwKIAkJCQkJIHBmTG9jay0+Zmxfc3RhcnQsIDEgLyogbnVtVW5sb2NrICovICwKIAkJCQkJIDAgLyogbnVtTG9jayAqLyAsIGxvY2tUeXBlLAotCQkJCQkgMCAvKiB3YWl0IGZsYWcgKi8gKTsKKwkJCQkJIDAgLyogd2FpdCBmbGFnICovLCAwKTsKIAkJCXBmTG9jay0+ZmxfdHlwZSA9IEZfVU5MQ0s7CiAJCQlpZiAocmMgIT0gMCkKIAkJCQljRVJST1IoMSwgIkVycm9yIHVubG9ja2luZyBwcmV2aW91c2x5IGxvY2tlZCAiCkBAIC03NDgsMTMgKzc1MywxMyBAQAogCQkJCXJjID0gQ0lGU1NNQkxvY2soeGlkLCB0Y29uLCBuZXRmaWQsIGxlbmd0aCwKIAkJCQkJcGZMb2NrLT5mbF9zdGFydCwgMCwgMSwKIAkJCQkJbG9ja1R5cGUgfCBMT0NLSU5HX0FORFhfU0hBUkVEX0xPQ0ssCi0JCQkJCTAgLyogd2FpdCBmbGFnICovKTsKKwkJCQkJMCAvKiB3YWl0IGZsYWcgKi8sIDApOwogCQkJCWlmIChyYyA9PSAwKSB7CiAJCQkJCXJjID0gQ0lGU1NNQkxvY2soeGlkLCB0Y29uLCBuZXRmaWQsCiAJCQkJCQlsZW5ndGgsIHBmTG9jay0+Zmxfc3RhcnQsIDEsIDAsCiAJCQkJCQlsb2NrVHlwZSB8CiAJCQkJCQlMT0NLSU5HX0FORFhfU0hBUkVEX0xPQ0ssCi0JCQkJCQkwIC8qIHdhaXQgZmxhZyAqLyk7CisJCQkJCQkwIC8qIHdhaXQgZmxhZyAqLywgMCk7CiAJCQkJCXBmTG9jay0+ZmxfdHlwZSA9IEZfUkRMQ0s7CiAJCQkJCWlmIChyYyAhPSAwKQogCQkJCQkJY0VSUk9SKDEsICJFcnJvciB1bmxvY2tpbmcgIgpAQCAtNzk3LDggKzgwMiw4IEBACiAKIAkJaWYgKG51bUxvY2spIHsKIAkJCXJjID0gQ0lGU1NNQkxvY2soeGlkLCB0Y29uLCBuZXRmaWQsIGxlbmd0aCwKLQkJCQkJcGZMb2NrLT5mbF9zdGFydCwKLQkJCQkJMCwgbnVtTG9jaywgbG9ja1R5cGUsIHdhaXRfZmxhZyk7CisJCQkJCSBwZkxvY2stPmZsX3N0YXJ0LCAwLCBudW1Mb2NrLCBsb2NrVHlwZSwKKwkJCQkJIHdhaXRfZmxhZywgMCk7CiAKIAkJCWlmIChyYyA9PSAwKSB7CiAJCQkJLyogRm9yIFdpbmRvd3MgbG9ja3Mgd2UgbXVzdCBzdG9yZSB0aGVtLiAqLwpAQCAtODE4LDkgKzgyMyw5IEBACiAJCQkJCQkocGZMb2NrLT5mbF9zdGFydCArIGxlbmd0aCkgPj0KIAkJCQkJCShsaS0+b2Zmc2V0ICsgbGktPmxlbmd0aCkpIHsKIAkJCQkJc3RvcmVkX3JjID0gQ0lGU1NNQkxvY2soeGlkLCB0Y29uLAotCQkJCQkJCW5ldGZpZCwKLQkJCQkJCQlsaS0+bGVuZ3RoLCBsaS0+b2Zmc2V0LAotCQkJCQkJCTEsIDAsIGxpLT50eXBlLCBmYWxzZSk7CisJCQkJCQkJbmV0ZmlkLCBsaS0+bGVuZ3RoLAorCQkJCQkJCWxpLT5vZmZzZXQsIDEsIDAsCisJCQkJCQkJbGktPnR5cGUsIGZhbHNlLCAwKTsKIAkJCQkJaWYgKHN0b3JlZF9yYykKIAkJCQkJCXJjID0gc3RvcmVkX3JjOwogCQkJCQllbHNlIHsKQEAgLTgzOSwzMSArODQ0LDggQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qCi0gKiBTZXQgdGhlIHRpbWVvdXQgb24gd3JpdGUgcmVxdWVzdHMgcGFzdCBFT0YuIEZvciBzb21lIHNlcnZlcnMgKFdpbmRvd3MpCi0gKiB0aGVzZSBjYWxscyBjYW4gYmUgdmVyeSBsb25nLgotICoKLSAqIElmIHdlJ3JlIHdyaXRpbmcgPjEwTSBwYXN0IHRoZSBFT0Ygd2UgZ2l2ZSBhIDE4MHMgdGltZW91dC4gQW55dGhpbmcgbGVzcwotICogdGhhbiB0aGF0IGdldHMgYSA0NXMgdGltZW91dC4gV3JpdGVzIG5vdCBwYXN0IEVPRiBnZXQgMTVzIHRpbWVvdXRzLgotICogVGhlIDEwTSBjdXRvZmYgaXMgdG90YWxseSBhcmJpdHJhcnkuIEEgYmV0dGVyIHNjaGVtZSBmb3IgdGhpcyB3b3VsZCBiZQotICogd2VsY29tZSBpZiBzb21lb25lIHdhbnRzIHRvIHN1Z2dlc3Qgb25lLgotICoKLSAqIFdlIG1heSBiZSBhYmxlIHRvIGRvIGEgYmV0dGVyIGpvYiB3aXRoIHRoaXMgaWYgdGhlcmUgd2VyZSBzb21lIHdheSB0bwotICogZGVjbGFyZSB0aGF0IGEgZmlsZSBzaG91bGQgYmUgc3BhcnNlLgotICovCi1zdGF0aWMgaW50Ci1jaWZzX3dyaXRlX3RpbWVvdXQoc3RydWN0IGNpZnNJbm9kZUluZm8gKmNpZnNpLCBsb2ZmX3Qgb2Zmc2V0KQotewotCWlmIChvZmZzZXQgPD0gY2lmc2ktPnNlcnZlcl9lb2YpCi0JCXJldHVybiBDSUZTX1NURF9PUDsKLQllbHNlIGlmIChvZmZzZXQgPiAoY2lmc2ktPnNlcnZlcl9lb2YgKyAoMTAgKiAxMDI0ICogMTAyNCkpKQotCQlyZXR1cm4gQ0lGU19WTE9OR19PUDsKLQllbHNlCi0JCXJldHVybiBDSUZTX0xPTkdfT1A7Ci19Ci0KIC8qIHVwZGF0ZSB0aGUgZmlsZSBzaXplIChpZiBuZWVkZWQpIGFmdGVyIGEgd3JpdGUgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBjaWZzX3VwZGF0ZV9lb2Yoc3RydWN0IGNpZnNJbm9kZUluZm8gKmNpZnNpLCBsb2ZmX3Qgb2Zmc2V0LAogCQkgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXNfd3JpdHRlbikKIHsKQEAgLTg4Miw3ICs4NjQsNyBAQAogCXVuc2lnbmVkIGludCB0b3RhbF93cml0dGVuOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CiAJc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247Ci0JaW50IHhpZCwgbG9uZ19vcDsKKwlpbnQgeGlkOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKm9wZW5fZmlsZTsKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lmc2kgPSBDSUZTX0koaW5vZGUpOwogCkBAIC05MDMsNyArODg1LDYgQEAKIAogCXhpZCA9IEdldFhpZCgpOwogCi0JbG9uZ19vcCA9IGNpZnNfd3JpdGVfdGltZW91dChjaWZzaSwgKnBvZmZzZXQpOwogCWZvciAodG90YWxfd3JpdHRlbiA9IDA7IHdyaXRlX3NpemUgPiB0b3RhbF93cml0dGVuOwogCSAgICAgdG90YWxfd3JpdHRlbiArPSBieXRlc193cml0dGVuKSB7CiAJCXJjID0gLUVBR0FJTjsKQEAgLTkzMSw3ICs5MTIsNyBAQAogCQkJCW1pbl90KGNvbnN0IGludCwgY2lmc19zYi0+d3NpemUsCiAJCQkJICAgICAgd3JpdGVfc2l6ZSAtIHRvdGFsX3dyaXR0ZW4pLAogCQkJCSpwb2Zmc2V0LCAmYnl0ZXNfd3JpdHRlbiwKLQkJCQlOVUxMLCB3cml0ZV9kYXRhICsgdG90YWxfd3JpdHRlbiwgbG9uZ19vcCk7CisJCQkJTlVMTCwgd3JpdGVfZGF0YSArIHRvdGFsX3dyaXR0ZW4sIDApOwogCQl9CiAJCWlmIChyYyB8fCAoYnl0ZXNfd3JpdHRlbiA9PSAwKSkgewogCQkJaWYgKHRvdGFsX3dyaXR0ZW4pCkBAIC05NDQsOCArOTI1LDYgQEAKIAkJCWNpZnNfdXBkYXRlX2VvZihjaWZzaSwgKnBvZmZzZXQsIGJ5dGVzX3dyaXR0ZW4pOwogCQkJKnBvZmZzZXQgKz0gYnl0ZXNfd3JpdHRlbjsKIAkJfQotCQlsb25nX29wID0gQ0lGU19TVERfT1A7IC8qIHN1YnNlcXVlbnQgd3JpdGVzIGZhc3QgLQotCQkJCSAgICAxNSBzZWNvbmRzIGlzIHBsZW50eSAqLwogCX0KIAogCWNpZnNfc3RhdHNfYnl0ZXNfd3JpdHRlbihwVGNvbiwgdG90YWxfd3JpdHRlbik7CkBAIC05NzQsNyArOTUzLDcgQEAKIAl1bnNpZ25lZCBpbnQgdG90YWxfd3JpdHRlbjsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uOwotCWludCB4aWQsIGxvbmdfb3A7CisJaW50IHhpZDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBvcGVuX2ZpbGUtPmRlbnRyeTsKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lmc2kgPSBDSUZTX0koZGVudHJ5LT5kX2lub2RlKTsKIApAQCAtOTg3LDcgKzk2Niw2IEBACiAKIAl4aWQgPSBHZXRYaWQoKTsKIAotCWxvbmdfb3AgPSBjaWZzX3dyaXRlX3RpbWVvdXQoY2lmc2ksICpwb2Zmc2V0KTsKIAlmb3IgKHRvdGFsX3dyaXR0ZW4gPSAwOyB3cml0ZV9zaXplID4gdG90YWxfd3JpdHRlbjsKIAkgICAgIHRvdGFsX3dyaXR0ZW4gKz0gYnl0ZXNfd3JpdHRlbikgewogCQlyYyA9IC1FQUdBSU47CkBAIC0xMDE3LDcgKzk5NSw3IEBACiAJCQkJcmMgPSBDSUZTU01CV3JpdGUyKHhpZCwgcFRjb24sCiAJCQkJCQlvcGVuX2ZpbGUtPm5ldGZpZCwgbGVuLAogCQkJCQkJKnBvZmZzZXQsICZieXRlc193cml0dGVuLAotCQkJCQkJaW92LCAxLCBsb25nX29wKTsKKwkJCQkJCWlvdiwgMSwgMCk7CiAJCQl9IGVsc2UKIAkJCQlyYyA9IENJRlNTTUJXcml0ZSh4aWQsIHBUY29uLAogCQkJCQkgb3Blbl9maWxlLT5uZXRmaWQsCkBAIC0xMDI1LDcgKzEwMDMsNyBAQAogCQkJCQkgICAgICAgd3JpdGVfc2l6ZSAtIHRvdGFsX3dyaXR0ZW4pLAogCQkJCQkgKnBvZmZzZXQsICZieXRlc193cml0dGVuLAogCQkJCQkgd3JpdGVfZGF0YSArIHRvdGFsX3dyaXR0ZW4sCi0JCQkJCSBOVUxMLCBsb25nX29wKTsKKwkJCQkJIE5VTEwsIDApOwogCQl9CiAJCWlmIChyYyB8fCAoYnl0ZXNfd3JpdHRlbiA9PSAwKSkgewogCQkJaWYgKHRvdGFsX3dyaXR0ZW4pCkBAIC0xMDM4LDggKzEwMTYsNiBAQAogCQkJY2lmc191cGRhdGVfZW9mKGNpZnNpLCAqcG9mZnNldCwgYnl0ZXNfd3JpdHRlbik7CiAJCQkqcG9mZnNldCArPSBieXRlc193cml0dGVuOwogCQl9Ci0JCWxvbmdfb3AgPSBDSUZTX1NURF9PUDsgLyogc3Vic2VxdWVudCB3cml0ZXMgZmFzdCAtCi0JCQkJICAgIDE1IHNlY29uZHMgaXMgcGxlbnR5ICovCiAJfQogCiAJY2lmc19zdGF0c19ieXRlc193cml0dGVuKHBUY29uLCB0b3RhbF93cml0dGVuKTsKQEAgLTExNjcsNyArMTE0Myw2IEBACiAJY2hhciAqd3JpdGVfZGF0YTsKIAlpbnQgcmMgPSAtRUZBVUxUOwogCWludCBieXRlc193cml0dGVuID0gMDsKLQlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqb3Blbl9maWxlOwogCkBAIC0xMTc1LDcgKzExNTAsNiBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKLQljaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CiAKIAlvZmZzZXQgKz0gKGxvZmZfdClmcm9tOwogCXdyaXRlX2RhdGEgPSBrbWFwKHBhZ2UpOwpAQCAtMTIzOSw3ICsxMjEzLDcgQEAKIAlzdHJ1Y3QgcGFnZXZlYyBwdmVjOwogCWludCByYyA9IDA7CiAJaW50IHNjYW5uZWQgPSAwOwotCWludCB4aWQsIGxvbmdfb3A7CisJaW50IHhpZDsKIAogCWNpZnNfc2IgPSBDSUZTX1NCKG1hcHBpbmctPmhvc3QtPmlfc2IpOwogCkBAIC0xMzc3LDQzICsxMzUxLDY3IEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKG5faW92KSB7CityZXRyeV93cml0ZToKIAkJCW9wZW5fZmlsZSA9IGZpbmRfd3JpdGFibGVfZmlsZShDSUZTX0kobWFwcGluZy0+aG9zdCksCiAJCQkJCQkJZmFsc2UpOwogCQkJaWYgKCFvcGVuX2ZpbGUpIHsKIAkJCQljRVJST1IoMSwgIk5vIHdyaXRhYmxlIGhhbmRsZXMgZm9yIGlub2RlIik7CiAJCQkJcmMgPSAtRUJBREY7CiAJCQl9IGVsc2UgewotCQkJCWxvbmdfb3AgPSBjaWZzX3dyaXRlX3RpbWVvdXQoY2lmc2ksIG9mZnNldCk7CiAJCQkJcmMgPSBDSUZTU01CV3JpdGUyKHhpZCwgdGNvbiwgb3Blbl9maWxlLT5uZXRmaWQsCiAJCQkJCQkgICBieXRlc190b193cml0ZSwgb2Zmc2V0LAogCQkJCQkJICAgJmJ5dGVzX3dyaXR0ZW4sIGlvdiwgbl9pb3YsCi0JCQkJCQkgICBsb25nX29wKTsKKwkJCQkJCSAgIDApOwogCQkJCWNpZnNGaWxlSW5mb19wdXQob3Blbl9maWxlKTsKLQkJCQljaWZzX3VwZGF0ZV9lb2YoY2lmc2ksIG9mZnNldCwgYnl0ZXNfd3JpdHRlbik7CiAJCQl9CiAKLQkJCWlmIChyYyB8fCBieXRlc193cml0dGVuIDwgYnl0ZXNfdG9fd3JpdGUpIHsKLQkJCQljRVJST1IoMSwgIldyaXRlMiByZXQgJWQsIHdyb3RlICVkIiwKLQkJCQkJICByYywgYnl0ZXNfd3JpdHRlbik7Ci0JCQkJbWFwcGluZ19zZXRfZXJyb3IobWFwcGluZywgcmMpOwotCQkJfSBlbHNlIHsKKwkJCWNGWUkoMSwgIldyaXRlMiByYz0lZCwgd3JvdGU9JXUiLCByYywgYnl0ZXNfd3JpdHRlbik7CisKKwkJCS8qCisJCQkgKiBGb3Igbm93LCB0cmVhdCBhIHNob3J0IHdyaXRlIGFzIGlmIG5vdGhpbmcgZ290CisJCQkgKiB3cml0dGVuLiBBIHplcm8gbGVuZ3RoIHdyaXRlIGhvd2V2ZXIgaW5kaWNhdGVzCisJCQkgKiBFTk9TUEMgb3IgRUZCSUcuIFdlIGhhdmUgbm8gd2F5IHRvIGtub3cgd2hpY2gKKwkJCSAqIHRob3VnaCwgc28gY2FsbCBpdCBFTk9TUEMgZm9yIG5vdy4gRUZCSUcgd291bGQKKwkJCSAqIGdldCB0cmFuc2xhdGVkIHRvIEFTX0VJTyBhbnl3YXkuCisJCQkgKgorCQkJICogRklYTUU6IG1ha2UgaXQgdGFrZSBpbnRvIGFjY291bnQgdGhlIGRhdGEgdGhhdCBkaWQKKwkJCSAqCSAgZ2V0IHdyaXR0ZW4KKwkJCSAqLworCQkJaWYgKHJjID09IDApIHsKKwkJCQlpZiAoYnl0ZXNfd3JpdHRlbiA9PSAwKQorCQkJCQlyYyA9IC1FTk9TUEM7CisJCQkJZWxzZSBpZiAoYnl0ZXNfd3JpdHRlbiA8IGJ5dGVzX3RvX3dyaXRlKQorCQkJCQlyYyA9IC1FQUdBSU47CisJCQl9CisKKwkJCS8qIHJldHJ5IG9uIGRhdGEtaW50ZWdyaXR5IGZsdXNoICovCisJCQlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgJiYgcmMgPT0gLUVBR0FJTikKKwkJCQlnb3RvIHJldHJ5X3dyaXRlOworCisJCQkvKiBmaXggdGhlIHN0YXRzIGFuZCBFT0YgKi8KKwkJCWlmIChieXRlc193cml0dGVuID4gMCkgewogCQkJCWNpZnNfc3RhdHNfYnl0ZXNfd3JpdHRlbih0Y29uLCBieXRlc193cml0dGVuKTsKKwkJCQljaWZzX3VwZGF0ZV9lb2YoY2lmc2ksIG9mZnNldCwgYnl0ZXNfd3JpdHRlbik7CiAJCQl9CiAKIAkJCWZvciAoaSA9IDA7IGkgPCBuX2lvdjsgaSsrKSB7CiAJCQkJcGFnZSA9IHB2ZWMucGFnZXNbZmlyc3QgKyBpXTsKLQkJCQkvKiBTaG91bGQgd2UgYWxzbyBzZXQgcGFnZSBlcnJvciBvbgotCQkJCXN1Y2Nlc3MgcmMgYnV0IHRvbyBsaXR0bGUgZGF0YSB3cml0dGVuPyAqLwotCQkJCS8qIEJCIGludmVzdGlnYXRlIHJldHJ5IGxvZ2ljIG9uIHRlbXBvcmFyeQotCQkJCXNlcnZlciBjcmFzaCBjYXNlcyBhbmQgaG93IHJlY292ZXJ5IHdvcmtzCi0JCQkJd2hlbiBwYWdlIG1hcmtlZCBhcyBlcnJvciAqLwotCQkJCWlmIChyYykKKwkJCQkvKiBvbiByZXRyeWFibGUgd3JpdGUgZXJyb3IsIHJlZGlydHkgcGFnZSAqLworCQkJCWlmIChyYyA9PSAtRUFHQUlOKQorCQkJCQlyZWRpcnR5X3BhZ2VfZm9yX3dyaXRlcGFnZSh3YmMsIHBhZ2UpOworCQkJCWVsc2UgaWYgKHJjICE9IDApCiAJCQkJCVNldFBhZ2VFcnJvcihwYWdlKTsKIAkJCQlrdW5tYXAocGFnZSk7CiAJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCQkJZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwogCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJCX0KKworCQkJaWYgKHJjICE9IC1FQUdBSU4pCisJCQkJbWFwcGluZ19zZXRfZXJyb3IobWFwcGluZywgcmMpOworCQkJZWxzZQorCQkJCXJjID0gMDsKKwogCQkJaWYgKCh3YmMtPm5yX3RvX3dyaXRlIC09IG5faW92KSA8PSAwKQogCQkJCWRvbmUgPSAxOwogCQkJaW5kZXggPSBuZXh0OwpAQCAtMTUyNSwyNyArMTUyMyw0NyBAQAogCXJldHVybiByYzsKIH0KIAotaW50IGNpZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGludCBkYXRhc3luYykKK2ludCBjaWZzX3N0cmljdF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGRhdGFzeW5jKQogewogCWludCB4aWQ7CiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKnNtYmZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwogCiAJeGlkID0gR2V0WGlkKCk7CiAKIAljRllJKDEsICJTeW5jIGZpbGUgLSBuYW1lOiAlcyBkYXRhc3luYzogMHgleCIsCiAJCWZpbGUtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lLCBkYXRhc3luYyk7CiAKLQlyYyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtPmlfbWFwcGluZyk7Ci0JaWYgKHJjID09IDApIHsKLQkJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOworCWlmICghQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVSZWFkKQorCQljaWZzX2ludmFsaWRhdGVfbWFwcGluZyhpbm9kZSk7CiAKLQkJdGNvbiA9IHRsaW5rX3Rjb24oc21iZmlsZS0+dGxpbmspOwotCQlpZiAoIShjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTk9TU1lOQykpCi0JCQlyYyA9IENJRlNTTUJGbHVzaCh4aWQsIHRjb24sIHNtYmZpbGUtPm5ldGZpZCk7Ci0JfQorCXRjb24gPSB0bGlua190Y29uKHNtYmZpbGUtPnRsaW5rKTsKKwlpZiAoIShjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTk9TU1lOQykpCisJCXJjID0gQ0lGU1NNQkZsdXNoKHhpZCwgdGNvbiwgc21iZmlsZS0+bmV0ZmlkKTsKKworCUZyZWVYaWQoeGlkKTsKKwlyZXR1cm4gcmM7Cit9CisKK2ludCBjaWZzX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgZGF0YXN5bmMpCit7CisJaW50IHhpZDsKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CisJc3RydWN0IGNpZnNGaWxlSW5mbyAqc21iZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiKTsKKworCXhpZCA9IEdldFhpZCgpOworCisJY0ZZSSgxLCAiU3luYyBmaWxlIC0gbmFtZTogJXMgZGF0YXN5bmM6IDB4JXgiLAorCQlmaWxlLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSwgZGF0YXN5bmMpOworCisJdGNvbiA9IHRsaW5rX3Rjb24oc21iZmlsZS0+dGxpbmspOworCWlmICghKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9OT1NTWU5DKSkKKwkJcmMgPSBDSUZTU01CRmx1c2goeGlkLCB0Y29uLCBzbWJmaWxlLT5uZXRmaWQpOwogCiAJRnJlZVhpZCh4aWQpOwogCXJldHVybiByYzsKQEAgLTE1OTYsNDIgKzE2MTQsMjQ0IEBACiAJcmV0dXJuIHJjOwogfQogCi1zc2l6ZV90IGNpZnNfdXNlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqcmVhZF9kYXRhLAotCXNpemVfdCByZWFkX3NpemUsIGxvZmZfdCAqcG9mZnNldCkKK3N0YXRpYyBpbnQKK2NpZnNfd3JpdGVfYWxsb2NhdGVfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMpCiB7Ci0JaW50IHJjID0gLUVBQ0NFUzsKKwlpbnQgcmMgPSAwOworCXVuc2lnbmVkIGxvbmcgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykgeworCQlwYWdlc1tpXSA9IGFsbG9jX3BhZ2UoX19HRlBfSElHSE1FTSk7CisJCWlmICghcGFnZXNbaV0pIHsKKwkJCS8qCisJCQkgKiBzYXZlIG51bWJlciBvZiBwYWdlcyB3ZSBoYXZlIGFscmVhZHkgYWxsb2NhdGVkIGFuZAorCQkJICogcmV0dXJuIHdpdGggRU5PTUVNIGVycm9yCisJCQkgKi8KKwkJCW51bV9wYWdlcyA9IGk7CisJCQlyYyA9IC1FTk9NRU07CisJCQlnb3RvIGVycm9yOworCQl9CisJfQorCisJcmV0dXJuIHJjOworCitlcnJvcjoKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspCisJCXB1dF9wYWdlKHBhZ2VzW2ldKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3NpemVfdCBnZXRfbnVtcGFnZXMoY29uc3Qgc2l6ZV90IHdzaXplLCBjb25zdCBzaXplX3QgbGVuLCBzaXplX3QgKmN1cl9sZW4pCit7CisJc2l6ZV90IG51bV9wYWdlczsKKwlzaXplX3QgY2xlbjsKKworCWNsZW4gPSBtaW5fdChjb25zdCBzaXplX3QsIGxlbiwgd3NpemUpOworCW51bV9wYWdlcyA9IGNsZW4gLyBQQUdFX0NBQ0hFX1NJWkU7CisJaWYgKGNsZW4gJSBQQUdFX0NBQ0hFX1NJWkUpCisJCW51bV9wYWdlcysrOworCisJaWYgKGN1cl9sZW4pCisJCSpjdXJfbGVuID0gY2xlbjsKKworCXJldHVybiBudW1fcGFnZXM7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitjaWZzX2lvdmVjX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90ICpwb2Zmc2V0KQoreworCXVuc2lnbmVkIGludCB3cml0dGVuOworCXVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzLCBucGFnZXMsIGk7CisJc2l6ZV90IGNvcGllZCwgbGVuLCBjdXJfbGVuOworCXNzaXplX3QgdG90YWxfd3JpdHRlbiA9IDA7CisJc3RydWN0IGt2ZWMgKnRvX3NlbmQ7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwlzdHJ1Y3QgaW92X2l0ZXIgaXQ7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpvcGVuX2ZpbGU7CisJc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247CisJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKKwlpbnQgeGlkLCByYzsKKworCWxlbiA9IGlvdl9sZW5ndGgoaW92LCBucl9zZWdzKTsKKwlpZiAoIWxlbikKKwkJcmV0dXJuIDA7CisKKwlyYyA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGZpbGUsIHBvZmZzZXQsICZsZW4sIDApOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7CisJbnVtX3BhZ2VzID0gZ2V0X251bXBhZ2VzKGNpZnNfc2ItPndzaXplLCBsZW4sICZjdXJfbGVuKTsKKworCXBhZ2VzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBhZ2VzICopKm51bV9wYWdlcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYWdlcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0b19zZW5kID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGt2ZWMpKihudW1fcGFnZXMgKyAxKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0b19zZW5kKSB7CisJCWtmcmVlKHBhZ2VzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmMgPSBjaWZzX3dyaXRlX2FsbG9jYXRlX3BhZ2VzKHBhZ2VzLCBudW1fcGFnZXMpOworCWlmIChyYykgeworCQlrZnJlZShwYWdlcyk7CisJCWtmcmVlKHRvX3NlbmQpOworCQlyZXR1cm4gcmM7CisJfQorCisJeGlkID0gR2V0WGlkKCk7CisJb3Blbl9maWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXBUY29uID0gdGxpbmtfdGNvbihvcGVuX2ZpbGUtPnRsaW5rKTsKKwlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisKKwlpb3ZfaXRlcl9pbml0KCZpdCwgaW92LCBucl9zZWdzLCBsZW4sIDApOworCW5wYWdlcyA9IG51bV9wYWdlczsKKworCWRvIHsKKwkJc2l6ZV90IHNhdmVfbGVuID0gY3VyX2xlbjsKKwkJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7CisJCQljb3BpZWQgPSBtaW5fdChjb25zdCBzaXplX3QsIGN1cl9sZW4sIFBBR0VfQ0FDSEVfU0laRSk7CisJCQljb3BpZWQgPSBpb3ZfaXRlcl9jb3B5X2Zyb21fdXNlcihwYWdlc1tpXSwgJml0LCAwLAorCQkJCQkJCSBjb3BpZWQpOworCQkJY3VyX2xlbiAtPSBjb3BpZWQ7CisJCQlpb3ZfaXRlcl9hZHZhbmNlKCZpdCwgY29waWVkKTsKKwkJCXRvX3NlbmRbaSsxXS5pb3ZfYmFzZSA9IGttYXAocGFnZXNbaV0pOworCQkJdG9fc2VuZFtpKzFdLmlvdl9sZW4gPSBjb3BpZWQ7CisJCX0KKworCQljdXJfbGVuID0gc2F2ZV9sZW4gLSBjdXJfbGVuOworCisJCWRvIHsKKwkJCWlmIChvcGVuX2ZpbGUtPmludmFsaWRIYW5kbGUpIHsKKwkJCQlyYyA9IGNpZnNfcmVvcGVuX2ZpbGUob3Blbl9maWxlLCBmYWxzZSk7CisJCQkJaWYgKHJjICE9IDApCisJCQkJCWJyZWFrOworCQkJfQorCQkJcmMgPSBDSUZTU01CV3JpdGUyKHhpZCwgcFRjb24sIG9wZW5fZmlsZS0+bmV0ZmlkLAorCQkJCQkgICBjdXJfbGVuLCAqcG9mZnNldCwgJndyaXR0ZW4sCisJCQkJCSAgIHRvX3NlbmQsIG5wYWdlcywgMCk7CisJCX0gd2hpbGUgKHJjID09IC1FQUdBSU4pOworCisJCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykKKwkJCWt1bm1hcChwYWdlc1tpXSk7CisKKwkJaWYgKHdyaXR0ZW4pIHsKKwkJCWxlbiAtPSB3cml0dGVuOworCQkJdG90YWxfd3JpdHRlbiArPSB3cml0dGVuOworCQkJY2lmc191cGRhdGVfZW9mKENJRlNfSShpbm9kZSksICpwb2Zmc2V0LCB3cml0dGVuKTsKKwkJCSpwb2Zmc2V0ICs9IHdyaXR0ZW47CisJCX0gZWxzZSBpZiAocmMgPCAwKSB7CisJCQlpZiAoIXRvdGFsX3dyaXR0ZW4pCisJCQkJdG90YWxfd3JpdHRlbiA9IHJjOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBnZXQgbGVuZ3RoIGFuZCBudW1iZXIgb2Yga3ZlY3Mgb2YgdGhlIG5leHQgd3JpdGUgKi8KKwkJbnBhZ2VzID0gZ2V0X251bXBhZ2VzKGNpZnNfc2ItPndzaXplLCBsZW4sICZjdXJfbGVuKTsKKwl9IHdoaWxlIChsZW4gPiAwKTsKKworCWlmICh0b3RhbF93cml0dGVuID4gMCkgeworCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCQlpZiAoKnBvZmZzZXQgPiBpbm9kZS0+aV9zaXplKQorCQkJaV9zaXplX3dyaXRlKGlub2RlLCAqcG9mZnNldCk7CisJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwl9CisKKwljaWZzX3N0YXRzX2J5dGVzX3dyaXR0ZW4ocFRjb24sIHRvdGFsX3dyaXR0ZW4pOworCW1hcmtfaW5vZGVfZGlydHlfc3luYyhpbm9kZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspCisJCXB1dF9wYWdlKHBhZ2VzW2ldKTsKKwlrZnJlZSh0b19zZW5kKTsKKwlrZnJlZShwYWdlcyk7CisJRnJlZVhpZCh4aWQpOworCXJldHVybiB0b3RhbF93cml0dGVuOworfQorCitzdGF0aWMgc3NpemVfdCBjaWZzX3VzZXJfd3JpdGV2KHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisJCQkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQoreworCXNzaXplX3Qgd3JpdHRlbjsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJaW5vZGUgPSBpb2NiLT5raV9maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCisJLyoKKwkgKiBCQiAtIG9wdGltaXplIHRoZSB3YXkgd2hlbiBzaWduaW5nIGlzIGRpc2FibGVkLiBXZSBjYW4gZHJvcCB0aGlzCisJICogZXh0cmEgbWVtb3J5LXRvLW1lbW9yeSBjb3B5aW5nIGFuZCB1c2UgaW92ZWMgYnVmZmVycyBmb3IgY29uc3RydWN0aW5nCisJICogd3JpdGUgcmVxdWVzdC4KKwkgKi8KKworCXdyaXR0ZW4gPSBjaWZzX2lvdmVjX3dyaXRlKGlvY2ItPmtpX2ZpbHAsIGlvdiwgbnJfc2VncywgJnBvcyk7CisJaWYgKHdyaXR0ZW4gPiAwKSB7CisJCUNJRlNfSShpbm9kZSktPmludmFsaWRfbWFwcGluZyA9IHRydWU7CisJCWlvY2ItPmtpX3BvcyA9IHBvczsKKwl9CisKKwlyZXR1cm4gd3JpdHRlbjsKK30KKworc3NpemVfdCBjaWZzX3N0cmljdF93cml0ZXYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJaW5vZGUgPSBpb2NiLT5raV9maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCisJaWYgKENJRlNfSShpbm9kZSktPmNsaWVudENhbkNhY2hlQWxsKQorCQlyZXR1cm4gZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7CisKKwkvKgorCSAqIEluIHN0cmljdCBjYWNoZSBtb2RlIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGRhdGEgdG8gdGhlIHNlcnZlciBleGFjdGx5CisJICogZnJvbSB0aGUgcG9zIHRvIHBvcytsZW4tMSByYXRoZXIgdGhhbiBmbHVzaCBhbGwgYWZmZWN0ZWQgcGFnZXMKKwkgKiBiZWNhdXNlIGl0IG1heSBjYXVzZSBhIGVycm9yIHdpdGggbWFuZGF0b3J5IGxvY2tzIG9uIHRoZXNlIHBhZ2VzIGJ1dAorCSAqIG5vdCBvbiB0aGUgcmVnaW9uIGZyb20gcG9zIHRvIHBwb3MrbGVuLTEuCisJICovCisKKwlyZXR1cm4gY2lmc191c2VyX3dyaXRldihpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitjaWZzX2lvdmVjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgKnBvZmZzZXQpCit7CisJaW50IHJjOworCWludCB4aWQ7CisJc3NpemVfdCB0b3RhbF9yZWFkOwogCXVuc2lnbmVkIGludCBieXRlc19yZWFkID0gMDsKLQl1bnNpZ25lZCBpbnQgdG90YWxfcmVhZCA9IDA7Ci0JdW5zaWduZWQgaW50IGN1cnJlbnRfcmVhZF9zaXplOworCXNpemVfdCBsZW4sIGN1cl9sZW47CisJaW50IGlvdl9vZmZzZXQgPSAwOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CiAJc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247Ci0JaW50IHhpZDsKIAlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpvcGVuX2ZpbGU7Ci0JY2hhciAqc21iX3JlYWRfZGF0YTsKLQljaGFyIF9fdXNlciAqY3VycmVudF9vZmZzZXQ7CiAJc3RydWN0IHNtYl9jb21fcmVhZF9yc3AgKnBTTUJyOworCWNoYXIgKnJlYWRfZGF0YTsKKworCWlmICghbnJfc2VncykKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7CisJaWYgKCFsZW4pCisJCXJldHVybiAwOwogCiAJeGlkID0gR2V0WGlkKCk7CiAJY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7CiAKLQlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhID09IE5VTEwpIHsKLQkJcmMgPSAtRUJBREY7Ci0JCUZyZWVYaWQoeGlkKTsKLQkJcmV0dXJuIHJjOwotCX0KIAlvcGVuX2ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJcFRjb24gPSB0bGlua190Y29uKG9wZW5fZmlsZS0+dGxpbmspOwogCiAJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1dST05MWSkKIAkJY0ZZSSgxLCAiYXR0ZW1wdGluZyByZWFkIG9uIHdyaXRlIG9ubHkgZmlsZSBpbnN0YW5jZSIpOwogCi0JZm9yICh0b3RhbF9yZWFkID0gMCwgY3VycmVudF9vZmZzZXQgPSByZWFkX2RhdGE7Ci0JICAgICByZWFkX3NpemUgPiB0b3RhbF9yZWFkOwotCSAgICAgdG90YWxfcmVhZCArPSBieXRlc19yZWFkLCBjdXJyZW50X29mZnNldCArPSBieXRlc19yZWFkKSB7Ci0JCWN1cnJlbnRfcmVhZF9zaXplID0gbWluX3QoY29uc3QgaW50LCByZWFkX3NpemUgLSB0b3RhbF9yZWFkLAotCQkJCQkgIGNpZnNfc2ItPnJzaXplKTsKKwlmb3IgKHRvdGFsX3JlYWQgPSAwOyB0b3RhbF9yZWFkIDwgbGVuOyB0b3RhbF9yZWFkICs9IGJ5dGVzX3JlYWQpIHsKKwkJY3VyX2xlbiA9IG1pbl90KGNvbnN0IHNpemVfdCwgbGVuIC0gdG90YWxfcmVhZCwgY2lmc19zYi0+cnNpemUpOwogCQlyYyA9IC1FQUdBSU47Ci0JCXNtYl9yZWFkX2RhdGEgPSBOVUxMOworCQlyZWFkX2RhdGEgPSBOVUxMOworCiAJCXdoaWxlIChyYyA9PSAtRUFHQUlOKSB7CiAJCQlpbnQgYnVmX3R5cGUgPSBDSUZTX05PX0JVRkZFUjsKIAkJCWlmIChvcGVuX2ZpbGUtPmludmFsaWRIYW5kbGUpIHsKQEAgLTE2MzksMjcgKzE4NTksMjUgQEAKIAkJCQlpZiAocmMgIT0gMCkKIAkJCQkJYnJlYWs7CiAJCQl9Ci0JCQlyYyA9IENJRlNTTUJSZWFkKHhpZCwgcFRjb24sCi0JCQkJCSBvcGVuX2ZpbGUtPm5ldGZpZCwKLQkJCQkJIGN1cnJlbnRfcmVhZF9zaXplLCAqcG9mZnNldCwKLQkJCQkJICZieXRlc19yZWFkLCAmc21iX3JlYWRfZGF0YSwKLQkJCQkJICZidWZfdHlwZSk7Ci0JCQlwU01CciA9IChzdHJ1Y3Qgc21iX2NvbV9yZWFkX3JzcCAqKXNtYl9yZWFkX2RhdGE7Ci0JCQlpZiAoc21iX3JlYWRfZGF0YSkgewotCQkJCWlmIChjb3B5X3RvX3VzZXIoY3VycmVudF9vZmZzZXQsCi0JCQkJCQlzbWJfcmVhZF9kYXRhICsKLQkJCQkJCTQgLyogUkZDMTAwMSBsZW5ndGggZmllbGQgKi8gKwotCQkJCQkJbGUxNl90b19jcHUocFNNQnItPkRhdGFPZmZzZXQpLAotCQkJCQkJYnl0ZXNfcmVhZCkpCisJCQlyYyA9IENJRlNTTUJSZWFkKHhpZCwgcFRjb24sIG9wZW5fZmlsZS0+bmV0ZmlkLAorCQkJCQkgY3VyX2xlbiwgKnBvZmZzZXQsICZieXRlc19yZWFkLAorCQkJCQkgJnJlYWRfZGF0YSwgJmJ1Zl90eXBlKTsKKwkJCXBTTUJyID0gKHN0cnVjdCBzbWJfY29tX3JlYWRfcnNwICopcmVhZF9kYXRhOworCQkJaWYgKHJlYWRfZGF0YSkgeworCQkJCWNoYXIgKmRhdGFfb2Zmc2V0ID0gcmVhZF9kYXRhICsgNCArCisJCQkJCQlsZTE2X3RvX2NwdShwU01Cci0+RGF0YU9mZnNldCk7CisJCQkJaWYgKG1lbWNweV90b2lvdmVjZW5kKGlvdiwgZGF0YV9vZmZzZXQsCisJCQkJCQkgICAgICBpb3Zfb2Zmc2V0LCBieXRlc19yZWFkKSkKIAkJCQkJcmMgPSAtRUZBVUxUOwotCiAJCQkJaWYgKGJ1Zl90eXBlID09IENJRlNfU01BTExfQlVGRkVSKQotCQkJCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKHNtYl9yZWFkX2RhdGEpOworCQkJCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKHJlYWRfZGF0YSk7CiAJCQkJZWxzZSBpZiAoYnVmX3R5cGUgPT0gQ0lGU19MQVJHRV9CVUZGRVIpCi0JCQkJCWNpZnNfYnVmX3JlbGVhc2Uoc21iX3JlYWRfZGF0YSk7Ci0JCQkJc21iX3JlYWRfZGF0YSA9IE5VTEw7CisJCQkJCWNpZnNfYnVmX3JlbGVhc2UocmVhZF9kYXRhKTsKKwkJCQlyZWFkX2RhdGEgPSBOVUxMOworCQkJCWlvdl9vZmZzZXQgKz0gYnl0ZXNfcmVhZDsKIAkJCX0KIAkJfQorCiAJCWlmIChyYyB8fCAoYnl0ZXNfcmVhZCA9PSAwKSkgewogCQkJaWYgKHRvdGFsX3JlYWQpIHsKIAkJCQlicmVhazsKQEAgLTE2NzIsMTMgKzE4OTAsNTcgQEAKIAkJCSpwb2Zmc2V0ICs9IGJ5dGVzX3JlYWQ7CiAJCX0KIAl9CisKIAlGcmVlWGlkKHhpZCk7CiAJcmV0dXJuIHRvdGFsX3JlYWQ7CiB9CiAKK3NzaXplX3QgY2lmc191c2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpyZWFkX2RhdGEsCisJCSAgICAgICBzaXplX3QgcmVhZF9zaXplLCBsb2ZmX3QgKnBvZmZzZXQpCit7CisJc3RydWN0IGlvdmVjIGlvdjsKKwlpb3YuaW92X2Jhc2UgPSByZWFkX2RhdGE7CisJaW92Lmlvdl9sZW4gPSByZWFkX3NpemU7CisKKwlyZXR1cm4gY2lmc19pb3ZlY19yZWFkKGZpbGUsICZpb3YsIDEsIHBvZmZzZXQpOworfQorCitzdGF0aWMgc3NpemVfdCBjaWZzX3VzZXJfcmVhZHYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCit7CisJc3NpemVfdCByZWFkOworCisJcmVhZCA9IGNpZnNfaW92ZWNfcmVhZChpb2NiLT5raV9maWxwLCBpb3YsIG5yX3NlZ3MsICZwb3MpOworCWlmIChyZWFkID4gMCkKKwkJaW9jYi0+a2lfcG9zID0gcG9zOworCisJcmV0dXJuIHJlYWQ7Cit9CisKK3NzaXplX3QgY2lmc19zdHJpY3RfcmVhZHYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpbm9kZSA9IGlvY2ItPmtpX2ZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisKKwlpZiAoQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVSZWFkKQorCQlyZXR1cm4gZ2VuZXJpY19maWxlX2Fpb19yZWFkKGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKKworCS8qCisJICogSW4gc3RyaWN0IGNhY2hlIG1vZGUgd2UgbmVlZCB0byByZWFkIGZyb20gdGhlIHNlcnZlciBhbGwgdGhlIHRpbWUKKwkgKiBpZiB3ZSBkb24ndCBoYXZlIGxldmVsIElJIG9wbG9jayBiZWNhdXNlIHRoZSBzZXJ2ZXIgY2FuIGRlbGF5IG10aW1lCisJICogY2hhbmdlIC0gc28gd2UgY2FuJ3QgbWFrZSBhIGRlY2lzaW9uIGFib3V0IGlub2RlIGludmFsaWRhdGluZy4KKwkgKiBBbmQgd2UgY2FuIGFsc28gZmFpbCB3aXRoIHBhZ2VyZWFkaW5nIGlmIHRoZXJlIGFyZSBtYW5kYXRvcnkgbG9ja3MKKwkgKiBvbiBwYWdlcyBhZmZlY3RlZCBieSB0aGlzIHJlYWQgYnV0IG5vdCBvbiB0aGUgcmVnaW9uIGZyb20gcG9zIHRvCisJICogcG9zK2xlbi0xLgorCSAqLworCisJcmV0dXJuIGNpZnNfdXNlcl9yZWFkdihpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7Cit9CiAKIHN0YXRpYyBzc2l6ZV90IGNpZnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqcmVhZF9kYXRhLCBzaXplX3QgcmVhZF9zaXplLAotCWxvZmZfdCAqcG9mZnNldCkKKwkJCSBsb2ZmX3QgKnBvZmZzZXQpCiB7CiAJaW50IHJjID0gLUVBQ0NFUzsKIAl1bnNpZ25lZCBpbnQgYnl0ZXNfcmVhZCA9IDA7CkBAIC0xNzQ2LDYgKzIwMDgsMjEgQEAKIAlyZXR1cm4gdG90YWxfcmVhZDsKIH0KIAoraW50IGNpZnNfZmlsZV9zdHJpY3RfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50IHJjLCB4aWQ7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisKKwl4aWQgPSBHZXRYaWQoKTsKKworCWlmICghQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVSZWFkKQorCQljaWZzX2ludmFsaWRhdGVfbWFwcGluZyhpbm9kZSk7CisKKwlyYyA9IGdlbmVyaWNfZmlsZV9tbWFwKGZpbGUsIHZtYSk7CisJRnJlZVhpZCh4aWQpOworCXJldHVybiByYzsKK30KKwogaW50IGNpZnNfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlpbnQgcmMsIHhpZDsKQEAgLTIxOTIsNyArMjQ2OSw4IEBACiAJICovCiAJaWYgKCFjZmlsZS0+b3Bsb2NrX2JyZWFrX2NhbmNlbGxlZCkgewogCQlyYyA9IENJRlNTTUJMb2NrKDAsIHRsaW5rX3Rjb24oY2ZpbGUtPnRsaW5rKSwgY2ZpbGUtPm5ldGZpZCwgMCwKLQkJCQkgMCwgMCwgMCwgTE9DS0lOR19BTkRYX09QTE9DS19SRUxFQVNFLCBmYWxzZSk7CisJCQkJIDAsIDAsIDAsIExPQ0tJTkdfQU5EWF9PUExPQ0tfUkVMRUFTRSwgZmFsc2UsCisJCQkJIGNpbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID8gMSA6IDApOwogCQljRllJKDEsICJPcGxvY2sgcmVsZWFzZSByYyA9ICVkIiwgcmMpOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pbm9kZS5jIGIvZnMvY2lmcy9pbm9kZS5jCmluZGV4IDZjOWVlODAuLjg4NTI0NzAgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvaW5vZGUuYworKysgYi9mcy9jaWZzL2lub2RlLmMKQEAgLTQ0LDEzICs0NCwxNyBAQAogCQkJCWlub2RlLT5pX2ZvcCA9ICZjaWZzX2ZpbGVfZGlyZWN0X25vYnJsX29wczsKIAkJCWVsc2UKIAkJCQlpbm9kZS0+aV9mb3AgPSAmY2lmc19maWxlX2RpcmVjdF9vcHM7CisJCX0gZWxzZSBpZiAoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX1NUUklDVF9JTykgeworCQkJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9OT19CUkwpCisJCQkJaW5vZGUtPmlfZm9wID0gJmNpZnNfZmlsZV9zdHJpY3Rfbm9icmxfb3BzOworCQkJZWxzZQorCQkJCWlub2RlLT5pX2ZvcCA9ICZjaWZzX2ZpbGVfc3RyaWN0X29wczsKIAkJfSBlbHNlIGlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTk9fQlJMKQogCQkJaW5vZGUtPmlfZm9wID0gJmNpZnNfZmlsZV9ub2JybF9vcHM7CiAJCWVsc2UgeyAvKiBub3QgZGlyZWN0LCBzZW5kIGJ5dGUgcmFuZ2UgbG9ja3MgKi8KIAkJCWlub2RlLT5pX2ZvcCA9ICZjaWZzX2ZpbGVfb3BzOwogCQl9CiAKLQogCQkvKiBjaGVjayBpZiBzZXJ2ZXIgY2FuIHN1cHBvcnQgcmVhZHBhZ2VzICovCiAJCWlmIChjaWZzX3NiX21hc3Rlcl90Y29uKGNpZnNfc2IpLT5zZXMtPnNlcnZlci0+bWF4QnVmIDwKIAkJCQlQQUdFX0NBQ0hFX1NJWkUgKyBNQVhfQ0lGU19IRFJfU0laRSkKQEAgLTE2NzksNyArMTY4Myw3IEBACiAvKgogICogWmFwIHRoZSBjYWNoZS4gQ2FsbGVkIHdoZW4gaW52YWxpZF9tYXBwaW5nIGZsYWcgaXMgc2V0LgogICovCi1zdGF0aWMgdm9pZAordm9pZAogY2lmc19pbnZhbGlkYXRlX21hcHBpbmcoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlpbnQgcmM7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2xpbmsuYyBiL2ZzL2NpZnMvbGluay5jCmluZGV4IDMwNjc2OWQuLmU4ODA0ZDMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbGluay5jCisrKyBiL2ZzL2NpZnMvbGluay5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiY2lmc3Byb3RvLmgiCiAjaW5jbHVkZSAiY2lmc19kZWJ1Zy5oIgogI2luY2x1ZGUgImNpZnNfZnNfc2IuaCIKLSNpbmNsdWRlICJtZDUuaCIKIAogI2RlZmluZSBDSUZTX01GX1NZTUxJTktfTEVOX09GRlNFVCAoNCsxKQogI2RlZmluZSBDSUZTX01GX1NZTUxJTktfTUQ1X09GRlNFVCAoQ0lGU19NRl9TWU1MSU5LX0xFTl9PRkZTRVQrKDQrMSkpCkBAIC00Nyw2ICs0Niw0NSBAQAogCW1kNV9oYXNoWzEyXSwgbWQ1X2hhc2hbMTNdLCBtZDVfaGFzaFsxNF0sIG1kNV9oYXNoWzE1XQogCiBzdGF0aWMgaW50CitzeW1saW5rX2hhc2godW5zaWduZWQgaW50IGxpbmtfbGVuLCBjb25zdCBjaGFyICpsaW5rX3N0ciwgdTggKm1kNV9oYXNoKQoreworCWludCByYzsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwlzdHJ1Y3QgY3J5cHRvX3NoYXNoICptZDU7CisJc3RydWN0IHNkZXNjICpzZGVzY21kNTsKKworCW1kNSA9IGNyeXB0b19hbGxvY19zaGFzaCgibWQ1IiwgMCwgMCk7CisJaWYgKElTX0VSUihtZDUpKSB7CisJCXJjID0gUFRSX0VSUihtZDUpOworCQljRVJST1IoMSwgIiVzOiBDcnlwdG8gbWQ1IGFsbG9jYXRpb24gZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByYyk7CisJCXJldHVybiByYzsKKwl9CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hhc2hfZGVzYykgKyBjcnlwdG9fc2hhc2hfZGVzY3NpemUobWQ1KTsKKwlzZGVzY21kNSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZGVzY21kNSkgeworCQlyYyA9IC1FTk9NRU07CisJCWNFUlJPUigxLCAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIsIF9fZnVuY19fKTsKKwkJZ290byBzeW1saW5rX2hhc2hfZXJyOworCX0KKwlzZGVzY21kNS0+c2hhc2gudGZtID0gbWQ1OworCXNkZXNjbWQ1LT5zaGFzaC5mbGFncyA9IDB4MDsKKworCXJjID0gY3J5cHRvX3NoYXNoX2luaXQoJnNkZXNjbWQ1LT5zaGFzaCk7CisJaWYgKHJjKSB7CisJCWNFUlJPUigxLCAiJXM6IENvdWxkIG5vdCBpbml0IG1kNSBzaGFzaFxuIiwgX19mdW5jX18pOworCQlnb3RvIHN5bWxpbmtfaGFzaF9lcnI7CisJfQorCWNyeXB0b19zaGFzaF91cGRhdGUoJnNkZXNjbWQ1LT5zaGFzaCwgbGlua19zdHIsIGxpbmtfbGVuKTsKKwlyYyA9IGNyeXB0b19zaGFzaF9maW5hbCgmc2Rlc2NtZDUtPnNoYXNoLCBtZDVfaGFzaCk7CisKK3N5bWxpbmtfaGFzaF9lcnI6CisJY3J5cHRvX2ZyZWVfc2hhc2gobWQ1KTsKKwlrZnJlZShzZGVzY21kNSk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQKIENJRlNQYXJzZU1GU3ltbGluayhjb25zdCB1OCAqYnVmLAogCQkgICB1bnNpZ25lZCBpbnQgYnVmX2xlbiwKIAkJICAgdW5zaWduZWQgaW50ICpfbGlua19sZW4sCkBAIC01Niw3ICs5NCw2IEBACiAJdW5zaWduZWQgaW50IGxpbmtfbGVuOwogCWNvbnN0IGNoYXIgKm1kNV9zdHIxOwogCWNvbnN0IGNoYXIgKmxpbmtfc3RyOwotCXN0cnVjdCBNRDVDb250ZXh0IG1kNV9jdHg7CiAJdTggbWQ1X2hhc2hbMTZdOwogCWNoYXIgbWQ1X3N0cjJbMzRdOwogCkBAIC03MCw5ICsxMDcsMTEgQEAKIAlpZiAocmMgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljaWZzX01ENV9pbml0KCZtZDVfY3R4KTsKLQljaWZzX01ENV91cGRhdGUoJm1kNV9jdHgsIChjb25zdCB1OCAqKWxpbmtfc3RyLCBsaW5rX2xlbik7Ci0JY2lmc19NRDVfZmluYWwobWQ1X2hhc2gsICZtZDVfY3R4KTsKKwlyYyA9IHN5bWxpbmtfaGFzaChsaW5rX2xlbiwgbGlua19zdHIsIG1kNV9oYXNoKTsKKwlpZiAocmMpIHsKKwkJY0ZZSSgxLCAiJXM6IE1ENSBoYXNoIGZhaWx1cmU6ICVkXG4iLCBfX2Z1bmNfXywgcmMpOworCQlyZXR1cm4gcmM7CisJfQogCiAJc25wcmludGYobWQ1X3N0cjIsIHNpemVvZihtZDVfc3RyMiksCiAJCSBDSUZTX01GX1NZTUxJTktfTUQ1X0ZPUk1BVCwKQEAgLTk0LDkgKzEzMyw5IEBACiBzdGF0aWMgaW50CiBDSUZTRm9ybWF0TUZTeW1saW5rKHU4ICpidWYsIHVuc2lnbmVkIGludCBidWZfbGVuLCBjb25zdCBjaGFyICpsaW5rX3N0cikKIHsKKwlpbnQgcmM7CiAJdW5zaWduZWQgaW50IGxpbmtfbGVuOwogCXVuc2lnbmVkIGludCBvZnM7Ci0Jc3RydWN0IE1ENUNvbnRleHQgbWQ1X2N0eDsKIAl1OCBtZDVfaGFzaFsxNl07CiAKIAlpZiAoYnVmX2xlbiAhPSBDSUZTX01GX1NZTUxJTktfRklMRV9TSVpFKQpAQCAtMTA3LDkgKzE0NiwxMSBAQAogCWlmIChsaW5rX2xlbiA+IENJRlNfTUZfU1lNTElOS19MSU5LX01BWExFTikKIAkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAKLQljaWZzX01ENV9pbml0KCZtZDVfY3R4KTsKLQljaWZzX01ENV91cGRhdGUoJm1kNV9jdHgsIChjb25zdCB1OCAqKWxpbmtfc3RyLCBsaW5rX2xlbik7Ci0JY2lmc19NRDVfZmluYWwobWQ1X2hhc2gsICZtZDVfY3R4KTsKKwlyYyA9IHN5bWxpbmtfaGFzaChsaW5rX2xlbiwgbGlua19zdHIsIG1kNV9oYXNoKTsKKwlpZiAocmMpIHsKKwkJY0ZZSSgxLCAiJXM6IE1ENSBoYXNoIGZhaWx1cmU6ICVkXG4iLCBfX2Z1bmNfXywgcmMpOworCQlyZXR1cm4gcmM7CisJfQogCiAJc25wcmludGYoYnVmLCBidWZfbGVuLAogCQkgQ0lGU19NRl9TWU1MSU5LX0xFTl9GT1JNQVQgQ0lGU19NRl9TWU1MSU5LX01ENV9GT1JNQVQsCmRpZmYgLS1naXQgYS9mcy9jaWZzL21kNC5jIGIvZnMvY2lmcy9tZDQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcyNWMyNi4uMDAwMDAwMAotLS0gYS9mcy9jaWZzL21kNC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLS8qCi0gICBVbml4IFNNQi9OZXRiaW9zIGltcGxlbWVudGF0aW9uLgotICAgVmVyc2lvbiAxLjkuCi0gICBhIGltcGxlbWVudGF0aW9uIG9mIE1ENCBkZXNpZ25lZCBmb3IgdXNlIGluIHRoZSBTTUIgYXV0aGVudGljYXRpb24gcHJvdG9jb2wKLSAgIENvcHlyaWdodCAoQykgQW5kcmV3IFRyaWRnZWxsIDE5OTctMTk5OC4KLSAgIE1vZGlmaWVkIGJ5IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKSAyMDAyLTIwMDMKLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlICJjaWZzZW5jcnlwdC5oIgotCi0vKiBOT1RFOiBUaGlzIGNvZGUgbWFrZXMgbm8gYXR0ZW1wdCB0byBiZSBmYXN0ISAqLwotCi1zdGF0aWMgX191MzIKLUYoX191MzIgWCwgX191MzIgWSwgX191MzIgWikKLXsKLQlyZXR1cm4gKFggJiBZKSB8ICgoflgpICYgWik7Ci19Ci0KLXN0YXRpYyBfX3UzMgotRyhfX3UzMiBYLCBfX3UzMiBZLCBfX3UzMiBaKQotewotCXJldHVybiAoWCAmIFkpIHwgKFggJiBaKSB8IChZICYgWik7Ci19Ci0KLXN0YXRpYyBfX3UzMgotSChfX3UzMiBYLCBfX3UzMiBZLCBfX3UzMiBaKQotewotCXJldHVybiBYIF4gWSBeIFo7Ci19Ci0KLXN0YXRpYyBfX3UzMgotbHNoaWZ0KF9fdTMyIHgsIGludCBzKQotewotCXggJj0gMHhGRkZGRkZGRjsKLQlyZXR1cm4gKCh4IDw8IHMpICYgMHhGRkZGRkZGRikgfCAoeCA+PiAoMzIgLSBzKSk7Ci19Ci0KLSNkZWZpbmUgUk9VTkQxKGEsYixjLGQsayxzKSAoKmEpID0gbHNoaWZ0KCgqYSkgKyBGKCpiLCpjLCpkKSArIFhba10sIHMpCi0jZGVmaW5lIFJPVU5EMihhLGIsYyxkLGsscykgKCphKSA9IGxzaGlmdCgoKmEpICsgRygqYiwqYywqZCkgKyBYW2tdICsgKF9fdTMyKTB4NUE4Mjc5OTkscykKLSNkZWZpbmUgUk9VTkQzKGEsYixjLGQsayxzKSAoKmEpID0gbHNoaWZ0KCgqYSkgKyBIKCpiLCpjLCpkKSArIFhba10gKyAoX191MzIpMHg2RUQ5RUJBMSxzKQotCi0vKiB0aGlzIGFwcGxpZXMgbWQ0IHRvIDY0IGJ5dGUgY2h1bmtzICovCi1zdGF0aWMgdm9pZAotbWRmb3VyNjQoX191MzIgKk0sIF9fdTMyICpBLCBfX3UzMiAqQiwgX191MzIgKkMsIF9fdTMyICpEKQotewotCWludCBqOwotCV9fdTMyIEFBLCBCQiwgQ0MsIEREOwotCV9fdTMyIFhbMTZdOwotCi0KLQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykKLQkJWFtqXSA9IE1bal07Ci0KLQlBQSA9ICpBOwotCUJCID0gKkI7Ci0JQ0MgPSAqQzsKLQlERCA9ICpEOwotCi0JUk9VTkQxKEEsIEIsIEMsIEQsIDAsIDMpOwotCVJPVU5EMShELCBBLCBCLCBDLCAxLCA3KTsKLQlST1VORDEoQywgRCwgQSwgQiwgMiwgMTEpOwotCVJPVU5EMShCLCBDLCBELCBBLCAzLCAxOSk7Ci0JUk9VTkQxKEEsIEIsIEMsIEQsIDQsIDMpOwotCVJPVU5EMShELCBBLCBCLCBDLCA1LCA3KTsKLQlST1VORDEoQywgRCwgQSwgQiwgNiwgMTEpOwotCVJPVU5EMShCLCBDLCBELCBBLCA3LCAxOSk7Ci0JUk9VTkQxKEEsIEIsIEMsIEQsIDgsIDMpOwotCVJPVU5EMShELCBBLCBCLCBDLCA5LCA3KTsKLQlST1VORDEoQywgRCwgQSwgQiwgMTAsIDExKTsKLQlST1VORDEoQiwgQywgRCwgQSwgMTEsIDE5KTsKLQlST1VORDEoQSwgQiwgQywgRCwgMTIsIDMpOwotCVJPVU5EMShELCBBLCBCLCBDLCAxMywgNyk7Ci0JUk9VTkQxKEMsIEQsIEEsIEIsIDE0LCAxMSk7Ci0JUk9VTkQxKEIsIEMsIEQsIEEsIDE1LCAxOSk7Ci0KLQlST1VORDIoQSwgQiwgQywgRCwgMCwgMyk7Ci0JUk9VTkQyKEQsIEEsIEIsIEMsIDQsIDUpOwotCVJPVU5EMihDLCBELCBBLCBCLCA4LCA5KTsKLQlST1VORDIoQiwgQywgRCwgQSwgMTIsIDEzKTsKLQlST1VORDIoQSwgQiwgQywgRCwgMSwgMyk7Ci0JUk9VTkQyKEQsIEEsIEIsIEMsIDUsIDUpOwotCVJPVU5EMihDLCBELCBBLCBCLCA5LCA5KTsKLQlST1VORDIoQiwgQywgRCwgQSwgMTMsIDEzKTsKLQlST1VORDIoQSwgQiwgQywgRCwgMiwgMyk7Ci0JUk9VTkQyKEQsIEEsIEIsIEMsIDYsIDUpOwotCVJPVU5EMihDLCBELCBBLCBCLCAxMCwgOSk7Ci0JUk9VTkQyKEIsIEMsIEQsIEEsIDE0LCAxMyk7Ci0JUk9VTkQyKEEsIEIsIEMsIEQsIDMsIDMpOwotCVJPVU5EMihELCBBLCBCLCBDLCA3LCA1KTsKLQlST1VORDIoQywgRCwgQSwgQiwgMTEsIDkpOwotCVJPVU5EMihCLCBDLCBELCBBLCAxNSwgMTMpOwotCi0JUk9VTkQzKEEsIEIsIEMsIEQsIDAsIDMpOwotCVJPVU5EMyhELCBBLCBCLCBDLCA4LCA5KTsKLQlST1VORDMoQywgRCwgQSwgQiwgNCwgMTEpOwotCVJPVU5EMyhCLCBDLCBELCBBLCAxMiwgMTUpOwotCVJPVU5EMyhBLCBCLCBDLCBELCAyLCAzKTsKLQlST1VORDMoRCwgQSwgQiwgQywgMTAsIDkpOwotCVJPVU5EMyhDLCBELCBBLCBCLCA2LCAxMSk7Ci0JUk9VTkQzKEIsIEMsIEQsIEEsIDE0LCAxNSk7Ci0JUk9VTkQzKEEsIEIsIEMsIEQsIDEsIDMpOwotCVJPVU5EMyhELCBBLCBCLCBDLCA5LCA5KTsKLQlST1VORDMoQywgRCwgQSwgQiwgNSwgMTEpOwotCVJPVU5EMyhCLCBDLCBELCBBLCAxMywgMTUpOwotCVJPVU5EMyhBLCBCLCBDLCBELCAzLCAzKTsKLQlST1VORDMoRCwgQSwgQiwgQywgMTEsIDkpOwotCVJPVU5EMyhDLCBELCBBLCBCLCA3LCAxMSk7Ci0JUk9VTkQzKEIsIEMsIEQsIEEsIDE1LCAxNSk7Ci0KLQkqQSArPSBBQTsKLQkqQiArPSBCQjsKLQkqQyArPSBDQzsKLQkqRCArPSBERDsKLQotCSpBICY9IDB4RkZGRkZGRkY7Ci0JKkIgJj0gMHhGRkZGRkZGRjsKLQkqQyAmPSAweEZGRkZGRkZGOwotCSpEICY9IDB4RkZGRkZGRkY7Ci0KLQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykKLQkJWFtqXSA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb3B5NjQoX191MzIgKk0sIHVuc2lnbmVkIGNoYXIgKmluKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0JCU1baV0gPSAoaW5baSAqIDQgKyAzXSA8PCAyNCkgfCAoaW5baSAqIDQgKyAyXSA8PCAxNikgfAotCQkgICAgKGluW2kgKiA0ICsgMV0gPDwgOCkgfCAoaW5baSAqIDQgKyAwXSA8PCAwKTsKLX0KLQotc3RhdGljIHZvaWQKLWNvcHk0KHVuc2lnbmVkIGNoYXIgKm91dCwgX191MzIgeCkKLXsKLQlvdXRbMF0gPSB4ICYgMHhGRjsKLQlvdXRbMV0gPSAoeCA+PiA4KSAmIDB4RkY7Ci0Jb3V0WzJdID0gKHggPj4gMTYpICYgMHhGRjsKLQlvdXRbM10gPSAoeCA+PiAyNCkgJiAweEZGOwotfQotCi0vKiBwcm9kdWNlIGEgbWQ0IG1lc3NhZ2UgZGlnZXN0IGZyb20gZGF0YSBvZiBsZW5ndGggbiBieXRlcyAqLwotdm9pZAotbWRmb3VyKHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIGludCBuKQotewotCXVuc2lnbmVkIGNoYXIgYnVmWzEyOF07Ci0JX191MzIgTVsxNl07Ci0JX191MzIgYiA9IG4gKiA4OwotCWludCBpOwotCV9fdTMyIEEgPSAweDY3NDUyMzAxOwotCV9fdTMyIEIgPSAweGVmY2RhYjg5OwotCV9fdTMyIEMgPSAweDk4YmFkY2ZlOwotCV9fdTMyIEQgPSAweDEwMzI1NDc2OwotCi0Jd2hpbGUgKG4gPiA2NCkgewotCQljb3B5NjQoTSwgaW4pOwotCQltZGZvdXI2NChNLCAmQSwgJkIsICZDLCAmRCk7Ci0JCWluICs9IDY0OwotCQluIC09IDY0OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKLQkJYnVmW2ldID0gMDsKLQltZW1jcHkoYnVmLCBpbiwgbik7Ci0JYnVmW25dID0gMHg4MDsKLQotCWlmIChuIDw9IDU1KSB7Ci0JCWNvcHk0KGJ1ZiArIDU2LCBiKTsKLQkJY29weTY0KE0sIGJ1Zik7Ci0JCW1kZm91cjY0KE0sICZBLCAmQiwgJkMsICZEKTsKLQl9IGVsc2UgewotCQljb3B5NChidWYgKyAxMjAsIGIpOwotCQljb3B5NjQoTSwgYnVmKTsKLQkJbWRmb3VyNjQoTSwgJkEsICZCLCAmQywgJkQpOwotCQljb3B5NjQoTSwgYnVmICsgNjQpOwotCQltZGZvdXI2NChNLCAmQSwgJkIsICZDLCAmRCk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQotCQlidWZbaV0gPSAwOwotCWNvcHk2NChNLCBidWYpOwotCi0JY29weTQob3V0LCBBKTsKLQljb3B5NChvdXQgKyA0LCBCKTsKLQljb3B5NChvdXQgKyA4LCBDKTsKLQljb3B5NChvdXQgKyAxMiwgRCk7Ci0KLQlBID0gQiA9IEMgPSBEID0gMDsKLX0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbWQ1LmMgYi9mcy9jaWZzL21kNS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGI2NmE1Li4wMDAwMDAwCi0tLSBhL2ZzL2NpZnMvbWQ1LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNjYgKzAsMCBAQAotLyoKLSAqIFRoaXMgY29kZSBpbXBsZW1lbnRzIHRoZSBNRDUgbWVzc2FnZS1kaWdlc3QgYWxnb3JpdGhtLgotICogVGhlIGFsZ29yaXRobSBpcyBkdWUgdG8gUm9uIFJpdmVzdC4gIFRoaXMgY29kZSB3YXMKLSAqIHdyaXR0ZW4gYnkgQ29saW4gUGx1bWIgaW4gMTk5Mywgbm8gY29weXJpZ2h0IGlzIGNsYWltZWQuCi0gKiBUaGlzIGNvZGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW47IGRvIHdpdGggaXQgd2hhdCB5b3Ugd2lzaC4KLSAqCi0gKiBFcXVpdmFsZW50IGNvZGUgaXMgYXZhaWxhYmxlIGZyb20gUlNBIERhdGEgU2VjdXJpdHksIEluYy4KLSAqIFRoaXMgY29kZSBoYXMgYmVlbiB0ZXN0ZWQgYWdhaW5zdCB0aGF0LCBhbmQgaXMgZXF1aXZhbGVudCwKLSAqIGV4Y2VwdCB0aGF0IHlvdSBkb24ndCBuZWVkIHRvIGluY2x1ZGUgdHdvIHBhZ2VzIG9mIGxlZ2FsZXNlCi0gKiB3aXRoIGV2ZXJ5IGNvcHkuCi0gKgotICogVG8gY29tcHV0ZSB0aGUgbWVzc2FnZSBkaWdlc3Qgb2YgYSBjaHVuayBvZiBieXRlcywgZGVjbGFyZSBhbgotICogTUQ1Q29udGV4dCBzdHJ1Y3R1cmUsIHBhc3MgaXQgdG8gY2lmc19NRDVfaW5pdCwgY2FsbCBjaWZzX01ENV91cGRhdGUgYXMKLSAqIG5lZWRlZCBvbiBidWZmZXJzIGZ1bGwgb2YgYnl0ZXMsIGFuZCB0aGVuIGNhbGwgY2lmc19NRDVfZmluYWwsIHdoaWNoCi0gKiB3aWxsIGZpbGwgYSBzdXBwbGllZCAxNi1ieXRlIGFycmF5IHdpdGggdGhlIGRpZ2VzdC4KLSAqLwotCi0vKiBUaGlzIGNvZGUgc2xpZ2h0bHkgbW9kaWZpZWQgdG8gZml0IGludG8gU2FtYmEgYnkKLSAgIGFiYXJ0bGV0QHNhbWJhLm9yZyBKdW4gMjAwMQotICAgYW5kIHRvIGZpdCB0aGUgY2lmcyB2ZnMgYnkKLSAgIFN0ZXZlIEZyZW5jaCBzZnJlbmNoQHVzLmlibS5jb20gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgIm1kNS5oIgotCi1zdGF0aWMgdm9pZCBNRDVUcmFuc2Zvcm0oX191MzIgYnVmWzRdLCBfX3UzMiBjb25zdCBpblsxNl0pOwotCi0vKgotICogTm90ZTogdGhpcyBjb2RlIGlzIGhhcm1sZXNzIG9uIGxpdHRsZS1lbmRpYW4gbWFjaGluZXMuCi0gKi8KLXN0YXRpYyB2b2lkCi1ieXRlUmV2ZXJzZSh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmdzKQotewotCV9fdTMyIHQ7Ci0JZG8gewotCQl0ID0gKF9fdTMyKSAoKHVuc2lnbmVkKSBidWZbM10gPDwgOCB8IGJ1ZlsyXSkgPDwgMTYgfAotCQkgICAgKCh1bnNpZ25lZCkgYnVmWzFdIDw8IDggfCBidWZbMF0pOwotCQkqKF9fdTMyICopIGJ1ZiA9IHQ7Ci0JCWJ1ZiArPSA0OwotCX0gd2hpbGUgKC0tbG9uZ3MpOwotfQotCi0vKgotICogU3RhcnQgTUQ1IGFjY3VtdWxhdGlvbi4gIFNldCBiaXQgY291bnQgdG8gMCBhbmQgYnVmZmVyIHRvIG15c3RlcmlvdXMKLSAqIGluaXRpYWxpemF0aW9uIGNvbnN0YW50cy4KLSAqLwotdm9pZAotY2lmc19NRDVfaW5pdChzdHJ1Y3QgTUQ1Q29udGV4dCAqY3R4KQotewotCWN0eC0+YnVmWzBdID0gMHg2NzQ1MjMwMTsKLQljdHgtPmJ1ZlsxXSA9IDB4ZWZjZGFiODk7Ci0JY3R4LT5idWZbMl0gPSAweDk4YmFkY2ZlOwotCWN0eC0+YnVmWzNdID0gMHgxMDMyNTQ3NjsKLQotCWN0eC0+Yml0c1swXSA9IDA7Ci0JY3R4LT5iaXRzWzFdID0gMDsKLX0KLQotLyoKLSAqIFVwZGF0ZSBjb250ZXh0IHRvIHJlZmxlY3QgdGhlIGNvbmNhdGVuYXRpb24gb2YgYW5vdGhlciBidWZmZXIgZnVsbAotICogb2YgYnl0ZXMuCi0gKi8KLXZvaWQKLWNpZnNfTUQ1X3VwZGF0ZShzdHJ1Y3QgTUQ1Q29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpidWYsIHVuc2lnbmVkIGxlbikKLXsKLQlyZWdpc3RlciBfX3UzMiB0OwotCi0JLyogVXBkYXRlIGJpdGNvdW50ICovCi0KLQl0ID0gY3R4LT5iaXRzWzBdOwotCWlmICgoY3R4LT5iaXRzWzBdID0gdCArICgoX191MzIpIGxlbiA8PCAzKSkgPCB0KQotCQljdHgtPmJpdHNbMV0rKzsJLyogQ2FycnkgZnJvbSBsb3cgdG8gaGlnaCAqLwotCWN0eC0+Yml0c1sxXSArPSBsZW4gPj4gMjk7Ci0KLQl0ID0gKHQgPj4gMykgJiAweDNmOwkvKiBCeXRlcyBhbHJlYWR5IGluIHNoc0luZm8tPmRhdGEgKi8KLQotCS8qIEhhbmRsZSBhbnkgbGVhZGluZyBvZGQtc2l6ZWQgY2h1bmtzICovCi0KLQlpZiAodCkgewotCQl1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikgY3R4LT5pbiArIHQ7Ci0KLQkJdCA9IDY0IC0gdDsKLQkJaWYgKGxlbiA8IHQpIHsKLQkJCW1lbW1vdmUocCwgYnVmLCBsZW4pOwotCQkJcmV0dXJuOwotCQl9Ci0JCW1lbW1vdmUocCwgYnVmLCB0KTsKLQkJYnl0ZVJldmVyc2UoY3R4LT5pbiwgMTYpOwotCQlNRDVUcmFuc2Zvcm0oY3R4LT5idWYsIChfX3UzMiAqKSBjdHgtPmluKTsKLQkJYnVmICs9IHQ7Ci0JCWxlbiAtPSB0OwotCX0KLQkvKiBQcm9jZXNzIGRhdGEgaW4gNjQtYnl0ZSBjaHVua3MgKi8KLQotCXdoaWxlIChsZW4gPj0gNjQpIHsKLQkJbWVtbW92ZShjdHgtPmluLCBidWYsIDY0KTsKLQkJYnl0ZVJldmVyc2UoY3R4LT5pbiwgMTYpOwotCQlNRDVUcmFuc2Zvcm0oY3R4LT5idWYsIChfX3UzMiAqKSBjdHgtPmluKTsKLQkJYnVmICs9IDY0OwotCQlsZW4gLT0gNjQ7Ci0JfQotCi0JLyogSGFuZGxlIGFueSByZW1haW5pbmcgYnl0ZXMgb2YgZGF0YS4gKi8KLQotCW1lbW1vdmUoY3R4LT5pbiwgYnVmLCBsZW4pOwotfQotCi0vKgotICogRmluYWwgd3JhcHVwIC0gcGFkIHRvIDY0LWJ5dGUgYm91bmRhcnkgd2l0aCB0aGUgYml0IHBhdHRlcm4KLSAqIDEgMCogKDY0LWJpdCBjb3VudCBvZiBiaXRzIHByb2Nlc3NlZCwgTVNCLWZpcnN0KQotICovCi12b2lkCi1jaWZzX01ENV9maW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIHN0cnVjdCBNRDVDb250ZXh0ICpjdHgpCi17Ci0JdW5zaWduZWQgaW50IGNvdW50OwotCXVuc2lnbmVkIGNoYXIgKnA7Ci0KLQkvKiBDb21wdXRlIG51bWJlciBvZiBieXRlcyBtb2QgNjQgKi8KLQljb3VudCA9IChjdHgtPmJpdHNbMF0gPj4gMykgJiAweDNGOwotCi0JLyogU2V0IHRoZSBmaXJzdCBjaGFyIG9mIHBhZGRpbmcgdG8gMHg4MC4gIFRoaXMgaXMgc2FmZSBzaW5jZSB0aGVyZSBpcwotCSAgIGFsd2F5cyBhdCBsZWFzdCBvbmUgYnl0ZSBmcmVlICovCi0JcCA9IGN0eC0+aW4gKyBjb3VudDsKLQkqcCsrID0gMHg4MDsKLQotCS8qIEJ5dGVzIG9mIHBhZGRpbmcgbmVlZGVkIHRvIG1ha2UgNjQgYnl0ZXMgKi8KLQljb3VudCA9IDY0IC0gMSAtIGNvdW50OwotCi0JLyogUGFkIG91dCB0byA1NiBtb2QgNjQgKi8KLQlpZiAoY291bnQgPCA4KSB7Ci0JCS8qIFR3byBsb3RzIG9mIHBhZGRpbmc6ICBQYWQgdGhlIGZpcnN0IGJsb2NrIHRvIDY0IGJ5dGVzICovCi0JCW1lbXNldChwLCAwLCBjb3VudCk7Ci0JCWJ5dGVSZXZlcnNlKGN0eC0+aW4sIDE2KTsKLQkJTUQ1VHJhbnNmb3JtKGN0eC0+YnVmLCAoX191MzIgKikgY3R4LT5pbik7Ci0KLQkJLyogTm93IGZpbGwgdGhlIG5leHQgYmxvY2sgd2l0aCA1NiBieXRlcyAqLwotCQltZW1zZXQoY3R4LT5pbiwgMCwgNTYpOwotCX0gZWxzZSB7Ci0JCS8qIFBhZCBibG9jayB0byA1NiBieXRlcyAqLwotCQltZW1zZXQocCwgMCwgY291bnQgLSA4KTsKLQl9Ci0JYnl0ZVJldmVyc2UoY3R4LT5pbiwgMTQpOwotCi0JLyogQXBwZW5kIGxlbmd0aCBpbiBiaXRzIGFuZCB0cmFuc2Zvcm0gKi8KLQkoKF9fdTMyICopIGN0eC0+aW4pWzE0XSA9IGN0eC0+Yml0c1swXTsKLQkoKF9fdTMyICopIGN0eC0+aW4pWzE1XSA9IGN0eC0+Yml0c1sxXTsKLQotCU1ENVRyYW5zZm9ybShjdHgtPmJ1ZiwgKF9fdTMyICopIGN0eC0+aW4pOwotCWJ5dGVSZXZlcnNlKCh1bnNpZ25lZCBjaGFyICopIGN0eC0+YnVmLCA0KTsKLQltZW1tb3ZlKGRpZ2VzdCwgY3R4LT5idWYsIDE2KTsKLQltZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpOwkvKiBJbiBjYXNlIGl0J3Mgc2Vuc2l0aXZlICovCi19Ci0KLS8qIFRoZSBmb3VyIGNvcmUgZnVuY3Rpb25zIC0gRjEgaXMgb3B0aW1pemVkIHNvbWV3aGF0ICovCi0KLS8qICNkZWZpbmUgRjEoeCwgeSwgeikgKHggJiB5IHwgfnggJiB6KSAqLwotI2RlZmluZSBGMSh4LCB5LCB6KSAoeiBeICh4ICYgKHkgXiB6KSkpCi0jZGVmaW5lIEYyKHgsIHksIHopIEYxKHosIHgsIHkpCi0jZGVmaW5lIEYzKHgsIHksIHopICh4IF4geSBeIHopCi0jZGVmaW5lIEY0KHgsIHksIHopICh5IF4gKHggfCB+eikpCi0KLS8qIFRoaXMgaXMgdGhlIGNlbnRyYWwgc3RlcCBpbiB0aGUgTUQ1IGFsZ29yaXRobS4gKi8KLSNkZWZpbmUgTUQ1U1RFUChmLCB3LCB4LCB5LCB6LCBkYXRhLCBzKSBcCi0JKHcgKz0gZih4LCB5LCB6KSArIGRhdGEsICB3ID0gdzw8cyB8IHc+PigzMi1zKSwgIHcgKz0geCkKLQotLyoKLSAqIFRoZSBjb3JlIG9mIHRoZSBNRDUgYWxnb3JpdGhtLCB0aGlzIGFsdGVycyBhbiBleGlzdGluZyBNRDUgaGFzaCB0bwotICogcmVmbGVjdCB0aGUgYWRkaXRpb24gb2YgMTYgbG9uZ3dvcmRzIG9mIG5ldyBkYXRhLiAgY2lmc19NRDVfdXBkYXRlIGJsb2NrcwotICogdGhlIGRhdGEgYW5kIGNvbnZlcnRzIGJ5dGVzIGludG8gbG9uZ3dvcmRzIGZvciB0aGlzIHJvdXRpbmUuCi0gKi8KLXN0YXRpYyB2b2lkCi1NRDVUcmFuc2Zvcm0oX191MzIgYnVmWzRdLCBfX3UzMiBjb25zdCBpblsxNl0pCi17Ci0JcmVnaXN0ZXIgX191MzIgYSwgYiwgYywgZDsKLQotCWEgPSBidWZbMF07Ci0JYiA9IGJ1ZlsxXTsKLQljID0gYnVmWzJdOwotCWQgPSBidWZbM107Ci0KLQlNRDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpblswXSArIDB4ZDc2YWE0NzgsIDcpOwotCU1ENVNURVAoRjEsIGQsIGEsIGIsIGMsIGluWzFdICsgMHhlOGM3Yjc1NiwgMTIpOwotCU1ENVNURVAoRjEsIGMsIGQsIGEsIGIsIGluWzJdICsgMHgyNDIwNzBkYiwgMTcpOwotCU1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzNdICsgMHhjMWJkY2VlZSwgMjIpOwotCU1ENVNURVAoRjEsIGEsIGIsIGMsIGQsIGluWzRdICsgMHhmNTdjMGZhZiwgNyk7Ci0JTUQ1U1RFUChGMSwgZCwgYSwgYiwgYywgaW5bNV0gKyAweDQ3ODdjNjJhLCAxMik7Ci0JTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwgaW5bNl0gKyAweGE4MzA0NjEzLCAxNyk7Ci0JTUQ1U1RFUChGMSwgYiwgYywgZCwgYSwgaW5bN10gKyAweGZkNDY5NTAxLCAyMik7Ci0JTUQ1U1RFUChGMSwgYSwgYiwgYywgZCwgaW5bOF0gKyAweDY5ODA5OGQ4LCA3KTsKLQlNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpbls5XSArIDB4OGI0NGY3YWYsIDEyKTsKLQlNRDVTVEVQKEYxLCBjLCBkLCBhLCBiLCBpblsxMF0gKyAweGZmZmY1YmIxLCAxNyk7Ci0JTUQ1U1RFUChGMSwgYiwgYywgZCwgYSwgaW5bMTFdICsgMHg4OTVjZDdiZSwgMjIpOwotCU1ENVNURVAoRjEsIGEsIGIsIGMsIGQsIGluWzEyXSArIDB4NmI5MDExMjIsIDcpOwotCU1ENVNURVAoRjEsIGQsIGEsIGIsIGMsIGluWzEzXSArIDB4ZmQ5ODcxOTMsIDEyKTsKLQlNRDVTVEVQKEYxLCBjLCBkLCBhLCBiLCBpblsxNF0gKyAweGE2Nzk0MzhlLCAxNyk7Ci0JTUQ1U1RFUChGMSwgYiwgYywgZCwgYSwgaW5bMTVdICsgMHg0OWI0MDgyMSwgMjIpOwotCi0JTUQ1U1RFUChGMiwgYSwgYiwgYywgZCwgaW5bMV0gKyAweGY2MWUyNTYyLCA1KTsKLQlNRDVTVEVQKEYyLCBkLCBhLCBiLCBjLCBpbls2XSArIDB4YzA0MGIzNDAsIDkpOwotCU1ENVNURVAoRjIsIGMsIGQsIGEsIGIsIGluWzExXSArIDB4MjY1ZTVhNTEsIDE0KTsKLQlNRDVTVEVQKEYyLCBiLCBjLCBkLCBhLCBpblswXSArIDB4ZTliNmM3YWEsIDIwKTsKLQlNRDVTVEVQKEYyLCBhLCBiLCBjLCBkLCBpbls1XSArIDB4ZDYyZjEwNWQsIDUpOwotCU1ENVNURVAoRjIsIGQsIGEsIGIsIGMsIGluWzEwXSArIDB4MDI0NDE0NTMsIDkpOwotCU1ENVNURVAoRjIsIGMsIGQsIGEsIGIsIGluWzE1XSArIDB4ZDhhMWU2ODEsIDE0KTsKLQlNRDVTVEVQKEYyLCBiLCBjLCBkLCBhLCBpbls0XSArIDB4ZTdkM2ZiYzgsIDIwKTsKLQlNRDVTVEVQKEYyLCBhLCBiLCBjLCBkLCBpbls5XSArIDB4MjFlMWNkZTYsIDUpOwotCU1ENVNURVAoRjIsIGQsIGEsIGIsIGMsIGluWzE0XSArIDB4YzMzNzA3ZDYsIDkpOwotCU1ENVNURVAoRjIsIGMsIGQsIGEsIGIsIGluWzNdICsgMHhmNGQ1MGQ4NywgMTQpOwotCU1ENVNURVAoRjIsIGIsIGMsIGQsIGEsIGluWzhdICsgMHg0NTVhMTRlZCwgMjApOwotCU1ENVNURVAoRjIsIGEsIGIsIGMsIGQsIGluWzEzXSArIDB4YTllM2U5MDUsIDUpOwotCU1ENVNURVAoRjIsIGQsIGEsIGIsIGMsIGluWzJdICsgMHhmY2VmYTNmOCwgOSk7Ci0JTUQ1U1RFUChGMiwgYywgZCwgYSwgYiwgaW5bN10gKyAweDY3NmYwMmQ5LCAxNCk7Ci0JTUQ1U1RFUChGMiwgYiwgYywgZCwgYSwgaW5bMTJdICsgMHg4ZDJhNGM4YSwgMjApOwotCi0JTUQ1U1RFUChGMywgYSwgYiwgYywgZCwgaW5bNV0gKyAweGZmZmEzOTQyLCA0KTsKLQlNRDVTVEVQKEYzLCBkLCBhLCBiLCBjLCBpbls4XSArIDB4ODc3MWY2ODEsIDExKTsKLQlNRDVTVEVQKEYzLCBjLCBkLCBhLCBiLCBpblsxMV0gKyAweDZkOWQ2MTIyLCAxNik7Ci0JTUQ1U1RFUChGMywgYiwgYywgZCwgYSwgaW5bMTRdICsgMHhmZGU1MzgwYywgMjMpOwotCU1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGluWzFdICsgMHhhNGJlZWE0NCwgNCk7Ci0JTUQ1U1RFUChGMywgZCwgYSwgYiwgYywgaW5bNF0gKyAweDRiZGVjZmE5LCAxMSk7Ci0JTUQ1U1RFUChGMywgYywgZCwgYSwgYiwgaW5bN10gKyAweGY2YmI0YjYwLCAxNik7Ci0JTUQ1U1RFUChGMywgYiwgYywgZCwgYSwgaW5bMTBdICsgMHhiZWJmYmM3MCwgMjMpOwotCU1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGluWzEzXSArIDB4Mjg5YjdlYzYsIDQpOwotCU1ENVNURVAoRjMsIGQsIGEsIGIsIGMsIGluWzBdICsgMHhlYWExMjdmYSwgMTEpOwotCU1ENVNURVAoRjMsIGMsIGQsIGEsIGIsIGluWzNdICsgMHhkNGVmMzA4NSwgMTYpOwotCU1ENVNURVAoRjMsIGIsIGMsIGQsIGEsIGluWzZdICsgMHgwNDg4MWQwNSwgMjMpOwotCU1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGluWzldICsgMHhkOWQ0ZDAzOSwgNCk7Ci0JTUQ1U1RFUChGMywgZCwgYSwgYiwgYywgaW5bMTJdICsgMHhlNmRiOTllNSwgMTEpOwotCU1ENVNURVAoRjMsIGMsIGQsIGEsIGIsIGluWzE1XSArIDB4MWZhMjdjZjgsIDE2KTsKLQlNRDVTVEVQKEYzLCBiLCBjLCBkLCBhLCBpblsyXSArIDB4YzRhYzU2NjUsIDIzKTsKLQotCU1ENVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWzBdICsgMHhmNDI5MjI0NCwgNik7Ci0JTUQ1U1RFUChGNCwgZCwgYSwgYiwgYywgaW5bN10gKyAweDQzMmFmZjk3LCAxMCk7Ci0JTUQ1U1RFUChGNCwgYywgZCwgYSwgYiwgaW5bMTRdICsgMHhhYjk0MjNhNywgMTUpOwotCU1ENVNURVAoRjQsIGIsIGMsIGQsIGEsIGluWzVdICsgMHhmYzkzYTAzOSwgMjEpOwotCU1ENVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWzEyXSArIDB4NjU1YjU5YzMsIDYpOwotCU1ENVNURVAoRjQsIGQsIGEsIGIsIGMsIGluWzNdICsgMHg4ZjBjY2M5MiwgMTApOwotCU1ENVNURVAoRjQsIGMsIGQsIGEsIGIsIGluWzEwXSArIDB4ZmZlZmY0N2QsIDE1KTsKLQlNRDVTVEVQKEY0LCBiLCBjLCBkLCBhLCBpblsxXSArIDB4ODU4NDVkZDEsIDIxKTsKLQlNRDVTVEVQKEY0LCBhLCBiLCBjLCBkLCBpbls4XSArIDB4NmZhODdlNGYsIDYpOwotCU1ENVNURVAoRjQsIGQsIGEsIGIsIGMsIGluWzE1XSArIDB4ZmUyY2U2ZTAsIDEwKTsKLQlNRDVTVEVQKEY0LCBjLCBkLCBhLCBiLCBpbls2XSArIDB4YTMwMTQzMTQsIDE1KTsKLQlNRDVTVEVQKEY0LCBiLCBjLCBkLCBhLCBpblsxM10gKyAweDRlMDgxMWExLCAyMSk7Ci0JTUQ1U1RFUChGNCwgYSwgYiwgYywgZCwgaW5bNF0gKyAweGY3NTM3ZTgyLCA2KTsKLQlNRDVTVEVQKEY0LCBkLCBhLCBiLCBjLCBpblsxMV0gKyAweGJkM2FmMjM1LCAxMCk7Ci0JTUQ1U1RFUChGNCwgYywgZCwgYSwgYiwgaW5bMl0gKyAweDJhZDdkMmJiLCAxNSk7Ci0JTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bOV0gKyAweGViODZkMzkxLCAyMSk7Ci0KLQlidWZbMF0gKz0gYTsKLQlidWZbMV0gKz0gYjsKLQlidWZbMl0gKz0gYzsKLQlidWZbM10gKz0gZDsKLX0KLQotI2lmIDAgICAvKiBjdXJyZW50bHkgdW51c2VkICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSB0aGUgcmZjIDIxMDQgdmVyc2lvbiBvZiBobWFjX21kNSBpbml0aWFsaXNhdGlvbi4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQKLWhtYWNfbWQ1X2luaXRfcmZjMjEwNCh1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlfbGVuLAotCQkgICAgICBzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCkKLXsKLQlpbnQgaTsKLQotCS8qIGlmIGtleSBpcyBsb25nZXIgdGhhbiA2NCBieXRlcyByZXNldCBpdCB0byBrZXk9TUQ1KGtleSkgKi8KLQlpZiAoa2V5X2xlbiA+IDY0KSB7Ci0JCXVuc2lnbmVkIGNoYXIgdGtbMTZdOwotCQlzdHJ1Y3QgTUQ1Q29udGV4dCB0Y3R4OwotCi0JCWNpZnNfTUQ1X2luaXQoJnRjdHgpOwotCQljaWZzX01ENV91cGRhdGUoJnRjdHgsIGtleSwga2V5X2xlbik7Ci0JCWNpZnNfTUQ1X2ZpbmFsKHRrLCAmdGN0eCk7Ci0KLQkJa2V5ID0gdGs7Ci0JCWtleV9sZW4gPSAxNjsKLQl9Ci0KLQkvKiBzdGFydCBvdXQgYnkgc3RvcmluZyBrZXkgaW4gcGFkcyAqLwotCW1lbXNldChjdHgtPmtfaXBhZCwgMCwgc2l6ZW9mKGN0eC0+a19pcGFkKSk7Ci0JbWVtc2V0KGN0eC0+a19vcGFkLCAwLCBzaXplb2YoY3R4LT5rX29wYWQpKTsKLQltZW1jcHkoY3R4LT5rX2lwYWQsIGtleSwga2V5X2xlbik7Ci0JbWVtY3B5KGN0eC0+a19vcGFkLCBrZXksIGtleV9sZW4pOwotCi0JLyogWE9SIGtleSB3aXRoIGlwYWQgYW5kIG9wYWQgdmFsdWVzICovCi0JZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKLQkJY3R4LT5rX2lwYWRbaV0gXj0gMHgzNjsKLQkJY3R4LT5rX29wYWRbaV0gXj0gMHg1YzsKLQl9Ci0KLQljaWZzX01ENV9pbml0KCZjdHgtPmN0eCk7Ci0JY2lmc19NRDVfdXBkYXRlKCZjdHgtPmN0eCwgY3R4LT5rX2lwYWQsIDY0KTsKLX0KLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSB0aGUgbWljcm9zb2Z0IHZlcnNpb24gb2YgaG1hY19tZDUgaW5pdGlhbGlzYXRpb24uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQKLWhtYWNfbWQ1X2luaXRfbGltS190b182NChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlfbGVuLAotCQkJIHN0cnVjdCBITUFDTUQ1Q29udGV4dCAqY3R4KQotewotCWludCBpOwotCi0JLyogaWYga2V5IGlzIGxvbmdlciB0aGFuIDY0IGJ5dGVzIHRydW5jYXRlIGl0ICovCi0JaWYgKGtleV9sZW4gPiA2NCkKLQkJa2V5X2xlbiA9IDY0OwotCi0JLyogc3RhcnQgb3V0IGJ5IHN0b3Jpbmcga2V5IGluIHBhZHMgKi8KLQltZW1zZXQoY3R4LT5rX2lwYWQsIDAsIHNpemVvZihjdHgtPmtfaXBhZCkpOwotCW1lbXNldChjdHgtPmtfb3BhZCwgMCwgc2l6ZW9mKGN0eC0+a19vcGFkKSk7Ci0JbWVtY3B5KGN0eC0+a19pcGFkLCBrZXksIGtleV9sZW4pOwotCW1lbWNweShjdHgtPmtfb3BhZCwga2V5LCBrZXlfbGVuKTsKLQotCS8qIFhPUiBrZXkgd2l0aCBpcGFkIGFuZCBvcGFkIHZhbHVlcyAqLwotCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0JCWN0eC0+a19pcGFkW2ldIF49IDB4MzY7Ci0JCWN0eC0+a19vcGFkW2ldIF49IDB4NWM7Ci0JfQotCi0JY2lmc19NRDVfaW5pdCgmY3R4LT5jdHgpOwotCWNpZnNfTUQ1X3VwZGF0ZSgmY3R4LT5jdHgsIGN0eC0+a19pcGFkLCA2NCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIHVwZGF0ZSBobWFjX21kNSAiaW5uZXIiIGJ1ZmZlcgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCi1obWFjX21kNV91cGRhdGUoY29uc3QgdW5zaWduZWQgY2hhciAqdGV4dCwgaW50IHRleHRfbGVuLAotCQlzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCkKLXsKLQljaWZzX01ENV91cGRhdGUoJmN0eC0+Y3R4LCB0ZXh0LCB0ZXh0X2xlbik7CS8qIHRoZW4gdGV4dCBvZiBkYXRhZ3JhbSAqLwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSBmaW5pc2ggb2ZmIGhtYWNfbWQ1ICJpbm5lciIgYnVmZmVyIGFuZCBnZW5lcmF0ZSBvdXRlciBvbmUuCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQKLWhtYWNfbWQ1X2ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgc3RydWN0IEhNQUNNRDVDb250ZXh0ICpjdHgpCi17Ci0Jc3RydWN0IE1ENUNvbnRleHQgY3R4X287Ci0KLQljaWZzX01ENV9maW5hbChkaWdlc3QsICZjdHgtPmN0eCk7Ci0KLQljaWZzX01ENV9pbml0KCZjdHhfbyk7Ci0JY2lmc19NRDVfdXBkYXRlKCZjdHhfbywgY3R4LT5rX29wYWQsIDY0KTsKLQljaWZzX01ENV91cGRhdGUoJmN0eF9vLCBkaWdlc3QsIDE2KTsKLQljaWZzX01ENV9maW5hbChkaWdlc3QsICZjdHhfbyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIHNpbmdsZSBmdW5jdGlvbiB0byBjYWxjdWxhdGUgYW4gSE1BQyBNRDUgZGlnZXN0IGZyb20gZGF0YS4KLSB1c2UgdGhlIG1pY3Jvc29mdCBobWFjbWQ1IGluaXQgbWV0aG9kIGJlY2F1c2UgdGhlIGtleSBpcyAxNiBieXRlcy4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiAwIC8qIGN1cnJlbnRseSB1bnVzZWQgKi8KLXN0YXRpYyB2b2lkCi1obWFjX21kNSh1bnNpZ25lZCBjaGFyIGtleVsxNl0sIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBkYXRhX2xlbiwKLQkgdW5zaWduZWQgY2hhciAqZGlnZXN0KQotewotCXN0cnVjdCBITUFDTUQ1Q29udGV4dCBjdHg7Ci0JaG1hY19tZDVfaW5pdF9saW1LX3RvXzY0KGtleSwgMTYsICZjdHgpOwotCWlmIChkYXRhX2xlbiAhPSAwKQotCQlobWFjX21kNV91cGRhdGUoZGF0YSwgZGF0YV9sZW4sICZjdHgpOwotCi0JaG1hY19tZDVfZmluYWwoZGlnZXN0LCAmY3R4KTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9tZDUuaCBiL2ZzL2NpZnMvbWQ1LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYmE4Y2IuLjAwMDAwMDAKLS0tIGEvZnMvY2lmcy9tZDUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLSNpZm5kZWYgTUQ1X0gKLSNkZWZpbmUgTUQ1X0gKLSNpZm5kZWYgSEVBREVSX01ENV9ICi0vKiBUcnkgdG8gYXZvaWQgY2xhc2hlcyB3aXRoIE9wZW5TU0wgKi8KLSNkZWZpbmUgSEVBREVSX01ENV9ICi0jZW5kaWYKLQotc3RydWN0IE1ENUNvbnRleHQgewotCV9fdTMyIGJ1Zls0XTsKLQlfX3UzMiBiaXRzWzJdOwotCXVuc2lnbmVkIGNoYXIgaW5bNjRdOwotfTsKLSNlbmRpZgkJCQkvKiAhTUQ1X0ggKi8KLQotI2lmbmRlZiBfSE1BQ19NRDVfSAotc3RydWN0IEhNQUNNRDVDb250ZXh0IHsKLQlzdHJ1Y3QgTUQ1Q29udGV4dCBjdHg7Ci0JdW5zaWduZWQgY2hhciBrX2lwYWRbNjVdOwotCXVuc2lnbmVkIGNoYXIga19vcGFkWzY1XTsKLX07Ci0jZW5kaWYJCQkJLyogX0hNQUNfTUQ1X0ggKi8KLQotdm9pZCBjaWZzX01ENV9pbml0KHN0cnVjdCBNRDVDb250ZXh0ICpjb250ZXh0KTsKLXZvaWQgY2lmc19NRDVfdXBkYXRlKHN0cnVjdCBNRDVDb250ZXh0ICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpidWYsCi0JCQl1bnNpZ25lZCBsZW4pOwotdm9pZCBjaWZzX01ENV9maW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIHN0cnVjdCBNRDVDb250ZXh0ICpjb250ZXh0KTsKLQotLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBjb21lIGZyb20gbGliL2htYWNtZDUuYyAgKi8KLQotLyogdm9pZCBobWFjX21kNV9pbml0X3JmYzIxMDQodW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5X2xlbiwKLQkJCXN0cnVjdCBITUFDTUQ1Q29udGV4dCAqY3R4KTsqLwotdm9pZCBobWFjX21kNV9pbml0X2xpbUtfdG9fNjQoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5X2xlbiwKLQkJCXN0cnVjdCBITUFDTUQ1Q29udGV4dCAqY3R4KTsKLXZvaWQgaG1hY19tZDVfdXBkYXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRleHQsIGludCB0ZXh0X2xlbiwKLQkJCXN0cnVjdCBITUFDTUQ1Q29udGV4dCAqY3R4KTsKLXZvaWQgaG1hY19tZDVfZmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCk7Ci0vKiB2b2lkIGhtYWNfbWQ1KHVuc2lnbmVkIGNoYXIga2V5WzE2XSwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGRhdGFfbGVuLAotCQkJdW5zaWduZWQgY2hhciAqZGlnZXN0KTsqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9taXNjLmMgYi9mcy9jaWZzL21pc2MuYwppbmRleCA0M2YxMDI4Li4yYTkzMGE3IDEwMDY0NAotLS0gYS9mcy9jaWZzL21pc2MuYworKysgYi9mcy9jaWZzL21pc2MuYwpAQCAtMjM2LDEwICsyMzYsNyBAQAogewogCV9fdTE2IG1pZCA9IDA7CiAJX191MTYgbGFzdF9taWQ7Ci0JaW50ICAgY29sbGlzaW9uOwotCi0JaWYgKHNlcnZlciA9PSBOVUxMKQotCQlyZXR1cm4gbWlkOworCWJvb2wgY29sbGlzaW9uOwogCiAJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJbGFzdF9taWQgPSBzZXJ2ZXItPkN1cnJlbnRNaWQ7IC8qIHdlIGRvIG5vdCB3YW50IHRvIGxvb3AgZm9yZXZlciAqLwpAQCAtMjUyLDI0ICsyNDksMzggQEAKIAkoYW5kIGl0IHdvdWxkIGFsc28gaGF2ZSB0byBoYXZlIGJlZW4gYSByZXF1ZXN0IHRoYXQKIAkgZGlkIG5vdCB0aW1lIG91dCkgKi8KIAl3aGlsZSAoc2VydmVyLT5DdXJyZW50TWlkICE9IGxhc3RfbWlkKSB7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKIAkJc3RydWN0IG1pZF9xX2VudHJ5ICptaWRfZW50cnk7CisJCXVuc2lnbmVkIGludCBudW1fbWlkczsKIAotCQljb2xsaXNpb24gPSAwOworCQljb2xsaXNpb24gPSBmYWxzZTsKIAkJaWYgKHNlcnZlci0+Q3VycmVudE1pZCA9PSAwKQogCQkJc2VydmVyLT5DdXJyZW50TWlkKys7CiAKLQkJbGlzdF9mb3JfZWFjaCh0bXAsICZzZXJ2ZXItPnBlbmRpbmdfbWlkX3EpIHsKLQkJCW1pZF9lbnRyeSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgbWlkX3FfZW50cnksIHFoZWFkKTsKLQotCQkJaWYgKChtaWRfZW50cnktPm1pZCA9PSBzZXJ2ZXItPkN1cnJlbnRNaWQpICYmCi0JCQkgICAgKG1pZF9lbnRyeS0+bWlkU3RhdGUgPT0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEKSkgeworCQludW1fbWlkcyA9IDA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkobWlkX2VudHJ5LCAmc2VydmVyLT5wZW5kaW5nX21pZF9xLCBxaGVhZCkgeworCQkJKytudW1fbWlkczsKKwkJCWlmIChtaWRfZW50cnktPm1pZCA9PSBzZXJ2ZXItPkN1cnJlbnRNaWQgJiYKKwkJCSAgICBtaWRfZW50cnktPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkgewogCQkJCS8qIFRoaXMgbWlkIGlzIGluIHVzZSwgdHJ5IGEgZGlmZmVyZW50IG9uZSAqLwotCQkJCWNvbGxpc2lvbiA9IDE7CisJCQkJY29sbGlzaW9uID0gdHJ1ZTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQotCQlpZiAoY29sbGlzaW9uID09IDApIHsKKworCQkvKgorCQkgKiBpZiB3ZSBoYXZlIG1vcmUgdGhhbiAzMmsgbWlkcyBpbiB0aGUgbGlzdCwgdGhlbiBzb21ldGhpbmcKKwkJICogaXMgdmVyeSB3cm9uZy4gUG9zc2libHkgYSBsb2NhbCB1c2VyIGlzIHRyeWluZyB0byBEb1MgdGhlCisJCSAqIGJveCBieSBpc3N1aW5nIGxvbmctcnVubmluZyBjYWxscyBhbmQgU0lHS0lMTCdpbmcgdGhlbS4gSWYKKwkJICogd2UgZ2V0IHRvIDJeMTYgbWlkcyB0aGVuIHdlJ3JlIGluIGJpZyB0cm91YmxlIGFzIHRoaXMKKwkJICogZnVuY3Rpb24gY291bGQgbG9vcCBmb3JldmVyLgorCQkgKgorCQkgKiBHbyBhaGVhZCBhbmQgYXNzaWduIG91dCB0aGUgbWlkIGluIHRoaXMgc2l0dWF0aW9uLCBidXQgZm9yY2UKKwkJICogYW4gZXZlbnR1YWwgcmVjb25uZWN0IHRvIGNsZWFuIG91dCB0aGUgcGVuZGluZ19taWRfcS4KKwkJICovCisJCWlmIChudW1fbWlkcyA+IDMyNzY4KQorCQkJc2VydmVyLT50Y3BTdGF0dXMgPSBDaWZzTmVlZFJlY29ubmVjdDsKKworCQlpZiAoIWNvbGxpc2lvbikgewogCQkJbWlkID0gc2VydmVyLT5DdXJyZW50TWlkOwogCQkJYnJlYWs7CiAJCX0KQEAgLTM4MSwyOSArMzkyLDMxIEBACiB9CiAKIHN0YXRpYyBpbnQKLWNoZWNrU01CaGRyKHN0cnVjdCBzbWJfaGRyICpzbWIsIF9fdTE2IG1pZCkKK2NoZWNrX3NtYl9oZHIoc3RydWN0IHNtYl9oZHIgKnNtYiwgX191MTYgbWlkKQogewotCS8qIE1ha2Ugc3VyZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGFuIFNNQiwgdGhhdCBpdCBpcyBhIHJlc3BvbnNlLAotCSAgIGFuZCB0aGF0IHRoZSBtZXNzYWdlIGlkcyBtYXRjaCAqLwotCWlmICgoKihfX2xlMzIgKikgc21iLT5Qcm90b2NvbCA9PSBjcHVfdG9fbGUzMigweDQyNGQ1M2ZmKSkgJiYKLQkJKG1pZCA9PSBzbWItPk1pZCkpIHsKLQkJaWYgKHNtYi0+RmxhZ3MgJiBTTUJGTEdfUkVTUE9OU0UpCi0JCQlyZXR1cm4gMDsKLQkJZWxzZSB7Ci0JCS8qIG9ubHkgb25lIHZhbGlkIGNhc2Ugd2hlcmUgc2VydmVyIHNlbmRzIHVzIHJlcXVlc3QgKi8KLQkJCWlmIChzbWItPkNvbW1hbmQgPT0gU01CX0NPTV9MT0NLSU5HX0FORFgpCi0JCQkJcmV0dXJuIDA7Ci0JCQllbHNlCi0JCQkJY0VSUk9SKDEsICJSZWNlaXZlZCBSZXF1ZXN0IG5vdCByZXNwb25zZSIpOwotCQl9Ci0JfSBlbHNlIHsgLyogYmFkIHNpZ25hdHVyZSBvciBtaWQgKi8KLQkJaWYgKCooX19sZTMyICopIHNtYi0+UHJvdG9jb2wgIT0gY3B1X3RvX2xlMzIoMHg0MjRkNTNmZikpCi0JCQljRVJST1IoMSwgIkJhZCBwcm90b2NvbCBzdHJpbmcgc2lnbmF0dXJlIGhlYWRlciAleCIsCi0JCQkJKih1bnNpZ25lZCBpbnQgKikgc21iLT5Qcm90b2NvbCk7Ci0JCWlmIChtaWQgIT0gc21iLT5NaWQpCi0JCQljRVJST1IoMSwgIk1pZHMgZG8gbm90IG1hdGNoIik7CisJLyogZG9lcyBpdCBoYXZlIHRoZSByaWdodCBTTUIgInNpZ25hdHVyZSIgPyAqLworCWlmICgqKF9fbGUzMiAqKSBzbWItPlByb3RvY29sICE9IGNwdV90b19sZTMyKDB4NDI0ZDUzZmYpKSB7CisJCWNFUlJPUigxLCAiQmFkIHByb3RvY29sIHN0cmluZyBzaWduYXR1cmUgaGVhZGVyIDB4JXgiLAorCQkJKih1bnNpZ25lZCBpbnQgKilzbWItPlByb3RvY29sKTsKKwkJcmV0dXJuIDE7CiAJfQotCWNFUlJPUigxLCAiYmFkIHNtYiBkZXRlY3RlZC4gVGhlIE1pZD0lZCIsIHNtYi0+TWlkKTsKKworCS8qIE1ha2Ugc3VyZSB0aGF0IG1lc3NhZ2UgaWRzIG1hdGNoICovCisJaWYgKG1pZCAhPSBzbWItPk1pZCkgeworCQljRVJST1IoMSwgIk1pZHMgZG8gbm90IG1hdGNoLiByZWNlaXZlZD0ldSBleHBlY3RlZD0ldSIsCisJCQlzbWItPk1pZCwgbWlkKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogaWYgaXQncyBhIHJlc3BvbnNlIHRoZW4gYWNjZXB0ICovCisJaWYgKHNtYi0+RmxhZ3MgJiBTTUJGTEdfUkVTUE9OU0UpCisJCXJldHVybiAwOworCisJLyogb25seSBvbmUgdmFsaWQgY2FzZSB3aGVyZSBzZXJ2ZXIgc2VuZHMgdXMgcmVxdWVzdCAqLworCWlmIChzbWItPkNvbW1hbmQgPT0gU01CX0NPTV9MT0NLSU5HX0FORFgpCisJCXJldHVybiAwOworCisJY0VSUk9SKDEsICJTZXJ2ZXIgc2VudCByZXF1ZXN0LCBub3QgcmVzcG9uc2UuIG1pZD0ldSIsIHNtYi0+TWlkKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNDQ4LDcgKzQ2MSw3IEBACiAJCXJldHVybiAxOwogCX0KIAotCWlmIChjaGVja1NNQmhkcihzbWIsIG1pZCkpCisJaWYgKGNoZWNrX3NtYl9oZHIoc21iLCBtaWQpKQogCQlyZXR1cm4gMTsKIAljbGNfbGVuID0gc21iQ2FsY1NpemVfTEUoc21iKTsKIApAQCAtNDY1LDI1ICs0NzgsMjYgQEAKIAkJCWlmICgoKDQgKyBsZW4pICYgMHhGRkZGKSA9PSAoY2xjX2xlbiAmIDB4RkZGRikpCiAJCQkJcmV0dXJuIDA7IC8qIGJjYyB3cmFwcGVkICovCiAJCX0KLQkJY0ZZSSgxLCAiQ2FsY3VsYXRlZCBzaXplICVkIHZzIGxlbmd0aCAlZCBtaXNtYXRjaCBmb3IgbWlkICVkIiwKKwkJY0ZZSSgxLCAiQ2FsY3VsYXRlZCBzaXplICV1IHZzIGxlbmd0aCAldSBtaXNtYXRjaCBmb3IgbWlkPSV1IiwKIAkJCQljbGNfbGVuLCA0ICsgbGVuLCBzbWItPk1pZCk7Ci0JCS8qIFdpbmRvd3MgWFAgY2FuIHJldHVybiBhIGZldyBieXRlcyB0b28gbXVjaCwgcHJlc3VtYWJseQotCQlhbiBpbGxlZ2FsIHBhZCwgYXQgdGhlIGVuZCBvZiBieXRlIHJhbmdlIGxvY2sgcmVzcG9uc2VzCi0JCXNvIHdlIGFsbG93IGZvciB0aGF0IHRocmVlIGJ5dGUgcGFkLCBhcyBsb25nIGFzIGFjdHVhbAotCQlyZWNlaXZlZCBsZW5ndGggaXMgYXMgbG9uZyBvciBsb25nZXIgdGhhbiBjYWxjdWxhdGVkIGxlbmd0aCAqLwotCQkvKiBXZSBoYXZlIG5vdyBoYWQgdG8gZXh0ZW5kIHRoaXMgbW9yZSwgc2luY2UgdGhlcmUgaXMgYQotCQljYXNlIGluIHdoaWNoIGl0IG5lZWRzIHRvIGJlIGJpZ2dlciBzdGlsbCB0byBoYW5kbGUgYQotCQltYWxmb3JtZWQgcmVzcG9uc2UgdG8gdHJhbnNhY3QyIGZpbmRmaXJzdCBmcm9tIFdpblhQIHdoZW4KLQkJYWNjZXNzIGRlbmllZCBpcyByZXR1cm5lZCBhbmQgdGh1cyBiY2MgYW5kIHdjdCBhcmUgemVybwotCQlidXQgc2VydmVyIHNheXMgbGVuZ3RoIGlzIDB4MjEgYnl0ZXMgdG9vIGxvbmcgYXMgaWYgdGhlIHNlcnZlcgotCQlmb3JnZXQgdG8gcmVzZXQgdGhlIHNtYiByZmMxMDAxIGxlbmd0aCB3aGVuIGl0IHJlc2V0IHRoZQotCQl3Y3QgYW5kIGJjYyB0byBtaW5pbXVtIHNpemUgYW5kIGRyb3AgdGhlIHQyIHBhcm1zIGFuZCBkYXRhICovCi0JCWlmICgoNCtsZW4gPiBjbGNfbGVuKSAmJiAobGVuIDw9IGNsY19sZW4gKyA1MTIpKQotCQkJcmV0dXJuIDA7Ci0JCWVsc2UgewotCQkJY0VSUk9SKDEsICJSRkMxMDAxIHNpemUgJWQgYmlnZ2VyIHRoYW4gU01CIGZvciBNaWQ9JWQiLAorCisJCWlmICg0ICsgbGVuIDwgY2xjX2xlbikgeworCQkJY0VSUk9SKDEsICJSRkMxMDAxIHNpemUgJXUgc21hbGxlciB0aGFuIFNNQiBmb3IgbWlkPSV1IiwKIAkJCQkJbGVuLCBzbWItPk1pZCk7CiAJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIGlmIChsZW4gPiBjbGNfbGVuICsgNTEyKSB7CisJCQkvKgorCQkJICogU29tZSBzZXJ2ZXJzIChXaW5kb3dzIFhQIGluIHBhcnRpY3VsYXIpIHNlbmQgbW9yZQorCQkJICogZGF0YSB0aGFuIHRoZSBsZW5ndGhzIGluIHRoZSBTTUIgcGFja2V0IHdvdWxkCisJCQkgKiBpbmRpY2F0ZSBvbiBjZXJ0YWluIGNhbGxzIChieXRlIHJhbmdlIGxvY2tzIGFuZAorCQkJICogdHJhbnMyIGZpbmQgZmlyc3QgY2FsbHMgaW4gcGFydGljdWxhcikuIFdoaWxlIHRoZQorCQkJICogY2xpZW50IGNhbiBoYW5kbGUgc3VjaCBhIGZyYW1lIGJ5IGlnbm9yaW5nIHRoZQorCQkJICogdHJhaWxpbmcgZGF0YSwgd2UgY2hvb3NlIGxpbWl0IHRoZSBhbW91bnQgb2YgZXh0cmEKKwkJCSAqIGRhdGEgdG8gNTEyIGJ5dGVzLgorCQkJICovCisJCQljRVJST1IoMSwgIlJGQzEwMDEgc2l6ZSAldSBtb3JlIHRoYW4gNTEyIGJ5dGVzIGxhcmdlciAiCisJCQkJICAidGhhbiBTTUIgZm9yIG1pZD0ldSIsIGxlbiwgc21iLT5NaWQpOworCQkJcmV0dXJuIDE7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC01NzEsNyArNTg1LDcgQEAKIAkJCQlwQ2lmc0lub2RlID0gQ0lGU19JKG5ldGZpbGUtPmRlbnRyeS0+ZF9pbm9kZSk7CiAKIAkJCQljaWZzX3NldF9vcGxvY2tfbGV2ZWwocENpZnNJbm9kZSwKLQkJCQkJCSAgICAgIHBTTUItPk9wbG9ja0xldmVsKTsKKwkJCQkJcFNNQi0+T3Bsb2NrTGV2ZWwgPyBPUExPQ0tfUkVBRCA6IDApOwogCQkJCS8qCiAJCQkJICogY2lmc19vcGxvY2tfYnJlYWtfcHV0KCkgY2FuJ3QgYmUgY2FsbGVkCiAJCQkJICogZnJvbSBoZXJlLiAgR2V0IHJlZmVyZW5jZSBhZnRlciBxdWV1ZWluZwpAQCAtNjM3LDc3ICs2NTEsNiBAQAogCXJldHVybjsKIH0KIAotLyogQ29udmVydCAxNiBiaXQgVW5pY29kZSBwYXRobmFtZSB0byB3aXJlIGZvcm1hdCBmcm9tIHN0cmluZyBpbiBjdXJyZW50IGNvZGUKLSAgIHBhZ2UuICBDb252ZXJzaW9uIG1heSBpbnZvbHZlIHJlbWFwcGluZyB1cCB0aGUgc2V2ZW4gY2hhcmFjdGVycyB0aGF0IGFyZQotICAgb25seSBsZWdhbCBpbiBQT1NJWC1saWtlIE9TIChpZiB0aGV5IGFyZSBwcmVzZW50IGluIHRoZSBzdHJpbmcpLiBQYXRoCi0gICBuYW1lcyBhcmUgbGl0dGxlIGVuZGlhbiAxNiBiaXQgVW5pY29kZSBvbiB0aGUgd2lyZSAqLwotaW50Ci1jaWZzQ29udmVydFRvVUNTKF9fbGUxNiAqdGFyZ2V0LCBjb25zdCBjaGFyICpzb3VyY2UsIGludCBtYXhsZW4sCi0JCSBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpjcCwgaW50IG1hcENoYXJzKQotewotCWludCBpLCBqLCBjaGFybGVuOwotCWludCBsZW5fcmVtYWluaW5nID0gbWF4bGVuOwotCWNoYXIgc3JjX2NoYXI7Ci0JX191MTYgdGVtcDsKLQotCWlmICghbWFwQ2hhcnMpCi0JCXJldHVybiBjaWZzX3N0cnRvVUNTKHRhcmdldCwgc291cmNlLCBQQVRIX01BWCwgY3ApOwotCi0JZm9yIChpID0gMCwgaiA9IDA7IGkgPCBtYXhsZW47IGorKykgewotCQlzcmNfY2hhciA9IHNvdXJjZVtpXTsKLQkJc3dpdGNoIChzcmNfY2hhcikgewotCQkJY2FzZSAwOgotCQkJCXRhcmdldFtqXSA9IDA7Ci0JCQkJZ290byBjdG9VQ1Nfb3V0OwotCQkJY2FzZSAnOic6Ci0JCQkJdGFyZ2V0W2pdID0gY3B1X3RvX2xlMTYoVU5JX0NPTE9OKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJyonOgotCQkJCXRhcmdldFtqXSA9IGNwdV90b19sZTE2KFVOSV9BU1RFUklLKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJz8nOgotCQkJCXRhcmdldFtqXSA9IGNwdV90b19sZTE2KFVOSV9RVUVTVElPTik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICc8JzoKLQkJCQl0YXJnZXRbal0gPSBjcHVfdG9fbGUxNihVTklfTEVTU1RIQU4pOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnPic6Ci0JCQkJdGFyZ2V0W2pdID0gY3B1X3RvX2xlMTYoVU5JX0dSVFJUSEFOKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ3wnOgotCQkJCXRhcmdldFtqXSA9IGNwdV90b19sZTE2KFVOSV9QSVBFKTsKLQkJCQlicmVhazsKLQkJCS8qIEJCIFdlIGNhbiBub3QgaGFuZGxlIHJlbWFwcGluZyBzbGFzaCB1bnRpbAotCQkJICAgYWxsIHRoZSBjYWxscyB0byBidWlsZF9wYXRoX2Zyb21fZGVudHJ5Ci0JCQkgICBhcmUgbW9kaWZpZWQsIGFzIHRoZXkgdXNlIHNsYXNoIGFzIHNlcGFyYXRvciBCQiAqLwotCQkJLyogY2FzZSAnXFwnOgotCQkJCXRhcmdldFtqXSA9IGNwdV90b19sZTE2KFVOSV9TTEFTSCk7Ci0JCQkJYnJlYWs7Ki8KLQkJCWRlZmF1bHQ6Ci0JCQkJY2hhcmxlbiA9IGNwLT5jaGFyMnVuaShzb3VyY2UraSwKLQkJCQkJbGVuX3JlbWFpbmluZywgJnRlbXApOwotCQkJCS8qIGlmIG5vIG1hdGNoLCB1c2UgcXVlc3Rpb24gbWFyaywgd2hpY2gKLQkJCQlhdCBsZWFzdCBpbiBzb21lIGNhc2VzIHNlcnZlcnMgYXMgd2lsZCBjYXJkICovCi0JCQkJaWYgKGNoYXJsZW4gPCAxKSB7Ci0JCQkJCXRhcmdldFtqXSA9IGNwdV90b19sZTE2KDB4MDAzZik7Ci0JCQkJCWNoYXJsZW4gPSAxOwotCQkJCX0gZWxzZQotCQkJCQl0YXJnZXRbal0gPSBjcHVfdG9fbGUxNih0ZW1wKTsKLQkJCQlsZW5fcmVtYWluaW5nIC09IGNoYXJsZW47Ci0JCQkJLyogY2hhcmFjdGVyIG1heSB0YWtlIG1vcmUgdGhhbiBvbmUgYnl0ZSBpbiB0aGUKLQkJCQkgICB0aGUgc291cmNlIHN0cmluZywgYnV0IHdpbGwgdGFrZSBleGFjdGx5IHR3bwotCQkJCSAgIGJ5dGVzIGluIHRoZSB0YXJnZXQgc3RyaW5nICovCi0JCQkJaSArPSBjaGFybGVuOwotCQkJCWNvbnRpbnVlOwotCQl9Ci0JCWkrKzsgLyogbW92ZSB0byBuZXh0IGNoYXIgaW4gc291cmNlIHN0cmluZyAqLwotCQlsZW5fcmVtYWluaW5nLS07Ci0JfQotCi1jdG9VQ1Nfb3V0OgotCXJldHVybiBpOwotfQotCiB2b2lkCiBjaWZzX2F1dG9kaXNhYmxlX3NlcnZlcmlubyhzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiKQogewpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9uZXRtaXNjLmMgYi9mcy9jaWZzL25ldG1pc2MuYwppbmRleCA2NzgzY2U2Li43OWY2NDFlIDEwMDY0NAotLS0gYS9mcy9jaWZzL25ldG1pc2MuYworKysgYi9mcy9jaWZzL25ldG1pc2MuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiB7CiAJaW50IHJjLCBhbGVuLCBzbGVuOwogCWNvbnN0IGNoYXIgKnBjdDsKLQljaGFyICplbmRwLCBzY29wZV9pZFsxM107CisJY2hhciBzY29wZV9pZFsxM107CiAJc3RydWN0IHNvY2thZGRyX2luICpzNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgZHN0OwogCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnM2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgZHN0OwogCkBAIC0xOTcsOSArMTk3LDkgQEAKIAkJbWVtY3B5KHNjb3BlX2lkLCBwY3QgKyAxLCBzbGVuKTsKIAkJc2NvcGVfaWRbc2xlbl0gPSAnXDAnOwogCi0JCXM2LT5zaW42X3Njb3BlX2lkID0gKHUzMikgc2ltcGxlX3N0cnRvdWwocGN0LCAmZW5kcCwgMCk7Ci0JCWlmIChlbmRwICE9IHNjb3BlX2lkICsgc2xlbikKLQkJCXJldHVybiAwOworCQlyYyA9IHN0cmljdF9zdHJ0b3VsKHNjb3BlX2lkLCAwLAorCQkJCQkodW5zaWduZWQgbG9uZyAqKSZzNi0+c2luNl9zY29wZV9pZCk7CisJCXJjID0gKHJjID09IDApID8gMSA6IDA7CiAJfQogCiAJcmV0dXJuIHJjOwpAQCAtOTE2LDE0ICs5MTYsMTQgQEAKIHNtYkNhbGNTaXplKHN0cnVjdCBzbWJfaGRyICpwdHIpCiB7CiAJcmV0dXJuIChzaXplb2Yoc3RydWN0IHNtYl9oZHIpICsgKDIgKiBwdHItPldvcmRDb3VudCkgKwotCQkyIC8qIHNpemUgb2YgdGhlIGJjYyBmaWVsZCAqLyArIEJDQyhwdHIpKTsKKwkJMiAvKiBzaXplIG9mIHRoZSBiY2MgZmllbGQgKi8gKyBnZXRfYmNjKHB0cikpOwogfQogCiB1bnNpZ25lZCBpbnQKIHNtYkNhbGNTaXplX0xFKHN0cnVjdCBzbWJfaGRyICpwdHIpCiB7CiAJcmV0dXJuIChzaXplb2Yoc3RydWN0IHNtYl9oZHIpICsgKDIgKiBwdHItPldvcmRDb3VudCkgKwotCQkyIC8qIHNpemUgb2YgdGhlIGJjYyBmaWVsZCAqLyArIGxlMTZfdG9fY3B1KEJDQ19MRShwdHIpKSk7CisJCTIgLyogc2l6ZSBvZiB0aGUgYmNjIGZpZWxkICovICsgZ2V0X2JjY19sZShwdHIpKTsKIH0KIAogLyogVGhlIGZvbGxvd2luZyBhcmUgdGFrZW4gZnJvbSBmcy9udGZzL3V0aWwuYyAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9yZWFkZGlyLmMgYi9mcy9jaWZzL3JlYWRkaXIuYwppbmRleCA3ZjI1Y2MzLi5mOGU0Y2QyIDEwMDY0NAotLS0gYS9mcy9jaWZzL3JlYWRkaXIuYworKysgYi9mcy9jaWZzL3JlYWRkaXIuYwpAQCAtNzY0LDcgKzc2NCw2IEBACiB7CiAJaW50IHJjID0gMDsKIAlpbnQgeGlkLCBpOwotCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CiAJc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqY2lmc0ZpbGUgPSBOVUxMOwogCWNoYXIgKmN1cnJlbnRfZW50cnk7CkBAIC03NzUsOCArNzc0LDYgQEAKIAogCXhpZCA9IEdldFhpZCgpOwogCi0JY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7Ci0KIAkvKgogCSAqIEVuc3VyZSBGaW5kRmlyc3QgZG9lc24ndCBmYWlsIGJlZm9yZSBkb2luZyBmaWxsZGlyKCkgZm9yICcuJyBhbmQKIAkgKiAnLi4nLiBPdGhlcndpc2Ugd2Ugd29uJ3QgYmUgYWJsZSB0byBub3RpZnkgVkZTIGluIGNhc2Ugb2YgZmFpbHVyZS4KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc2Vzcy5jIGIvZnMvY2lmcy9zZXNzLmMKaW5kZXggZWI3NDY0OC4uMTY3NjU3MCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9zZXNzLmMKKysrIGIvZnMvY2lmcy9zZXNzLmMKQEAgLTI3Nyw3ICsyNzcsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotZGVjb2RlX3VuaWNvZGVfc3NldHVwKGNoYXIgKipwYmNjX2FyZWEsIGludCBibGVmdCwgc3RydWN0IGNpZnNTZXNJbmZvICpzZXMsCitkZWNvZGVfdW5pY29kZV9zc2V0dXAoY2hhciAqKnBiY2NfYXJlYSwgX191MTYgYmxlZnQsIHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzLAogCQkgICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY3ApCiB7CiAJaW50IGxlbjsKQEAgLTMyMyw3ICszMjMsNyBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGludCBkZWNvZGVfYXNjaWlfc3NldHVwKGNoYXIgKipwYmNjX2FyZWEsIGludCBibGVmdCwKK3N0YXRpYyBpbnQgZGVjb2RlX2FzY2lpX3NzZXR1cChjaGFyICoqcGJjY19hcmVhLCBfX3UxNiBibGVmdCwKIAkJCSAgICAgICBzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcywKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY3ApCiB7CkBAIC01NzUsMTIgKzU3NSwxMSBAQAogCWNoYXIgKnN0cl9hcmVhOwogCVNFU1NJT05fU0VUVVBfQU5EWCAqcFNNQjsKIAlfX3UzMiBjYXBhYmlsaXRpZXM7Ci0JaW50IGNvdW50OworCV9fdTE2IGNvdW50OwogCWludCByZXNwX2J1Zl90eXBlOwogCXN0cnVjdCBrdmVjIGlvdlszXTsKIAllbnVtIHNlY3VyaXR5RW51bSB0eXBlOwotCV9fdTE2IGFjdGlvbjsKLQlpbnQgYnl0ZXNfcmVtYWluaW5nOworCV9fdTE2IGFjdGlvbiwgYnl0ZXNfcmVtYWluaW5nOwogCXN0cnVjdCBrZXkgKnNwbmVnb19rZXkgPSBOVUxMOwogCV9fbGUzMiBwaGFzZSA9IE50TG1OZWdvdGlhdGU7IC8qIE5UTE1TU1AsIGlmIG5lZWRlZCwgaXMgbXVsdGlzdGFnZSAqLwogCXUxNiBibG9iX2xlbjsKQEAgLTY1NywxMyArNjU2LDEzIEBACiAKIAlpZiAodHlwZSA9PSBMQU5NQU4pIHsKICNpZmRlZiBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0gKLQkJY2hhciBsbm1fc2Vzc2lvbl9rZXlbQ0lGU19TRVNTX0tFWV9TSVpFXTsKKwkJY2hhciBsbm1fc2Vzc2lvbl9rZXlbQ0lGU19BVVRIX1JFU1BfU0laRV07CiAKIAkJcFNNQi0+cmVxLmhkci5GbGFnczIgJj0gflNNQkZMRzJfVU5JQ09ERTsKIAogCQkvKiBubyBjYXBhYmlsaXRpZXMgZmxhZ3MgaW4gb2xkIGxhbm1hbiBuZWdvdGlhdGlvbiAqLwogCi0JCXBTTUItPm9sZF9yZXEuUGFzc3dvcmRMZW5ndGggPSBjcHVfdG9fbGUxNihDSUZTX1NFU1NfS0VZX1NJWkUpOworCQlwU01CLT5vbGRfcmVxLlBhc3N3b3JkTGVuZ3RoID0gY3B1X3RvX2xlMTYoQ0lGU19BVVRIX1JFU1BfU0laRSk7CiAKIAkJLyogQ2FsY3VsYXRlIGhhc2ggd2l0aCBwYXNzd29yZCBhbmQgY29weSBpbnRvIGJjY19wdHIuCiAJCSAqIEVuY3J5cHRpb24gS2V5IChzdG9yZWQgYXMgaW4gY3J5cHRrZXkpIGdldHMgdXNlZCBpZiB0aGUKQEAgLTY3Niw4ICs2NzUsOCBAQAogCQkJCQl0cnVlIDogZmFsc2UsIGxubV9zZXNzaW9uX2tleSk7CiAKIAkJc2VzLT5mbGFncyB8PSBDSUZTX1NFU19MQU5NQU47Ci0JCW1lbWNweShiY2NfcHRyLCAoY2hhciAqKWxubV9zZXNzaW9uX2tleSwgQ0lGU19TRVNTX0tFWV9TSVpFKTsKLQkJYmNjX3B0ciArPSBDSUZTX1NFU1NfS0VZX1NJWkU7CisJCW1lbWNweShiY2NfcHRyLCAoY2hhciAqKWxubV9zZXNzaW9uX2tleSwgQ0lGU19BVVRIX1JFU1BfU0laRSk7CisJCWJjY19wdHIgKz0gQ0lGU19BVVRIX1JFU1BfU0laRTsKIAogCQkvKiBjYW4gbm90IHNpZ24gaWYgTEFOTUFOIG5lZ290aWF0ZWQgc28gbm8gbmVlZAogCQl0byBjYWxjdWxhdGUgc2lnbmluZyBrZXk/IGJ1dCB3aGF0IGlmIHNlcnZlcgpAQCAtODc2LDEwICs4NzUsMTAgQEAKIAljb3VudCA9IGlvdlsxXS5pb3ZfbGVuICsgaW92WzJdLmlvdl9sZW47CiAJc21iX2J1Zi0+c21iX2J1Zl9sZW5ndGggKz0gY291bnQ7CiAKLQlCQ0NfTEUoc21iX2J1ZikgPSBjcHVfdG9fbGUxNihjb3VudCk7CisJcHV0X2JjY19sZShjb3VudCwgc21iX2J1Zik7CiAKIAlyYyA9IFNlbmRSZWNlaXZlMih4aWQsIHNlcywgaW92LCAzIC8qIG51bV9pb3ZlY3MgKi8sICZyZXNwX2J1Zl90eXBlLAotCQkJICBDSUZTX1NURF9PUCAvKiBub3QgbG9uZyAqLyB8IENJRlNfTE9HX0VSUk9SKTsKKwkJCSAgQ0lGU19MT0dfRVJST1IpOwogCS8qIFNNQiByZXF1ZXN0IGJ1ZiBmcmVlZCBpbiBTZW5kUmVjZWl2ZTIgKi8KIAogCXBTTUIgPSAoU0VTU0lPTl9TRVRVUF9BTkRYICopaW92WzBdLmlvdl9iYXNlOwpAQCAtOTEwLDcgKzkwOSw3IEBACiAJY0ZZSSgxLCAiVUlEID0gJWQgIiwgc2VzLT5TdWlkKTsKIAkvKiByZXNwb25zZSBjYW4gaGF2ZSBlaXRoZXIgMyBvciA0IHdvcmQgY291bnQgLSBTYW1iYSBzZW5kcyAzICovCiAJLyogYW5kIGxhbm1hbiByZXNwb25zZSBpcyAzICovCi0JYnl0ZXNfcmVtYWluaW5nID0gQkNDKHNtYl9idWYpOworCWJ5dGVzX3JlbWFpbmluZyA9IGdldF9iY2Moc21iX2J1Zik7CiAJYmNjX3B0ciA9IHBCeXRlQXJlYShzbWJfYnVmKTsKIAogCWlmIChzbWJfYnVmLT5Xb3JkQ291bnQgPT0gNCkgewpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zbWJkZXMuYyBiL2ZzL2NpZnMvc21iZGVzLmMKaW5kZXggYjZiNmRjYi4uMDQ3MjE0OCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9zbWJkZXMuYworKysgYi9mcy9jaWZzL3NtYmRlcy5jCkBAIC00NSw3ICs0NSw2IEBACiAgICB1cCB3aXRoIGEgZGlmZmVyZW50IGFuc3dlciB0byB0aGUgb25lIGFib3ZlKQogKi8KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSAiY2lmc2VuY3J5cHQuaCIKICNkZWZpbmUgdWNoYXIgdW5zaWduZWQgY2hhcgogCiBzdGF0aWMgdWNoYXIgcGVybTFbNTZdID0geyA1NywgNDksIDQxLCAzMywgMjUsIDE3LCA5LApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zbWJlbmNyeXB0LmMgYi9mcy9jaWZzL3NtYmVuY3J5cHQuYwppbmRleCAxOTJlYTUxLi5iNTA0MWM4IDEwMDY0NAotLS0gYS9mcy9jaWZzL3NtYmVuY3J5cHQuYworKysgYi9mcy9jaWZzL3NtYmVuY3J5cHQuYwpAQCAtMzIsOSArMzIsOCBAQAogI2luY2x1ZGUgImNpZnNfdW5pY29kZS5oIgogI2luY2x1ZGUgImNpZnNwZHUuaCIKICNpbmNsdWRlICJjaWZzZ2xvYi5oIgotI2luY2x1ZGUgIm1kNS5oIgogI2luY2x1ZGUgImNpZnNfZGVidWcuaCIKLSNpbmNsdWRlICJjaWZzZW5jcnlwdC5oIgorI2luY2x1ZGUgImNpZnNwcm90by5oIgogCiAjaWZuZGVmIGZhbHNlCiAjZGVmaW5lIGZhbHNlIDAKQEAgLTQ4LDE0ICs0Nyw1OCBAQAogI2RlZmluZSBTU1ZBTFgoYnVmLHBvcyx2YWwpIChDVkFMKGJ1Zixwb3MpPSh2YWwpJjB4RkYsQ1ZBTChidWYscG9zKzEpPSh2YWwpPj44KQogI2RlZmluZSBTU1ZBTChidWYscG9zLHZhbCkgU1NWQUxYKChidWYpLChwb3MpLCgoX191MTYpKHZhbCkpKQogCi0vKlRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgY29tZSBmcm9tICBsaWJzbWIvc21iZW5jcnlwdC5jICAqLworLyogcHJvZHVjZSBhIG1kNCBtZXNzYWdlIGRpZ2VzdCBmcm9tIGRhdGEgb2YgbGVuZ3RoIG4gYnl0ZXMgKi8KK2ludAorbWRmb3VyKHVuc2lnbmVkIGNoYXIgKm1kNF9oYXNoLCB1bnNpZ25lZCBjaGFyICpsaW5rX3N0ciwgaW50IGxpbmtfbGVuKQoreworCWludCByYzsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwlzdHJ1Y3QgY3J5cHRvX3NoYXNoICptZDQ7CisJc3RydWN0IHNkZXNjICpzZGVzY21kNDsKIAotdm9pZCBTTUJlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCi0JCXVuc2lnbmVkIGNoYXIgKnAyNCk7Ci12b2lkIEVfbWQ0aGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHVuc2lnbmVkIGNoYXIgKnAxNik7Ci1zdGF0aWMgdm9pZCBTTUJPV0ZlbmNyeXB0KHVuc2lnbmVkIGNoYXIgcGFzc3dkWzE2XSwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCi0JCSAgIHVuc2lnbmVkIGNoYXIgcDI0WzI0XSk7Ci12b2lkIFNNQk5UZW5jcnlwdCh1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHVuc2lnbmVkIGNoYXIgKmM4LCB1bnNpZ25lZCBjaGFyICpwMjQpOworCW1kNCA9IGNyeXB0b19hbGxvY19zaGFzaCgibWQ0IiwgMCwgMCk7CisJaWYgKElTX0VSUihtZDQpKSB7CisJCXJjID0gUFRSX0VSUihtZDQpOworCQljRVJST1IoMSwgIiVzOiBDcnlwdG8gbWQ0IGFsbG9jYXRpb24gZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByYyk7CisJCXJldHVybiByYzsKKwl9CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hhc2hfZGVzYykgKyBjcnlwdG9fc2hhc2hfZGVzY3NpemUobWQ0KTsKKwlzZGVzY21kNCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZGVzY21kNCkgeworCQlyYyA9IC1FTk9NRU07CisJCWNFUlJPUigxLCAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIsIF9fZnVuY19fKTsKKwkJZ290byBtZGZvdXJfZXJyOworCX0KKwlzZGVzY21kNC0+c2hhc2gudGZtID0gbWQ0OworCXNkZXNjbWQ0LT5zaGFzaC5mbGFncyA9IDB4MDsKKworCXJjID0gY3J5cHRvX3NoYXNoX2luaXQoJnNkZXNjbWQ0LT5zaGFzaCk7CisJaWYgKHJjKSB7CisJCWNFUlJPUigxLCAiJXM6IENvdWxkIG5vdCBpbml0IG1kNCBzaGFzaFxuIiwgX19mdW5jX18pOworCQlnb3RvIG1kZm91cl9lcnI7CisJfQorCWNyeXB0b19zaGFzaF91cGRhdGUoJnNkZXNjbWQ0LT5zaGFzaCwgbGlua19zdHIsIGxpbmtfbGVuKTsKKwlyYyA9IGNyeXB0b19zaGFzaF9maW5hbCgmc2Rlc2NtZDQtPnNoYXNoLCBtZDRfaGFzaCk7CisKK21kZm91cl9lcnI6CisJY3J5cHRvX2ZyZWVfc2hhc2gobWQ0KTsKKwlrZnJlZShzZGVzY21kNCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIERvZXMgdGhlIGRlcyBlbmNyeXB0aW9uIGZyb20gdGhlIE5UIG9yIExNIE1ENCBoYXNoLiAqLworc3RhdGljIHZvaWQKK1NNQk9XRmVuY3J5cHQodW5zaWduZWQgY2hhciBwYXNzd2RbMTZdLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjOCwKKwkgICAgICB1bnNpZ25lZCBjaGFyIHAyNFsyNF0pCit7CisJdW5zaWduZWQgY2hhciBwMjFbMjFdOworCisJbWVtc2V0KHAyMSwgJ1wwJywgMjEpOworCisJbWVtY3B5KHAyMSwgcGFzc3dkLCAxNik7CisJRV9QMjQocDIxLCBjOCwgcDI0KTsKK30KIAogLyoKICAgIFRoaXMgaW1wbGVtZW50cyB0aGUgWC9PcGVuIFNNQiBwYXNzd29yZCBlbmNyeXB0aW9uCkBAIC0xMTgsOSArMTYxLDEwIEBACiAgKiBDcmVhdGVzIHRoZSBNRDQgSGFzaCBvZiB0aGUgdXNlcnMgcGFzc3dvcmQgaW4gTlQgVU5JQ09ERS4KICAqLwogCi12b2lkCitpbnQKIEVfbWQ0aGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHVuc2lnbmVkIGNoYXIgKnAxNikKIHsKKwlpbnQgcmM7CiAJaW50IGxlbjsKIAlfX3UxNiB3cHdkWzEyOV07CiAKQEAgLTEzOSw4ICsxODMsMTAgQEAKIAkvKiBDYWxjdWxhdGUgbGVuZ3RoIGluIGJ5dGVzICovCiAJbGVuID0gX215X3djc2xlbih3cHdkKSAqIHNpemVvZihfX3UxNik7CiAKLQltZGZvdXIocDE2LCAodW5zaWduZWQgY2hhciAqKSB3cHdkLCBsZW4pOworCXJjID0gbWRmb3VyKHAxNiwgKHVuc2lnbmVkIGNoYXIgKikgd3B3ZCwgbGVuKTsKIAltZW1zZXQod3B3ZCwgMCwgMTI5ICogMik7CisKKwlyZXR1cm4gcmM7CiB9CiAKICNpZiAwIC8qIGN1cnJlbnRseSB1bnVzZWQgKi8KQEAgLTIxMiwxOSArMjU4LDYgQEAKIH0KICNlbmRpZgogCi0vKiBEb2VzIHRoZSBkZXMgZW5jcnlwdGlvbiBmcm9tIHRoZSBOVCBvciBMTSBNRDQgaGFzaC4gKi8KLXN0YXRpYyB2b2lkCi1TTUJPV0ZlbmNyeXB0KHVuc2lnbmVkIGNoYXIgcGFzc3dkWzE2XSwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCi0JICAgICAgdW5zaWduZWQgY2hhciBwMjRbMjRdKQotewotCXVuc2lnbmVkIGNoYXIgcDIxWzIxXTsKLQotCW1lbXNldChwMjEsICdcMCcsIDIxKTsKLQotCW1lbWNweShwMjEsIHBhc3N3ZCwgMTYpOwotCUVfUDI0KHAyMSwgYzgsIHAyNCk7Ci19Ci0KIC8qIERvZXMgdGhlIGRlcyBlbmNyeXB0aW9uIGZyb20gdGhlIEZJUlNUIDggQllURVMgb2YgdGhlIE5UIG9yIExNIE1ENCBoYXNoLiAqLwogI2lmIDAgLyogY3VycmVudGx5IHVudXNlZCAqLwogc3RhdGljIHZvaWQKQEAgLTI0MiwxNiArMjc1LDIxIEBACiAjZW5kaWYKIAogLyogRG9lcyB0aGUgTlQgTUQ0IGhhc2ggdGhlbiBkZXMgZW5jcnlwdGlvbi4gKi8KLQotdm9pZAoraW50CiBTTUJOVGVuY3J5cHQodW5zaWduZWQgY2hhciAqcGFzc3dkLCB1bnNpZ25lZCBjaGFyICpjOCwgdW5zaWduZWQgY2hhciAqcDI0KQogeworCWludCByYzsKIAl1bnNpZ25lZCBjaGFyIHAyMVsyMV07CiAKIAltZW1zZXQocDIxLCAnXDAnLCAyMSk7CiAKLQlFX21kNGhhc2gocGFzc3dkLCBwMjEpOworCXJjID0gRV9tZDRoYXNoKHBhc3N3ZCwgcDIxKTsKKwlpZiAocmMpIHsKKwkJY0ZZSSgxLCAiJXMgQ2FuJ3QgZ2VuZXJhdGUgTlQgaGFzaCwgZXJyb3I6ICVkIiwgX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAlTTUJPV0ZlbmNyeXB0KHAyMSwgYzgsIHAyNCk7CisJcmV0dXJuIHJjOwogfQogCiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvdHJhbnNwb3J0LmMgYi9mcy9jaWZzL3RyYW5zcG9ydC5jCmluZGV4IDU5Y2E4MWIuLjQ2ZDg3NTZmIDEwMDY0NAotLS0gYS9mcy9jaWZzL3RyYW5zcG9ydC5jCisrKyBiL2ZzL2NpZnMvdHJhbnNwb3J0LmMKQEAgLTM2LDcgKzM2LDEzIEBACiAKIGV4dGVybiBtZW1wb29sX3QgKmNpZnNfbWlkX3Bvb2xwOwogCi1zdGF0aWMgc3RydWN0IG1pZF9xX2VudHJ5ICoKK3N0YXRpYyB2b2lkCit3YWtlX3VwX3Rhc2soc3RydWN0IG1pZF9xX2VudHJ5ICptaWQpCit7CisJd2FrZV91cF9wcm9jZXNzKG1pZC0+Y2FsbGJhY2tfZGF0YSk7Cit9CisKK3N0cnVjdCBtaWRfcV9lbnRyeSAqCiBBbGxvY01pZFFFbnRyeShjb25zdCBzdHJ1Y3Qgc21iX2hkciAqc21iX2J1ZmZlciwgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyKQogewogCXN0cnVjdCBtaWRfcV9lbnRyeSAqdGVtcDsKQEAgLTU4LDI4ICs2NCwyOCBAQAogCS8qCWRvX2dldHRpbWVvZmRheSgmdGVtcC0+d2hlbl9zZW50KTsqLyAvKiBlYXNpZXIgdG8gdXNlIGppZmZpZXMgKi8KIAkJLyogd2hlbiBtaWQgYWxsb2NhdGVkIGNhbiBiZSBiZWZvcmUgd2hlbiBzZW50ICovCiAJCXRlbXAtPndoZW5fYWxsb2MgPSBqaWZmaWVzOwotCQl0ZW1wLT50c2sgPSBjdXJyZW50OworCisJCS8qCisJCSAqIFRoZSBkZWZhdWx0IGlzIGZvciB0aGUgbWlkIHRvIGJlIHN5bmNocm9ub3VzLCBzbyB0aGUKKwkJICogZGVmYXVsdCBjYWxsYmFjayBqdXN0IHdha2VzIHVwIHRoZSBjdXJyZW50IHRhc2suCisJCSAqLworCQl0ZW1wLT5jYWxsYmFjayA9IHdha2VfdXBfdGFzazsKKwkJdGVtcC0+Y2FsbGJhY2tfZGF0YSA9IGN1cnJlbnQ7CiAJfQogCi0Jc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmdGVtcC0+cWhlYWQsICZzZXJ2ZXItPnBlbmRpbmdfbWlkX3EpOwogCWF0b21pY19pbmMoJm1pZENvdW50KTsKIAl0ZW1wLT5taWRTdGF0ZSA9IE1JRF9SRVFVRVNUX0FMTE9DQVRFRDsKLQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwogCXJldHVybiB0ZW1wOwogfQogCi1zdGF0aWMgdm9pZAordm9pZAogRGVsZXRlTWlkUUVudHJ5KHN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkRW50cnkpCiB7CiAjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCiAJdW5zaWduZWQgbG9uZyBub3c7CiAjZW5kaWYKLQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAltaWRFbnRyeS0+bWlkU3RhdGUgPSBNSURfRlJFRTsKLQlsaXN0X2RlbCgmbWlkRW50cnktPnFoZWFkKTsKIAlhdG9taWNfZGVjKCZtaWRDb3VudCk7Ci0Jc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAlpZiAobWlkRW50cnktPmxhcmdlQnVmKQogCQljaWZzX2J1Zl9yZWxlYXNlKG1pZEVudHJ5LT5yZXNwX2J1Zik7CiAJZWxzZQpAQCAtMTAzLDYgKzEwOSwxNiBAQAogCW1lbXBvb2xfZnJlZShtaWRFbnRyeSwgY2lmc19taWRfcG9vbHApOwogfQogCitzdGF0aWMgdm9pZAorZGVsZXRlX21pZChzdHJ1Y3QgbWlkX3FfZW50cnkgKm1pZCkKK3sKKwlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwlsaXN0X2RlbCgmbWlkLT5xaGVhZCk7CisJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKworCURlbGV0ZU1pZFFFbnRyeShtaWQpOworfQorCiBzdGF0aWMgaW50CiBzbWJfc2VuZHYoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBzdHJ1Y3Qga3ZlYyAqaW92LCBpbnQgbl92ZWMpCiB7CkBAIC0yMjAsOSArMjM2LDkgQEAKIAkJc2VydmVyLT50Y3BTdGF0dXMgPSBDaWZzTmVlZFJlY29ubmVjdDsKIAl9CiAKLQlpZiAocmMgPCAwKSB7CisJaWYgKHJjIDwgMCAmJiByYyAhPSAtRUlOVFIpCiAJCWNFUlJPUigxLCAiRXJyb3IgJWQgc2VuZGluZyBkYXRhIG9uIHNvY2tldCB0byBzZXJ2ZXIiLCByYyk7Ci0JfSBlbHNlCisJZWxzZQogCQlyYyA9IDA7CiAKIAkvKiBEb24ndCB3YW50IHRvIG1vZGlmeSB0aGUgYnVmZmVyIGFzIGEKQEAgLTI0NCwzMSArMjYwLDMxIEBACiAJcmV0dXJuIHNtYl9zZW5kdihzZXJ2ZXIsICZpb3YsIDEpOwogfQogCi1zdGF0aWMgaW50IHdhaXRfZm9yX2ZyZWVfcmVxdWVzdChzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcywgY29uc3QgaW50IGxvbmdfb3ApCitzdGF0aWMgaW50IHdhaXRfZm9yX2ZyZWVfcmVxdWVzdChzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsCisJCQkJIGNvbnN0IGludCBsb25nX29wKQogewogCWlmIChsb25nX29wID09IENJRlNfQVNZTkNfT1ApIHsKIAkJLyogb3Bsb2NrIGJyZWFrcyBtdXN0IG5vdCBiZSBoZWxkIHVwICovCi0JCWF0b21pY19pbmMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7CisJCWF0b21pY19pbmMoJnNlcnZlci0+aW5GbGlnaHQpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAl3aGlsZSAoMSkgewotCQlpZiAoYXRvbWljX3JlYWQoJnNlcy0+c2VydmVyLT5pbkZsaWdodCkgPj0KLQkJCQljaWZzX21heF9wZW5kaW5nKXsKKwkJaWYgKGF0b21pY19yZWFkKCZzZXJ2ZXItPmluRmxpZ2h0KSA+PSBjaWZzX21heF9wZW5kaW5nKSB7CiAJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwogI2lmZGVmIENPTkZJR19DSUZTX1NUQVRTMgotCQkJYXRvbWljX2luYygmc2VzLT5zZXJ2ZXItPm51bV93YWl0ZXJzKTsKKwkJCWF0b21pY19pbmMoJnNlcnZlci0+bnVtX3dhaXRlcnMpOwogI2VuZGlmCi0JCQl3YWl0X2V2ZW50KHNlcy0+c2VydmVyLT5yZXF1ZXN0X3EsCi0JCQkJICAgYXRvbWljX3JlYWQoJnNlcy0+c2VydmVyLT5pbkZsaWdodCkKKwkJCXdhaXRfZXZlbnQoc2VydmVyLT5yZXF1ZXN0X3EsCisJCQkJICAgYXRvbWljX3JlYWQoJnNlcnZlci0+aW5GbGlnaHQpCiAJCQkJICAgICA8IGNpZnNfbWF4X3BlbmRpbmcpOwogI2lmZGVmIENPTkZJR19DSUZTX1NUQVRTMgotCQkJYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPm51bV93YWl0ZXJzKTsKKwkJCWF0b21pY19kZWMoJnNlcnZlci0+bnVtX3dhaXRlcnMpOwogI2VuZGlmCiAJCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAkJfSBlbHNlIHsKLQkJCWlmIChzZXMtPnNlcnZlci0+dGNwU3RhdHVzID09IENpZnNFeGl0aW5nKSB7CisJCQlpZiAoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc0V4aXRpbmcpIHsKIAkJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwogCQkJCXJldHVybiAtRU5PRU5UOwogCQkJfQpAQCAtMjc4LDcgKzI5NCw3IEBACiAKIAkJCS8qIHVwZGF0ZSAjIG9mIHJlcXVlc3RzIG9uIHRoZSB3aXJlIHRvIHNlcnZlciAqLwogCQkJaWYgKGxvbmdfb3AgIT0gQ0lGU19CTE9DS0lOR19PUCkKLQkJCQlhdG9taWNfaW5jKCZzZXMtPnNlcnZlci0+aW5GbGlnaHQpOworCQkJCWF0b21pY19pbmMoJnNlcnZlci0+aW5GbGlnaHQpOwogCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0zMDgsNTUgKzMyNCw4NyBAQAogCSpwcG1pZFEgPSBBbGxvY01pZFFFbnRyeShpbl9idWYsIHNlcy0+c2VydmVyKTsKIAlpZiAoKnBwbWlkUSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKKwlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwlsaXN0X2FkZF90YWlsKCYoKnBwbWlkUSktPnFoZWFkLCAmc2VzLT5zZXJ2ZXItPnBlbmRpbmdfbWlkX3EpOworCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd2FpdF9mb3JfcmVzcG9uc2Uoc3RydWN0IGNpZnNTZXNJbmZvICpzZXMsCi0JCQlzdHJ1Y3QgbWlkX3FfZW50cnkgKm1pZFEsCi0JCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQsCi0JCQl1bnNpZ25lZCBsb25nIHRpbWVfdG9fd2FpdCkKK3N0YXRpYyBpbnQKK3dhaXRfZm9yX3Jlc3BvbnNlKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciwgc3RydWN0IG1pZF9xX2VudHJ5ICptaWRRKQogewotCXVuc2lnbmVkIGxvbmcgY3Vycl90aW1lb3V0OworCWludCBlcnJvcjsKIAotCWZvciAoOzspIHsKLQkJY3Vycl90aW1lb3V0ID0gdGltZW91dCArIGppZmZpZXM7Ci0JCXdhaXRfZXZlbnRfdGltZW91dChzZXMtPnNlcnZlci0+cmVzcG9uc2VfcSwKLQkJCW1pZFEtPm1pZFN0YXRlICE9IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCwgdGltZW91dCk7CisJZXJyb3IgPSB3YWl0X2V2ZW50X2tpbGxhYmxlKHNlcnZlci0+cmVzcG9uc2VfcSwKKwkJCQkgICAgbWlkUS0+bWlkU3RhdGUgIT0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCi0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGN1cnJfdGltZW91dCkgJiYKLQkJCShtaWRRLT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpICYmCi0JCQkoKHNlcy0+c2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc0dvb2QpIHx8Ci0JCQkgKHNlcy0+c2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc05ldykpKSB7Ci0KLQkJCXVuc2lnbmVkIGxvbmcgbHJ0OwotCi0JCQkvKiBXZSB0aW1lZCBvdXQuIElzIHRoZSBzZXJ2ZXIgc3RpbGwKLQkJCSAgIHNlbmRpbmcgcmVwbGllcyA/ICovCi0JCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLQkJCWxydCA9IHNlcy0+c2VydmVyLT5sc3RycDsKLQkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7Ci0KLQkJCS8qIENhbGN1bGF0ZSB0aW1lX3RvX3dhaXQgcGFzdCBsYXN0IHJlY2VpdmUgdGltZS4KLQkJCSBBbHRob3VnaCB3ZSBwcmVmZXIgbm90IHRvIHRpbWUgb3V0IGlmIHRoZQotCQkJIHNlcnZlciBpcyBzdGlsbCByZXNwb25kaW5nIC0gd2Ugd2lsbCB0aW1lCi0JCQkgb3V0IGlmIHRoZSBzZXJ2ZXIgdGFrZXMgbW9yZSB0aGFuIDE1IChvciA0NQotCQkJIG9yIDE4MCkgc2Vjb25kcyB0byByZXNwb25kIHRvIHRoaXMgcmVxdWVzdAotCQkJIGFuZCBoYXMgbm90IHJlc3BvbmRlZCB0byBhbnkgcmVxdWVzdCBmcm9tCi0JCQkgb3RoZXIgdGhyZWFkcyBvbiB0aGUgY2xpZW50IHdpdGhpbiAxMCBzZWNvbmRzICovCi0JCQlscnQgKz0gdGltZV90b193YWl0OwotCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbHJ0KSkgewotCQkJCS8qIE5vIHJlcGxpZXMgZm9yIHRpbWVfdG9fd2FpdC4gKi8KLQkJCQljRVJST1IoMSwgInNlcnZlciBub3QgcmVzcG9uZGluZyIpOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQorCXJldHVybiAwOwogfQogCiAKIC8qCisgKiBTZW5kIGEgU01CIHJlcXVlc3QgYW5kIHNldCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaW4gdGhlIG1pZCB0byBoYW5kbGUKKyAqIHRoZSByZXN1bHQuIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZGVhbGluZyB3aXRoIHRpbWVvdXRzLgorICovCitpbnQKK2NpZnNfY2FsbF9hc3luYyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIHN0cnVjdCBzbWJfaGRyICppbl9idWYsCisJCW1pZF9jYWxsYmFja190ICpjYWxsYmFjaywgdm9pZCAqY2JkYXRhKQoreworCWludCByYzsKKwlzdHJ1Y3QgbWlkX3FfZW50cnkgKm1pZDsKKworCXJjID0gd2FpdF9mb3JfZnJlZV9yZXF1ZXN0KHNlcnZlciwgQ0lGU19BU1lOQ19PUCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwkvKiBlbmFibGUgc2lnbmluZyBpZiBzZXJ2ZXIgcmVxdWlyZXMgaXQgKi8KKwlpZiAoc2VydmVyLT5zZWNNb2RlICYgKFNFQ01PREVfU0lHTl9SRVFVSVJFRCB8IFNFQ01PREVfU0lHTl9FTkFCTEVEKSkKKwkJaW5fYnVmLT5GbGFnczIgfD0gU01CRkxHMl9TRUNVUklUWV9TSUdOQVRVUkU7CisKKwltdXRleF9sb2NrKCZzZXJ2ZXItPnNydl9tdXRleCk7CisJbWlkID0gQWxsb2NNaWRRRW50cnkoaW5fYnVmLCBzZXJ2ZXIpOworCWlmIChtaWQgPT0gTlVMTCkgeworCQltdXRleF91bmxvY2soJnNlcnZlci0+c3J2X211dGV4KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogcHV0IGl0IG9uIHRoZSBwZW5kaW5nX21pZF9xICovCisJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJbGlzdF9hZGRfdGFpbCgmbWlkLT5xaGVhZCwgJnNlcnZlci0+cGVuZGluZ19taWRfcSk7CisJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKworCXJjID0gY2lmc19zaWduX3NtYihpbl9idWYsIHNlcnZlciwgJm1pZC0+c2VxdWVuY2VfbnVtYmVyKTsKKwlpZiAocmMpIHsKKwkJbXV0ZXhfdW5sb2NrKCZzZXJ2ZXItPnNydl9tdXRleCk7CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwltaWQtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisJbWlkLT5jYWxsYmFja19kYXRhID0gY2JkYXRhOworCW1pZC0+bWlkU3RhdGUgPSBNSURfUkVRVUVTVF9TVUJNSVRURUQ7CisjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCisJYXRvbWljX2luYygmc2VydmVyLT5pblNlbmQpOworI2VuZGlmCisJcmMgPSBzbWJfc2VuZChzZXJ2ZXIsIGluX2J1ZiwgaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCk7CisjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCisJYXRvbWljX2RlYygmc2VydmVyLT5pblNlbmQpOworCW1pZC0+d2hlbl9zZW50ID0gamlmZmllczsKKyNlbmRpZgorCW11dGV4X3VubG9jaygmc2VydmVyLT5zcnZfbXV0ZXgpOworCWlmIChyYykKKwkJZ290byBvdXRfZXJyOworCisJcmV0dXJuIHJjOworb3V0X2VycjoKKwlkZWxldGVfbWlkKG1pZCk7CisJYXRvbWljX2RlYygmc2VydmVyLT5pbkZsaWdodCk7CisJd2FrZV91cCgmc2VydmVyLT5yZXF1ZXN0X3EpOworCXJldHVybiByYzsKK30KKworLyoKICAqCiAgKiBTZW5kIGFuIFNNQiBSZXF1ZXN0LiAgTm8gcmVzcG9uc2UgaW5mbyAob3RoZXIgdGhhbiByZXR1cm4gY29kZSkKICAqIG5lZWRzIHRvIGJlIHBhcnNlZC4KQEAgLTM4Miw2ICs0MzAsODQgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQKK3N5bmNfbWlkX3Jlc3VsdChzdHJ1Y3QgbWlkX3FfZW50cnkgKm1pZCwgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyKQoreworCWludCByYyA9IDA7CisKKwljRllJKDEsICIlczogY21kPSVkIG1pZD0lZCBzdGF0ZT0lZCIsIF9fZnVuY19fLCBtaWQtPmNvbW1hbmQsCisJCW1pZC0+bWlkLCBtaWQtPm1pZFN0YXRlKTsKKworCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOworCS8qIGVuc3VyZSB0aGF0IGl0J3Mgbm8gbG9uZ2VyIG9uIHRoZSBwZW5kaW5nX21pZF9xICovCisJbGlzdF9kZWxfaW5pdCgmbWlkLT5xaGVhZCk7CisKKwlzd2l0Y2ggKG1pZC0+bWlkU3RhdGUpIHsKKwljYXNlIE1JRF9SRVNQT05TRV9SRUNFSVZFRDoKKwkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJcmV0dXJuIHJjOworCWNhc2UgTUlEX1JFUVVFU1RfU1VCTUlUVEVEOgorCQkvKiBzb2NrZXQgaXMgZ29pbmcgZG93biwgcmVqZWN0IGFsbCBjYWxscyAqLworCQlpZiAoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc0V4aXRpbmcpIHsKKwkJCWNFUlJPUigxLCAiJXM6IGNhbmNlbGluZyBtaWQ9JWQgY21kPTB4JXggc3RhdGU9JWQiLAorCQkJICAgICAgIF9fZnVuY19fLCBtaWQtPm1pZCwgbWlkLT5jb21tYW5kLCBtaWQtPm1pZFN0YXRlKTsKKwkJCXJjID0gLUVIT1NURE9XTjsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBNSURfUkVUUllfTkVFREVEOgorCQlyYyA9IC1FQUdBSU47CisJCWJyZWFrOworCWNhc2UgTUlEX1JFU1BPTlNFX01BTEZPUk1FRDoKKwkJcmMgPSAtRUlPOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljRVJST1IoMSwgIiVzOiBpbnZhbGlkIG1pZCBzdGF0ZSBtaWQ9JWQgc3RhdGU9JWQiLCBfX2Z1bmNfXywKKwkJCW1pZC0+bWlkLCBtaWQtPm1pZFN0YXRlKTsKKwkJcmMgPSAtRUlPOworCX0KKwlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOworCisJRGVsZXRlTWlkUUVudHJ5KG1pZCk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogQW4gTlQgY2FuY2VsIHJlcXVlc3QgaGVhZGVyIGxvb2tzIGp1c3QgbGlrZSB0aGUgb3JpZ2luYWwgcmVxdWVzdCBleGNlcHQ6CisgKgorICogVGhlIENvbW1hbmQgaXMgU01CX0NPTV9OVF9DQU5DRUwKKyAqIFRoZSBXb3JkQ291bnQgaXMgemVyb2VkIG91dAorICogVGhlIEJ5dGVDb3VudCBpcyB6ZXJvZWQgb3V0CisgKgorICogVGhpcyBmdW5jdGlvbiBtYW5nbGVzIGFuIGV4aXN0aW5nIHJlcXVlc3QgYnVmZmVyIGludG8gYQorICogU01CX0NPTV9OVF9DQU5DRUwgcmVxdWVzdCBhbmQgdGhlbiBzZW5kcyBpdC4KKyAqLworc3RhdGljIGludAorc2VuZF9udF9jYW5jZWwoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBzdHJ1Y3Qgc21iX2hkciAqaW5fYnVmLAorCQlzdHJ1Y3QgbWlkX3FfZW50cnkgKm1pZCkKK3sKKwlpbnQgcmMgPSAwOworCisJLyogLTQgZm9yIFJGQzEwMDEgbGVuZ3RoIGFuZCArMiBmb3IgQkNDIGZpZWxkICovCisJaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc21iX2hkcikgLSA0ICArIDI7CisJaW5fYnVmLT5Db21tYW5kID0gU01CX0NPTV9OVF9DQU5DRUw7CisJaW5fYnVmLT5Xb3JkQ291bnQgPSAwOworCXB1dF9iY2NfbGUoMCwgaW5fYnVmKTsKKworCW11dGV4X2xvY2soJnNlcnZlci0+c3J2X211dGV4KTsKKwlyYyA9IGNpZnNfc2lnbl9zbWIoaW5fYnVmLCBzZXJ2ZXIsICZtaWQtPnNlcXVlbmNlX251bWJlcik7CisJaWYgKHJjKSB7CisJCW11dGV4X3VubG9jaygmc2VydmVyLT5zcnZfbXV0ZXgpOworCQlyZXR1cm4gcmM7CisJfQorCXJjID0gc21iX3NlbmQoc2VydmVyLCBpbl9idWYsIGluX2J1Zi0+c21iX2J1Zl9sZW5ndGgpOworCW11dGV4X3VubG9jaygmc2VydmVyLT5zcnZfbXV0ZXgpOworCisJY0ZZSSgxLCAiaXNzdWVkIE5UX0NBTkNFTCBmb3IgbWlkICV1LCByYyA9ICVkIiwKKwkJaW5fYnVmLT5NaWQsIHJjKTsKKworCXJldHVybiByYzsKK30KKwogaW50CiBTZW5kUmVjZWl2ZTIoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNTZXNJbmZvICpzZXMsCiAJICAgICBzdHJ1Y3Qga3ZlYyAqaW92LCBpbnQgbl92ZWMsIGludCAqcFJlc3BCdWZUeXBlIC8qIHJldCAqLywKQEAgLTM5MCw3ICs1MTYsNiBAQAogCWludCByYyA9IDA7CiAJaW50IGxvbmdfb3A7CiAJdW5zaWduZWQgaW50IHJlY2VpdmVfbGVuOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAlzdHJ1Y3QgbWlkX3FfZW50cnkgKm1pZFE7CiAJc3RydWN0IHNtYl9oZHIgKmluX2J1ZiA9IGlvdlswXS5pb3ZfYmFzZTsKIApAQCAtNDEzLDcgKzUzOCw3IEBACiAJICAgdG8gdGhlIHNhbWUgc2VydmVyLiBXZSBtYXkgbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZSBsYXRlciBvcgogCSAgIHVzZSBzZXMtPm1heFJlcSAqLwogCi0JcmMgPSB3YWl0X2Zvcl9mcmVlX3JlcXVlc3Qoc2VzLCBsb25nX29wKTsKKwlyYyA9IHdhaXRfZm9yX2ZyZWVfcmVxdWVzdChzZXMtPnNlcnZlciwgbG9uZ19vcCk7CiAJaWYgKHJjKSB7CiAJCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UoaW5fYnVmKTsKIAkJcmV0dXJuIHJjOwpAQCAtNDUyLDcwICs1NzcsNDEgQEAKICNlbmRpZgogCiAJbXV0ZXhfdW5sb2NrKCZzZXMtPnNlcnZlci0+c3J2X211dGV4KTsKLQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKGluX2J1Zik7CiAKLQlpZiAocmMgPCAwKQotCQlnb3RvIG91dDsKLQotCWlmIChsb25nX29wID09IENJRlNfU1REX09QKQotCQl0aW1lb3V0ID0gMTUgKiBIWjsKLQllbHNlIGlmIChsb25nX29wID09IENJRlNfVkxPTkdfT1ApIC8qIGUuZy4gc2xvdyB3cml0ZXMgcGFzdCBFT0YgKi8KLQkJdGltZW91dCA9IDE4MCAqIEhaOwotCWVsc2UgaWYgKGxvbmdfb3AgPT0gQ0lGU19MT05HX09QKQotCQl0aW1lb3V0ID0gNDUgKiBIWjsgLyogc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbgotCQkJc2VydmVycyBvcGxvY2sgYnJlYWsgdGltZW91dCAoYWJvdXQgNDMgc2Vjb25kcykgKi8KLQllbHNlIGlmIChsb25nX29wID09IENJRlNfQVNZTkNfT1ApCi0JCWdvdG8gb3V0OwotCWVsc2UgaWYgKGxvbmdfb3AgPT0gQ0lGU19CTE9DS0lOR19PUCkKLQkJdGltZW91dCA9IDB4N0ZGRkZGRkY7IC8qICBsYXJnZSwgYnV0IG5vdCBzbyBsYXJnZSBhcyB0byB3cmFwICovCi0JZWxzZSB7Ci0JCWNFUlJPUigxLCAidW5rbm93biB0aW1lb3V0IGZsYWcgJWQiLCBsb25nX29wKTsKLQkJcmMgPSAtRUlPOworCWlmIChyYyA8IDApIHsKKwkJY2lmc19zbWFsbF9idWZfcmVsZWFzZShpbl9idWYpOwogCQlnb3RvIG91dDsKIAl9CiAKLQkvKiB3YWl0IGZvciAxNSBzZWNvbmRzIG9yIHVudGlsIHdva2VuIHVwIGR1ZSB0byByZXNwb25zZSBhcnJpdmluZyBvcgotCSAgIGR1ZSB0byBsYXN0IGNvbm5lY3Rpb24gdG8gdGhpcyBzZXJ2ZXIgYmVpbmcgdW5tb3VudGVkICovCi0JaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCS8qIGlmIHNpZ25hbCBwZW5kaW5nIGRvIG5vdCBob2xkIHVwIHVzZXIgZm9yIGZ1bGwgc21iIHRpbWVvdXQKLQkJYnV0IHdlIHN0aWxsIGdpdmUgcmVzcG9uc2UgYSBjaGFuY2UgdG8gY29tcGxldGUgKi8KLQkJdGltZW91dCA9IDIgKiBIWjsKKwlpZiAobG9uZ19vcCA9PSBDSUZTX0FTWU5DX09QKSB7CisJCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UoaW5fYnVmKTsKKwkJZ290byBvdXQ7CiAJfQogCi0JLyogTm8gdXNlciBpbnRlcnJ1cHRzIGluIHdhaXQgLSB3cmVha3MgaGF2b2Mgd2l0aCBwZXJmb3JtYW5jZSAqLwotCXdhaXRfZm9yX3Jlc3BvbnNlKHNlcywgbWlkUSwgdGltZW91dCwgMTAgKiBIWik7Ci0KLQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLQotCWlmIChtaWRRLT5yZXNwX2J1ZiA9PSBOVUxMKSB7Ci0JCWNFUlJPUigxLCAiTm8gcmVzcG9uc2UgdG8gY21kICVkIG1pZCAlZCIsCi0JCQltaWRRLT5jb21tYW5kLCBtaWRRLT5taWQpOworCXJjID0gd2FpdF9mb3JfcmVzcG9uc2Uoc2VzLT5zZXJ2ZXIsIG1pZFEpOworCWlmIChyYyAhPSAwKSB7CisJCXNlbmRfbnRfY2FuY2VsKHNlcy0+c2VydmVyLCBpbl9idWYsIG1pZFEpOworCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAkJaWYgKG1pZFEtPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkgewotCQkJaWYgKHNlcy0+c2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc0V4aXRpbmcpCi0JCQkJcmMgPSAtRUhPU1RET1dOOwotCQkJZWxzZSB7Ci0JCQkJc2VzLT5zZXJ2ZXItPnRjcFN0YXR1cyA9IENpZnNOZWVkUmVjb25uZWN0OwotCQkJCW1pZFEtPm1pZFN0YXRlID0gTUlEX1JFVFJZX05FRURFRDsKLQkJCX0KLQkJfQotCi0JCWlmIChyYyAhPSAtRUhPU1RET1dOKSB7Ci0JCQlpZiAobWlkUS0+bWlkU3RhdGUgPT0gTUlEX1JFVFJZX05FRURFRCkgewotCQkJCXJjID0gLUVBR0FJTjsKLQkJCQljRllJKDEsICJtYXJraW5nIHJlcXVlc3QgZm9yIHJldHJ5Iik7Ci0JCQl9IGVsc2UgewotCQkJCXJjID0gLUVJTzsKLQkJCX0KKwkJCW1pZFEtPmNhbGxiYWNrID0gRGVsZXRlTWlkUUVudHJ5OworCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UoaW5fYnVmKTsKKwkJCWF0b21pY19kZWMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7CisJCQl3YWtlX3VwKCZzZXMtPnNlcnZlci0+cmVxdWVzdF9xKTsKKwkJCXJldHVybiByYzsKIAkJfQogCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwotCQlEZWxldGVNaWRRRW50cnkobWlkUSk7Ci0JCS8qIFVwZGF0ZSAjIG9mIHJlcXVlc3RzIG9uIHdpcmUgdG8gc2VydmVyICovCisJfQorCisJY2lmc19zbWFsbF9idWZfcmVsZWFzZShpbl9idWYpOworCisJcmMgPSBzeW5jX21pZF9yZXN1bHQobWlkUSwgc2VzLT5zZXJ2ZXIpOworCWlmIChyYyAhPSAwKSB7CiAJCWF0b21pY19kZWMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7CiAJCXdha2VfdXAoJnNlcy0+c2VydmVyLT5yZXF1ZXN0X3EpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0Jc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAlyZWNlaXZlX2xlbiA9IG1pZFEtPnJlc3BfYnVmLT5zbWJfYnVmX2xlbmd0aDsKIAogCWlmIChyZWNlaXZlX2xlbiA+IENJRlNNYXhCdWZTaXplICsgTUFYX0NJRlNfSERSX1NJWkUpIHsKQEAgLTU1OSwxOSArNjU1LDE4IEBACiAJCWlmIChyZWNlaXZlX2xlbiA+PSBzaXplb2Yoc3RydWN0IHNtYl9oZHIpIC0gNAogCQkgICAgLyogZG8gbm90IGNvdW50IFJGQzEwMDEgaGVhZGVyICovICArCiAJCSAgICAoMiAqIG1pZFEtPnJlc3BfYnVmLT5Xb3JkQ291bnQpICsgMiAvKiBiY2MgKi8gKQotCQkJQkNDKG1pZFEtPnJlc3BfYnVmKSA9Ci0JCQkJbGUxNl90b19jcHUoQkNDX0xFKG1pZFEtPnJlc3BfYnVmKSk7CisJCQlwdXRfYmNjKGdldF9iY2NfbGUobWlkUS0+cmVzcF9idWYpLCBtaWRRLT5yZXNwX2J1Zik7CiAJCWlmICgoZmxhZ3MgJiBDSUZTX05PX1JFU1ApID09IDApCiAJCQltaWRRLT5yZXNwX2J1ZiA9IE5VTEw7ICAvKiBtYXJrIGl0IHNvIGJ1ZiB3aWxsCiAJCQkJCQkgICBub3QgYmUgZnJlZWQgYnkKLQkJCQkJCSAgIERlbGV0ZU1pZFFFbnRyeSAqLworCQkJCQkJICAgZGVsZXRlX21pZCAqLwogCX0gZWxzZSB7CiAJCXJjID0gLUVJTzsKIAkJY0ZZSSgxLCAiQmFkIE1JRCBzdGF0ZT8iKTsKIAl9CiAKIG91dDoKLQlEZWxldGVNaWRRRW50cnkobWlkUSk7CisJZGVsZXRlX21pZChtaWRRKTsKIAlhdG9taWNfZGVjKCZzZXMtPnNlcnZlci0+aW5GbGlnaHQpOwogCXdha2VfdXAoJnNlcy0+c2VydmVyLT5yZXF1ZXN0X3EpOwogCkBAIC01ODUsNyArNjgwLDYgQEAKIHsKIAlpbnQgcmMgPSAwOwogCXVuc2lnbmVkIGludCByZWNlaXZlX2xlbjsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAJc3RydWN0IG1pZF9xX2VudHJ5ICptaWRROwogCiAJaWYgKHNlcyA9PSBOVUxMKSB7CkBAIC02MTAsNyArNzA0LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JcmMgPSB3YWl0X2Zvcl9mcmVlX3JlcXVlc3Qoc2VzLCBsb25nX29wKTsKKwlyYyA9IHdhaXRfZm9yX2ZyZWVfcmVxdWVzdChzZXMtPnNlcnZlciwgbG9uZ19vcCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTY0OSw2NCArNzQzLDMxIEBACiAJaWYgKHJjIDwgMCkKIAkJZ290byBvdXQ7CiAKLQlpZiAobG9uZ19vcCA9PSBDSUZTX1NURF9PUCkKLQkJdGltZW91dCA9IDE1ICogSFo7Ci0JLyogd2FpdCBmb3IgMTUgc2Vjb25kcyBvciB1bnRpbCB3b2tlbiB1cCBkdWUgdG8gcmVzcG9uc2UgYXJyaXZpbmcgb3IKLQkgICBkdWUgdG8gbGFzdCBjb25uZWN0aW9uIHRvIHRoaXMgc2VydmVyIGJlaW5nIHVubW91bnRlZCAqLwotCWVsc2UgaWYgKGxvbmdfb3AgPT0gQ0lGU19BU1lOQ19PUCkKKwlpZiAobG9uZ19vcCA9PSBDSUZTX0FTWU5DX09QKQogCQlnb3RvIG91dDsKLQllbHNlIGlmIChsb25nX29wID09IENJRlNfVkxPTkdfT1ApIC8qIHdyaXRlcyBwYXN0IEVPRiBjYW4gYmUgc2xvdyAqLwotCQl0aW1lb3V0ID0gMTgwICogSFo7Ci0JZWxzZSBpZiAobG9uZ19vcCA9PSBDSUZTX0xPTkdfT1ApCi0JCXRpbWVvdXQgPSA0NSAqIEhaOyAvKiBzaG91bGQgYmUgZ3JlYXRlciB0aGFuCi0JCQlzZXJ2ZXJzIG9wbG9jayBicmVhayB0aW1lb3V0IChhYm91dCA0MyBzZWNvbmRzKSAqLwotCWVsc2UgaWYgKGxvbmdfb3AgPT0gQ0lGU19CTE9DS0lOR19PUCkKLQkJdGltZW91dCA9IDB4N0ZGRkZGRkY7IC8qIGxhcmdlIGJ1dCBubyBzbyBsYXJnZSBhcyB0byB3cmFwICovCi0JZWxzZSB7Ci0JCWNFUlJPUigxLCAidW5rbm93biB0aW1lb3V0IGZsYWcgJWQiLCBsb25nX29wKTsKLQkJcmMgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9CiAKLQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJLyogaWYgc2lnbmFsIHBlbmRpbmcgZG8gbm90IGhvbGQgdXAgdXNlciBmb3IgZnVsbCBzbWIgdGltZW91dAotCQlidXQgd2Ugc3RpbGwgZ2l2ZSByZXNwb25zZSBhIGNoYW5jZSB0byBjb21wbGV0ZSAqLwotCQl0aW1lb3V0ID0gMiAqIEhaOwotCX0KLQotCS8qIE5vIHVzZXIgaW50ZXJydXB0cyBpbiB3YWl0IC0gd3JlYWtzIGhhdm9jIHdpdGggcGVyZm9ybWFuY2UgKi8KLQl3YWl0X2Zvcl9yZXNwb25zZShzZXMsIG1pZFEsIHRpbWVvdXQsIDEwICogSFopOwotCi0Jc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7Ci0JaWYgKG1pZFEtPnJlc3BfYnVmID09IE5VTEwpIHsKLQkJY0VSUk9SKDEsICJObyByZXNwb25zZSBmb3IgY21kICVkIG1pZCAlZCIsCi0JCQkgIG1pZFEtPmNvbW1hbmQsIG1pZFEtPm1pZCk7CisJcmMgPSB3YWl0X2Zvcl9yZXNwb25zZShzZXMtPnNlcnZlciwgbWlkUSk7CisJaWYgKHJjICE9IDApIHsKKwkJc2VuZF9udF9jYW5jZWwoc2VzLT5zZXJ2ZXIsIGluX2J1ZiwgbWlkUSk7CisJCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOwogCQlpZiAobWlkUS0+bWlkU3RhdGUgPT0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEKSB7Ci0JCQlpZiAoc2VzLT5zZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzRXhpdGluZykKLQkJCQlyYyA9IC1FSE9TVERPV047Ci0JCQllbHNlIHsKLQkJCQlzZXMtPnNlcnZlci0+dGNwU3RhdHVzID0gQ2lmc05lZWRSZWNvbm5lY3Q7Ci0JCQkJbWlkUS0+bWlkU3RhdGUgPSBNSURfUkVUUllfTkVFREVEOwotCQkJfQotCQl9Ci0KLQkJaWYgKHJjICE9IC1FSE9TVERPV04pIHsKLQkJCWlmIChtaWRRLT5taWRTdGF0ZSA9PSBNSURfUkVUUllfTkVFREVEKSB7Ci0JCQkJcmMgPSAtRUFHQUlOOwotCQkJCWNGWUkoMSwgIm1hcmtpbmcgcmVxdWVzdCBmb3IgcmV0cnkiKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmMgPSAtRUlPOwotCQkJfQorCQkJLyogbm8gbG9uZ2VyIGNvbnNpZGVyZWQgdG8gYmUgImluLWZsaWdodCIgKi8KKwkJCW1pZFEtPmNhbGxiYWNrID0gRGVsZXRlTWlkUUVudHJ5OworCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJCWF0b21pY19kZWMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7CisJCQl3YWtlX3VwKCZzZXMtPnNlcnZlci0+cmVxdWVzdF9xKTsKKwkJCXJldHVybiByYzsKIAkJfQogCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwotCQlEZWxldGVNaWRRRW50cnkobWlkUSk7Ci0JCS8qIFVwZGF0ZSAjIG9mIHJlcXVlc3RzIG9uIHdpcmUgdG8gc2VydmVyICovCisJfQorCisJcmMgPSBzeW5jX21pZF9yZXN1bHQobWlkUSwgc2VzLT5zZXJ2ZXIpOworCWlmIChyYyAhPSAwKSB7CiAJCWF0b21pY19kZWMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7CiAJCXdha2VfdXAoJnNlcy0+c2VydmVyLT5yZXF1ZXN0X3EpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0Jc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAlyZWNlaXZlX2xlbiA9IG1pZFEtPnJlc3BfYnVmLT5zbWJfYnVmX2xlbmd0aDsKIAogCWlmIChyZWNlaXZlX2xlbiA+IENJRlNNYXhCdWZTaXplICsgTUFYX0NJRlNfSERSX1NJWkUpIHsKQEAgLTc0OCw0MyArODA5LDIwIEBACiAJCWlmIChyZWNlaXZlX2xlbiA+PSBzaXplb2Yoc3RydWN0IHNtYl9oZHIpIC0gNAogCQkgICAgLyogZG8gbm90IGNvdW50IFJGQzEwMDEgaGVhZGVyICovICArCiAJCSAgICAoMiAqIG91dF9idWYtPldvcmRDb3VudCkgKyAyIC8qIGJjYyAqLyApCi0JCQlCQ0Mob3V0X2J1ZikgPSBsZTE2X3RvX2NwdShCQ0NfTEUob3V0X2J1ZikpOworCQkJcHV0X2JjYyhnZXRfYmNjX2xlKG1pZFEtPnJlc3BfYnVmKSwgbWlkUS0+cmVzcF9idWYpOwogCX0gZWxzZSB7CiAJCXJjID0gLUVJTzsKIAkJY0VSUk9SKDEsICJCYWQgTUlEIHN0YXRlPyIpOwogCX0KIAogb3V0OgotCURlbGV0ZU1pZFFFbnRyeShtaWRRKTsKKwlkZWxldGVfbWlkKG1pZFEpOwogCWF0b21pY19kZWMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7CiAJd2FrZV91cCgmc2VzLT5zZXJ2ZXItPnJlcXVlc3RfcSk7CiAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qIFNlbmQgYW4gTlRfQ0FOQ0VMIFNNQiB0byBjYXVzZSB0aGUgUE9TSVggYmxvY2tpbmcgbG9jayB0byByZXR1cm4uICovCi0KLXN0YXRpYyBpbnQKLXNlbmRfbnRfY2FuY2VsKHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sIHN0cnVjdCBzbWJfaGRyICppbl9idWYsCi0JCXN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkUSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzID0gdGNvbi0+c2VzOwotCV9fdTE2IG1pZCA9IGluX2J1Zi0+TWlkOwotCi0JaGVhZGVyX2Fzc2VtYmxlKGluX2J1ZiwgU01CX0NPTV9OVF9DQU5DRUwsIHRjb24sIDApOwotCWluX2J1Zi0+TWlkID0gbWlkOwotCW11dGV4X2xvY2soJnNlcy0+c2VydmVyLT5zcnZfbXV0ZXgpOwotCXJjID0gY2lmc19zaWduX3NtYihpbl9idWYsIHNlcy0+c2VydmVyLCAmbWlkUS0+c2VxdWVuY2VfbnVtYmVyKTsKLQlpZiAocmMpIHsKLQkJbXV0ZXhfdW5sb2NrKCZzZXMtPnNlcnZlci0+c3J2X211dGV4KTsKLQkJcmV0dXJuIHJjOwotCX0KLQlyYyA9IHNtYl9zZW5kKHNlcy0+c2VydmVyLCBpbl9idWYsIGluX2J1Zi0+c21iX2J1Zl9sZW5ndGgpOwotCW11dGV4X3VubG9jaygmc2VzLT5zZXJ2ZXItPnNydl9tdXRleCk7Ci0JcmV0dXJuIHJjOwotfQotCiAvKiBXZSBzZW5kIGEgTE9DS0lOR1hfQ0FOQ0VMX0xPQ0sgdG8gY2F1c2UgdGhlIFdpbmRvd3MKICAgIGJsb2NraW5nIGxvY2sgdG8gcmV0dXJuLiAqLwogCkBAIC04MDcsNyArODQ1LDcgQEAKIAlwU01CLT5oZHIuTWlkID0gR2V0TmV4dE1pZChzZXMtPnNlcnZlcik7CiAKIAlyZXR1cm4gU2VuZFJlY2VpdmUoeGlkLCBzZXMsIGluX2J1Ziwgb3V0X2J1ZiwKLQkJCSZieXRlc19yZXR1cm5lZCwgQ0lGU19TVERfT1ApOworCQkJJmJ5dGVzX3JldHVybmVkLCAwKTsKIH0KIAogaW50CkBAIC04NDUsNyArODgzLDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JcmMgPSB3YWl0X2Zvcl9mcmVlX3JlcXVlc3Qoc2VzLCBDSUZTX0JMT0NLSU5HX09QKTsKKwlyYyA9IHdhaXRfZm9yX2ZyZWVfcmVxdWVzdChzZXMtPnNlcnZlciwgQ0lGU19CTE9DS0lOR19PUCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTg2Myw3ICs5MDEsNyBAQAogCiAJcmMgPSBjaWZzX3NpZ25fc21iKGluX2J1Ziwgc2VzLT5zZXJ2ZXIsICZtaWRRLT5zZXF1ZW5jZV9udW1iZXIpOwogCWlmIChyYykgewotCQlEZWxldGVNaWRRRW50cnkobWlkUSk7CisJCWRlbGV0ZV9taWQobWlkUSk7CiAJCW11dGV4X3VubG9jaygmc2VzLT5zZXJ2ZXItPnNydl9tdXRleCk7CiAJCXJldHVybiByYzsKIAl9CkBAIC04ODAsNyArOTE4LDcgQEAKIAltdXRleF91bmxvY2soJnNlcy0+c2VydmVyLT5zcnZfbXV0ZXgpOwogCiAJaWYgKHJjIDwgMCkgewotCQlEZWxldGVNaWRRRW50cnkobWlkUSk7CisJCWRlbGV0ZV9taWQobWlkUSk7CiAJCXJldHVybiByYzsKIAl9CiAKQEAgLTg5OSwxMCArOTM3LDkgQEAKIAkJaWYgKGluX2J1Zi0+Q29tbWFuZCA9PSBTTUJfQ09NX1RSQU5TQUNUSU9OMikgewogCQkJLyogUE9TSVggbG9jay4gV2Ugc2VuZCBhIE5UX0NBTkNFTCBTTUIgdG8gY2F1c2UgdGhlCiAJCQkgICBibG9ja2luZyBsb2NrIHRvIHJldHVybi4gKi8KLQotCQkJcmMgPSBzZW5kX250X2NhbmNlbCh0Y29uLCBpbl9idWYsIG1pZFEpOworCQkJcmMgPSBzZW5kX250X2NhbmNlbChzZXMtPnNlcnZlciwgaW5fYnVmLCBtaWRRKTsKIAkJCWlmIChyYykgewotCQkJCURlbGV0ZU1pZFFFbnRyeShtaWRRKTsKKwkJCQlkZWxldGVfbWlkKG1pZFEpOwogCQkJCXJldHVybiByYzsKIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTkxNCw0NyArOTUxLDMzIEBACiAJCQkvKiBJZiB3ZSBnZXQgLUVOT0xDSyBiYWNrIHRoZSBsb2NrIG1heSBoYXZlCiAJCQkgICBhbHJlYWR5IGJlZW4gcmVtb3ZlZC4gRG9uJ3QgZXhpdCBpbiB0aGlzIGNhc2UuICovCiAJCQlpZiAocmMgJiYgcmMgIT0gLUVOT0xDSykgewotCQkJCURlbGV0ZU1pZFFFbnRyeShtaWRRKTsKKwkJCQlkZWxldGVfbWlkKG1pZFEpOwogCQkJCXJldHVybiByYzsKIAkJCX0KIAkJfQogCi0JCS8qIFdhaXQgNSBzZWNvbmRzIGZvciB0aGUgcmVzcG9uc2UuICovCi0JCWlmICh3YWl0X2Zvcl9yZXNwb25zZShzZXMsIG1pZFEsIDUgKiBIWiwgNSAqIEhaKSA9PSAwKSB7Ci0JCQkvKiBXZSBnb3QgdGhlIHJlc3BvbnNlIC0gcmVzdGFydCBzeXN0ZW0gY2FsbC4gKi8KLQkJCXJzdGFydCA9IDE7CisJCXJjID0gd2FpdF9mb3JfcmVzcG9uc2Uoc2VzLT5zZXJ2ZXIsIG1pZFEpOworCQlpZiAocmMpIHsKKwkJCXNlbmRfbnRfY2FuY2VsKHNlcy0+c2VydmVyLCBpbl9idWYsIG1pZFEpOworCQkJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCQlpZiAobWlkUS0+bWlkU3RhdGUgPT0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEKSB7CisJCQkJLyogbm8gbG9uZ2VyIGNvbnNpZGVyZWQgdG8gYmUgImluLWZsaWdodCIgKi8KKwkJCQltaWRRLT5jYWxsYmFjayA9IERlbGV0ZU1pZFFFbnRyeTsKKwkJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOworCQkJCXJldHVybiByYzsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJCX0KKworCQkvKiBXZSBnb3QgdGhlIHJlc3BvbnNlIC0gcmVzdGFydCBzeXN0ZW0gY2FsbC4gKi8KKwkJcnN0YXJ0ID0gMTsKIAl9CiAKLQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLQlpZiAobWlkUS0+cmVzcF9idWYpIHsKLQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLQkJcmVjZWl2ZV9sZW4gPSBtaWRRLT5yZXNwX2J1Zi0+c21iX2J1Zl9sZW5ndGg7Ci0JfSBlbHNlIHsKLQkJY0VSUk9SKDEsICJObyByZXNwb25zZSBmb3IgY21kICVkIG1pZCAlZCIsCi0JCQkgIG1pZFEtPmNvbW1hbmQsIG1pZFEtPm1pZCk7Ci0JCWlmIChtaWRRLT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpIHsKLQkJCWlmIChzZXMtPnNlcnZlci0+dGNwU3RhdHVzID09IENpZnNFeGl0aW5nKQotCQkJCXJjID0gLUVIT1NURE9XTjsKLQkJCWVsc2UgewotCQkJCXNlcy0+c2VydmVyLT50Y3BTdGF0dXMgPSBDaWZzTmVlZFJlY29ubmVjdDsKLQkJCQltaWRRLT5taWRTdGF0ZSA9IE1JRF9SRVRSWV9ORUVERUQ7Ci0JCQl9Ci0JCX0KLQotCQlpZiAocmMgIT0gLUVIT1NURE9XTikgewotCQkJaWYgKG1pZFEtPm1pZFN0YXRlID09IE1JRF9SRVRSWV9ORUVERUQpIHsKLQkJCQlyYyA9IC1FQUdBSU47Ci0JCQkJY0ZZSSgxLCAibWFya2luZyByZXF1ZXN0IGZvciByZXRyeSIpOwotCQkJfSBlbHNlIHsKLQkJCQlyYyA9IC1FSU87Ci0JCQl9Ci0JCX0KLQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLQkJRGVsZXRlTWlkUUVudHJ5KG1pZFEpOworCXJjID0gc3luY19taWRfcmVzdWx0KG1pZFEsIHNlcy0+c2VydmVyKTsKKwlpZiAocmMgIT0gMCkKIAkJcmV0dXJuIHJjOwotCX0KIAorCXJlY2VpdmVfbGVuID0gbWlkUS0+cmVzcF9idWYtPnNtYl9idWZfbGVuZ3RoOwogCWlmIChyZWNlaXZlX2xlbiA+IENJRlNNYXhCdWZTaXplICsgTUFYX0NJRlNfSERSX1NJWkUpIHsKIAkJY0VSUk9SKDEsICJGcmFtZSB0b28gbGFyZ2UgcmVjZWl2ZWQuICBMZW5ndGg6ICVkICBYaWQ6ICVkIiwKIAkJCXJlY2VpdmVfbGVuLCB4aWQpOwpAQCAtOTk4LDEwICsxMDIxLDEwIEBACiAJaWYgKHJlY2VpdmVfbGVuID49IHNpemVvZihzdHJ1Y3Qgc21iX2hkcikgLSA0CiAJICAgIC8qIGRvIG5vdCBjb3VudCBSRkMxMDAxIGhlYWRlciAqLyAgKwogCSAgICAoMiAqIG91dF9idWYtPldvcmRDb3VudCkgKyAyIC8qIGJjYyAqLyApCi0JCUJDQyhvdXRfYnVmKSA9IGxlMTZfdG9fY3B1KEJDQ19MRShvdXRfYnVmKSk7CisJCXB1dF9iY2MoZ2V0X2JjY19sZShvdXRfYnVmKSwgb3V0X2J1Zik7CiAKIG91dDoKLQlEZWxldGVNaWRRRW50cnkobWlkUSk7CisJZGVsZXRlX21pZChtaWRRKTsKIAlpZiAocnN0YXJ0ICYmIHJjID09IC1FQUNDRVMpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuYwppbmRleCA5ZjQ5M2VlLi4yYTZiZDlhIDEwMDY0NAotLS0gYS9mcy9kY2FjaGUuYworKysgYi9mcy9kY2FjaGUuYwpAQCAtMTc2LDYgKzE3Niw3IEBACiAKIC8qKgogICogZGVudHJ5X3JjdXdhbGtfYmFycmllciAtIGludmFsaWRhdGUgaW4tcHJvZ3Jlc3MgcmN1LXdhbGsgbG9va3VwcworICogQGRlbnRyeTogdGhlIHRhcmdldCBkZW50cnkKICAqIEFmdGVyIHRoaXMgY2FsbCwgaW4tcHJvZ3Jlc3MgcmN1LXdhbGsgcGF0aCBsb29rdXAgd2lsbCBmYWlsLiBUaGlzCiAgKiBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHVuaGFzaGluZywgYW5kIGFmdGVyIGNoYW5naW5nIGRfaW5vZGUgKGlmCiAgKiB0aGUgZGVudHJ5IGhhcyBub3QgYWxyZWFkeSBiZWVuIHVuaGFzaGVkKS4KQEAgLTI4MSw2ICsyODIsNyBAQAogLyoqCiAgKiBkX2tpbGwgLSBraWxsIGRlbnRyeSBhbmQgcmV0dXJuIHBhcmVudAogICogQGRlbnRyeTogZGVudHJ5IHRvIGtpbGwKKyAqIEBwYXJlbnQ6IHBhcmVudCBkZW50cnkKICAqCiAgKiBUaGUgZGVudHJ5IG11c3QgYWxyZWFkeSBiZSB1bmhhc2hlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBMUlUuCiAgKgpAQCAtMTk3Myw3ICsxOTc1LDcgQEAKIC8qKgogICogZF92YWxpZGF0ZSAtIHZlcmlmeSBkZW50cnkgcHJvdmlkZWQgZnJvbSBpbnNlY3VyZSBzb3VyY2UgKGRlcHJlY2F0ZWQpCiAgKiBAZGVudHJ5OiBUaGUgZGVudHJ5IGFsbGVnZWQgdG8gYmUgdmFsaWQgY2hpbGQgb2YgQGRwYXJlbnQKLSAqIEBwYXJlbnQ6IFRoZSBwYXJlbnQgZGVudHJ5IChrbm93biB0byBiZSB2YWxpZCkKKyAqIEBkcGFyZW50OiBUaGUgcGFyZW50IGRlbnRyeSAoa25vd24gdG8gYmUgdmFsaWQpCiAgKgogICogQW4gaW5zZWN1cmUgc291cmNlIGhhcyBzZW50IHVzIGEgZGVudHJ5LCBoZXJlIHdlIHZlcmlmeSBpdCBhbmQgZGdldCgpIGl0LgogICogVGhpcyBpcyB1c2VkIGJ5IG5jcGZzIGluIGl0cyByZWFkZGlyIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvZnMvZGlyZWN0LWlvLmMgYi9mcy9kaXJlY3QtaW8uYwppbmRleCA4NTg4MmY2Li5iMDQ0NzA1IDEwMDY0NAotLS0gYS9mcy9kaXJlY3QtaW8uYworKysgYi9mcy9kaXJlY3QtaW8uYwpAQCAtMzI1LDEyICszMjUsMTYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRpb19lbmRfaW8pOwogCi1zdGF0aWMgaW50CitzdGF0aWMgdm9pZAogZGlvX2Jpb19hbGxvYyhzdHJ1Y3QgZGlvICpkaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCiAJCXNlY3Rvcl90IGZpcnN0X3NlY3RvciwgaW50IG5yX3ZlY3MpCiB7CiAJc3RydWN0IGJpbyAqYmlvOwogCisJLyoKKwkgKiBiaW9fYWxsb2MoKSBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBhIGJpbyB3aGVuIGNhbGxlZCB3aXRoCisJICogX19HRlBfV0FJVCBhbmQgd2UgcmVxdWVzdCBhIHZhbGlkIG51bWJlciBvZiB2ZWN0b3JzLgorCSAqLwogCWJpbyA9IGJpb19hbGxvYyhHRlBfS0VSTkVMLCBucl92ZWNzKTsKIAogCWJpby0+YmlfYmRldiA9IGJkZXY7CkBAIC0zNDIsNyArMzQ2LDYgQEAKIAogCWRpby0+YmlvID0gYmlvOwogCWRpby0+bG9naWNhbF9vZmZzZXRfaW5fYmlvID0gZGlvLT5jdXJfcGFnZV9mc19vZmZzZXQ7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC01ODMsOCArNTg2LDkgQEAKIAkJZ290byBvdXQ7CiAJc2VjdG9yID0gc3RhcnRfc2VjdG9yIDw8IChkaW8tPmJsa2JpdHMgLSA5KTsKIAlucl9wYWdlcyA9IG1pbihkaW8tPnBhZ2VzX2luX2lvLCBiaW9fZ2V0X25yX3ZlY3MoZGlvLT5tYXBfYmguYl9iZGV2KSk7CisJbnJfcGFnZXMgPSBtaW4obnJfcGFnZXMsIEJJT19NQVhfUEFHRVMpOwogCUJVR19PTihucl9wYWdlcyA8PSAwKTsKLQlyZXQgPSBkaW9fYmlvX2FsbG9jKGRpbywgZGlvLT5tYXBfYmguYl9iZGV2LCBzZWN0b3IsIG5yX3BhZ2VzKTsKKwlkaW9fYmlvX2FsbG9jKGRpbywgZGlvLT5tYXBfYmguYl9iZGV2LCBzZWN0b3IsIG5yX3BhZ2VzKTsKIAlkaW8tPmJvdW5kYXJ5ID0gMDsKIG91dDoKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2xvd2NvbW1zLmMgYi9mcy9kbG0vbG93Y29tbXMuYwppbmRleCA5YzY0YWU5Li4yZDhjODdiIDEwMDY0NAotLS0gYS9mcy9kbG0vbG93Y29tbXMuYworKysgYi9mcy9kbG0vbG93Y29tbXMuYwpAQCAtMTQ2OCwxNSArMTQ2OCwxMyBAQAogCiBzdGF0aWMgaW50IHdvcmtfc3RhcnQodm9pZCkKIHsKLQlyZWN2X3dvcmtxdWV1ZSA9IGFsbG9jX3dvcmtxdWV1ZSgiZGxtX3JlY3YiLCBXUV9NRU1fUkVDTEFJTSB8Ci0JCQkJCSBXUV9ISUdIUFJJIHwgV1FfRlJFRVpFQUJMRSwgMCk7CisJcmVjdl93b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiZGxtX3JlY3YiKTsKIAlpZiAoIXJlY3Zfd29ya3F1ZXVlKSB7CiAJCWxvZ19wcmludCgiY2FuJ3Qgc3RhcnQgZGxtX3JlY3YiKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0Jc2VuZF93b3JrcXVldWUgPSBhbGxvY193b3JrcXVldWUoImRsbV9zZW5kIiwgV1FfTUVNX1JFQ0xBSU0gfAotCQkJCQkgV1FfSElHSFBSSSB8IFdRX0ZSRUVaRUFCTEUsIDApOworCXNlbmRfd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImRsbV9zZW5kIik7CiAJaWYgKCFzZW5kX3dvcmtxdWV1ZSkgewogCQlsb2dfcHJpbnQoImNhbid0IHN0YXJ0IGRsbV9zZW5kIik7CiAJCWRlc3Ryb3lfd29ya3F1ZXVlKHJlY3Zfd29ya3F1ZXVlKTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2RlbnRyeS5jIGIvZnMvZWNyeXB0ZnMvZGVudHJ5LmMKaW5kZXggNmZjNGYzMS4uNTM0YzFkNCAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvZGVudHJ5LmMKKysrIGIvZnMvZWNyeXB0ZnMvZGVudHJ5LmMKQEAgLTQ2LDI0ICs0NiwyOCBAQAogewogCXN0cnVjdCBkZW50cnkgKmxvd2VyX2RlbnRyeTsKIAlzdHJ1Y3QgdmZzbW91bnQgKmxvd2VyX21udDsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnlfc2F2ZTsKLQlzdHJ1Y3QgdmZzbW91bnQgKnZmc21vdW50X3NhdmU7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5X3NhdmUgPSBOVUxMOworCXN0cnVjdCB2ZnNtb3VudCAqdmZzbW91bnRfc2F2ZSA9IE5VTEw7CiAJaW50IHJjID0gMTsKIAotCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKQorCWlmIChuZCAmJiBuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKQogCQlyZXR1cm4gLUVDSElMRDsKIAogCWxvd2VyX2RlbnRyeSA9IGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcihkZW50cnkpOwogCWxvd2VyX21udCA9IGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcl9tbnQoZGVudHJ5KTsKIAlpZiAoIWxvd2VyX2RlbnRyeS0+ZF9vcCB8fCAhbG93ZXJfZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUpCiAJCWdvdG8gb3V0OwotCWRlbnRyeV9zYXZlID0gbmQtPnBhdGguZGVudHJ5OwotCXZmc21vdW50X3NhdmUgPSBuZC0+cGF0aC5tbnQ7Ci0JbmQtPnBhdGguZGVudHJ5ID0gbG93ZXJfZGVudHJ5OwotCW5kLT5wYXRoLm1udCA9IGxvd2VyX21udDsKKwlpZiAobmQpIHsKKwkJZGVudHJ5X3NhdmUgPSBuZC0+cGF0aC5kZW50cnk7CisJCXZmc21vdW50X3NhdmUgPSBuZC0+cGF0aC5tbnQ7CisJCW5kLT5wYXRoLmRlbnRyeSA9IGxvd2VyX2RlbnRyeTsKKwkJbmQtPnBhdGgubW50ID0gbG93ZXJfbW50OworCX0KIAlyYyA9IGxvd2VyX2RlbnRyeS0+ZF9vcC0+ZF9yZXZhbGlkYXRlKGxvd2VyX2RlbnRyeSwgbmQpOwotCW5kLT5wYXRoLmRlbnRyeSA9IGRlbnRyeV9zYXZlOwotCW5kLT5wYXRoLm1udCA9IHZmc21vdW50X3NhdmU7CisJaWYgKG5kKSB7CisJCW5kLT5wYXRoLmRlbnRyeSA9IGRlbnRyeV9zYXZlOworCQluZC0+cGF0aC5tbnQgPSB2ZnNtb3VudF9zYXZlOworCX0KIAlpZiAoZGVudHJ5LT5kX2lub2RlKSB7CiAJCXN0cnVjdCBpbm9kZSAqbG93ZXJfaW5vZGUgPQogCQkJZWNyeXB0ZnNfaW5vZGVfdG9fbG93ZXIoZGVudHJ5LT5kX2lub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oIGIvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgKaW5kZXggZGJjODRlZC4uZTAwNzUzNCAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgKKysrIGIvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgKQEAgLTYzMiw4ICs2MzIsNyBAQAogCQkgICAgICAgdTMyIGZsYWdzKTsKIGludCBlY3J5cHRmc19sb29rdXBfYW5kX2ludGVycG9zZV9sb3dlcihzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnksCiAJCQkJCXN0cnVjdCBkZW50cnkgKmxvd2VyX2RlbnRyeSwKLQkJCQkJc3RydWN0IGlub2RlICplY3J5cHRmc19kaXJfaW5vZGUsCi0JCQkJCXN0cnVjdCBuYW1laWRhdGEgKmVjcnlwdGZzX25kKTsKKwkJCQkJc3RydWN0IGlub2RlICplY3J5cHRmc19kaXJfaW5vZGUpOwogaW50IGVjcnlwdGZzX2RlY29kZV9hbmRfZGVjcnlwdF9maWxlbmFtZShjaGFyICoqZGVjcnlwdGVkX25hbWUsCiAJCQkJCSBzaXplX3QgKmRlY3J5cHRlZF9uYW1lX3NpemUsCiAJCQkJCSBzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnksCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9maWxlLmMgYi9mcy9lY3J5cHRmcy9maWxlLmMKaW5kZXggODFlMTBlNi4uN2QxMDUwZSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvZmlsZS5jCisrKyBiL2ZzL2VjcnlwdGZzL2ZpbGUuYwpAQCAtMzE3LDYgKzMxNyw3IEBACiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZWNyeXB0ZnNfZGlyX2ZvcHMgPSB7CiAJLnJlYWRkaXIgPSBlY3J5cHRmc19yZWFkZGlyLAorCS5yZWFkID0gZ2VuZXJpY19yZWFkX2RpciwKIAkudW5sb2NrZWRfaW9jdGwgPSBlY3J5cHRmc191bmxvY2tlZF9pb2N0bCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bCA9IGVjcnlwdGZzX2NvbXBhdF9pb2N0bCwKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2lub2RlLmMgYi9mcy9lY3J5cHRmcy9pbm9kZS5jCmluZGV4IGJkMzNmODcuLmI1OTI5MzggMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2lub2RlLmMKKysrIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwpAQCAtNzQsMTYgKzc0LDIwIEBACiAJdW5zaWduZWQgaW50IGZsYWdzX3NhdmU7CiAJaW50IHJjOwogCi0JZGVudHJ5X3NhdmUgPSBuZC0+cGF0aC5kZW50cnk7Ci0JdmZzbW91bnRfc2F2ZSA9IG5kLT5wYXRoLm1udDsKLQlmbGFnc19zYXZlID0gbmQtPmZsYWdzOwotCW5kLT5wYXRoLmRlbnRyeSA9IGxvd2VyX2RlbnRyeTsKLQluZC0+cGF0aC5tbnQgPSBsb3dlcl9tbnQ7Ci0JbmQtPmZsYWdzICY9IH5MT09LVVBfT1BFTjsKKwlpZiAobmQpIHsKKwkJZGVudHJ5X3NhdmUgPSBuZC0+cGF0aC5kZW50cnk7CisJCXZmc21vdW50X3NhdmUgPSBuZC0+cGF0aC5tbnQ7CisJCWZsYWdzX3NhdmUgPSBuZC0+ZmxhZ3M7CisJCW5kLT5wYXRoLmRlbnRyeSA9IGxvd2VyX2RlbnRyeTsKKwkJbmQtPnBhdGgubW50ID0gbG93ZXJfbW50OworCQluZC0+ZmxhZ3MgJj0gfkxPT0tVUF9PUEVOOworCX0KIAlyYyA9IHZmc19jcmVhdGUobG93ZXJfZGlyX2lub2RlLCBsb3dlcl9kZW50cnksIG1vZGUsIG5kKTsKLQluZC0+cGF0aC5kZW50cnkgPSBkZW50cnlfc2F2ZTsKLQluZC0+cGF0aC5tbnQgPSB2ZnNtb3VudF9zYXZlOwotCW5kLT5mbGFncyA9IGZsYWdzX3NhdmU7CisJaWYgKG5kKSB7CisJCW5kLT5wYXRoLmRlbnRyeSA9IGRlbnRyeV9zYXZlOworCQluZC0+cGF0aC5tbnQgPSB2ZnNtb3VudF9zYXZlOworCQluZC0+ZmxhZ3MgPSBmbGFnc19zYXZlOworCX0KIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTI0MSw4ICsyNDUsNyBAQAogICovCiBpbnQgZWNyeXB0ZnNfbG9va3VwX2FuZF9pbnRlcnBvc2VfbG93ZXIoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LAogCQkJCQlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnksCi0JCQkJCXN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfZGlyX2lub2RlLAotCQkJCQlzdHJ1Y3QgbmFtZWlkYXRhICplY3J5cHRmc19uZCkKKwkJCQkJc3RydWN0IGlub2RlICplY3J5cHRmc19kaXJfaW5vZGUpCiB7CiAJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGlyX2RlbnRyeTsKIAlzdHJ1Y3QgdmZzbW91bnQgKmxvd2VyX21udDsKQEAgLTI5MCw4ICsyOTMsNiBAQAogCQlnb3RvIG91dDsKIAlpZiAoc3BlY2lhbF9maWxlKGxvd2VyX2lub2RlLT5pX21vZGUpKQogCQlnb3RvIG91dDsKLQlpZiAoIWVjcnlwdGZzX25kKQotCQlnb3RvIG91dDsKIAkvKiBSZWxlYXNlZCBpbiB0aGlzIGZ1bmN0aW9uICovCiAJcGFnZV92aXJ0ID0ga21lbV9jYWNoZV96YWxsb2MoZWNyeXB0ZnNfaGVhZGVyX2NhY2hlXzIsIEdGUF9VU0VSKTsKIAlpZiAoIXBhZ2VfdmlydCkgewpAQCAtMzQ5LDc1ICszNTAsNiBAQAogfQogCiAvKioKLSAqIGVjcnlwdGZzX25ld19sb3dlcl9kZW50cnkKLSAqIEBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgbmV3IGRlbnRyeS4KLSAqIEBsb3dlcl9kaXJfZGVudHJ5OiBQYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBuZXcgZGVudHJ5LgotICogQG5kOiBuYW1laWRhdGEgZnJvbSBsYXN0IGxvb2t1cC4KLSAqCi0gKiBDcmVhdGUgYSBuZXcgZGVudHJ5IG9yIGdldCBpdCBmcm9tIGxvd2VyIHBhcmVudCBkaXIuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICoKLWVjcnlwdGZzX25ld19sb3dlcl9kZW50cnkoc3RydWN0IHFzdHIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKmxvd2VyX2Rpcl9kZW50cnksCi0JCQkgIHN0cnVjdCBuYW1laWRhdGEgKm5kKQotewotCXN0cnVjdCBkZW50cnkgKm5ld19kZW50cnk7Ci0Jc3RydWN0IGRlbnRyeSAqdG1wOwotCXN0cnVjdCBpbm9kZSAqbG93ZXJfZGlyX2lub2RlOwotCi0JbG93ZXJfZGlyX2lub2RlID0gbG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZTsKLQotCXRtcCA9IGRfYWxsb2MobG93ZXJfZGlyX2RlbnRyeSwgbmFtZSk7Ci0JaWYgKCF0bXApCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JbXV0ZXhfbG9jaygmbG93ZXJfZGlyX2lub2RlLT5pX211dGV4KTsKLQluZXdfZGVudHJ5ID0gbG93ZXJfZGlyX2lub2RlLT5pX29wLT5sb29rdXAobG93ZXJfZGlyX2lub2RlLCB0bXAsIG5kKTsKLQltdXRleF91bmxvY2soJmxvd2VyX2Rpcl9pbm9kZS0+aV9tdXRleCk7Ci0KLQlpZiAoIW5ld19kZW50cnkpCi0JCW5ld19kZW50cnkgPSB0bXA7Ci0JZWxzZQotCQlkcHV0KHRtcCk7Ci0KLQlyZXR1cm4gbmV3X2RlbnRyeTsKLX0KLQotCi0vKioKLSAqIGVjcnlwdGZzX2xvb2t1cF9vbmVfbG93ZXIKLSAqIEBlY3J5cHRmc19kZW50cnk6IFRoZSBlQ3J5cHRmcyBkZW50cnkgdGhhdCB3ZSBhcmUgbG9va2luZyB1cAotICogQGxvd2VyX2Rpcl9kZW50cnk6IGxvd2VyIHBhcmVudCBkaXJlY3RvcnkKLSAqIEBuYW1lOiBsb3dlciBmaWxlIG5hbWUKLSAqCi0gKiBHZXQgdGhlIGxvd2VyIGRlbnRyeSBmcm9tIHZmcy4gSWYgbG93ZXIgZGVudHJ5IGRvZXMgbm90IGV4aXN0IHlldCwKLSAqIGNyZWF0ZSBpdC4KLSAqLwotc3RhdGljIHN0cnVjdCBkZW50cnkgKgotZWNyeXB0ZnNfbG9va3VwX29uZV9sb3dlcihzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnksCi0JCQkgIHN0cnVjdCBkZW50cnkgKmxvd2VyX2Rpcl9kZW50cnksIHN0cnVjdCBxc3RyICpuYW1lKQotewotCXN0cnVjdCBuYW1laWRhdGEgbmQ7Ci0Jc3RydWN0IHZmc21vdW50ICpsb3dlcl9tbnQ7Ci0JaW50IGVycjsKLQotCWxvd2VyX21udCA9IG1udGdldChlY3J5cHRmc19kZW50cnlfdG9fbG93ZXJfbW50KAotCQkJCSAgICBlY3J5cHRmc19kZW50cnktPmRfcGFyZW50KSk7Ci0JZXJyID0gdmZzX3BhdGhfbG9va3VwKGxvd2VyX2Rpcl9kZW50cnksIGxvd2VyX21udCwgbmFtZS0+bmFtZSAsIDAsICZuZCk7Ci0JbW50cHV0KGxvd2VyX21udCk7Ci0KLQlpZiAoIWVycikgewotCQkvKiB3ZSBkb250IG5lZWQgdGhlIG1vdW50ICovCi0JCW1udHB1dChuZC5wYXRoLm1udCk7Ci0JCXJldHVybiBuZC5wYXRoLmRlbnRyeTsKLQl9Ci0JaWYgKGVyciAhPSAtRU5PRU5UKQotCQlyZXR1cm4gRVJSX1BUUihlcnIpOwotCi0JLyogY3JlYXRlIGEgbmV3IGxvd2VyIGRlbnRyeSAqLwotCXJldHVybiBlY3J5cHRmc19uZXdfbG93ZXJfZGVudHJ5KG5hbWUsIGxvd2VyX2Rpcl9kZW50cnksICZuZCk7Ci19Ci0KLS8qKgogICogZWNyeXB0ZnNfbG9va3VwCiAgKiBAZWNyeXB0ZnNfZGlyX2lub2RlOiBUaGUgZUNyeXB0ZnMgZGlyZWN0b3J5IGlub2RlCiAgKiBAZWNyeXB0ZnNfZGVudHJ5OiBUaGUgZUNyeXB0ZnMgZGVudHJ5IHRoYXQgd2UgYXJlIGxvb2tpbmcgdXAKQEAgLTQzNCw3ICszNjYsNiBAQAogCXNpemVfdCBlbmNyeXB0ZWRfYW5kX2VuY29kZWRfbmFtZV9zaXplOwogCXN0cnVjdCBlY3J5cHRmc19tb3VudF9jcnlwdF9zdGF0ICptb3VudF9jcnlwdF9zdGF0ID0gTlVMTDsKIAlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kaXJfZGVudHJ5LCAqbG93ZXJfZGVudHJ5OwotCXN0cnVjdCBxc3RyIGxvd2VyX25hbWU7CiAJaW50IHJjID0gMDsKIAogCWlmICgoZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubGVuID09IDEKQEAgLTQ0NCwyMCArMzc1LDE0IEBACiAJCWdvdG8gb3V0X2RfZHJvcDsKIAl9CiAJbG93ZXJfZGlyX2RlbnRyeSA9IGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcihlY3J5cHRmc19kZW50cnktPmRfcGFyZW50KTsKLQlsb3dlcl9uYW1lLm5hbWUgPSBlY3J5cHRmc19kZW50cnktPmRfbmFtZS5uYW1lOwotCWxvd2VyX25hbWUubGVuID0gZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubGVuOwotCWxvd2VyX25hbWUuaGFzaCA9IGVjcnlwdGZzX2RlbnRyeS0+ZF9uYW1lLmhhc2g7Ci0JaWYgKGxvd2VyX2Rpcl9kZW50cnktPmRfb3AgJiYgbG93ZXJfZGlyX2RlbnRyeS0+ZF9vcC0+ZF9oYXNoKSB7Ci0JCXJjID0gbG93ZXJfZGlyX2RlbnRyeS0+ZF9vcC0+ZF9oYXNoKGxvd2VyX2Rpcl9kZW50cnksCi0JCQkJbG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZSwgJmxvd2VyX25hbWUpOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBvdXRfZF9kcm9wOwotCX0KLQlsb3dlcl9kZW50cnkgPSBlY3J5cHRmc19sb29rdXBfb25lX2xvd2VyKGVjcnlwdGZzX2RlbnRyeSwKLQkJCQkJCSBsb3dlcl9kaXJfZGVudHJ5LCAmbG93ZXJfbmFtZSk7CisJbXV0ZXhfbG9jaygmbG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJbG93ZXJfZGVudHJ5ID0gbG9va3VwX29uZV9sZW4oZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJCQkgICAgICBsb3dlcl9kaXJfZGVudHJ5LAorCQkJCSAgICAgIGVjcnlwdGZzX2RlbnRyeS0+ZF9uYW1lLmxlbik7CisJbXV0ZXhfdW5sb2NrKCZsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlpZiAoSVNfRVJSKGxvd2VyX2RlbnRyeSkpIHsKIAkJcmMgPSBQVFJfRVJSKGxvd2VyX2RlbnRyeSk7Ci0JCWVjcnlwdGZzX3ByaW50ayhLRVJOX0RFQlVHLCAiJXM6IGxvb2t1cF9vbmVfbG93ZXIoKSByZXR1cm5lZCAiCisJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0RFQlVHLCAiJXM6IGxvb2t1cF9vbmVfbGVuKCkgcmV0dXJuZWQgIgogCQkJCSJbJWRdIG9uIGxvd2VyX2RlbnRyeSA9IFslc11cbiIsIF9fZnVuY19fLCByYywKIAkJCQllbmNyeXB0ZWRfYW5kX2VuY29kZWRfbmFtZSk7CiAJCWdvdG8gb3V0X2RfZHJvcDsKQEAgLTQ3OSwyOCArNDA0LDIxIEBACiAJCSAgICAgICAiZmlsZW5hbWU7IHJjID0gWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKIAkJZ290byBvdXRfZF9kcm9wOwogCX0KLQlsb3dlcl9uYW1lLm5hbWUgPSBlbmNyeXB0ZWRfYW5kX2VuY29kZWRfbmFtZTsKLQlsb3dlcl9uYW1lLmxlbiA9IGVuY3J5cHRlZF9hbmRfZW5jb2RlZF9uYW1lX3NpemU7Ci0JbG93ZXJfbmFtZS5oYXNoID0gZnVsbF9uYW1lX2hhc2gobG93ZXJfbmFtZS5uYW1lLCBsb3dlcl9uYW1lLmxlbik7Ci0JaWYgKGxvd2VyX2Rpcl9kZW50cnktPmRfb3AgJiYgbG93ZXJfZGlyX2RlbnRyeS0+ZF9vcC0+ZF9oYXNoKSB7Ci0JCXJjID0gbG93ZXJfZGlyX2RlbnRyeS0+ZF9vcC0+ZF9oYXNoKGxvd2VyX2Rpcl9kZW50cnksCi0JCQkJbG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZSwgJmxvd2VyX25hbWUpOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBvdXRfZF9kcm9wOwotCX0KLQlsb3dlcl9kZW50cnkgPSBlY3J5cHRmc19sb29rdXBfb25lX2xvd2VyKGVjcnlwdGZzX2RlbnRyeSwKLQkJCQkJCSBsb3dlcl9kaXJfZGVudHJ5LCAmbG93ZXJfbmFtZSk7CisJbXV0ZXhfbG9jaygmbG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJbG93ZXJfZGVudHJ5ID0gbG9va3VwX29uZV9sZW4oZW5jcnlwdGVkX2FuZF9lbmNvZGVkX25hbWUsCisJCQkJICAgICAgbG93ZXJfZGlyX2RlbnRyeSwKKwkJCQkgICAgICBlbmNyeXB0ZWRfYW5kX2VuY29kZWRfbmFtZV9zaXplKTsKKwltdXRleF91bmxvY2soJmxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChJU19FUlIobG93ZXJfZGVudHJ5KSkgewogCQlyYyA9IFBUUl9FUlIobG93ZXJfZGVudHJ5KTsKLQkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fREVCVUcsICIlczogbG9va3VwX29uZV9sb3dlcigpIHJldHVybmVkICIKKwkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fREVCVUcsICIlczogbG9va3VwX29uZV9sZW4oKSByZXR1cm5lZCAiCiAJCQkJIlslZF0gb24gbG93ZXJfZGVudHJ5ID0gWyVzXVxuIiwgX19mdW5jX18sIHJjLAogCQkJCWVuY3J5cHRlZF9hbmRfZW5jb2RlZF9uYW1lKTsKIAkJZ290byBvdXRfZF9kcm9wOwogCX0KIGxvb2t1cF9hbmRfaW50ZXJwb3NlOgogCXJjID0gZWNyeXB0ZnNfbG9va3VwX2FuZF9pbnRlcnBvc2VfbG93ZXIoZWNyeXB0ZnNfZGVudHJ5LCBsb3dlcl9kZW50cnksCi0JCQkJCQkgZWNyeXB0ZnNfZGlyX2lub2RlLAotCQkJCQkJIGVjcnlwdGZzX25kKTsKKwkJCQkJCSBlY3J5cHRmc19kaXJfaW5vZGUpOwogCWdvdG8gb3V0Owogb3V0X2RfZHJvcDoKIAlkX2Ryb3AoZWNyeXB0ZnNfZGVudHJ5KTsKQEAgLTEwOTIsNiArMTAxMCw4IEBACiAJcmMgPSB2ZnNfZ2V0YXR0cihlY3J5cHRmc19kZW50cnlfdG9fbG93ZXJfbW50KGRlbnRyeSksCiAJCQkgZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyKGRlbnRyeSksICZsb3dlcl9zdGF0KTsKIAlpZiAoIXJjKSB7CisJCWZzc3RhY2tfY29weV9hdHRyX2FsbChkZW50cnktPmRfaW5vZGUsCisJCQkJICAgICAgZWNyeXB0ZnNfaW5vZGVfdG9fbG93ZXIoZGVudHJ5LT5kX2lub2RlKSk7CiAJCWdlbmVyaWNfZmlsbGF0dHIoZGVudHJ5LT5kX2lub2RlLCBzdGF0KTsKIAkJc3RhdC0+YmxvY2tzID0gbG93ZXJfc3RhdC5ibG9ja3M7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRmZC5jIGIvZnMvZXZlbnRmZC5jCmluZGV4IGUwMTk0YjMuLmQ5YTU5MTcgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50ZmQuYworKysgYi9mcy9ldmVudGZkLmMKQEAgLTk5LDcgKzk5LDcgQEAKICAqIEBjdHg6IFtpbl0gUG9pbnRlciB0byBldmVudGZkIGNvbnRleHQuCiAgKgogICogVGhlIGV2ZW50ZmQgY29udGV4dCByZWZlcmVuY2UgbXVzdCBoYXZlIGJlZW4gcHJldmlvdXNseSBhY3F1aXJlZCBlaXRoZXIKLSAqIHdpdGggZXZlbnRmZF9jdHhfZ2V0KCkgb3IgZXZlbnRmZF9jdHhfZmRnZXQoKSkuCisgKiB3aXRoIGV2ZW50ZmRfY3R4X2dldCgpIG9yIGV2ZW50ZmRfY3R4X2ZkZ2V0KCkuCiAgKi8KIHZvaWQgZXZlbnRmZF9jdHhfcHV0KHN0cnVjdCBldmVudGZkX2N0eCAqY3R4KQogewpAQCAtMTQ2LDkgKzE0Niw5IEBACiAgKiBldmVudGZkX2N0eF9yZW1vdmVfd2FpdF9xdWV1ZSAtIFJlYWQgdGhlIGN1cnJlbnQgY291bnRlciBhbmQgcmVtb3ZlcyB3YWl0IHF1ZXVlLgogICogQGN0eDogW2luXSBQb2ludGVyIHRvIGV2ZW50ZmQgY29udGV4dC4KICAqIEB3YWl0OiBbaW5dIFdhaXQgcXVldWUgdG8gYmUgcmVtb3ZlZC4KLSAqIEBjbnQ6IFtvdXRdIFBvaW50ZXIgdG8gdGhlIDY0Yml0IGNvbnRlciB2YWx1ZS4KKyAqIEBjbnQ6IFtvdXRdIFBvaW50ZXIgdG8gdGhlIDY0LWJpdCBjb3VudGVyIHZhbHVlLgogICoKLSAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLCBvciB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOgorICogUmV0dXJucyAlMCBpZiBzdWNjZXNzZnVsLCBvciB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOgogICoKICAqIC1FQUdBSU4gICAgICA6IFRoZSBvcGVyYXRpb24gd291bGQgaGF2ZSBibG9ja2VkLgogICoKQEAgLTE3NSwxMSArMTc1LDExIEBACiAgKiBldmVudGZkX2N0eF9yZWFkIC0gUmVhZHMgdGhlIGV2ZW50ZmQgY291bnRlciBvciB3YWl0IGlmIGl0IGlzIHplcm8uCiAgKiBAY3R4OiBbaW5dIFBvaW50ZXIgdG8gZXZlbnRmZCBjb250ZXh0LgogICogQG5vX3dhaXQ6IFtpbl0gRGlmZmVyZW50IGZyb20gemVybyBpZiB0aGUgb3BlcmF0aW9uIHNob3VsZCBub3QgYmxvY2suCi0gKiBAY250OiBbb3V0XSBQb2ludGVyIHRvIHRoZSA2NGJpdCBjb250ZXIgdmFsdWUuCisgKiBAY250OiBbb3V0XSBQb2ludGVyIHRvIHRoZSA2NC1iaXQgY291bnRlciB2YWx1ZS4KICAqCi0gKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3IgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczoKKyAqIFJldHVybnMgJTAgaWYgc3VjY2Vzc2Z1bCwgb3IgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczoKICAqCi0gKiAtRUFHQUlOICAgICAgOiBUaGUgb3BlcmF0aW9uIHdvdWxkIGhhdmUgYmxvY2tlZCBidXQgQG5vX3dhaXQgd2FzIG5vbnplcm8uCisgKiAtRUFHQUlOICAgICAgOiBUaGUgb3BlcmF0aW9uIHdvdWxkIGhhdmUgYmxvY2tlZCBidXQgQG5vX3dhaXQgd2FzIG5vbi16ZXJvLgogICogLUVSRVNUQVJUU1lTIDogQSBzaWduYWwgaW50ZXJydXB0ZWQgdGhlIHdhaXQgb3BlcmF0aW9uLgogICoKICAqIElmIEBub193YWl0IGlzIHplcm8sIHRoZSBmdW5jdGlvbiBtaWdodCBzbGVlcCB1bnRpbCB0aGUgZXZlbnRmZCBpbnRlcm5hbApkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCBjYzhhOWI3Li40YTA5YWY5IDEwMDY0NAotLS0gYS9mcy9ldmVudHBvbGwuYworKysgYi9mcy9ldmVudHBvbGwuYwpAQCAtNjMsNiArNjMsMTMgQEAKICAqIGNsZWFudXAgcGF0aCBhbmQgaXQgaXMgYWxzbyBhY3F1aXJlZCBieSBldmVudHBvbGxfcmVsZWFzZV9maWxlKCkKICAqIGlmIGEgZmlsZSBoYXMgYmVlbiBwdXNoZWQgaW5zaWRlIGFuIGVwb2xsIHNldCBhbmQgaXQgaXMgdGhlbgogICogY2xvc2UoKWQgd2l0aG91dCBhIHByZXZpb3VzIGNhbGwgdG9lcG9sbF9jdGwoRVBPTExfQ1RMX0RFTCkuCisgKiBJdCBpcyBhbHNvIGFjcXVpcmVkIHdoZW4gaW5zZXJ0aW5nIGFuIGVwb2xsIGZkIG9udG8gYW5vdGhlciBlcG9sbAorICogZmQuIFdlIGRvIHRoaXMgc28gdGhhdCB3ZSB3YWxrIHRoZSBlcG9sbCB0cmVlIGFuZCBlbnN1cmUgdGhhdCB0aGlzCisgKiBpbnNlcnRpb24gZG9lcyBub3QgY3JlYXRlIGEgY3ljbGUgb2YgZXBvbGwgZmlsZSBkZXNjcmlwdG9ycywgd2hpY2gKKyAqIGNvdWxkIGxlYWQgdG8gZGVhZGxvY2suIFdlIG5lZWQgYSBnbG9iYWwgbXV0ZXggdG8gcHJldmVudCB0d28KKyAqIHNpbXVsdGFuZW91cyBpbnNlcnRzIChBIGludG8gQiBhbmQgQiBpbnRvIEEpIGZyb20gcmFjaW5nIGFuZAorICogY29uc3RydWN0aW5nIGEgY3ljbGUgd2l0aG91dCBlaXRoZXIgaW5zZXJ0IG9ic2VydmluZyB0aGF0IGl0IGlzCisgKiBnb2luZyB0by4KICAqIEl0IGlzIHBvc3NpYmxlIHRvIGRyb3AgdGhlICJlcC0+bXR4IiBhbmQgdG8gdXNlIHRoZSBnbG9iYWwKICAqIG11dGV4ICJlcG11dGV4IiAodG9nZXRoZXIgd2l0aCAiZXAtPmxvY2siKSB0byBoYXZlIGl0IHdvcmtpbmcsCiAgKiBidXQgaGF2aW5nICJlcC0+bXR4IiB3aWxsIG1ha2UgdGhlIGludGVyZmFjZSBtb3JlIHNjYWxhYmxlLgpAQCAtMjI0LDYgKzIzMSw5IEBACiAgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgoZXBtdXRleCk7CiAKKy8qIFVzZWQgdG8gY2hlY2sgZm9yIGVwb2xsIGZpbGUgZGVzY3JpcHRvciBpbmNsdXNpb24gbG9vcHMgKi8KK3N0YXRpYyBzdHJ1Y3QgbmVzdGVkX2NhbGxzIHBvbGxfbG9vcF9uY2FsbHM7CisKIC8qIFVzZWQgZm9yIHNhZmUgd2FrZSB1cCBpbXBsZW1lbnRhdGlvbiAqLwogc3RhdGljIHN0cnVjdCBuZXN0ZWRfY2FsbHMgcG9sbF9zYWZld2FrZV9uY2FsbHM7CiAKQEAgLTExMTQsNiArMTEyNCwxNyBAQAogCXJldHVybiBlcF9zY2FuX3JlYWR5X2xpc3QoZXAsIGVwX3NlbmRfZXZlbnRzX3Byb2MsICZlc2VkKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgdGltZXNwZWMgZXBfc2V0X21zdGltZW91dChsb25nIG1zKQoreworCXN0cnVjdCB0aW1lc3BlYyBub3csIHRzID0geworCQkudHZfc2VjID0gbXMgLyBNU0VDX1BFUl9TRUMsCisJCS50dl9uc2VjID0gTlNFQ19QRVJfTVNFQyAqIChtcyAlIE1TRUNfUEVSX1NFQyksCisJfTsKKworCWt0aW1lX2dldF90cygmbm93KTsKKwlyZXR1cm4gdGltZXNwZWNfYWRkX3NhZmUobm93LCB0cyk7Cit9CisKIHN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLAogCQkgICBpbnQgbWF4ZXZlbnRzLCBsb25nIHRpbWVvdXQpCiB7CkBAIC0xMTIxLDEyICsxMTQyLDExIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlsb25nIHNsYWNrOwogCXdhaXRfcXVldWVfdCB3YWl0OwotCXN0cnVjdCB0aW1lc3BlYyBlbmRfdGltZTsKIAlrdGltZV90IGV4cGlyZXMsICp0byA9IE5VTEw7CiAKIAlpZiAodGltZW91dCA+IDApIHsKLQkJa3RpbWVfZ2V0X3RzKCZlbmRfdGltZSk7Ci0JCXRpbWVzcGVjX2FkZF9ucygmZW5kX3RpbWUsICh1NjQpdGltZW91dCAqIE5TRUNfUEVSX01TRUMpOworCQlzdHJ1Y3QgdGltZXNwZWMgZW5kX3RpbWUgPSBlcF9zZXRfbXN0aW1lb3V0KHRpbWVvdXQpOworCiAJCXNsYWNrID0gc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5KCZlbmRfdGltZSk7CiAJCXRvID0gJmV4cGlyZXM7CiAJCSp0byA9IHRpbWVzcGVjX3RvX2t0aW1lKGVuZF90aW1lKTsKQEAgLTExODgsNiArMTIwOCw2MiBAQAogCXJldHVybiByZXM7CiB9CiAKKy8qKgorICogZXBfbG9vcF9jaGVja19wcm9jIC0gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgcGFzc2VkIHRvIHRoZSBAZXBfY2FsbF9uZXN0ZWQoKQorICogICAgICAgICAgICAgICAgICAgICAgQVBJLCB0byB2ZXJpZnkgdGhhdCBhZGRpbmcgYW4gZXBvbGwgZmlsZSBpbnNpZGUgYW5vdGhlcgorICogICAgICAgICAgICAgICAgICAgICAgZXBvbGwgc3RydWN0dXJlLCBkb2VzIG5vdCB2aW9sYXRlIHRoZSBjb25zdHJhaW50cywgaW4KKyAqICAgICAgICAgICAgICAgICAgICAgIHRlcm1zIG9mIGNsb3NlZCBsb29wcywgb3IgdG9vIGRlZXAgY2hhaW5zICh3aGljaCBjYW4KKyAqICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCBpbiBleGNlc3NpdmUgc3RhY2sgdXNhZ2UpLgorICoKKyAqIEBwcml2OiBQb2ludGVyIHRvIHRoZSBlcG9sbCBmaWxlIHRvIGJlIGN1cnJlbnRseSBjaGVja2VkLgorICogQGNvb2tpZTogT3JpZ2luYWwgY29va2llIGZvciB0aGlzIGNhbGwuIFRoaXMgaXMgdGhlIHRvcC1vZi10aGUtY2hhaW4gZXBvbGwKKyAqICAgICAgICAgIGRhdGEgc3RydWN0dXJlIHBvaW50ZXIuCisgKiBAY2FsbF9uZXN0czogQ3VycmVudCBkZXB0IG9mIHRoZSBAZXBfY2FsbF9uZXN0ZWQoKSBjYWxsIHN0YWNrLgorICoKKyAqIFJldHVybnM6IFJldHVybnMgemVybyBpZiBhZGRpbmcgdGhlIGVwb2xsIEBmaWxlIGluc2lkZSBjdXJyZW50IGVwb2xsCisgKiAgICAgICAgICBzdHJ1Y3R1cmUgQGVwIGRvZXMgbm90IHZpb2xhdGUgdGhlIGNvbnN0cmFpbnRzLCBvciAtMSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgZXBfbG9vcF9jaGVja19wcm9jKHZvaWQgKnByaXYsIHZvaWQgKmNvb2tpZSwgaW50IGNhbGxfbmVzdHMpCit7CisJaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHByaXY7CisJc3RydWN0IGV2ZW50cG9sbCAqZXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHJiX25vZGUgKnJicDsKKwlzdHJ1Y3QgZXBpdGVtICplcGk7CisKKwltdXRleF9sb2NrKCZlcC0+bXR4KTsKKwlmb3IgKHJicCA9IHJiX2ZpcnN0KCZlcC0+cmJyKTsgcmJwOyByYnAgPSByYl9uZXh0KHJicCkpIHsKKwkJZXBpID0gcmJfZW50cnkocmJwLCBzdHJ1Y3QgZXBpdGVtLCByYm4pOworCQlpZiAodW5saWtlbHkoaXNfZmlsZV9lcG9sbChlcGktPmZmZC5maWxlKSkpIHsKKwkJCWVycm9yID0gZXBfY2FsbF9uZXN0ZWQoJnBvbGxfbG9vcF9uY2FsbHMsIEVQX01BWF9ORVNUUywKKwkJCQkJICAgICAgIGVwX2xvb3BfY2hlY2tfcHJvYywgZXBpLT5mZmQuZmlsZSwKKwkJCQkJICAgICAgIGVwaS0+ZmZkLmZpbGUtPnByaXZhdGVfZGF0YSwgY3VycmVudCk7CisJCQlpZiAoZXJyb3IgIT0gMCkKKwkJCQlicmVhazsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmVwLT5tdHgpOworCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIGVwX2xvb3BfY2hlY2sgLSBQZXJmb3JtcyBhIGNoZWNrIHRvIHZlcmlmeSB0aGF0IGFkZGluZyBhbiBlcG9sbCBmaWxlIChAZmlsZSkKKyAqICAgICAgICAgICAgICAgICBhbm90aGVyIGVwb2xsIGZpbGUgKHJlcHJlc2VudGVkIGJ5IEBlcCkgZG9lcyBub3QgY3JlYXRlCisgKiAgICAgICAgICAgICAgICAgY2xvc2VkIGxvb3BzIG9yIHRvbyBkZWVwIGNoYWlucy4KKyAqCisgKiBAZXA6IFBvaW50ZXIgdG8gdGhlIGVwb2xsIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAZmlsZTogUG9pbnRlciB0byB0aGUgZXBvbGwgZmlsZSB0byBiZSBjaGVja2VkLgorICoKKyAqIFJldHVybnM6IFJldHVybnMgemVybyBpZiBhZGRpbmcgdGhlIGVwb2xsIEBmaWxlIGluc2lkZSBjdXJyZW50IGVwb2xsCisgKiAgICAgICAgICBzdHJ1Y3R1cmUgQGVwIGRvZXMgbm90IHZpb2xhdGUgdGhlIGNvbnN0cmFpbnRzLCBvciAtMSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgZXBfbG9vcF9jaGVjayhzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIGVwX2NhbGxfbmVzdGVkKCZwb2xsX2xvb3BfbmNhbGxzLCBFUF9NQVhfTkVTVFMsCisJCQkgICAgICBlcF9sb29wX2NoZWNrX3Byb2MsIGZpbGUsIGVwLCBjdXJyZW50KTsKK30KKwogLyoKICAqIE9wZW4gYW4gZXZlbnRwb2xsIGZpbGUgZGVzY3JpcHRvci4KICAqLwpAQCAtMTIzNiw2ICsxMzEyLDcgQEAKIAkJc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqLCBldmVudCkKIHsKIAlpbnQgZXJyb3I7CisJaW50IGRpZF9sb2NrX2VwbXV0ZXggPSAwOwogCXN0cnVjdCBmaWxlICpmaWxlLCAqdGZpbGU7CiAJc3RydWN0IGV2ZW50cG9sbCAqZXA7CiAJc3RydWN0IGVwaXRlbSAqZXBpOwpAQCAtMTI3Nyw2ICsxMzU0LDI1IEBACiAJICovCiAJZXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKKwkvKgorCSAqIFdoZW4gd2UgaW5zZXJ0IGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvciwgaW5zaWRlIGFub3RoZXIgZXBvbGwgZmlsZQorCSAqIGRlc2NyaXB0b3IsIHRoZXJlIGlzIHRoZSBjaGFuZ2Ugb2YgY3JlYXRpbmcgY2xvc2VkIGxvb3BzLCB3aGljaCBhcmUKKwkgKiBiZXR0ZXIgYmUgaGFuZGxlZCBoZXJlLCB0aGFuIGluIG1vcmUgY3JpdGljYWwgcGF0aHMuCisJICoKKwkgKiBXZSBob2xkIGVwbXV0ZXggYWNyb3NzIHRoZSBsb29wIGNoZWNrIGFuZCB0aGUgaW5zZXJ0IGluIHRoaXMgY2FzZSwgaW4KKwkgKiBvcmRlciB0byBwcmV2ZW50IHR3byBzZXBhcmF0ZSBpbnNlcnRzIGZyb20gcmFjaW5nIGFuZCBlYWNoIGRvaW5nIHRoZQorCSAqIGluc2VydCAiYXQgdGhlIHNhbWUgdGltZSIgc3VjaCB0aGF0IGVwX2xvb3BfY2hlY2sgcGFzc2VzIG9uIGJvdGgKKwkgKiBiZWZvcmUgZWl0aGVyIG9uZSBkb2VzIHRoZSBpbnNlcnQsIHRoZXJlYnkgY3JlYXRpbmcgYSBjeWNsZS4KKwkgKi8KKwlpZiAodW5saWtlbHkoaXNfZmlsZV9lcG9sbCh0ZmlsZSkgJiYgb3AgPT0gRVBPTExfQ1RMX0FERCkpIHsKKwkJbXV0ZXhfbG9jaygmZXBtdXRleCk7CisJCWRpZF9sb2NrX2VwbXV0ZXggPSAxOworCQllcnJvciA9IC1FTE9PUDsKKwkJaWYgKGVwX2xvb3BfY2hlY2soZXAsIHRmaWxlKSAhPSAwKQorCQkJZ290byBlcnJvcl90Z3RfZnB1dDsKKwl9CisKKwogCW11dGV4X2xvY2soJmVwLT5tdHgpOwogCiAJLyoKQEAgLTEzMTIsNiArMTQwOCw5IEBACiAJbXV0ZXhfdW5sb2NrKCZlcC0+bXR4KTsKIAogZXJyb3JfdGd0X2ZwdXQ6CisJaWYgKHVubGlrZWx5KGRpZF9sb2NrX2VwbXV0ZXgpKQorCQltdXRleF91bmxvY2soJmVwbXV0ZXgpOworCiAJZnB1dCh0ZmlsZSk7CiBlcnJvcl9mcHV0OgogCWZwdXQoZmlsZSk7CkBAIC0xNDMxLDYgKzE1MzAsMTIgQEAKIAkJRVBfSVRFTV9DT1NUOwogCUJVR19PTihtYXhfdXNlcl93YXRjaGVzIDwgMCk7CiAKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSB1c2VkIHRvIHBlcmZvcm0gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCisJICogaW5jbHVzaW9uIGxvb3BzIGNoZWNrcy4KKwkgKi8KKwllcF9uZXN0ZWRfY2FsbHNfaW5pdCgmcG9sbF9sb29wX25jYWxscyk7CisKIAkvKiBJbml0aWFsaXplIHRoZSBzdHJ1Y3R1cmUgdXNlZCB0byBwZXJmb3JtIHNhZmUgcG9sbCB3YWl0IGhlYWQgd2FrZSB1cHMgKi8KIAllcF9uZXN0ZWRfY2FsbHNfaW5pdCgmcG9sbF9zYWZld2FrZV9uY2FsbHMpOwogCmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggYzYyZWZjYi4uNTJhNDQ3ZCAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCisrKyBiL2ZzL2V4ZWMuYwpAQCAtMTIwLDcgKzEyMCw3IEBACiAJCWdvdG8gb3V0OwogCiAJZmlsZSA9IGRvX2ZpbHBfb3BlbihBVF9GRENXRCwgdG1wLAotCQkJCU9fTEFSR0VGSUxFIHwgT19SRE9OTFkgfCBGTU9ERV9FWEVDLCAwLAorCQkJCU9fTEFSR0VGSUxFIHwgT19SRE9OTFkgfCBfX0ZNT0RFX0VYRUMsIDAsCiAJCQkJTUFZX1JFQUQgfCBNQVlfRVhFQyB8IE1BWV9PUEVOKTsKIAlwdXRuYW1lKHRtcCk7CiAJZXJyb3IgPSBQVFJfRVJSKGZpbGUpOwpAQCAtNzIzLDcgKzcyMyw3IEBACiAJaW50IGVycjsKIAogCWZpbGUgPSBkb19maWxwX29wZW4oQVRfRkRDV0QsIG5hbWUsCi0JCQkJT19MQVJHRUZJTEUgfCBPX1JET05MWSB8IEZNT0RFX0VYRUMsIDAsCisJCQkJT19MQVJHRUZJTEUgfCBPX1JET05MWSB8IF9fRk1PREVfRVhFQywgMCwKIAkJCQlNQVlfRVhFQyB8IE1BWV9PUEVOKTsKIAlpZiAoSVNfRVJSKGZpbGUpKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL2lub2RlLmMgYi9mcy9leG9mcy9pbm9kZS5jCmluZGV4IDQyNjg1NDIuLmE3NTU1MjMgMTAwNjQ0Ci0tLSBhL2ZzL2V4b2ZzL2lub2RlLmMKKysrIGIvZnMvZXhvZnMvaW5vZGUuYwpAQCAtMTAzMCw3ICsxMDMwLDYgQEAKIAkJbWVtY3B5KG9pLT5pX2RhdGEsIGZjYi5pX2RhdGEsIHNpemVvZihmY2IuaV9kYXRhKSk7CiAJfQogCi0JaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9IHNiLT5zX2JkaTsKIAlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewogCQlpbm9kZS0+aV9vcCA9ICZleG9mc19maWxlX2lub2RlX29wZXJhdGlvbnM7CiAJCWlub2RlLT5pX2ZvcCA9ICZleG9mc19maWxlX29wZXJhdGlvbnM7CkBAIC0xMTMxLDcgKzExMzAsNiBAQAogCiAJc2JpID0gc2ItPnNfZnNfaW5mbzsKIAotCWlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSBzYi0+c19iZGk7CiAJc2ItPnNfZGlydCA9IDE7CiAJaW5vZGVfaW5pdF9vd25lcihpbm9kZSwgZGlyLCBtb2RlKTsKIAlpbm9kZS0+aV9pbm8gPSBzYmktPnNfbmV4dGlkKys7CmRpZmYgLS1naXQgYS9mcy9leHQzL3N1cGVyLmMgYi9mcy9leHQzL3N1cGVyLmMKaW5kZXggN2FhNzY3ZC4uODVjOGNjOCAxMDA2NDQKLS0tIGEvZnMvZXh0My9zdXBlci5jCisrKyBiL2ZzL2V4dDMvc3VwZXIuYwpAQCAtNzU0LDcgKzc1NCw3IEBACiBzdGF0aWMgaW50IGV4dDNfbWFya19kcXVvdF9kaXJ0eShzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKIHN0YXRpYyBpbnQgZXh0M193cml0ZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKTsKIHN0YXRpYyBpbnQgZXh0M19xdW90YV9vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwKLQkJCQljaGFyICpwYXRoKTsKKwkJCSBzdHJ1Y3QgcGF0aCAqcGF0aCk7CiBzdGF0aWMgaW50IGV4dDNfcXVvdGFfb25fbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpOwogc3RhdGljIHNzaXplX3QgZXh0M19xdW90YV9yZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBjaGFyICpkYXRhLAogCQkJICAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCBvZmYpOwpAQCAtMjg3NywyNyArMjg3NywyMCBAQAogICogU3RhbmRhcmQgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIHF1b3RhX29uCiAgKi8KIHN0YXRpYyBpbnQgZXh0M19xdW90YV9vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwKLQkJCSBjaGFyICpuYW1lKQorCQkJIHN0cnVjdCBwYXRoICpwYXRoKQogewogCWludCBlcnI7Ci0Jc3RydWN0IHBhdGggcGF0aDsKIAogCWlmICghdGVzdF9vcHQoc2IsIFFVT1RBKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQllcnIgPSBrZXJuX3BhdGgobmFtZSwgTE9PS1VQX0ZPTExPVywgJnBhdGgpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KIAkvKiBRdW90YWZpbGUgbm90IG9uIHRoZSBzYW1lIGZpbGVzeXN0ZW0/ICovCi0JaWYgKHBhdGgubW50LT5tbnRfc2IgIT0gc2IpIHsKLQkJcGF0aF9wdXQoJnBhdGgpOworCWlmIChwYXRoLT5tbnQtPm1udF9zYiAhPSBzYikKIAkJcmV0dXJuIC1FWERFVjsKLQl9CiAJLyogSm91cm5hbGluZyBxdW90YT8gKi8KIAlpZiAoRVhUM19TQihzYiktPnNfcWZfbmFtZXNbdHlwZV0pIHsKIAkJLyogUXVvdGFmaWxlIG5vdCBvZiBmcyByb290PyAqLwotCQlpZiAocGF0aC5kZW50cnktPmRfcGFyZW50ICE9IHNiLT5zX3Jvb3QpCisJCWlmIChwYXRoLT5kZW50cnktPmRfcGFyZW50ICE9IHNiLT5zX3Jvb3QpCiAJCQlleHQzX21zZyhzYiwgS0VSTl9XQVJOSU5HLAogCQkJCSJ3YXJuaW5nOiBRdW90YSBmaWxlIG5vdCBvbiBmaWxlc3lzdGVtIHJvb3QuICIKIAkJCQkiSm91cm5hbGVkIHF1b3RhIHdpbGwgbm90IHdvcmsuIik7CkBAIC0yOTA3LDcgKzI5MDAsNyBAQAogCSAqIFdoZW4gd2Ugam91cm5hbCBkYXRhIG9uIHF1b3RhIGZpbGUsIHdlIGhhdmUgdG8gZmx1c2ggam91cm5hbCB0byBzZWUKIAkgKiBhbGwgdXBkYXRlcyB0byB0aGUgZmlsZSB3aGVuIHdlIGJ5cGFzcyBwYWdlY2FjaGUuLi4KIAkgKi8KLQlpZiAoZXh0M19zaG91bGRfam91cm5hbF9kYXRhKHBhdGguZGVudHJ5LT5kX2lub2RlKSkgeworCWlmIChleHQzX3Nob3VsZF9qb3VybmFsX2RhdGEocGF0aC0+ZGVudHJ5LT5kX2lub2RlKSkgewogCQkvKgogCQkgKiBXZSBkb24ndCBuZWVkIHRvIGxvY2sgdXBkYXRlcyBidXQgam91cm5hbF9mbHVzaCgpIGNvdWxkCiAJCSAqIG90aGVyd2lzZSBiZSBsaXZlbG9ja2VkLi4uCkBAIC0yOTE1LDE1ICsyOTA4LDExIEBACiAJCWpvdXJuYWxfbG9ja191cGRhdGVzKEVYVDNfU0Ioc2IpLT5zX2pvdXJuYWwpOwogCQllcnIgPSBqb3VybmFsX2ZsdXNoKEVYVDNfU0Ioc2IpLT5zX2pvdXJuYWwpOwogCQlqb3VybmFsX3VubG9ja191cGRhdGVzKEVYVDNfU0Ioc2IpLT5zX2pvdXJuYWwpOwotCQlpZiAoZXJyKSB7Ci0JCQlwYXRoX3B1dCgmcGF0aCk7CisJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCQl9CiAJfQogCi0JZXJyID0gZHF1b3RfcXVvdGFfb25fcGF0aChzYiwgdHlwZSwgZm9ybWF0X2lkLCAmcGF0aCk7Ci0JcGF0aF9wdXQoJnBhdGgpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIGRxdW90X3F1b3RhX29uKHNiLCB0eXBlLCBmb3JtYXRfaWQsIHBhdGgpOwogfQogCiAvKiBSZWFkIGRhdGEgZnJvbSBxdW90YWZpbGUgLSBhdm9pZCBwYWdlY2FjaGUgYW5kIHN1Y2ggYmVjYXVzZSB3ZSBjYW5ub3QgYWZmb3JkCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IDBjOGQ5N2IuLjNhYTBiNzIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCisrKyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC04NDgsNiArODQ4LDcgQEAKIAlhdG9taWNfdCBpX2lvZW5kX2NvdW50OwkvKiBOdW1iZXIgb2Ygb3V0c3RhbmRpbmcgaW9fZW5kIHN0cnVjdHMgKi8KIAkvKiBjdXJyZW50IGlvX2VuZCBzdHJ1Y3R1cmUgZm9yIGFzeW5jIERJTyB3cml0ZSovCiAJZXh0NF9pb19lbmRfdCAqY3VyX2Fpb19kaW87CisJYXRvbWljX3QgaV9haW9kaW9fdW53cml0dGVuOyAvKiBOci4gb2YgaW5mbGlnaHQgY29udmVyc2lvbnMgcGVuZGluZyAqLwogCiAJc3BpbmxvY2tfdCBpX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2s7CiAKQEAgLTIxMTksNiArMjEyMCwxNSBAQAogCiAjZGVmaW5lIGluX3JhbmdlKGIsIGZpcnN0LCBsZW4pCSgoYikgPj0gKGZpcnN0KSAmJiAoYikgPD0gKGZpcnN0KSArIChsZW4pIC0gMSkKIAorLyogRm9yIGlvZW5kICYgYWlvIHVud3JpdHRlbiBjb252ZXJzaW9uIHdhaXQgcXVldWVzICovCisjZGVmaW5lIEVYVDRfV1FfSEFTSF9TWgkJMzcKKyNkZWZpbmUgZXh0NF9pb2VuZF93cSh2KSAgICgmZXh0NF9faW9lbmRfd3FbKCh1bnNpZ25lZCBsb25nKSh2KSkgJVwKKwkJCQkJICAgIEVYVDRfV1FfSEFTSF9TWl0pCisjZGVmaW5lIGV4dDRfYWlvX211dGV4KHYpICAoJmV4dDRfX2Fpb19tdXRleFsoKHVuc2lnbmVkIGxvbmcpKHYpKSAlXAorCQkJCQkgICAgIEVYVDRfV1FfSEFTSF9TWl0pCitleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgZXh0NF9faW9lbmRfd3FbRVhUNF9XUV9IQVNIX1NaXTsKK2V4dGVybiBzdHJ1Y3QgbXV0ZXggZXh0NF9fYWlvX211dGV4W0VYVDRfV1FfSEFTSF9TWl07CisKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZgkvKiBfRVhUNF9IICovCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jCmluZGV4IDYzYTc1ODEuLmNjY2U4YTcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jCisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jCkBAIC0zMTc0LDkgKzMxNzQsMTAgQEAKIAkJICogdGhhdCB0aGlzIElPIG5lZWRzIHRvIGNvbnZlcnRpb24gdG8gd3JpdHRlbiB3aGVuIElPIGlzCiAJCSAqIGNvbXBsZXRlZAogCQkgKi8KLQkJaWYgKGlvKQorCQlpZiAoaW8gJiYgIShpby0+ZmxhZyAmIEVYVDRfSU9fRU5EX1VOV1JJVFRFTikpIHsKIAkJCWlvLT5mbGFnID0gRVhUNF9JT19FTkRfVU5XUklUVEVOOwotCQllbHNlCisJCQlhdG9taWNfaW5jKCZFWFQ0X0koaW5vZGUpLT5pX2Fpb2Rpb191bndyaXR0ZW4pOworCQl9IGVsc2UKIAkJCWV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX0RJT19VTldSSVRURU4pOwogCQlpZiAoZXh0NF9zaG91bGRfZGlvcmVhZF9ub2xvY2soaW5vZGUpKQogCQkJbWFwLT5tX2ZsYWdzIHw9IEVYVDRfTUFQX1VOSU5JVDsKQEAgLTM0NjMsOSArMzQ2NCwxMCBAQAogCQkgKiB0aGF0IHdlIG5lZWQgdG8gcGVyZm9ybSBjb252ZXJ0aW9uIHdoZW4gSU8gaXMgZG9uZS4KIAkJICovCiAJCWlmICgoZmxhZ3MgJiBFWFQ0X0dFVF9CTE9DS1NfUFJFX0lPKSkgewotCQkJaWYgKGlvKQorCQkJaWYgKGlvICYmICEoaW8tPmZsYWcgJiBFWFQ0X0lPX0VORF9VTldSSVRURU4pKSB7CiAJCQkJaW8tPmZsYWcgPSBFWFQ0X0lPX0VORF9VTldSSVRURU47Ci0JCQllbHNlCisJCQkJYXRvbWljX2luYygmRVhUNF9JKGlub2RlKS0+aV9haW9kaW9fdW53cml0dGVuKTsKKwkJCX0gZWxzZQogCQkJCWV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLAogCQkJCQkJICAgICBFWFQ0X1NUQVRFX0RJT19VTldSSVRURU4pOwogCQl9CmRpZmYgLS1naXQgYS9mcy9leHQ0L2ZpbGUuYyBiL2ZzL2V4dDQvZmlsZS5jCmluZGV4IDJlODMyMmMuLjdiODBkNTQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZmlsZS5jCisrKyBiL2ZzL2V4dDQvZmlsZS5jCkBAIC01NSwxMSArNTUsNDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZXh0NF9haW9kaW9fd2FpdChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXdhaXRfcXVldWVfaGVhZF90ICp3cSA9IGV4dDRfaW9lbmRfd3EoaW5vZGUpOworCisJd2FpdF9ldmVudCgqd3EsIChhdG9taWNfcmVhZCgmRVhUNF9JKGlub2RlKS0+aV9haW9kaW9fdW53cml0dGVuKSA9PSAwKSk7Cit9CisKKy8qCisgKiBUaGlzIHRlc3RzIHdoZXRoZXIgdGhlIElPIGluIHF1ZXN0aW9uIGlzIGJsb2NrLWFsaWduZWQgb3Igbm90LgorICogRXh0NCB1dGlsaXplcyB1bndyaXR0ZW4gZXh0ZW50cyB3aGVuIGhvbGUtZmlsbGluZyBkdXJpbmcgZGlyZWN0IElPLCBhbmQgdGhleQorICogYXJlIGNvbnZlcnRlZCB0byB3cml0dGVuIG9ubHkgYWZ0ZXIgdGhlIElPIGlzIGNvbXBsZXRlLiAgVW50aWwgdGhleSBhcmUKKyAqIG1hcHBlZCwgdGhlc2UgYmxvY2tzIGFwcGVhciBhcyBob2xlcywgc28gZGlvX3plcm9fYmxvY2soKSB3aWxsIGFzc3VtZSB0aGF0CisgKiBpdCBuZWVkcyB0byB6ZXJvIG91dCBwb3J0aW9ucyBvZiB0aGUgc3RhcnQgYW5kL29yIGVuZCBibG9jay4gIElmIDIgQUlPCisgKiB0aHJlYWRzIGFyZSBhdCB3b3JrIG9uIHRoZSBzYW1lIHVud3JpdHRlbiBibG9jaywgdGhleSBtdXN0IGJlIHN5bmNocm9uaXplZAorICogb3Igb25lIHRocmVhZCB3aWxsIHplcm8gdGhlIG90aGVyJ3MgZGF0YSwgY2F1c2luZyBjb3JydXB0aW9uLgorICovCitzdGF0aWMgaW50CitleHQ0X3VuYWxpZ25lZF9haW8oc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisJCSAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJaW50IGJsb2NrbWFzayA9IHNiLT5zX2Jsb2Nrc2l6ZSAtIDE7CisJc2l6ZV90IGNvdW50ID0gaW92X2xlbmd0aChpb3YsIG5yX3NlZ3MpOworCWxvZmZfdCBmaW5hbF9zaXplID0gcG9zICsgY291bnQ7CisKKwlpZiAocG9zID49IGlub2RlLT5pX3NpemUpCisJCXJldHVybiAwOworCisJaWYgKChwb3MgJiBibG9ja21hc2spIHx8IChmaW5hbF9zaXplICYgYmxvY2ttYXNrKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHNzaXplX3QKIGV4dDRfZmlsZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAogCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItPmtpX2ZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJaW50IHVuYWxpZ25lZF9haW8gPSAwOworCWludCByZXQ7CiAKIAkvKgogCSAqIElmIHdlIGhhdmUgZW5jb3VudGVyZWQgYSBiaXRtYXAtZm9ybWF0IGZpbGUsIHRoZSBzaXplIGxpbWl0CkBAIC03OCw5ICsxMTQsMzEgQEAKIAkJCW5yX3NlZ3MgPSBpb3Zfc2hvcnRlbigoc3RydWN0IGlvdmVjICopaW92LCBucl9zZWdzLAogCQkJCQkgICAgICBzYmktPnNfYml0bWFwX21heGJ5dGVzIC0gcG9zKTsKIAkJfQorCX0gZWxzZSBpZiAodW5saWtlbHkoKGlvY2ItPmtpX2ZpbHAtPmZfZmxhZ3MgJiBPX0RJUkVDVCkgJiYKKwkJICAgIWlzX3N5bmNfa2lvY2IoaW9jYikpKSB7CisJCXVuYWxpZ25lZF9haW8gPSBleHQ0X3VuYWxpZ25lZF9haW8oaW5vZGUsIGlvdiwgbnJfc2VncywgcG9zKTsKIAl9CiAKLQlyZXR1cm4gZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7CisJLyogVW5hbGlnbmVkIGRpcmVjdCBBSU8gbXVzdCBiZSBzZXJpYWxpemVkOyBzZWUgY29tbWVudCBhYm92ZSAqLworCWlmICh1bmFsaWduZWRfYWlvKSB7CisJCXN0YXRpYyB1bnNpZ25lZCBsb25nIHVuYWxpZ25lZF93YXJuX3RpbWU7CisKKwkJLyogV2FybiBhYm91dCB0aGlzIG9uY2UgcGVyIGRheSAqLworCQlpZiAocHJpbnRrX3RpbWVkX3JhdGVsaW1pdCgmdW5hbGlnbmVkX3dhcm5fdGltZSwgNjAqNjAqMjQqSFopKQorCQkJZXh0NF9tc2coaW5vZGUtPmlfc2IsIEtFUk5fV0FSTklORywKKwkJCQkgIlVuYWxpZ25lZCBBSU8vRElPIG9uIGlub2RlICVsZCBieSAlczsgIgorCQkJCSAicGVyZm9ybWFuY2Ugd2lsbCBiZSBwb29yLiIsCisJCQkJIGlub2RlLT5pX2lubywgY3VycmVudC0+Y29tbSk7CisJCW11dGV4X2xvY2soZXh0NF9haW9fbXV0ZXgoaW5vZGUpKTsKKwkJZXh0NF9haW9kaW9fd2FpdChpbm9kZSk7CisJfQorCisJcmV0ID0gZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7CisKKwlpZiAodW5hbGlnbmVkX2FpbykKKwkJbXV0ZXhfdW5sb2NrKGV4dDRfYWlvX211dGV4KGlub2RlKSk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGV4dDRfZmlsZV92bV9vcHMgPSB7CmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jCmluZGV4IDg1MWY0OWIuLmQxZmUwOWEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jCisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jCkBAIC0zNDIsMTAgKzM0MiwxNSBAQAogLyogV2UgY3JlYXRlIHNsYWIgY2FjaGVzIGZvciBncm91cGluZm8gZGF0YSBzdHJ1Y3R1cmVzIGJhc2VkIG9uIHRoZQogICogc3VwZXJibG9jayBibG9jayBzaXplLiAgVGhlcmUgd2lsbCBiZSBvbmUgcGVyIG1vdW50ZWQgZmlsZXN5c3RlbSBmb3IKICAqIGVhY2ggdW5pcXVlIHNfYmxvY2tzaXplX2JpdHMgKi8KLSNkZWZpbmUgTlJfR1JQSU5GT19DQUNIRVMJXAotCShFWFQ0X01BWF9CTE9DS19MT0dfU0laRSAtIEVYVDRfTUlOX0JMT0NLX0xPR19TSVpFICsgMSkKKyNkZWZpbmUgTlJfR1JQSU5GT19DQUNIRVMgOAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpleHQ0X2dyb3VwaW5mb19jYWNoZXNbTlJfR1JQSU5GT19DQUNIRVNdOwogCitzdGF0aWMgY29uc3QgY2hhciAqZXh0NF9ncm91cGluZm9fc2xhYl9uYW1lc1tOUl9HUlBJTkZPX0NBQ0hFU10gPSB7CisJImV4dDRfZ3JvdXBpbmZvXzFrIiwgImV4dDRfZ3JvdXBpbmZvXzJrIiwgImV4dDRfZ3JvdXBpbmZvXzRrIiwKKwkiZXh0NF9ncm91cGluZm9fOGsiLCAiZXh0NF9ncm91cGluZm9fMTZrIiwgImV4dDRfZ3JvdXBpbmZvXzMyayIsCisJImV4dDRfZ3JvdXBpbmZvXzY0ayIsICJleHQ0X2dyb3VwaW5mb18xMjhrIgorfTsKKwogc3RhdGljIHZvaWQgZXh0NF9tYl9nZW5lcmF0ZV9mcm9tX3BhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmJpdG1hcCwKIAkJCQkJZXh0NF9ncm91cF90IGdyb3VwKTsKIHN0YXRpYyB2b2lkIGV4dDRfbWJfZ2VuZXJhdGVfZnJvbV9mcmVlbGlzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpiaXRtYXAsCkBAIC0yNDE0LDYgKzI0MTksNTUgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAorc3RhdGljIHZvaWQgZXh0NF9ncm91cGluZm9fZGVzdHJveV9zbGFicyh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5SX0dSUElORk9fQ0FDSEVTOyBpKyspIHsKKwkJaWYgKGV4dDRfZ3JvdXBpbmZvX2NhY2hlc1tpXSkKKwkJCWttZW1fY2FjaGVfZGVzdHJveShleHQ0X2dyb3VwaW5mb19jYWNoZXNbaV0pOworCQlleHQ0X2dyb3VwaW5mb19jYWNoZXNbaV0gPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCBleHQ0X2dyb3VwaW5mb19jcmVhdGVfc2xhYihzaXplX3Qgc2l6ZSkKK3sKKwlzdGF0aWMgREVGSU5FX01VVEVYKGV4dDRfZ3JwaW5mb19zbGFiX2NyZWF0ZV9tdXRleCk7CisJaW50IHNsYWJfc2l6ZTsKKwlpbnQgYmxvY2tzaXplX2JpdHMgPSBvcmRlcl9iYXNlXzIoc2l6ZSk7CisJaW50IGNhY2hlX2luZGV4ID0gYmxvY2tzaXplX2JpdHMgLSBFWFQ0X01JTl9CTE9DS19MT0dfU0laRTsKKwlzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwOworCisJaWYgKGNhY2hlX2luZGV4ID49IE5SX0dSUElORk9fQ0FDSEVTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh1bmxpa2VseShjYWNoZV9pbmRleCA8IDApKQorCQljYWNoZV9pbmRleCA9IDA7CisKKwltdXRleF9sb2NrKCZleHQ0X2dycGluZm9fc2xhYl9jcmVhdGVfbXV0ZXgpOworCWlmIChleHQ0X2dyb3VwaW5mb19jYWNoZXNbY2FjaGVfaW5kZXhdKSB7CisJCW11dGV4X3VubG9jaygmZXh0NF9ncnBpbmZvX3NsYWJfY3JlYXRlX211dGV4KTsKKwkJcmV0dXJuIDA7CS8qIEFscmVhZHkgY3JlYXRlZCAqLworCX0KKworCXNsYWJfc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCBleHQ0X2dyb3VwX2luZm8sCisJCQkJYmJfY291bnRlcnNbYmxvY2tzaXplX2JpdHMgKyAyXSk7CisKKwljYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZShleHQ0X2dyb3VwaW5mb19zbGFiX25hbWVzW2NhY2hlX2luZGV4XSwKKwkJCQkJc2xhYl9zaXplLCAwLCBTTEFCX1JFQ0xBSU1fQUNDT1VOVCwKKwkJCQkJTlVMTCk7CisKKwltdXRleF91bmxvY2soJmV4dDRfZ3JwaW5mb19zbGFiX2NyZWF0ZV9tdXRleCk7CisJaWYgKCFjYWNoZXApIHsKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIkVYVDQ6IG5vIG1lbW9yeSBmb3IgZ3JvdXBpbmZvIHNsYWIgY2FjaGVcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlleHQ0X2dyb3VwaW5mb19jYWNoZXNbY2FjaGVfaW5kZXhdID0gY2FjaGVwOworCisJcmV0dXJuIDA7Cit9CisKIGludCBleHQ0X21iX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG5lZWRzX3JlY292ZXJ5KQogewogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpOwpAQCAtMjQyMSw5ICsyNDc1LDYgQEAKIAl1bnNpZ25lZCBvZmZzZXQ7CiAJdW5zaWduZWQgbWF4OwogCWludCByZXQ7Ci0JaW50IGNhY2hlX2luZGV4OwotCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXA7Ci0JY2hhciAqbmFtZXAgPSBOVUxMOwogCiAJaSA9IChzYi0+c19ibG9ja3NpemVfYml0cyArIDIpICogc2l6ZW9mKCpzYmktPnNfbWJfb2Zmc2V0cyk7CiAKQEAgLTI0NDAsMzAgKzI0OTEsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQljYWNoZV9pbmRleCA9IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gRVhUNF9NSU5fQkxPQ0tfTE9HX1NJWkU7Ci0JY2FjaGVwID0gZXh0NF9ncm91cGluZm9fY2FjaGVzW2NhY2hlX2luZGV4XTsKLQlpZiAoIWNhY2hlcCkgewotCQljaGFyIG5hbWVbMzJdOwotCQlpbnQgbGVuID0gb2Zmc2V0b2Yoc3RydWN0IGV4dDRfZ3JvdXBfaW5mbywKLQkJCQkJYmJfY291bnRlcnNbc2ItPnNfYmxvY2tzaXplX2JpdHMgKyAyXSk7Ci0KLQkJc3ByaW50ZihuYW1lLCAiZXh0NF9ncm91cGluZm9fJWQiLCBzYi0+c19ibG9ja3NpemVfYml0cyk7Ci0JCW5hbWVwID0ga3N0cmR1cChuYW1lLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFuYW1lcCkgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJLyogTmVlZCB0byBmcmVlIHRoZSBrbWVtX2NhY2hlX25hbWUoKSB3aGVuIHdlCi0JCSAqIGRlc3Ryb3kgdGhlIHNsYWIgKi8KLQkJY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUobmFtZXAsIGxlbiwgMCwKLQkJCQkJICAgICBTTEFCX1JFQ0xBSU1fQUNDT1VOVCwgTlVMTCk7Ci0JCWlmICghY2FjaGVwKSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJZXh0NF9ncm91cGluZm9fY2FjaGVzW2NhY2hlX2luZGV4XSA9IGNhY2hlcDsKLQl9CisJcmV0ID0gZXh0NF9ncm91cGluZm9fY3JlYXRlX3NsYWIoc2ItPnNfYmxvY2tzaXplKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKIAkvKiBvcmRlciAwIGlzIHJlZ3VsYXIgYml0bWFwICovCiAJc2JpLT5zX21iX21heHNbMF0gPSBzYi0+c19ibG9ja3NpemUgPDwgMzsKQEAgLTI1MjAsNyArMjU1MCw2IEBACiAJaWYgKHJldCkgewogCQlrZnJlZShzYmktPnNfbWJfb2Zmc2V0cyk7CiAJCWtmcmVlKHNiaS0+c19tYl9tYXhzKTsKLQkJa2ZyZWUobmFtZXApOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMjczNCw3ICsyNzYzLDYgQEAKIAogdm9pZCBleHQ0X2V4aXRfbWJhbGxvYyh2b2lkKQogewotCWludCBpOwogCS8qCiAJICogV2FpdCBmb3IgY29tcGxldGlvbiBvZiBjYWxsX3JjdSgpJ3Mgb24gZXh0NF9wc3BhY2VfY2FjaGVwCiAJICogYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIHNsYWIgY2FjaGUuCkBAIC0yNzQzLDE1ICsyNzcxLDcgQEAKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZXh0NF9wc3BhY2VfY2FjaGVwKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZXh0NF9hY19jYWNoZXApOwogCWttZW1fY2FjaGVfZGVzdHJveShleHQ0X2ZyZWVfZXh0X2NhY2hlcCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlJfR1JQSU5GT19DQUNIRVM7IGkrKykgewotCQlzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwID0gZXh0NF9ncm91cGluZm9fY2FjaGVzW2ldOwotCQlpZiAoY2FjaGVwKSB7Ci0JCQljaGFyICpuYW1lID0gKGNoYXIgKilrbWVtX2NhY2hlX25hbWUoY2FjaGVwKTsKLQkJCWttZW1fY2FjaGVfZGVzdHJveShjYWNoZXApOwotCQkJa2ZyZWUobmFtZSk7Ci0JCX0KLQl9CisJZXh0NF9ncm91cGluZm9fZGVzdHJveV9zbGFicygpOwogCWV4dDRfcmVtb3ZlX2RlYnVnZnNfZW50cnkoKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9wYWdlLWlvLmMgYi9mcy9leHQ0L3BhZ2UtaW8uYwppbmRleCA3MjcwZGNmLi45NTVjYzMwIDEwMDY0NAotLS0gYS9mcy9leHQ0L3BhZ2UtaW8uYworKysgYi9mcy9leHQ0L3BhZ2UtaW8uYwpAQCAtMzIsMTQgKzMyLDggQEAKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICppb19wYWdlX2NhY2hlcCwgKmlvX2VuZF9jYWNoZXA7CiAKLSNkZWZpbmUgV1FfSEFTSF9TWgkJMzcKLSNkZWZpbmUgdG9faW9lbmRfd3EodikJKCZpb2VuZF93cVsoKHVuc2lnbmVkIGxvbmcpdikgJSBXUV9IQVNIX1NaXSkKLXN0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCBpb2VuZF93cVtXUV9IQVNIX1NaXTsKLQogaW50IF9faW5pdCBleHQ0X2luaXRfcGFnZWlvKHZvaWQpCiB7Ci0JaW50IGk7Ci0KIAlpb19wYWdlX2NhY2hlcCA9IEtNRU1fQ0FDSEUoZXh0NF9pb19wYWdlLCBTTEFCX1JFQ0xBSU1fQUNDT1VOVCk7CiAJaWYgKGlvX3BhZ2VfY2FjaGVwID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNDgsOSArNDIsNiBAQAogCQlrbWVtX2NhY2hlX2Rlc3Ryb3koaW9fcGFnZV9jYWNoZXApOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JZm9yIChpID0gMDsgaSA8IFdRX0hBU0hfU1o7IGkrKykKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW9lbmRfd3FbaV0pOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYyLDcgKzUzLDcgQEAKIAogdm9pZCBleHQ0X2lvZW5kX3dhaXQoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAqd3EgPSB0b19pb2VuZF93cShpbm9kZSk7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKndxID0gZXh0NF9pb2VuZF93cShpbm9kZSk7CiAKIAl3YWl0X2V2ZW50KCp3cSwgKGF0b21pY19yZWFkKCZFWFQ0X0koaW5vZGUpLT5pX2lvZW5kX2NvdW50KSA9PSAwKSk7CiB9CkBAIC04Nyw3ICs3OCw3IEBACiAJZm9yIChpID0gMDsgaSA8IGlvLT5udW1faW9fcGFnZXM7IGkrKykKIAkJcHV0X2lvX3BhZ2UoaW8tPnBhZ2VzW2ldKTsKIAlpby0+bnVtX2lvX3BhZ2VzID0gMDsKLQl3cSA9IHRvX2lvZW5kX3dxKGlvLT5pbm9kZSk7CisJd3EgPSBleHQ0X2lvZW5kX3dxKGlvLT5pbm9kZSk7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJkVYVDRfSShpby0+aW5vZGUpLT5pX2lvZW5kX2NvdW50KSAmJgogCSAgICB3YWl0cXVldWVfYWN0aXZlKHdxKSkKIAkJd2FrZV91cF9hbGwod3EpOwpAQCAtMTAyLDYgKzkzLDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW8tPmlub2RlOwogCWxvZmZfdCBvZmZzZXQgPSBpby0+b2Zmc2V0OwogCXNzaXplX3Qgc2l6ZSA9IGlvLT5zaXplOworCXdhaXRfcXVldWVfaGVhZF90ICp3cTsKIAlpbnQgcmV0ID0gMDsKIAogCWV4dDRfZGVidWcoImV4dDRfZW5kX2lvX25vbG9jazogaW8gMHglcCBmcm9tIGlub2RlICVsdSxsaXN0LT5uZXh0IDB4JXAsIgpAQCAtMTI2LDcgKzExOCwxNiBAQAogCWlmIChpby0+aW9jYikKIAkJYWlvX2NvbXBsZXRlKGlvLT5pb2NiLCBpby0+cmVzdWx0LCAwKTsKIAkvKiBjbGVhciB0aGUgRElPIEFJTyB1bndyaXR0ZW4gZmxhZyAqLwotCWlvLT5mbGFnICY9IH5FWFQ0X0lPX0VORF9VTldSSVRURU47CisJaWYgKGlvLT5mbGFnICYgRVhUNF9JT19FTkRfVU5XUklUVEVOKSB7CisJCWlvLT5mbGFnICY9IH5FWFQ0X0lPX0VORF9VTldSSVRURU47CisJCS8qIFdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdW53cml0dGVuIGV4dGVudCBjb252ZXJzaW9uICovCisJCXdxID0gZXh0NF9pb2VuZF93cShpby0+aW5vZGUpOworCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmRVhUNF9JKGlub2RlKS0+aV9haW9kaW9fdW53cml0dGVuKSAmJgorCQkgICAgd2FpdHF1ZXVlX2FjdGl2ZSh3cSkpIHsKKwkJCXdha2VfdXBfYWxsKHdxKTsKKwkJfQorCX0KKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE5MCw2ICsxOTEsNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKKwlzZWN0b3JfdCBiaV9zZWN0b3IgPSBiaW8tPmJpX3NlY3RvcjsKIAogCUJVR19PTighaW9fZW5kKTsKIAliaW8tPmJpX3ByaXZhdGUgPSBOVUxMOwpAQCAtMjA3LDkgKzIwOSw3IEBACiAJCWlmIChlcnJvcikKIAkJCVNldFBhZ2VFcnJvcihwYWdlKTsKIAkJQlVHX09OKCFoZWFkKTsKLQkJaWYgKGhlYWQtPmJfc2l6ZSA9PSBQQUdFX0NBQ0hFX1NJWkUpCi0JCQljbGVhcl9idWZmZXJfZGlydHkoaGVhZCk7Ci0JCWVsc2UgeworCQlpZiAoaGVhZC0+Yl9zaXplICE9IFBBR0VfQ0FDSEVfU0laRSkgewogCQkJbG9mZl90IG9mZnNldDsKIAkJCWxvZmZfdCBpb19lbmRfb2Zmc2V0ID0gaW9fZW5kLT5vZmZzZXQgKyBpb19lbmQtPnNpemU7CiAKQEAgLTIyMSw3ICsyMjEsNiBAQAogCQkJCQlpZiAoZXJyb3IpCiAJCQkJCQlidWZmZXJfaW9fZXJyb3IoYmgpOwogCi0JCQkJCWNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCQkJfQogCQkJCWlmIChidWZmZXJfZGVsYXkoYmgpKQogCQkJCQlwYXJ0aWFsX3dyaXRlID0gMTsKQEAgLTI1Nyw3ICsyNTYsNyBAQAogCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBpb19lbmQtPm9mZnNldCwKIAkJCSAgICAgKGxvbmcpIGlvX2VuZC0+c2l6ZSwKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkJCSAgICAgYmlvLT5iaV9zZWN0b3IgPj4gKGlub2RlLT5pX2Jsa2JpdHMgLSA5KSk7CisJCQkgICAgIGJpX3NlY3RvciA+PiAoaW5vZGUtPmlfYmxrYml0cyAtIDkpKTsKIAl9CiAKIAkvKiBBZGQgdGhlIGlvX2VuZCB0byBwZXItaW5vZGUgY29tcGxldGVkIGlvIGxpc3QqLwpAQCAtMzgwLDYgKzM3OSw3IEBACiAKIAlibG9ja3NpemUgPSAxIDw8IGlub2RlLT5pX2Jsa2JpdHM7CiAKKwlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOwogCUJVR19PTihQYWdlV3JpdGViYWNrKHBhZ2UpKTsKIAlzZXRfcGFnZV93cml0ZWJhY2socGFnZSk7CiAJQ2xlYXJQYWdlRXJyb3IocGFnZSk7CkBAIC0zOTcsMTIgKzM5NywxNCBAQAogCWZvciAoYmggPSBoZWFkID0gcGFnZV9idWZmZXJzKHBhZ2UpLCBibG9ja19zdGFydCA9IDA7CiAJICAgICBiaCAhPSBoZWFkIHx8ICFibG9ja19zdGFydDsKIAkgICAgIGJsb2NrX3N0YXJ0ID0gYmxvY2tfZW5kLCBiaCA9IGJoLT5iX3RoaXNfcGFnZSkgeworCiAJCWJsb2NrX2VuZCA9IGJsb2NrX3N0YXJ0ICsgYmxvY2tzaXplOwogCQlpZiAoYmxvY2tfc3RhcnQgPj0gbGVuKSB7CiAJCQljbGVhcl9idWZmZXJfZGlydHkoYmgpOwogCQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiAJCQljb250aW51ZTsKIAkJfQorCQljbGVhcl9idWZmZXJfZGlydHkoYmgpOwogCQlyZXQgPSBpb19zdWJtaXRfYWRkX2JoKGlvLCBpb19wYWdlLCBpbm9kZSwgd2JjLCBiaCk7CiAJCWlmIChyZXQpIHsKIAkJCS8qCmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggY2IxMGEwNi4uZjZhMzE4ZiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCisrKyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNzcsNiArNzcsNyBAQAogCQkgICAgICAgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKmRhdGEpOwogc3RhdGljIHZvaWQgZXh0NF9kZXN0cm95X2xhenlpbml0X3RocmVhZCh2b2lkKTsKIHN0YXRpYyB2b2lkIGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworc3RhdGljIHZvaWQgZXh0NF9jbGVhcl9yZXF1ZXN0X2xpc3Qodm9pZCk7CiAKICNpZiAhZGVmaW5lZChDT05GSUdfRVhUM19GUykgJiYgIWRlZmluZWQoQ09ORklHX0VYVDNfRlNfTU9EVUxFKSAmJiBkZWZpbmVkKENPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjMpCiBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZXh0M19mc190eXBlID0gewpAQCAtODMyLDYgKzgzMyw3IEBACiAJZWktPmlfc3luY190aWQgPSAwOwogCWVpLT5pX2RhdGFzeW5jX3RpZCA9IDA7CiAJYXRvbWljX3NldCgmZWktPmlfaW9lbmRfY291bnQsIDApOworCWF0b21pY19zZXQoJmVpLT5pX2Fpb2Rpb191bndyaXR0ZW4sIDApOwogCiAJcmV0dXJuICZlaS0+dmZzX2lub2RlOwogfQpAQCAtMTE2MSw3ICsxMTYzLDcgQEAKIHN0YXRpYyBpbnQgZXh0NF9tYXJrX2RxdW90X2RpcnR5KHN0cnVjdCBkcXVvdCAqZHF1b3QpOwogc3RhdGljIGludCBleHQ0X3dyaXRlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpOwogc3RhdGljIGludCBleHQ0X3F1b3RhX29uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgZm9ybWF0X2lkLAotCQkJCWNoYXIgKnBhdGgpOworCQkJIHN0cnVjdCBwYXRoICpwYXRoKTsKIHN0YXRpYyBpbnQgZXh0NF9xdW90YV9vZmYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpOwogc3RhdGljIGludCBleHQ0X3F1b3RhX29uX21vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKTsKIHN0YXRpYyBzc2l6ZV90IGV4dDRfcXVvdGFfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgY2hhciAqZGF0YSwKQEAgLTI3MTYsNiArMjcxOCw4IEBACiAJbXV0ZXhfdW5sb2NrKCZleHQ0X2xpX2luZm8tPmxpX2xpc3RfbXR4KTsKIH0KIAorc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZXh0NF9sYXp5aW5pdF90YXNrOworCiAvKgogICogVGhpcyBpcyB0aGUgZnVuY3Rpb24gd2hlcmUgZXh0NGxhenlpbml0IHRocmVhZCBsaXZlcy4gSXQgd2Fsa3MKICAqIHRocm91Z2ggdGhlIHJlcXVlc3QgbGlzdCBzZWFyY2hpbmcgZm9yIG5leHQgc2NoZWR1bGVkIGZpbGVzeXN0ZW0uCkBAIC0yNzg0LDYgKzI3ODgsMTAgQEAKIAkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG5leHRfd2FrZXVwKSkKIAkJCXNjaGVkdWxlKCk7CiAJCWZpbmlzaF93YWl0KCZlbGktPmxpX3dhaXRfZGFlbW9uLCAmd2FpdCk7CisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJCWV4dDRfY2xlYXJfcmVxdWVzdF9saXN0KCk7CisJCQlnb3RvIGV4aXRfdGhyZWFkOworCQl9CiAJfQogCiBleGl0X3RocmVhZDoKQEAgLTI4MDgsNiArMjgxNiw3IEBACiAJd2FrZV91cCgmZWxpLT5saV93YWl0X3Rhc2spOwogCiAJa2ZyZWUoZXh0NF9saV9pbmZvKTsKKwlleHQ0X2xhenlpbml0X3Rhc2sgPSBOVUxMOwogCWV4dDRfbGlfaW5mbyA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZleHQ0X2xpX210eCk7CiAKQEAgLTI4MzAsMTEgKzI4MzksMTAgQEAKIAogc3RhdGljIGludCBleHQ0X3J1bl9sYXp5aW5pdF90aHJlYWQodm9pZCkKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7Ci0KLQl0ID0ga3RocmVhZF9ydW4oZXh0NF9sYXp5aW5pdF90aHJlYWQsIGV4dDRfbGlfaW5mbywgImV4dDRsYXp5aW5pdCIpOwotCWlmIChJU19FUlIodCkpIHsKLQkJaW50IGVyciA9IFBUUl9FUlIodCk7CisJZXh0NF9sYXp5aW5pdF90YXNrID0ga3RocmVhZF9ydW4oZXh0NF9sYXp5aW5pdF90aHJlYWQsCisJCQkJCSBleHQ0X2xpX2luZm8sICJleHQ0bGF6eWluaXQiKTsKKwlpZiAoSVNfRVJSKGV4dDRfbGF6eWluaXRfdGFzaykpIHsKKwkJaW50IGVyciA9IFBUUl9FUlIoZXh0NF9sYXp5aW5pdF90YXNrKTsKIAkJZXh0NF9jbGVhcl9yZXF1ZXN0X2xpc3QoKTsKIAkJZGVsX3RpbWVyX3N5bmMoJmV4dDRfbGlfaW5mby0+bGlfdGltZXIpOwogCQlrZnJlZShleHQ0X2xpX2luZm8pOwpAQCAtMjk4NSwxNiArMjk5MywxMCBAQAogCSAqIElmIHRocmVhZCBleGl0ZWQgZWFybGllcgogCSAqIHRoZXJlJ3Mgbm90aGluZyB0byBiZSBkb25lLgogCSAqLwotCWlmICghZXh0NF9saV9pbmZvKQorCWlmICghZXh0NF9saV9pbmZvIHx8ICFleHQ0X2xhenlpbml0X3Rhc2spCiAJCXJldHVybjsKIAotCWV4dDRfY2xlYXJfcmVxdWVzdF9saXN0KCk7Ci0KLQl3aGlsZSAoZXh0NF9saV9pbmZvLT5saV90YXNrKSB7Ci0JCXdha2VfdXAoJmV4dDRfbGlfaW5mby0+bGlfd2FpdF9kYWVtb24pOwotCQl3YWl0X2V2ZW50KGV4dDRfbGlfaW5mby0+bGlfd2FpdF90YXNrLAotCQkJICAgZXh0NF9saV9pbmZvLT5saV90YXNrID09IE5VTEwpOwotCX0KKwlrdGhyZWFkX3N0b3AoZXh0NF9sYXp5aW5pdF90YXNrKTsKIH0KIAogc3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKQEAgLTQ1NTgsMjcgKzQ1NjAsMjAgQEAKICAqIFN0YW5kYXJkIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBxdW90YV9vbgogICovCiBzdGF0aWMgaW50IGV4dDRfcXVvdGFfb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBmb3JtYXRfaWQsCi0JCQkgY2hhciAqbmFtZSkKKwkJCSBzdHJ1Y3QgcGF0aCAqcGF0aCkKIHsKIAlpbnQgZXJyOwotCXN0cnVjdCBwYXRoIHBhdGg7CiAKIAlpZiAoIXRlc3Rfb3B0KHNiLCBRVU9UQSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZXJyID0ga2Vybl9wYXRoKG5hbWUsIExPT0tVUF9GT0xMT1csICZwYXRoKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCiAJLyogUXVvdGFmaWxlIG5vdCBvbiB0aGUgc2FtZSBmaWxlc3lzdGVtPyAqLwotCWlmIChwYXRoLm1udC0+bW50X3NiICE9IHNiKSB7Ci0JCXBhdGhfcHV0KCZwYXRoKTsKKwlpZiAocGF0aC0+bW50LT5tbnRfc2IgIT0gc2IpCiAJCXJldHVybiAtRVhERVY7Ci0JfQogCS8qIEpvdXJuYWxpbmcgcXVvdGE/ICovCiAJaWYgKEVYVDRfU0Ioc2IpLT5zX3FmX25hbWVzW3R5cGVdKSB7CiAJCS8qIFF1b3RhZmlsZSBub3QgaW4gZnMgcm9vdD8gKi8KLQkJaWYgKHBhdGguZGVudHJ5LT5kX3BhcmVudCAhPSBzYi0+c19yb290KQorCQlpZiAocGF0aC0+ZGVudHJ5LT5kX3BhcmVudCAhPSBzYi0+c19yb290KQogCQkJZXh0NF9tc2coc2IsIEtFUk5fV0FSTklORywKIAkJCQkiUXVvdGEgZmlsZSBub3Qgb24gZmlsZXN5c3RlbSByb290LiAiCiAJCQkJIkpvdXJuYWxlZCBxdW90YSB3aWxsIG5vdCB3b3JrIik7CkBAIC00NTg5LDcgKzQ1ODQsNyBAQAogCSAqIGFsbCB1cGRhdGVzIHRvIHRoZSBmaWxlIHdoZW4gd2UgYnlwYXNzIHBhZ2VjYWNoZS4uLgogCSAqLwogCWlmIChFWFQ0X1NCKHNiKS0+c19qb3VybmFsICYmCi0JICAgIGV4dDRfc2hvdWxkX2pvdXJuYWxfZGF0YShwYXRoLmRlbnRyeS0+ZF9pbm9kZSkpIHsKKwkgICAgZXh0NF9zaG91bGRfam91cm5hbF9kYXRhKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZSkpIHsKIAkJLyoKIAkJICogV2UgZG9uJ3QgbmVlZCB0byBsb2NrIHVwZGF0ZXMgYnV0IGpvdXJuYWxfZmx1c2goKSBjb3VsZAogCQkgKiBvdGhlcndpc2UgYmUgbGl2ZWxvY2tlZC4uLgpAQCAtNDU5NywxNSArNDU5MiwxMSBAQAogCQlqYmQyX2pvdXJuYWxfbG9ja191cGRhdGVzKEVYVDRfU0Ioc2IpLT5zX2pvdXJuYWwpOwogCQllcnIgPSBqYmQyX2pvdXJuYWxfZmx1c2goRVhUNF9TQihzYiktPnNfam91cm5hbCk7CiAJCWpiZDJfam91cm5hbF91bmxvY2tfdXBkYXRlcyhFWFQ0X1NCKHNiKS0+c19qb3VybmFsKTsKLQkJaWYgKGVycikgewotCQkJcGF0aF9wdXQoJnBhdGgpOworCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKLQkJfQogCX0KIAotCWVyciA9IGRxdW90X3F1b3RhX29uX3BhdGgoc2IsIHR5cGUsIGZvcm1hdF9pZCwgJnBhdGgpOwotCXBhdGhfcHV0KCZwYXRoKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiBkcXVvdF9xdW90YV9vbihzYiwgdHlwZSwgZm9ybWF0X2lkLCBwYXRoKTsKIH0KIAogc3RhdGljIGludCBleHQ0X3F1b3RhX29mZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKQEAgLTQ3NzksNyArNDc3MCw3IEBACiAJLmZzX2ZsYWdzCT0gRlNfUkVRVUlSRVNfREVWLAogfTsKIAotaW50IF9faW5pdCBleHQ0X2luaXRfZmVhdF9hZHZlcnRzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBleHQ0X2luaXRfZmVhdF9hZHZlcnRzKHZvaWQpCiB7CiAJc3RydWN0IGV4dDRfZmVhdHVyZXMgKmVmOwogCWludCByZXQgPSAtRU5PTUVNOwpAQCAtNDgwMywyMyArNDc5NCw0NCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIGV4dDRfZXhpdF9mZWF0X2FkdmVydHModm9pZCkKK3sKKwlrb2JqZWN0X3B1dCgmZXh0NF9mZWF0LT5mX2tvYmopOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmV4dDRfZmVhdC0+Zl9rb2JqX3VucmVnaXN0ZXIpOworCWtmcmVlKGV4dDRfZmVhdCk7Cit9CisKKy8qIFNoYXJlZCBhY3Jvc3MgYWxsIGV4dDQgZmlsZSBzeXN0ZW1zICovCit3YWl0X3F1ZXVlX2hlYWRfdCBleHQ0X19pb2VuZF93cVtFWFQ0X1dRX0hBU0hfU1pdOworc3RydWN0IG11dGV4IGV4dDRfX2Fpb19tdXRleFtFWFQ0X1dRX0hBU0hfU1pdOworCiBzdGF0aWMgaW50IF9faW5pdCBleHQ0X2luaXRfZnModm9pZCkKIHsKLQlpbnQgZXJyOworCWludCBpLCBlcnI7CiAKIAlleHQ0X2NoZWNrX2ZsYWdfdmFsdWVzKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRVhUNF9XUV9IQVNIX1NaOyBpKyspIHsKKwkJbXV0ZXhfaW5pdCgmZXh0NF9fYWlvX211dGV4W2ldKTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmZXh0NF9faW9lbmRfd3FbaV0pOworCX0KKwogCWVyciA9IGV4dDRfaW5pdF9wYWdlaW8oKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCWVyciA9IGV4dDRfaW5pdF9zeXN0ZW1fem9uZSgpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0NTsKKwkJZ290byBvdXQ3OwogCWV4dDRfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoImV4dDQiLCBOVUxMLCBmc19rb2JqKTsKIAlpZiAoIWV4dDRfa3NldCkKLQkJZ290byBvdXQ0OworCQlnb3RvIG91dDY7CiAJZXh0NF9wcm9jX3Jvb3QgPSBwcm9jX21rZGlyKCJmcy9leHQ0IiwgTlVMTCk7CisJaWYgKCFleHQ0X3Byb2Nfcm9vdCkKKwkJZ290byBvdXQ1OwogCiAJZXJyID0gZXh0NF9pbml0X2ZlYXRfYWR2ZXJ0cygpOworCWlmIChlcnIpCisJCWdvdG8gb3V0NDsKIAogCWVyciA9IGV4dDRfaW5pdF9tYmFsbG9jKCk7CiAJaWYgKGVycikKQEAgLTQ4NDksMTIgKzQ4NjEsMTQgQEAKIG91dDI6CiAJZXh0NF9leGl0X21iYWxsb2MoKTsKIG91dDM6Ci0Ja2ZyZWUoZXh0NF9mZWF0KTsKLQlyZW1vdmVfcHJvY19lbnRyeSgiZnMvZXh0NCIsIE5VTEwpOwotCWtzZXRfdW5yZWdpc3RlcihleHQ0X2tzZXQpOworCWV4dDRfZXhpdF9mZWF0X2FkdmVydHMoKTsKIG91dDQ6Ci0JZXh0NF9leGl0X3N5c3RlbV96b25lKCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoImZzL2V4dDQiLCBOVUxMKTsKIG91dDU6CisJa3NldF91bnJlZ2lzdGVyKGV4dDRfa3NldCk7CitvdXQ2OgorCWV4dDRfZXhpdF9zeXN0ZW1fem9uZSgpOworb3V0NzoKIAlleHQ0X2V4aXRfcGFnZWlvKCk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTQ4NjgsNiArNDg4Miw3IEBACiAJZGVzdHJveV9pbm9kZWNhY2hlKCk7CiAJZXh0NF9leGl0X3hhdHRyKCk7CiAJZXh0NF9leGl0X21iYWxsb2MoKTsKKwlleHQ0X2V4aXRfZmVhdF9hZHZlcnRzKCk7CiAJcmVtb3ZlX3Byb2NfZW50cnkoImZzL2V4dDQiLCBOVUxMKTsKIAlrc2V0X3VucmVnaXN0ZXIoZXh0NF9rc2V0KTsKIAlleHQ0X2V4aXRfc3lzdGVtX3pvbmUoKTsKZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jCmluZGV4IGVjYzhiMzkuLmNiMTAyNjEgMTAwNjQ0Ci0tLSBhL2ZzL2ZjbnRsLmMKKysrIGIvZnMvZmNudGwuYwpAQCAtODE1LDcgKzgxNSw3IEBACiAJCV9fT19TWU5DCXwgT19EU1lOQwl8IEZBU1lOQwl8CiAJCU9fRElSRUNUCXwgT19MQVJHRUZJTEUJfCBPX0RJUkVDVE9SWQl8CiAJCU9fTk9GT0xMT1cJfCBPX05PQVRJTUUJfCBPX0NMT0VYRUMJfAotCQlGTU9ERV9FWEVDCisJCV9fRk1PREVfRVhFQwogCQkpKTsKIAogCWZhc3luY19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJmYXN5bmNfY2FjaGUiLApkaWZmIC0tZ2l0IGEvZnMvZmlsZV90YWJsZS5jIGIvZnMvZmlsZV90YWJsZS5jCmluZGV4IGMzZTg5YWQuLmViMzZiNmIgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGVfdGFibGUuYworKysgYi9mcy9maWxlX3RhYmxlLmMKQEAgLTEyNSwxMyArMTI1LDEzIEBACiAJCWdvdG8gZmFpbDsKIAogCXBlcmNwdV9jb3VudGVyX2luYygmbnJfZmlsZXMpOworCWYtPmZfY3JlZCA9IGdldF9jcmVkKGNyZWQpOwogCWlmIChzZWN1cml0eV9maWxlX2FsbG9jKGYpKQogCQlnb3RvIGZhaWxfc2VjOwogCiAJSU5JVF9MSVNUX0hFQUQoJmYtPmZfdS5mdV9saXN0KTsKIAlhdG9taWNfbG9uZ19zZXQoJmYtPmZfY291bnQsIDEpOwogCXJ3bG9ja19pbml0KCZmLT5mX293bmVyLmxvY2spOwotCWYtPmZfY3JlZCA9IGdldF9jcmVkKGNyZWQpOwogCXNwaW5fbG9ja19pbml0KCZmLT5mX2xvY2spOwogCWV2ZW50cG9sbF9pbml0X2ZpbGUoZik7CiAJLyogZi0+Zl92ZXJzaW9uOiAwICovCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmMgYi9mcy9nZnMyL2dsb2NrLmMKaW5kZXggMDhhOGJlYi4uN2NkOWE1YSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5jCisrKyBiL2ZzL2dmczIvZ2xvY2suYwpAQCAtMTc3OSwxMSArMTc3OSwxMSBAQAogI2VuZGlmCiAKIAlnbG9ja193b3JrcXVldWUgPSBhbGxvY193b3JrcXVldWUoImdsb2NrX3dvcmtxdWV1ZSIsIFdRX01FTV9SRUNMQUlNIHwKLQkJCQkJICBXUV9ISUdIUFJJIHwgV1FfRlJFRVpFQUJMRSwgMCk7CisJCQkJCSAgV1FfSElHSFBSSSB8IFdRX0ZSRUVaQUJMRSwgMCk7CiAJaWYgKElTX0VSUihnbG9ja193b3JrcXVldWUpKQogCQlyZXR1cm4gUFRSX0VSUihnbG9ja193b3JrcXVldWUpOwogCWdmczJfZGVsZXRlX3dvcmtxdWV1ZSA9IGFsbG9jX3dvcmtxdWV1ZSgiZGVsZXRlX3dvcmtxdWV1ZSIsCi0JCQkJCQlXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaRUFCTEUsCisJCQkJCQlXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaQUJMRSwKIAkJCQkJCTApOwogCWlmIChJU19FUlIoZ2ZzMl9kZWxldGVfd29ya3F1ZXVlKSkgewogCQlkZXN0cm95X3dvcmtxdWV1ZShnbG9ja193b3JrcXVldWUpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jCmluZGV4IDIyMzJiM2MuLjdhYTdkNGYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvaW5vZGUuYworKysgYi9mcy9nZnMyL2lub2RlLmMKQEAgLTc0LDE2ICs3NCwxNCBAQAogfQogCiAvKioKLSAqIEdGUzIgbG9va3VwIGNvZGUgZmlsbHMgaW4gdmZzIGlub2RlIGNvbnRlbnRzIGJhc2VkIG9uIGluZm8gb2J0YWluZWQKLSAqIGZyb20gZGlyZWN0b3J5IGVudHJ5IGluc2lkZSBnZnMyX2lub2RlX2xvb2t1cCgpLiBUaGlzIGhhcyBjYXVzZWQgaXNzdWVzCi0gKiB3aXRoIE5GUyBjb2RlIHBhdGggc2luY2UgaXRzIGdldF9kZW50cnkgcm91dGluZSBkb2Vzbid0IGhhdmUgdGhlIHJlbGV2YW50Ci0gKiBkaXJlY3RvcnkgZW50cnkgd2hlbiBnZnMyX2lub2RlX2xvb2t1cCgpIGlzIGludm9rZWQuIFBhcnQgb2YgdGhlIGNvZGUKLSAqIHNlZ21lbnQgaW5zaWRlIGdmczJfaW5vZGVfbG9va3VwIGNvZGUgbmVlZHMgdG8gZ2V0IG1vdmVkIGFyb3VuZC4KKyAqIGdmczJfc2V0X2lvcCAtIFNldHMgaW5vZGUgb3BlcmF0aW9ucworICogQGlub2RlOiBUaGUgaW5vZGUgd2l0aCBjb3JyZWN0IGlfbW9kZSBmaWxsZWQgaW4KICAqCi0gKiBDbGVhcnMgSV9ORVcgYXMgd2VsbC4KLSAqKi8KKyAqIEdGUzIgbG9va3VwIGNvZGUgZmlsbHMgaW4gdmZzIGlub2RlIGNvbnRlbnRzIGJhc2VkIG9uIGluZm8gb2J0YWluZWQKKyAqIGZyb20gZGlyZWN0b3J5IGVudHJ5IGluc2lkZSBnZnMyX2lub2RlX2xvb2t1cCgpLgorICovCiAKLXZvaWQgZ2ZzMl9zZXRfaW9wKHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgdm9pZCBnZnMyX3NldF9pb3Aoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoaW5vZGUpOwogCXVtb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7CkBAIC0xMDYsOCArMTA0LDYgQEAKIAkJaW5vZGUtPmlfb3AgPSAmZ2ZzMl9maWxlX2lvcHM7CiAJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwgaW5vZGUtPmlfcmRldik7CiAJfQotCi0JdW5sb2NrX25ld19pbm9kZShpbm9kZSk7CiB9CiAKIC8qKgpAQCAtMTE5LDEwICsxMTUsOCBAQAogICogUmV0dXJuczogQSBWRlMgaW5vZGUsIG9yIGFuIGVycm9yCiAgKi8KIAotc3RydWN0IGlub2RlICpnZnMyX2lub2RlX2xvb2t1cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAotCQkJCXVuc2lnbmVkIGludCB0eXBlLAotCQkJCXU2NCBub19hZGRyLAotCQkJCXU2NCBub19mb3JtYWxfaW5vKQorc3RydWN0IGlub2RlICpnZnMyX2lub2RlX2xvb2t1cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgdHlwZSwKKwkJCQl1NjQgbm9fYWRkciwgdTY0IG5vX2Zvcm1hbF9pbm8pCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXA7CkBAIC0xNTIsNTEgKzE0NiwzNyBAQAogCQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChpb19nbCwgTE1fU1RfU0hBUkVELCBHTF9FWEFDVCwgJmlwLT5pX2lvcGVuX2doKTsKIAkJaWYgKHVubGlrZWx5KGVycm9yKSkKIAkJCWdvdG8gZmFpbF9pb3BlbjsKLQkJaXAtPmlfaW9wZW5fZ2guZ2hfZ2wtPmdsX29iamVjdCA9IGlwOwogCisJCWlwLT5pX2lvcGVuX2doLmdoX2dsLT5nbF9vYmplY3QgPSBpcDsKIAkJZ2ZzMl9nbG9ja19wdXQoaW9fZ2wpOwogCQlpb19nbCA9IE5VTEw7CiAKLQkJaWYgKCh0eXBlID09IERUX1VOS05PV04pICYmIChub19mb3JtYWxfaW5vID09IDApKQotCQkJZ290byBnZnMyX25mc2J5cGFzczsKLQotCQlpbm9kZS0+aV9tb2RlID0gRFQySUYodHlwZSk7Ci0KLQkJLyoKLQkJICogV2UgbXVzdCByZWFkIHRoZSBpbm9kZSBpbiBvcmRlciB0byB3b3JrIG91dCBpdHMgdHlwZSBpbgotCQkgKiB0aGlzIGNhc2UuIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgaGFwcGVuIG9mdGVuIGFzIHdlIG5vcm1hbGx5Ci0JCSAqIGtub3cgdGhlIHR5cGUgYmVmb3JlaGFuZC4gVGhpcyBjb2RlIHBhdGggb25seSBvY2N1cnMgZHVyaW5nCi0JCSAqIHVubGlua2VkIGlub2RlIHJlY292ZXJ5ICh3aGVyZSBpdCBpcyBzYWZlIHRvIGRvIHRoaXMgZ2xvY2ssCi0JCSAqIHdoaWNoIGlzIG5vdCB0cnVlIGluIHRoZSBnZW5lcmFsIGNhc2UpLgotCQkgKi8KIAkJaWYgKHR5cGUgPT0gRFRfVU5LTk9XTikgewotCQkJc3RydWN0IGdmczJfaG9sZGVyIGdoOwotCQkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgJmdoKTsKLQkJCWlmICh1bmxpa2VseShlcnJvcikpCi0JCQkJZ290byBmYWlsX2dsb2NrOwotCQkJLyogSW5vZGUgaXMgbm93IHVwdG9kYXRlICovCi0JCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmZ2gpOworCQkJLyogSW5vZGUgZ2xvY2sgbXVzdCBiZSBsb2NrZWQgYWxyZWFkeSAqLworCQkJZXJyb3IgPSBnZnMyX2lub2RlX3JlZnJlc2goR0ZTMl9JKGlub2RlKSk7CisJCQlpZiAoZXJyb3IpCisJCQkJZ290byBmYWlsX3JlZnJlc2g7CisJCX0gZWxzZSB7CisJCQlpbm9kZS0+aV9tb2RlID0gRFQySUYodHlwZSk7CiAJCX0KIAogCQlnZnMyX3NldF9pb3AoaW5vZGUpOworCQl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKIAl9CiAKLWdmczJfbmZzYnlwYXNzOgogCXJldHVybiBpbm9kZTsKLWZhaWxfZ2xvY2s6Ci0JZ2ZzMl9nbG9ja19kcSgmaXAtPmlfaW9wZW5fZ2gpOworCitmYWlsX3JlZnJlc2g6CisJaXAtPmlfaW9wZW5fZ2guZ2hfZ2wtPmdsX29iamVjdCA9IE5VTEw7CisJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmlwLT5pX2lvcGVuX2doKTsKIGZhaWxfaW9wZW46CiAJaWYgKGlvX2dsKQogCQlnZnMyX2dsb2NrX3B1dChpb19nbCk7CiBmYWlsX3B1dDoKLQlpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykKLQkJaXAtPmlfZ2wtPmdsX29iamVjdCA9IE5VTEw7CisJaXAtPmlfZ2wtPmdsX29iamVjdCA9IE5VTEw7CiAJZ2ZzMl9nbG9ja19wdXQoaXAtPmlfZ2wpOwogZmFpbDoKLQlpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykKLQkJaWdldF9mYWlsZWQoaW5vZGUpOwotCWVsc2UKLQkJaXB1dChpbm9kZSk7CisJaWdldF9mYWlsZWQoaW5vZGUpOwogCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIH0KIApAQCAtMjIxLDE0ICsyMDEsNiBAQAogCWlmIChJU19FUlIoaW5vZGUpKQogCQlnb3RvIGZhaWw7CiAKLQllcnJvciA9IGdmczJfaW5vZGVfcmVmcmVzaChHRlMyX0koaW5vZGUpKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbF9pcHV0OwotCi0JLyogUGljayB1cCB0aGUgd29ya3Mgd2UgYnlwYXNzIGluIGdmczJfaW5vZGVfbG9va3VwICovCi0JaWYgKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpIAotCQlnZnMyX3NldF9pb3AoaW5vZGUpOwotCiAJLyogVHdvIGV4dHJhIGNoZWNrcyBmb3IgTkZTIG9ubHkgKi8KIAlpZiAobm9fZm9ybWFsX2lubykgewogCQllcnJvciA9IC1FU1RBTEU7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmggYi9mcy9nZnMyL2lub2RlLmgKaW5kZXggNzMyYTE4My4uM2UwMGE2NiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5oCisrKyBiL2ZzL2dmczIvaW5vZGUuaApAQCAtOTYsNyArOTYsNiBAQAogCXJldHVybiAtRUlPOwogfQogCi1leHRlcm4gdm9pZCBnZnMyX3NldF9pb3Aoc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gc3RydWN0IGlub2RlICpnZnMyX2lub2RlX2xvb2t1cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCB0eXBlLCAKIAkJCQkgICAgICAgdTY0IG5vX2FkZHIsIHU2NCBub19mb3JtYWxfaW5vKTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmdmczJfbG9va3VwX2J5X2ludW0oc3RydWN0IGdmczJfc2JkICpzZHAsIHU2NCBub19hZGRyLApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tYWluLmMgYi9mcy9nZnMyL21haW4uYwppbmRleCBlYmVmN2FiLi43MmMzMWEzIDEwMDY0NAotLS0gYS9mcy9nZnMyL21haW4uYworKysgYi9mcy9nZnMyL21haW4uYwpAQCAtNTksMTQgKzU5LDcgQEAKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKShnbCArIDEpOwogCiAJZ2ZzMl9pbml0X2dsb2NrX29uY2UoZ2wpOwotCW1lbXNldChtYXBwaW5nLCAwLCBzaXplb2YoKm1hcHBpbmcpKTsKLQlJTklUX1JBRElYX1RSRUUoJm1hcHBpbmctPnBhZ2VfdHJlZSwgR0ZQX0FUT01JQyk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmbWFwcGluZy0+cHJpdmF0ZV9saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmbWFwcGluZy0+cHJpdmF0ZV9sb2NrKTsKLQlJTklUX1JBV19QUklPX1RSRUVfUk9PVCgmbWFwcGluZy0+aV9tbWFwKTsKLQlJTklUX0xJU1RfSEVBRCgmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhcik7CisJYWRkcmVzc19zcGFjZV9pbml0X29uY2UobWFwcGluZyk7CiB9CiAKIC8qKgpAQCAtMTQ0LDcgKzEzNyw3IEBACiAKIAllcnJvciA9IC1FTk9NRU07CiAJZ2ZzX3JlY292ZXJ5X3dxID0gYWxsb2Nfd29ya3F1ZXVlKCJnZnNfcmVjb3ZlcnkiLAotCQkJCQkgIFdRX01FTV9SRUNMQUlNIHwgV1FfRlJFRVpFQUJMRSwgMCk7CisJCQkJCSAgV1FfTUVNX1JFQ0xBSU0gfCBXUV9GUkVFWkFCTEUsIDApOwogCWlmICghZ2ZzX3JlY292ZXJ5X3dxKQogCQlnb3RvIGZhaWxfd3E7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3VwZXIuYyBiL2ZzL2dmczIvc3VwZXIuYwppbmRleCAxNmMyZWNhLi5lYzczZWQ3IDEwMDY0NAotLS0gYS9mcy9nZnMyL3N1cGVyLmMKKysrIGIvZnMvZ2ZzMi9zdXBlci5jCkBAIC0xMzM2LDYgKzEzMzYsNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBvdXRfdHJ1bmNhdGU7CiAKKwlpcC0+aV9pb3Blbl9naC5naF9mbGFncyB8PSBHTF9OT0NBQ0hFOwogCWdmczJfZ2xvY2tfZHFfd2FpdCgmaXAtPmlfaW9wZW5fZ2gpOwogCWdmczJfaG9sZGVyX3JlaW5pdChMTV9TVF9FWENMVVNJVkUsIExNX0ZMQUdfVFJZXzFDQiB8IEdMX05PQ0FDSEUsICZpcC0+aV9pb3Blbl9naCk7CiAJZXJyb3IgPSBnZnMyX2dsb2NrX25xKCZpcC0+aV9pb3Blbl9naCk7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2V4dGVudHMuYyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCmluZGV4IDUyYTBiY2EuLmIxOTkxYTIgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCisrKyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCkBAIC0zOTcsOCArMzk3LDggQEAKIAl1MzIgc3RhcnQsIGxlbiwgZ29hbDsKIAlpbnQgcmVzOwogCi0JaWYgKHNiaS0+dG90YWxfYmxvY2tzIC0gc2JpLT5mcmVlX2Jsb2NrcyArIDggPgotCQkJc2JpLT5hbGxvY19maWxlLT5pX3NpemUgKiA4KSB7CisJaWYgKHNiaS0+YWxsb2NfZmlsZS0+aV9zaXplICogOCA8CisJICAgIHNiaS0+dG90YWxfYmxvY2tzIC0gc2JpLT5mcmVlX2Jsb2NrcyArIDgpIHsKIAkJLyogZXh0ZW5kIGFsbG9jIGZpbGUgKi8KIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGV4dGVuZCBhbGxvYyBmaWxlISAiCiAJCQkJIiglbGx1LCV1LCV1KVxuIiwKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvcGFydF90YmwuYyBiL2ZzL2hmc3BsdXMvcGFydF90YmwuYwppbmRleCBkNjZhZDExLi40MGFkODhjIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL3BhcnRfdGJsLmMKKysrIGIvZnMvaGZzcGx1cy9wYXJ0X3RibC5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlyZXMgPSBoZnNwbHVzX3N1Ym1pdF9iaW8oc2ItPnNfYmRldiwgKnBhcnRfc3RhcnQgKyBIRlNfUE1BUF9CTEssCiAJCQkJIGRhdGEsIFJFQUQpOwogCWlmIChyZXMpCi0JCXJldHVybiByZXM7CisJCWdvdG8gb3V0OwogCiAJc3dpdGNoIChiZTE2X3RvX2NwdSgqKChfX2JlMTYgKilkYXRhKSkpIHsKIAljYXNlIEhGU19PTERfUE1BUF9NQUdJQzoKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCQlyZXMgPSAtRU5PRU5UOwogCQlicmVhazsKIAl9Ci0KK291dDoKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9zdXBlci5jIGIvZnMvaGZzcGx1cy9zdXBlci5jCmluZGV4IDlhM2I0NzkuLmI0OWI1NTUgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuYworKysgYi9mcy9oZnNwbHVzL3N1cGVyLmMKQEAgLTMzOCwyMCArMzM4LDIyIEBACiAJc3RydWN0IGlub2RlICpyb290LCAqaW5vZGU7CiAJc3RydWN0IHFzdHIgc3RyOwogCXN0cnVjdCBubHNfdGFibGUgKm5scyA9IE5VTEw7Ci0JaW50IGVyciA9IC1FSU5WQUw7CisJaW50IGVycjsKIAorCWVyciA9IC1FSU5WQUw7CiAJc2JpID0ga3phbGxvYyhzaXplb2YoKnNiaSksIEdGUF9LRVJORUwpOwogCWlmICghc2JpKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBvdXQ7CiAKIAlzYi0+c19mc19pbmZvID0gc2JpOwogCW11dGV4X2luaXQoJnNiaS0+YWxsb2NfbXV0ZXgpOwogCW11dGV4X2luaXQoJnNiaS0+dmhfbXV0ZXgpOwogCWhmc3BsdXNfZmlsbF9kZWZhdWx0cyhzYmkpOworCisJZXJyID0gLUVJTlZBTDsKIAlpZiAoIWhmc3BsdXNfcGFyc2Vfb3B0aW9ucyhkYXRhLCBzYmkpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaGZzOiB1bmFibGUgdG8gcGFyc2UgbW91bnQgb3B0aW9uc1xuIik7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gY2xlYW51cDsKKwkJZ290byBvdXRfdW5sb2FkX25sczsKIAl9CiAKIAkvKiB0ZW1wb3JhcmlseSB1c2UgdXRmOCB0byBjb3JyZWN0bHkgZmluZCB0aGUgaGlkZGVuIGRpciBiZWxvdyAqLwpAQCAtMzU5LDE2ICszNjEsMTQgQEAKIAlzYmktPm5scyA9IGxvYWRfbmxzKCJ1dGY4Iik7CiAJaWYgKCFzYmktPm5scykgewogCQlwcmludGsoS0VSTl9FUlIgImhmczogdW5hYmxlIHRvIGxvYWQgbmxzIGZvciB1dGY4XG4iKTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBjbGVhbnVwOworCQlnb3RvIG91dF91bmxvYWRfbmxzOwogCX0KIAogCS8qIEdyYWIgdGhlIHZvbHVtZSBoZWFkZXIgKi8KIAlpZiAoaGZzcGx1c19yZWFkX3dyYXBwZXIoc2IpKSB7CiAJCWlmICghc2lsZW50KQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGZzOiB1bmFibGUgdG8gZmluZCBIRlMrIHN1cGVyYmxvY2tcbiIpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGNsZWFudXA7CisJCWdvdG8gb3V0X3VubG9hZF9ubHM7CiAJfQogCXZoZHIgPSBzYmktPnNfdmhkcjsKIApAQCAtMzc3LDcgKzM3Nyw3IEBACiAJaWYgKGJlMTZfdG9fY3B1KHZoZHItPnZlcnNpb24pIDwgSEZTUExVU19NSU5fVkVSU0lPTiB8fAogCSAgICBiZTE2X3RvX2NwdSh2aGRyLT52ZXJzaW9uKSA+IEhGU1BMVVNfQ1VSUkVOVF9WRVJTSU9OKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaGZzOiB3cm9uZyBmaWxlc3lzdGVtIHZlcnNpb25cbiIpOwotCQlnb3RvIGNsZWFudXA7CisJCWdvdG8gb3V0X2ZyZWVfdmhkcjsKIAl9CiAJc2JpLT50b3RhbF9ibG9ja3MgPSBiZTMyX3RvX2NwdSh2aGRyLT50b3RhbF9ibG9ja3MpOwogCXNiaS0+ZnJlZV9ibG9ja3MgPSBiZTMyX3RvX2NwdSh2aGRyLT5mcmVlX2Jsb2Nrcyk7CkBAIC00MjEsMTkgKzQyMSwxOSBAQAogCXNiaS0+ZXh0X3RyZWUgPSBoZnNfYnRyZWVfb3BlbihzYiwgSEZTUExVU19FWFRfQ05JRCk7CiAJaWYgKCFzYmktPmV4dF90cmVlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaGZzOiBmYWlsZWQgdG8gbG9hZCBleHRlbnRzIGZpbGVcbiIpOwotCQlnb3RvIGNsZWFudXA7CisJCWdvdG8gb3V0X2ZyZWVfdmhkcjsKIAl9CiAJc2JpLT5jYXRfdHJlZSA9IGhmc19idHJlZV9vcGVuKHNiLCBIRlNQTFVTX0NBVF9DTklEKTsKIAlpZiAoIXNiaS0+Y2F0X3RyZWUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGZhaWxlZCB0byBsb2FkIGNhdGFsb2cgZmlsZVxuIik7Ci0JCWdvdG8gY2xlYW51cDsKKwkJZ290byBvdXRfY2xvc2VfZXh0X3RyZWU7CiAJfQogCiAJaW5vZGUgPSBoZnNwbHVzX2lnZXQoc2IsIEhGU1BMVVNfQUxMT0NfQ05JRCk7CiAJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGZhaWxlZCB0byBsb2FkIGFsbG9jYXRpb24gZmlsZVxuIik7CiAJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwotCQlnb3RvIGNsZWFudXA7CisJCWdvdG8gb3V0X2Nsb3NlX2NhdF90cmVlOwogCX0KIAlzYmktPmFsbG9jX2ZpbGUgPSBpbm9kZTsKIApAQCAtNDQyLDE0ICs0NDIsNyBAQAogCWlmIChJU19FUlIocm9vdCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGZhaWxlZCB0byBsb2FkIHJvb3QgZGlyZWN0b3J5XG4iKTsKIAkJZXJyID0gUFRSX0VSUihyb290KTsKLQkJZ290byBjbGVhbnVwOwotCX0KLQlzYi0+c19kX29wID0gJmhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnM7Ci0Jc2ItPnNfcm9vdCA9IGRfYWxsb2Nfcm9vdChyb290KTsKLQlpZiAoIXNiLT5zX3Jvb3QpIHsKLQkJaXB1dChyb290KTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBjbGVhbnVwOworCQlnb3RvIG91dF9wdXRfYWxsb2NfZmlsZTsKIAl9CiAKIAlzdHIubGVuID0gc2l6ZW9mKEhGU1BfSElEREVORElSX05BTUUpIC0gMTsKQEAgLTQ1OSw0NiArNDUyLDY5IEBACiAJaWYgKCFoZnNfYnJlY19yZWFkKCZmZCwgJmVudHJ5LCBzaXplb2YoZW50cnkpKSkgewogCQloZnNfZmluZF9leGl0KCZmZCk7CiAJCWlmIChlbnRyeS50eXBlICE9IGNwdV90b19iZTE2KEhGU1BMVVNfRk9MREVSKSkKLQkJCWdvdG8gY2xlYW51cDsKKwkJCWdvdG8gb3V0X3B1dF9yb290OwogCQlpbm9kZSA9IGhmc3BsdXNfaWdldChzYiwgYmUzMl90b19jcHUoZW50cnkuZm9sZGVyLmlkKSk7CiAJCWlmIChJU19FUlIoaW5vZGUpKSB7CiAJCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKLQkJCWdvdG8gY2xlYW51cDsKKwkJCWdvdG8gb3V0X3B1dF9yb290OwogCQl9CiAJCXNiaS0+aGlkZGVuX2RpciA9IGlub2RlOwogCX0gZWxzZQogCQloZnNfZmluZF9leGl0KCZmZCk7CiAKLQlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCi0JCWdvdG8gb3V0OworCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgeworCQkvKgorCQkgKiBIK0xYID09IGhmc3BsdXN1dGlscywgSCtMeCA9PSB0aGlzIGRyaXZlciwgSCtseCBpcyB1bnVzZWQKKwkJICogYWxsIHRocmVlIGFyZSByZWdpc3RlcmVkIHdpdGggQXBwbGUgZm9yIG91ciB1c2UKKwkJICovCisJCXZoZHItPmxhc3RfbW91bnRfdmVycyA9IGNwdV90b19iZTMyKEhGU1BfTU9VTlRfVkVSU0lPTik7CisJCXZoZHItPm1vZGlmeV9kYXRlID0gaGZzcF9ub3cybXQoKTsKKwkJYmUzMl9hZGRfY3B1KCZ2aGRyLT53cml0ZV9jb3VudCwgMSk7CisJCXZoZHItPmF0dHJpYnV0ZXMgJj0gY3B1X3RvX2JlMzIofkhGU1BMVVNfVk9MX1VOTU5UKTsKKwkJdmhkci0+YXR0cmlidXRlcyB8PSBjcHVfdG9fYmUzMihIRlNQTFVTX1ZPTF9JTkNOU1ROVCk7CisJCWhmc3BsdXNfc3luY19mcyhzYiwgMSk7CiAKLQkvKiBIK0xYID09IGhmc3BsdXN1dGlscywgSCtMeCA9PSB0aGlzIGRyaXZlciwgSCtseCBpcyB1bnVzZWQKLQkgKiBhbGwgdGhyZWUgYXJlIHJlZ2lzdGVyZWQgd2l0aCBBcHBsZSBmb3Igb3VyIHVzZQotCSAqLwotCXZoZHItPmxhc3RfbW91bnRfdmVycyA9IGNwdV90b19iZTMyKEhGU1BfTU9VTlRfVkVSU0lPTik7Ci0Jdmhkci0+bW9kaWZ5X2RhdGUgPSBoZnNwX25vdzJtdCgpOwotCWJlMzJfYWRkX2NwdSgmdmhkci0+d3JpdGVfY291bnQsIDEpOwotCXZoZHItPmF0dHJpYnV0ZXMgJj0gY3B1X3RvX2JlMzIofkhGU1BMVVNfVk9MX1VOTU5UKTsKLQl2aGRyLT5hdHRyaWJ1dGVzIHw9IGNwdV90b19iZTMyKEhGU1BMVVNfVk9MX0lOQ05TVE5UKTsKLQloZnNwbHVzX3N5bmNfZnMoc2IsIDEpOworCQlpZiAoIXNiaS0+aGlkZGVuX2RpcikgeworCQkJbXV0ZXhfbG9jaygmc2JpLT52aF9tdXRleCk7CisJCQlzYmktPmhpZGRlbl9kaXIgPSBoZnNwbHVzX25ld19pbm9kZShzYiwgU19JRkRJUik7CisJCQloZnNwbHVzX2NyZWF0ZV9jYXQoc2JpLT5oaWRkZW5fZGlyLT5pX2lubywgcm9vdCwgJnN0ciwKKwkJCQkJICAgc2JpLT5oaWRkZW5fZGlyKTsKKwkJCW11dGV4X3VubG9jaygmc2JpLT52aF9tdXRleCk7CiAKLQlpZiAoIXNiaS0+aGlkZGVuX2RpcikgewotCQltdXRleF9sb2NrKCZzYmktPnZoX211dGV4KTsKLQkJc2JpLT5oaWRkZW5fZGlyID0gaGZzcGx1c19uZXdfaW5vZGUoc2IsIFNfSUZESVIpOwotCQloZnNwbHVzX2NyZWF0ZV9jYXQoc2JpLT5oaWRkZW5fZGlyLT5pX2lubywgc2ItPnNfcm9vdC0+ZF9pbm9kZSwKLQkJCQkgICAmc3RyLCBzYmktPmhpZGRlbl9kaXIpOwotCQltdXRleF91bmxvY2soJnNiaS0+dmhfbXV0ZXgpOwotCi0JCWhmc3BsdXNfbWFya19pbm9kZV9kaXJ0eShzYmktPmhpZGRlbl9kaXIsIEhGU1BMVVNfSV9DQVRfRElSVFkpOworCQkJaGZzcGx1c19tYXJrX2lub2RlX2RpcnR5KHNiaS0+aGlkZGVuX2RpciwKKwkJCQkJCSBIRlNQTFVTX0lfQ0FUX0RJUlRZKTsKKwkJfQogCX0KLW91dDoKKworCXNiLT5zX2Rfb3AgPSAmaGZzcGx1c19kZW50cnlfb3BlcmF0aW9uczsKKwlzYi0+c19yb290ID0gZF9hbGxvY19yb290KHJvb3QpOworCWlmICghc2ItPnNfcm9vdCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9wdXRfaGlkZGVuX2RpcjsKKwl9CisKIAl1bmxvYWRfbmxzKHNiaS0+bmxzKTsKIAlzYmktPm5scyA9IG5sczsKIAlyZXR1cm4gMDsKIAotY2xlYW51cDoKLQloZnNwbHVzX3B1dF9zdXBlcihzYik7CitvdXRfcHV0X2hpZGRlbl9kaXI6CisJaXB1dChzYmktPmhpZGRlbl9kaXIpOworb3V0X3B1dF9yb290OgorCWlwdXQoc2JpLT5hbGxvY19maWxlKTsKK291dF9wdXRfYWxsb2NfZmlsZToKKwlpcHV0KHNiaS0+YWxsb2NfZmlsZSk7CitvdXRfY2xvc2VfY2F0X3RyZWU6CisJaGZzX2J0cmVlX2Nsb3NlKHNiaS0+Y2F0X3RyZWUpOworb3V0X2Nsb3NlX2V4dF90cmVlOgorCWhmc19idHJlZV9jbG9zZShzYmktPmV4dF90cmVlKTsKK291dF9mcmVlX3ZoZHI6CisJa2ZyZWUoc2JpLT5zX3ZoZHIpOworCWtmcmVlKHNiaS0+c19iYWNrdXBfdmhkcik7CitvdXRfdW5sb2FkX25sczoKKwl1bmxvYWRfbmxzKHNiaS0+bmxzKTsKIAl1bmxvYWRfbmxzKG5scyk7CisJa2ZyZWUoc2JpKTsKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL3dyYXBwZXIuYyBiL2ZzL2hmc3BsdXMvd3JhcHBlci5jCmluZGV4IDE5NjIzMTcuLjMwMzFkODEgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvd3JhcHBlci5jCisrKyBiL2ZzL2hmc3BsdXMvd3JhcHBlci5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBjcHVfdG9fYmUxNihIRlNQX1dSQVBfTUFHSUMpOgogCQlpZiAoIWhmc3BsdXNfcmVhZF9tZGIoc2JpLT5zX3ZoZHIsICZ3ZCkpCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X2ZyZWVfYmFja3VwX3ZoZHI7CiAJCXdkLmFibGtfc2l6ZSA+Pj0gSEZTUExVU19TRUNUT1JfU0hJRlQ7CiAJCXBhcnRfc3RhcnQgKz0gd2QuYWJsa19zdGFydCArIHdkLmVtYmVkX3N0YXJ0ICogd2QuYWJsa19zaXplOwogCQlwYXJ0X3NpemUgPSB3ZC5lbWJlZF9jb3VudCAqIHdkLmFibGtfc2l6ZTsKQEAgLTE3OSw3ICsxNzksNyBAQAogCQkgKiAoc2hvdWxkIGRvIHRoaXMgb25seSBmb3IgY2Ryb20vbG9vcCB0aG91Z2gpCiAJCSAqLwogCQlpZiAoaGZzX3BhcnRfZmluZChzYiwgJnBhcnRfc3RhcnQsICZwYXJ0X3NpemUpKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9mcmVlX2JhY2t1cF92aGRyOwogCQlnb3RvIHJlcmVhZDsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jCmluZGV4IGRhODVlNTYuLjA2NDdkODAgMTAwNjQ0Ci0tLSBhL2ZzL2lub2RlLmMKKysrIGIvZnMvaW5vZGUuYwpAQCAtMjk1LDYgKzI5NSwyMCBAQAogCQljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBpX2NhbGxiYWNrKTsKIH0KIAordm9pZCBhZGRyZXNzX3NwYWNlX2luaXRfb25jZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwltZW1zZXQobWFwcGluZywgMCwgc2l6ZW9mKCptYXBwaW5nKSk7CisJSU5JVF9SQURJWF9UUkVFKCZtYXBwaW5nLT5wYWdlX3RyZWUsIEdGUF9BVE9NSUMpOworCXNwaW5fbG9ja19pbml0KCZtYXBwaW5nLT50cmVlX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZtYXBwaW5nLT5pX21tYXBfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJm1hcHBpbmctPnByaXZhdGVfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPnByaXZhdGVfbG9jayk7CisJSU5JVF9SQVdfUFJJT19UUkVFX1JPT1QoJm1hcHBpbmctPmlfbW1hcCk7CisJSU5JVF9MSVNUX0hFQUQoJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIpOworCW11dGV4X2luaXQoJm1hcHBpbmctPnVubWFwX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0woYWRkcmVzc19zcGFjZV9pbml0X29uY2UpOworCiAvKgogICogVGhlc2UgYXJlIGluaXRpYWxpemF0aW9ucyB0aGF0IG9ubHkgbmVlZCB0byBiZSBkb25lCiAgKiBvbmNlLCBiZWNhdXNlIHRoZSBmaWVsZHMgYXJlIGlkZW1wb3RlbnQgYWNyb3NzIHVzZQpAQCAtMzA4LDEzICszMjIsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZXZpY2VzKTsKIAlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfd2JfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2xydSk7Ci0JSU5JVF9SQURJWF9UUkVFKCZpbm9kZS0+aV9kYXRhLnBhZ2VfdHJlZSwgR0ZQX0FUT01JQyk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmlub2RlLT5pX2RhdGEudHJlZV9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmaW5vZGUtPmlfZGF0YS5pX21tYXBfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RhdGEucHJpdmF0ZV9saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmaW5vZGUtPmlfZGF0YS5wcml2YXRlX2xvY2spOwotCUlOSVRfUkFXX1BSSU9fVFJFRV9ST09UKCZpbm9kZS0+aV9kYXRhLmlfbW1hcCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RhdGEuaV9tbWFwX25vbmxpbmVhcik7CisJYWRkcmVzc19zcGFjZV9pbml0X29uY2UoJmlub2RlLT5pX2RhdGEpOwogCWlfc2l6ZV9vcmRlcmVkX2luaXQoaW5vZGUpOwogI2lmZGVmIENPTkZJR19GU05PVElGWQogCUlOSVRfSExJU1RfSEVBRCgmaW5vZGUtPmlfZnNub3RpZnlfbWFya3MpOwpAQCAtNTQwLDExICs1NDgsMTQgQEAKIC8qKgogICogaW52YWxpZGF0ZV9pbm9kZXMJLSBhdHRlbXB0IHRvIGZyZWUgYWxsIGlub2RlcyBvbiBhIHN1cGVyYmxvY2sKICAqIEBzYjoJCXN1cGVyYmxvY2sgdG8gb3BlcmF0ZSBvbgorICogQGtpbGxfZGlydHk6IGZsYWcgdG8gZ3VpZGUgaGFuZGxpbmcgb2YgZGlydHkgaW5vZGVzCiAgKgogICogQXR0ZW1wdHMgdG8gZnJlZSBhbGwgaW5vZGVzIGZvciBhIGdpdmVuIHN1cGVyYmxvY2suICBJZiB0aGVyZSB3ZXJlIGFueQogICogYnVzeSBpbm9kZXMgcmV0dXJuIGEgbm9uLXplcm8gdmFsdWUsIGVsc2UgemVyby4KKyAqIElmIEBraWxsX2RpcnR5IGlzIHNldCwgZGlzY2FyZCBkaXJ0eSBpbm9kZXMgdG9vLCBvdGhlcndpc2UgdHJlYXQKKyAqIHRoZW0gYXMgYnVzeS4KICAqLwotaW50IGludmFsaWRhdGVfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCitpbnQgaW52YWxpZGF0ZV9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYm9vbCBraWxsX2RpcnR5KQogewogCWludCBidXN5ID0gMDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlLCAqbmV4dDsKQEAgLTU1Niw2ICs1NjcsMTAgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW5vZGUsIG5leHQsICZzYi0+c19pbm9kZXMsIGlfc2JfbGlzdCkgewogCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9ORVcgfCBJX0ZSRUVJTkcgfCBJX1dJTExfRlJFRSkpCiAJCQljb250aW51ZTsKKwkJaWYgKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWSAmJiAha2lsbF9kaXJ0eSkgeworCQkJYnVzeSA9IDE7CisJCQljb250aW51ZTsKKwkJfQogCQlpZiAoYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSkgewogCQkJYnVzeSA9IDE7CiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oCmluZGV4IDA2NjM1NjguLjliOTc2YjUgMTAwNjQ0Ci0tLSBhL2ZzL2ludGVybmFsLmgKKysrIGIvZnMvaW50ZXJuYWwuaApAQCAtMTEyLDQgKzExMiw0IEBACiAgKi8KIGV4dGVybiBpbnQgZ2V0X25yX2RpcnR5X2lub2Rlcyh2b2lkKTsKIGV4dGVybiB2b2lkIGV2aWN0X2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7Ci1leHRlcm4gaW50IGludmFsaWRhdGVfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKK2V4dGVybiBpbnQgaW52YWxpZGF0ZV9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICosIGJvb2wpOwpkaWZmIC0tZ2l0IGEvZnMvaW9jdGwuYyBiL2ZzL2lvY3RsLmMKaW5kZXggYTU5NjM1ZS4uMWVlYmViNyAxMDA2NDQKLS0tIGEvZnMvaW9jdGwuYworKysgYi9mcy9pb2N0bC5jCkBAIC0yNzMsNiArMjczLDEzIEBACiAJCWxlbiA9IGlzaXplOwogCX0KIAorCS8qCisJICogU29tZSBmaWxlc3lzdGVtcyBjYW4ndCBkZWFsIHdpdGggYmVpbmcgYXNrZWQgdG8gbWFwIGxlc3MgdGhhbgorCSAqIGJsb2Nrc2l6ZSwgc28gbWFrZSBzdXJlIG91ciBsZW4gaXMgYXQgbGVhc3QgYmxvY2sgbGVuZ3RoLgorCSAqLworCWlmIChsb2dpY2FsX3RvX2Jsayhpbm9kZSwgbGVuKSA9PSAwKQorCQlsZW4gPSBibGtfdG9fbG9naWNhbChpbm9kZSwgMSk7CisKIAlzdGFydF9ibGsgPSBsb2dpY2FsX3RvX2Jsayhpbm9kZSwgc3RhcnQpOwogCWxhc3RfYmxrID0gbG9naWNhbF90b19ibGsoaW5vZGUsIHN0YXJ0ICsgbGVuIC0gMSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2piZDIvam91cm5hbC5jIGIvZnMvamJkMi9qb3VybmFsLmMKaW5kZXggOWU0Njg2OS4uOTdlNzM0NiAxMDA2NDQKLS0tIGEvZnMvamJkMi9qb3VybmFsLmMKKysrIGIvZnMvamJkMi9qb3VybmFsLmMKQEAgLTQ3Myw3ICs0NzMsOCBAQAogfQogCiAvKgotICogQ2FsbGVkIHVuZGVyIGpfc3RhdGVfbG9jay4gIFJldHVybnMgdHJ1ZSBpZiBhIHRyYW5zYWN0aW9uIGNvbW1pdCB3YXMgc3RhcnRlZC4KKyAqIENhbGxlZCB3aXRoIGpfc3RhdGVfbG9jayBsb2NrZWQgZm9yIHdyaXRpbmcuCisgKiBSZXR1cm5zIHRydWUgaWYgYSB0cmFuc2FjdGlvbiBjb21taXQgd2FzIHN0YXJ0ZWQuCiAgKi8KIGludCBfX2piZDJfbG9nX3N0YXJ0X2NvbW1pdChqb3VybmFsX3QgKmpvdXJuYWwsIHRpZF90IHRhcmdldCkKIHsKQEAgLTUyMCwxMSArNTIxLDEzIEBACiB7CiAJdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24gPSBOVUxMOwogCXRpZF90IHRpZDsKKwlpbnQgbmVlZF90b19zdGFydCA9IDA7CiAKIAlyZWFkX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJaWYgKGpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbiAmJiAhY3VycmVudC0+am91cm5hbF9pbmZvKSB7CiAJCXRyYW5zYWN0aW9uID0gam91cm5hbC0+al9ydW5uaW5nX3RyYW5zYWN0aW9uOwotCQlfX2piZDJfbG9nX3N0YXJ0X2NvbW1pdChqb3VybmFsLCB0cmFuc2FjdGlvbi0+dF90aWQpOworCQlpZiAoIXRpZF9nZXEoam91cm5hbC0+al9jb21taXRfcmVxdWVzdCwgdHJhbnNhY3Rpb24tPnRfdGlkKSkKKwkJCW5lZWRfdG9fc3RhcnQgPSAxOwogCX0gZWxzZSBpZiAoam91cm5hbC0+al9jb21taXR0aW5nX3RyYW5zYWN0aW9uKQogCQl0cmFuc2FjdGlvbiA9IGpvdXJuYWwtPmpfY29tbWl0dGluZ190cmFuc2FjdGlvbjsKIApAQCAtNTM1LDYgKzUzOCw4IEBACiAKIAl0aWQgPSB0cmFuc2FjdGlvbi0+dF90aWQ7CiAJcmVhZF91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJaWYgKG5lZWRfdG9fc3RhcnQpCisJCWpiZDJfbG9nX3N0YXJ0X2NvbW1pdChqb3VybmFsLCB0aWQpOwogCWpiZDJfbG9nX3dhaXRfY29tbWl0KGpvdXJuYWwsIHRpZCk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmMgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKaW5kZXggZmFhZDJiZC4uMWQxMTkxMCAxMDA2NDQKLS0tIGEvZnMvamJkMi90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2piZDIvdHJhbnNhY3Rpb24uYwpAQCAtMTE3LDEwICsxMTcsMTAgQEAKIHN0YXRpYyBpbnQgc3RhcnRfdGhpc19oYW5kbGUoam91cm5hbF90ICpqb3VybmFsLCBoYW5kbGVfdCAqaGFuZGxlLAogCQkJICAgICBpbnQgZ2ZwX21hc2spCiB7Ci0JdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb247Ci0JaW50IG5lZWRlZDsKLQlpbnQgbmJsb2NrcyA9IGhhbmRsZS0+aF9idWZmZXJfY3JlZGl0czsKLQl0cmFuc2FjdGlvbl90ICpuZXdfdHJhbnNhY3Rpb24gPSBOVUxMOworCXRyYW5zYWN0aW9uX3QJKnRyYW5zYWN0aW9uLCAqbmV3X3RyYW5zYWN0aW9uID0gTlVMTDsKKwl0aWRfdAkJdGlkOworCWludAkJbmVlZGVkLCBuZWVkX3RvX3N0YXJ0OworCWludAkJbmJsb2NrcyA9IGhhbmRsZS0+aF9idWZmZXJfY3JlZGl0czsKIAogCWlmIChuYmxvY2tzID4gam91cm5hbC0+al9tYXhfdHJhbnNhY3Rpb25fYnVmZmVycykgewogCQlwcmludGsoS0VSTl9FUlIgIkpCRDogJXMgd2FudHMgdG9vIG1hbnkgY3JlZGl0cyAoJWQgPiAlZClcbiIsCkBAIC0yMjIsOCArMjIyLDExIEBACiAJCWF0b21pY19zdWIobmJsb2NrcywgJnRyYW5zYWN0aW9uLT50X291dHN0YW5kaW5nX2NyZWRpdHMpOwogCQlwcmVwYXJlX3RvX3dhaXQoJmpvdXJuYWwtPmpfd2FpdF90cmFuc2FjdGlvbl9sb2NrZWQsICZ3YWl0LAogCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJX19qYmQyX2xvZ19zdGFydF9jb21taXQoam91cm5hbCwgdHJhbnNhY3Rpb24tPnRfdGlkKTsKKwkJdGlkID0gdHJhbnNhY3Rpb24tPnRfdGlkOworCQluZWVkX3RvX3N0YXJ0ID0gIXRpZF9nZXEoam91cm5hbC0+al9jb21taXRfcmVxdWVzdCwgdGlkKTsKIAkJcmVhZF91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCWlmIChuZWVkX3RvX3N0YXJ0KQorCQkJamJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWwsIHRpZCk7CiAJCXNjaGVkdWxlKCk7CiAJCWZpbmlzaF93YWl0KCZqb3VybmFsLT5qX3dhaXRfdHJhbnNhY3Rpb25fbG9ja2VkLCAmd2FpdCk7CiAJCWdvdG8gcmVwZWF0OwpAQCAtNDQyLDcgKzQ0NSw4IEBACiB7CiAJdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24gPSBoYW5kbGUtPmhfdHJhbnNhY3Rpb247CiAJam91cm5hbF90ICpqb3VybmFsID0gdHJhbnNhY3Rpb24tPnRfam91cm5hbDsKLQlpbnQgcmV0OworCXRpZF90CQl0aWQ7CisJaW50CQluZWVkX3RvX3N0YXJ0LCByZXQ7CiAKIAkvKiBJZiB3ZSd2ZSBoYWQgYW4gYWJvcnQgb2YgYW55IHR5cGUsIGRvbid0IGV2ZW4gdGhpbmsgYWJvdXQKIAkgKiBhY3R1YWxseSBkb2luZyB0aGUgcmVzdGFydCEgKi8KQEAgLTQ2NSw4ICs0NjksMTEgQEAKIAlzcGluX3VubG9jaygmdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOwogCiAJamJkX2RlYnVnKDIsICJyZXN0YXJ0aW5nIGhhbmRsZSAlcFxuIiwgaGFuZGxlKTsKLQlfX2piZDJfbG9nX3N0YXJ0X2NvbW1pdChqb3VybmFsLCB0cmFuc2FjdGlvbi0+dF90aWQpOworCXRpZCA9IHRyYW5zYWN0aW9uLT50X3RpZDsKKwluZWVkX3RvX3N0YXJ0ID0gIXRpZF9nZXEoam91cm5hbC0+al9jb21taXRfcmVxdWVzdCwgdGlkKTsKIAlyZWFkX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwlpZiAobmVlZF90b19zdGFydCkKKwkJamJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWwsIHRpZCk7CiAKIAlsb2NrX21hcF9yZWxlYXNlKCZoYW5kbGUtPmhfbG9ja2RlcF9tYXApOwogCWhhbmRsZS0+aF9idWZmZXJfY3JlZGl0cyA9IG5ibG9ja3M7CmRpZmYgLS1naXQgYS9mcy9sb2NrZC9ob3N0LmMgYi9mcy9sb2NrZC9ob3N0LmMKaW5kZXggNWYxYmNiMi4uYjdjOTliZiAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvaG9zdC5jCisrKyBiL2ZzL2xvY2tkL2hvc3QuYwpAQCAtNTIwLDcgKzUyMCw3IEBACiAJCQkJCXN0cnVjdCBuc21faGFuZGxlICpuc20sCiAJCQkJCWNvbnN0IHN0cnVjdCBubG1fcmVib290ICppbmZvKQogewotCXN0cnVjdCBubG1faG9zdCAqaG9zdCA9IE5VTEw7CisJc3RydWN0IG5sbV9ob3N0ICpob3N0OwogCXN0cnVjdCBobGlzdF9oZWFkICpjaGFpbjsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOwogCkBAIC01MzIsMTIgKzUzMiwxMyBAQAogCQkJaG9zdC0+aF9zdGF0ZSsrOwogCiAJCQlubG1fZ2V0X2hvc3QoaG9zdCk7Ci0JCQlnb3RvIG91dDsKKwkJCW11dGV4X3VubG9jaygmbmxtX2hvc3RfbXV0ZXgpOworCQkJcmV0dXJuIGhvc3Q7CiAJCX0KIAl9Ci1vdXQ6CisKIAltdXRleF91bmxvY2soJm5sbV9ob3N0X211dGV4KTsKLQlyZXR1cm4gaG9zdDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCA3ZDc3ZjI0Li4wMDg3Y2Y5IDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCisrKyBiL2ZzL25hbWVpLmMKQEAgLTQ1NSwxNCArNDU1LDYgQEAKIAlzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGN1cnJlbnQtPmZzOwogCXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IG5kLT5wYXRoLmRlbnRyeTsKIAotCS8qCi0JICogSXQgY2FuIGJlIHBvc3NpYmxlIHRvIHJldmFsaWRhdGUgdGhlIGRlbnRyeSB0aGF0IHdlIHN0YXJ0ZWQKLQkgKiB0aGUgcGF0aCB3YWxrIHdpdGguIGZvcmNlX3JldmFsX3BhdGggbWF5IGFsc28gcmV2YWxpZGF0ZSB0aGUKLQkgKiBkZW50cnkgYWxyZWFkeSBjb21taXR0ZWQgdG8gdGhlIG5hbWVpZGF0YS4KLQkgKi8KLQlpZiAodW5saWtlbHkocGFyZW50ID09IGRlbnRyeSkpCi0JCXJldHVybiBuYW1laWRhdGFfZHJvcF9yY3UobmQpOwotCiAJQlVHX09OKCEobmQtPmZsYWdzICYgTE9PS1VQX1JDVSkpOwogCWlmIChuZC0+cm9vdC5tbnQpIHsKIAkJc3Bpbl9sb2NrKCZmcy0+bG9jayk7CkBAIC01NjEsMzkgKzU1MywyNSBAQAogICovCiB2b2lkIHJlbGVhc2Vfb3Blbl9pbnRlbnQoc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0JaWYgKG5kLT5pbnRlbnQub3Blbi5maWxlLT5mX3BhdGguZGVudHJ5ID09IE5VTEwpCi0JCXB1dF9maWxwKG5kLT5pbnRlbnQub3Blbi5maWxlKTsKLQllbHNlCi0JCWZwdXQobmQtPmludGVudC5vcGVuLmZpbGUpOwotfQorCXN0cnVjdCBmaWxlICpmaWxlID0gbmQtPmludGVudC5vcGVuLmZpbGU7CiAKLS8qCi0gKiBDYWxsIGRfcmV2YWxpZGF0ZSBhbmQgaGFuZGxlIGZpbGVzeXN0ZW1zIHRoYXQgcmVxdWVzdCByY3Utd2FsawotICogdG8gYmUgZHJvcHBlZC4gVGhpcyBtYXkgYmUgY2FsbGVkIGFuZCByZXR1cm4gaW4gcmN1LXdhbGsgbW9kZSwKLSAqIHJlZ2FyZGxlc3Mgb2Ygc3VjY2VzcyBvciBlcnJvci4gSWYgLUVDSElMRCBpcyByZXR1cm5lZCwgdGhlIGNhbGxlcgotICogbXVzdCByZXR1cm4gLUVDSElMRCBiYWNrIHVwIHRoZSBwYXRoIHdhbGsgc3RhY2sgc28gcGF0aCB3YWxrIG1heQotICogYmUgcmVzdGFydGVkIGluIHJlZi13YWxrIG1vZGUuCi0gKi8KLXN0YXRpYyBpbnQgZF9yZXZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCi17Ci0JaW50IHN0YXR1czsKLQotCXN0YXR1cyA9IGRlbnRyeS0+ZF9vcC0+ZF9yZXZhbGlkYXRlKGRlbnRyeSwgbmQpOwotCWlmIChzdGF0dXMgPT0gLUVDSElMRCkgewotCQlpZiAobmFtZWlkYXRhX2RlbnRyeV9kcm9wX3JjdShuZCwgZGVudHJ5KSkKLQkJCXJldHVybiBzdGF0dXM7Ci0JCXN0YXR1cyA9IGRlbnRyeS0+ZF9vcC0+ZF9yZXZhbGlkYXRlKGRlbnRyeSwgbmQpOworCWlmIChmaWxlICYmICFJU19FUlIoZmlsZSkpIHsKKwkJaWYgKGZpbGUtPmZfcGF0aC5kZW50cnkgPT0gTlVMTCkKKwkJCXB1dF9maWxwKGZpbGUpOworCQllbHNlCisJCQlmcHV0KGZpbGUpOwogCX0KLQotCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRlbnRyeSAqCitzdGF0aWMgaW5saW5lIGludCBkX3JldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlyZXR1cm4gZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICoKIGRvX3JldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKLQlpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gZF9yZXZhbGlkYXRlKGRlbnRyeSwgbmQpOworCWludCBzdGF0dXMgPSBkX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7CiAJaWYgKHVubGlrZWx5KHN0YXR1cyA8PSAwKSkgewogCQkvKgogCQkgKiBUaGUgZGVudHJ5IGZhaWxlZCB2YWxpZGF0aW9uLgpAQCAtNjAyLDI0ICs1ODAsMzkgQEAKIAkJICogdG8gcmV0dXJuIGEgZmFpbCBzdGF0dXMuCiAJCSAqLwogCQlpZiAoc3RhdHVzIDwgMCkgewotCQkJLyogSWYgd2UncmUgaW4gcmN1LXdhbGssIHdlIGRvbid0IGhhdmUgYSByZWYgKi8KLQkJCWlmICghKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpKQotCQkJCWRwdXQoZGVudHJ5KTsKKwkJCWRwdXQoZGVudHJ5KTsKIAkJCWRlbnRyeSA9IEVSUl9QVFIoc3RhdHVzKTsKLQotCQl9IGVsc2UgewotCQkJLyogRG9uJ3QgZF9pbnZhbGlkYXRlIGluIHJjdS13YWxrIG1vZGUgKi8KLQkJCWlmIChuYW1laWRhdGFfZGVudHJ5X2Ryb3BfcmN1X21heWJlKG5kLCBkZW50cnkpKQotCQkJCXJldHVybiBFUlJfUFRSKC1FQ0hJTEQpOwotCQkJaWYgKCFkX2ludmFsaWRhdGUoZGVudHJ5KSkgewotCQkJCWRwdXQoZGVudHJ5KTsKLQkJCQlkZW50cnkgPSBOVUxMOwotCQkJfQorCQl9IGVsc2UgaWYgKCFkX2ludmFsaWRhdGUoZGVudHJ5KSkgeworCQkJZHB1dChkZW50cnkpOworCQkJZGVudHJ5ID0gTlVMTDsKIAkJfQogCX0KIAlyZXR1cm4gZGVudHJ5OwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKgorZG9fcmV2YWxpZGF0ZV9yY3Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlpbnQgc3RhdHVzID0gZF9yZXZhbGlkYXRlKGRlbnRyeSwgbmQpOworCWlmIChsaWtlbHkoc3RhdHVzID4gMCkpCisJCXJldHVybiBkZW50cnk7CisJaWYgKHN0YXR1cyA9PSAtRUNISUxEKSB7CisJCWlmIChuYW1laWRhdGFfZGVudHJ5X2Ryb3BfcmN1KG5kLCBkZW50cnkpKQorCQkJcmV0dXJuIEVSUl9QVFIoLUVDSElMRCk7CisJCXJldHVybiBkb19yZXZhbGlkYXRlKGRlbnRyeSwgbmQpOworCX0KKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIEVSUl9QVFIoc3RhdHVzKTsKKwkvKiBEb24ndCBkX2ludmFsaWRhdGUgaW4gcmN1LXdhbGsgbW9kZSAqLworCWlmIChuYW1laWRhdGFfZGVudHJ5X2Ryb3BfcmN1KG5kLCBkZW50cnkpKQorCQlyZXR1cm4gRVJSX1BUUigtRUNISUxEKTsKKwlpZiAoIWRfaW52YWxpZGF0ZShkZW50cnkpKSB7CisJCWRwdXQoZGVudHJ5KTsKKwkJZGVudHJ5ID0gTlVMTDsKKwl9CisJcmV0dXJuIGRlbnRyeTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgbmVlZF9yZXZhbF9kb3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCWlmIChsaWtlbHkoIShkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfT1BfUkVWQUxJREFURSkpKQpAQCAtNjY0LDkgKzY1Nyw2IEBACiAJCXJldHVybiAwOwogCiAJaWYgKCFzdGF0dXMpIHsKLQkJLyogRG9uJ3QgZF9pbnZhbGlkYXRlIGluIHJjdS13YWxrIG1vZGUgKi8KLQkJaWYgKG5hbWVpZGF0YV9kcm9wX3JjdShuZCkpCi0JCQlyZXR1cm4gLUVDSElMRDsKIAkJZF9pbnZhbGlkYXRlKGRlbnRyeSk7CiAJCXN0YXR1cyA9IC1FU1RBTEU7CiAJfQpAQCAtNzczLDYgKzc2Myw4IEBACiAJaW50IGVycm9yOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGxpbmstPmRlbnRyeTsKIAorCUJVR19PTihuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKTsKKwogCXRvdWNoX2F0aW1lKGxpbmstPm1udCwgZGVudHJ5KTsKIAluZF9zZXRfbGluayhuZCwgTlVMTCk7CiAKQEAgLTgwMywxMCArNzk1LDE2IEBACiAgKiBXaXRob3V0IHRoYXQga2luZCBvZiB0b3RhbCBsaW1pdCwgbmFzdHkgY2hhaW5zIG9mIGNvbnNlY3V0aXZlCiAgKiBzeW1saW5rcyBjYW4gY2F1c2UgYWxtb3N0IGFyYml0cmFyaWx5IGxvbmcgbG9va3Vwcy4gCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGRvX2ZvbGxvd19saW5rKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3N0YXRpYyBpbmxpbmUgaW50IGRvX2ZvbGxvd19saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKIAl2b2lkICpjb29raWU7CiAJaW50IGVyciA9IC1FTE9PUDsKKworCS8qIFdlIGRyb3AgcmN1LXdhbGsgaGVyZSAqLworCWlmIChuYW1laWRhdGFfZGVudHJ5X2Ryb3BfcmN1X21heWJlKG5kLCBwYXRoLT5kZW50cnkpKQorCQlyZXR1cm4gLUVDSElMRDsKKwlCVUdfT04oaW5vZGUgIT0gcGF0aC0+ZGVudHJ5LT5kX2lub2RlKTsKKwogCWlmIChjdXJyZW50LT5saW5rX2NvdW50ID49IE1BWF9ORVNURURfTElOS1MpCiAJCWdvdG8gbG9vcDsKIAlpZiAoY3VycmVudC0+dG90YWxfbGlua19jb3VudCA+PSA0MCkKQEAgLTEyNTEsOSArMTI0OSwxNSBAQAogCQkJcmV0dXJuIC1FQ0hJTEQ7CiAKIAkJbmQtPnNlcSA9IHNlcTsKLQkJaWYgKGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9PUF9SRVZBTElEQVRFKQotCQkJZ290byBuZWVkX3JldmFsaWRhdGU7Ci1kb25lMjoKKwkJaWYgKHVubGlrZWx5KGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9PUF9SRVZBTElEQVRFKSkgeworCQkJZGVudHJ5ID0gZG9fcmV2YWxpZGF0ZV9yY3UoZGVudHJ5LCBuZCk7CisJCQlpZiAoIWRlbnRyeSkKKwkJCQlnb3RvIG5lZWRfbG9va3VwOworCQkJaWYgKElTX0VSUihkZW50cnkpKQorCQkJCWdvdG8gZmFpbDsKKwkJCWlmICghKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpKQorCQkJCWdvdG8gZG9uZTsKKwkJfQogCQlwYXRoLT5tbnQgPSBtbnQ7CiAJCXBhdGgtPmRlbnRyeSA9IGRlbnRyeTsKIAkJaWYgKGxpa2VseShfX2ZvbGxvd19tb3VudF9yY3UobmQsIHBhdGgsIGlub2RlLCBmYWxzZSkpKQpAQCAtMTI2Niw4ICsxMjcwLDEzIEBACiAJaWYgKCFkZW50cnkpCiAJCWdvdG8gbmVlZF9sb29rdXA7CiBmb3VuZDoKLQlpZiAoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX09QX1JFVkFMSURBVEUpCi0JCWdvdG8gbmVlZF9yZXZhbGlkYXRlOworCWlmICh1bmxpa2VseShkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfT1BfUkVWQUxJREFURSkpIHsKKwkJZGVudHJ5ID0gZG9fcmV2YWxpZGF0ZShkZW50cnksIG5kKTsKKwkJaWYgKCFkZW50cnkpCisJCQlnb3RvIG5lZWRfbG9va3VwOworCQlpZiAoSVNfRVJSKGRlbnRyeSkpCisJCQlnb3RvIGZhaWw7CisJfQogZG9uZToKIAlwYXRoLT5tbnQgPSBtbnQ7CiAJcGF0aC0+ZGVudHJ5ID0gZGVudHJ5OwpAQCAtMTMwOSwxNiArMTMxOCw2IEBACiAJbXV0ZXhfdW5sb2NrKCZkaXItPmlfbXV0ZXgpOwogCWdvdG8gZm91bmQ7CiAKLW5lZWRfcmV2YWxpZGF0ZToKLQlkZW50cnkgPSBkb19yZXZhbGlkYXRlKGRlbnRyeSwgbmQpOwotCWlmICghZGVudHJ5KQotCQlnb3RvIG5lZWRfbG9va3VwOwotCWlmIChJU19FUlIoZGVudHJ5KSkKLQkJZ290byBmYWlsOwotCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKQotCQlnb3RvIGRvbmUyOwotCWdvdG8gZG9uZTsKLQogZmFpbDoKIAlyZXR1cm4gUFRSX0VSUihkZW50cnkpOwogfQpAQCAtMTQxNSwxMSArMTQxNCw3IEBACiAJCQlnb3RvIG91dF9kcHV0OwogCiAJCWlmIChpbm9kZS0+aV9vcC0+Zm9sbG93X2xpbmspIHsKLQkJCS8qIFdlIGNvbW1vbmx5IGRyb3AgcmN1LXdhbGsgaGVyZSAqLwotCQkJaWYgKG5hbWVpZGF0YV9kZW50cnlfZHJvcF9yY3VfbWF5YmUobmQsIG5leHQuZGVudHJ5KSkKLQkJCQlyZXR1cm4gLUVDSElMRDsKLQkJCUJVR19PTihpbm9kZSAhPSBuZXh0LmRlbnRyeS0+ZF9pbm9kZSk7Ci0JCQllcnIgPSBkb19mb2xsb3dfbGluaygmbmV4dCwgbmQpOworCQkJZXJyID0gZG9fZm9sbG93X2xpbmsoaW5vZGUsICZuZXh0LCBuZCk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gcmV0dXJuX2VycjsKIAkJCW5kLT5pbm9kZSA9IG5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKQEAgLTE0NjMsMTAgKzE0NTgsNyBAQAogCQkJYnJlYWs7CiAJCWlmIChpbm9kZSAmJiB1bmxpa2VseShpbm9kZS0+aV9vcC0+Zm9sbG93X2xpbmspICYmCiAJCSAgICAobG9va3VwX2ZsYWdzICYgTE9PS1VQX0ZPTExPVykpIHsKLQkJCWlmIChuYW1laWRhdGFfZGVudHJ5X2Ryb3BfcmN1X21heWJlKG5kLCBuZXh0LmRlbnRyeSkpCi0JCQkJcmV0dXJuIC1FQ0hJTEQ7Ci0JCQlCVUdfT04oaW5vZGUgIT0gbmV4dC5kZW50cnktPmRfaW5vZGUpOwotCQkJZXJyID0gZG9fZm9sbG93X2xpbmsoJm5leHQsIG5kKTsKKwkJCWVyciA9IGRvX2ZvbGxvd19saW5rKGlub2RlLCAmbmV4dCwgbmQpOwogCQkJaWYgKGVycikKIAkJCQlnb3RvIHJldHVybl9lcnI7CiAJCQluZC0+aW5vZGUgPSBuZC0+cGF0aC5kZW50cnktPmRfaW5vZGU7CkBAIC0xNTAwLDEyICsxNDkyLDE1IEBACiAJCSAqIFdlIG1heSBuZWVkIHRvIGNoZWNrIHRoZSBjYWNoZWQgZGVudHJ5IGZvciBzdGFsZW5lc3MuCiAJCSAqLwogCQlpZiAobmVlZF9yZXZhbF9kb3QobmQtPnBhdGguZGVudHJ5KSkgeworCQkJaWYgKG5hbWVpZGF0YV9kcm9wX3JjdV9sYXN0X21heWJlKG5kKSkKKwkJCQlyZXR1cm4gLUVDSElMRDsKIAkJCS8qIE5vdGU6IHdlIGRvIG5vdCBkX2ludmFsaWRhdGUoKSAqLwogCQkJZXJyID0gZF9yZXZhbGlkYXRlKG5kLT5wYXRoLmRlbnRyeSwgbmQpOwogCQkJaWYgKCFlcnIpCiAJCQkJZXJyID0gLUVTVEFMRTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCWJyZWFrOworCQkJcmV0dXJuIDA7CiAJCX0KIHJldHVybl9iYXNlOgogCQlpZiAobmFtZWlkYXRhX2Ryb3BfcmN1X2xhc3RfbWF5YmUobmQpKQpAQCAtMjI2NSw4ICsyMjYwLDYgQEAKIAlyZXR1cm4gZmlscDsKIAogZXhpdDoKLQlpZiAoIUlTX0VSUihuZC0+aW50ZW50Lm9wZW4uZmlsZSkpCi0JCXJlbGVhc2Vfb3Blbl9pbnRlbnQobmQpOwogCXBhdGhfcHV0KCZuZC0+cGF0aCk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQpAQCAtMjM4OSw4ICsyMzgyLDYgQEAKIGV4aXRfZHB1dDoKIAlwYXRoX3B1dF9jb25kaXRpb25hbChwYXRoLCBuZCk7CiBleGl0OgotCWlmICghSVNfRVJSKG5kLT5pbnRlbnQub3Blbi5maWxlKSkKLQkJcmVsZWFzZV9vcGVuX2ludGVudChuZCk7CiAJcGF0aF9wdXQoJm5kLT5wYXRoKTsKIAlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiB9CkBAIC0yNDc3LDYgKzI0NjgsNyBAQAogCX0KIAlhdWRpdF9pbm9kZShwYXRobmFtZSwgbmQucGF0aC5kZW50cnkpOwogCWZpbHAgPSBmaW5pc2hfb3BlbigmbmQsIG9wZW5fZmxhZywgYWNjX21vZGUpOworCXJlbGVhc2Vfb3Blbl9pbnRlbnQoJm5kKTsKIAlyZXR1cm4gZmlscDsKIAogY3JlYXQ6CkBAIC0yNTUzLDYgKzI1NDUsNyBAQAogCQlwYXRoX3B1dCgmbmQucm9vdCk7CiAJaWYgKGZpbHAgPT0gRVJSX1BUUigtRVNUQUxFKSAmJiAhKGZsYWdzICYgTE9PS1VQX1JFVkFMKSkKIAkJZ290byByZXZhbDsKKwlyZWxlYXNlX29wZW5faW50ZW50KCZuZCk7CiAJcmV0dXJuIGZpbHA7CiAKIGV4aXRfZHB1dDoKQEAgLTI1NjAsOCArMjU1Myw2IEBACiBvdXRfcGF0aDoKIAlwYXRoX3B1dCgmbmQucGF0aCk7CiBvdXRfZmlscDoKLQlpZiAoIUlTX0VSUihuZC5pbnRlbnQub3Blbi5maWxlKSkKLQkJcmVsZWFzZV9vcGVuX2ludGVudCgmbmQpOwogCWZpbHAgPSBFUlJfUFRSKGVycm9yKTsKIAlnb3RvIG91dDsKIH0KZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggN2IwYjk1My4uZDFlZGYyNiAxMDA2NDQKLS0tIGEvZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmFtZXNwYWNlLmMKQEAgLTEyNDQsNyArMTI0NCw3IEBACiAJCSAqLwogCQlicl93cml0ZV9sb2NrKHZmc21vdW50X2xvY2spOwogCQlpZiAobW50X2dldF9jb3VudChtbnQpICE9IDIpIHsKLQkJCWJyX3dyaXRlX2xvY2sodmZzbW91bnRfbG9jayk7CisJCQlicl93cml0ZV91bmxvY2sodmZzbW91bnRfbG9jayk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJCWJyX3dyaXRlX3VubG9jayh2ZnNtb3VudF9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFjay5jIGIvZnMvbmZzL2NhbGxiYWNrLmMKaW5kZXggMTk5MDE2NS4uZTNkMjk0MiAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrLmMKKysrIGIvZnMvbmZzL2NhbGxiYWNrLmMKQEAgLTEzNSwzMyArMTM1LDYgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQogLyoKLSAqICAqIENCX1NFUVVFTkNFIG9wZXJhdGlvbnMgd2lsbCBmYWlsIHVudGlsIHRoZSBjYWxsYmFjayBzZXNzaW9uaWQgaXMgc2V0LgotICogICAqLwotaW50IG5mczRfc2V0X2NhbGxiYWNrX3Nlc3Npb25pZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQotewotCXN0cnVjdCBzdmNfc2VydiAqc2VydiA9IGNscC0+Y2xfcnBjY2xpZW50LT5jbF94cHJ0LT5iY19zZXJ2OwotCXN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqYmNfc2lkOwotCi0JaWYgKCFzZXJ2LT5zdl9iY194cHJ0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIG9uIHN1Y2Nlc3MgZnJlZWQgaW4geHBydF9mcmVlICovCi0JYmNfc2lkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG5mczRfc2Vzc2lvbmlkKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFiY19zaWQpCi0JCXJldHVybiAtRU5PTUVNOwotCW1lbWNweShiY19zaWQtPmRhdGEsICZjbHAtPmNsX3Nlc3Npb24tPnNlc3NfaWQuZGF0YSwKLQkJTkZTNF9NQVhfU0VTU0lPTklEX0xFTik7Ci0Jc3Bpbl9sb2NrX2JoKCZzZXJ2LT5zdl9jYl9sb2NrKTsKLQlzZXJ2LT5zdl9iY194cHJ0LT54cHRfYmNfc2lkID0gYmNfc2lkOwotCXNwaW5fdW5sb2NrX2JoKCZzZXJ2LT5zdl9jYl9sb2NrKTsKLQlkcHJpbnRrKCIlcyBzZXQgeHB0X2JjX3NpZD0ldToldToldToldSBmb3Igc3ZfYmNfeHBydCAlcFxuIiwgX19mdW5jX18sCi0JCSgodTMyICopYmNfc2lkLT5kYXRhKVswXSwgKCh1MzIgKiliY19zaWQtPmRhdGEpWzFdLAotCQkoKHUzMiAqKWJjX3NpZC0+ZGF0YSlbMl0sICgodTMyICopYmNfc2lkLT5kYXRhKVszXSwKLQkJc2Vydi0+c3ZfYmNfeHBydCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCiAgKiBUaGUgY2FsbGJhY2sgc2VydmljZSBmb3IgTkZTdjQuMSBjYWxsYmFja3MKICAqLwogc3RhdGljIGludApAQCAtMjY2LDEwICsyMzksNiBAQAogCQlzdHJ1Y3QgbmZzX2NhbGxiYWNrX2RhdGEgKmNiX2luZm8pCiB7CiB9Ci1pbnQgbmZzNF9zZXRfY2FsbGJhY2tfc2Vzc2lvbmlkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCi17Ci0JcmV0dXJuIDA7Ci19CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKIC8qCkBAIC0zNTksNzggKzMyOCw1OCBAQAogCW11dGV4X3VubG9jaygmbmZzX2NhbGxiYWNrX211dGV4KTsKIH0KIAotc3RhdGljIGludCBjaGVja19nc3NfY2FsbGJhY2tfcHJpbmNpcGFsKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCi0JCQkJCXN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCisvKiBCb29sZWFuIGNoZWNrIG9mIFJQQ19BVVRIX0dTUyBwcmluY2lwYWwgKi8KK2ludAorY2hlY2tfZ3NzX2NhbGxiYWNrX3ByaW5jaXBhbChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQogewogCXN0cnVjdCBycGNfY2xudCAqciA9IGNscC0+Y2xfcnBjY2xpZW50OwogCWNoYXIgKnAgPSBzdmNfZ3NzX3ByaW5jaXBhbChycXN0cCk7CiAKKwlpZiAocnFzdHAtPnJxX2F1dGhvcC0+Zmxhdm91ciAhPSBSUENfQVVUSF9HU1MpCisJCXJldHVybiAxOworCiAJLyogTm8gUlBDX0FVVEhfR1NTIG9uIE5GU3Y0LjEgYmFjayBjaGFubmVsIHlldCAqLwogCWlmIChjbHAtPmNsX21pbm9ydmVyc2lvbiAhPSAwKQotCQlyZXR1cm4gU1ZDX0RST1A7CisJCXJldHVybiAwOwogCS8qCiAJICogSXQgbWlnaHQganVzdCBiZSBhIG5vcm1hbCB1c2VyIHByaW5jaXBhbCwgaW4gd2hpY2ggY2FzZQogCSAqIHVzZXJzcGFjZSB3b24ndCBib3RoZXIgdG8gdGVsbCB1cyB0aGUgbmFtZSBhdCBhbGwuCiAJICovCiAJaWYgKHAgPT0gTlVMTCkKLQkJcmV0dXJuIFNWQ19ERU5JRUQ7CisJCXJldHVybiAwOwogCiAJLyogRXhwZWN0IGEgR1NTX0NfTlRfSE9TVEJBU0VEX05BTUUgbGlrZSAibmZzQHNlcnZlcmhvc3RuYW1lIiAqLwogCiAJaWYgKG1lbWNtcChwLCAibmZzQCIsIDQpICE9IDApCi0JCXJldHVybiBTVkNfREVOSUVEOworCQlyZXR1cm4gMDsKIAlwICs9IDQ7CiAJaWYgKHN0cmNtcChwLCByLT5jbF9zZXJ2ZXIpICE9IDApCi0JCXJldHVybiBTVkNfREVOSUVEOwotCXJldHVybiBTVkNfT0s7CisJCXJldHVybiAwOworCXJldHVybiAxOwogfQogCi0vKiBwZ19hdXRoZW50aWNhdGUgbWV0aG9kIGhlbHBlciAqLwotc3RhdGljIHN0cnVjdCBuZnNfY2xpZW50ICpuZnNfY2JfZmluZF9jbGllbnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKLXsKLQlzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKnNlc3Npb25pZCA9IGJjX3hwcnRfc2lkKHJxc3RwKTsKLQlpbnQgaXNfY2JfY29tcG91bmQgPSBycXN0cC0+cnFfcHJvYyA9PSBDQl9DT01QT1VORCA/IDEgOiAwOwotCi0JZHByaW50aygiLS0+ICVzIHJxX3Byb2MgJWRcbiIsIF9fZnVuY19fLCBycXN0cC0+cnFfcHJvYyk7Ci0JaWYgKHN2Y19pc19iYWNrY2hhbm5lbChycXN0cCkpCi0JCS8qIFNlc3Npb25pZCAodXN1YWxseSkgc2V0IGFmdGVyIENCX05VTEwgcGluZyAqLwotCQlyZXR1cm4gbmZzNF9maW5kX2NsaWVudF9zZXNzaW9uaWQoc3ZjX2FkZHIocnFzdHApLCBzZXNzaW9uaWQsCi0JCQkJCQkgIGlzX2NiX2NvbXBvdW5kKTsKLQllbHNlCi0JCS8qIE5vIGNhbGxiYWNrIGlkZW50aWZpZXIgaW4gcGdfYXV0aGVudGljYXRlICovCi0JCXJldHVybiBuZnM0X2ZpbmRfY2xpZW50X25vX2lkZW50KHN2Y19hZGRyKHJxc3RwKSk7Ci19Ci0KLS8qIHBnX2F1dGhlbnRpY2F0ZSBtZXRob2QgZm9yIG5mc3Y0IGNhbGxiYWNrIHRocmVhZHMuICovCisvKgorICogcGdfYXV0aGVudGljYXRlIG1ldGhvZCBmb3IgbmZzdjQgY2FsbGJhY2sgdGhyZWFkcy4KKyAqCisgKiBUaGUgYXV0aGZsYXZvciBoYXMgYmVlbiBuZWdvdGlhdGVkLCBzbyBhbiBpbmNvcnJlY3QgZmxhdm9yIGlzIGEgc2VydmVyCisgKiBidWcuIERyb3AgcGFja2V0cyB3aXRoIGluY29ycmVjdCBhdXRoZmxhdm9yLgorICoKKyAqIEFsbCBvdGhlciBjaGVja2luZyBkb25lIGFmdGVyIE5GUyBkZWNvZGluZyB3aGVyZSB0aGUgbmZzX2NsaWVudCBjYW4gYmUKKyAqIGZvdW5kIGluIG5mczRfY2FsbGJhY2tfY29tcG91bmQKKyAqLwogc3RhdGljIGludCBuZnNfY2FsbGJhY2tfYXV0aGVudGljYXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCiB7Ci0Jc3RydWN0IG5mc19jbGllbnQgKmNscDsKLQlSUENfSUZERUJVRyhjaGFyIGJ1ZltSUENfTUFYX0FERFJCVUZMRU5dKTsKLQlpbnQgcmV0ID0gU1ZDX09LOwotCi0JLyogRG9uJ3QgdGFsayB0byBzdHJhbmdlcnMgKi8KLQljbHAgPSBuZnNfY2JfZmluZF9jbGllbnQocnFzdHApOwotCWlmIChjbHAgPT0gTlVMTCkKLQkJcmV0dXJuIFNWQ19EUk9QOwotCi0JZHByaW50aygiJXM6ICVzIE5GU3Y0IGNhbGxiYWNrIVxuIiwgX19mdW5jX18sCi0JCQlzdmNfcHJpbnRfYWRkcihycXN0cCwgYnVmLCBzaXplb2YoYnVmKSkpOwotCiAJc3dpdGNoIChycXN0cC0+cnFfYXV0aG9wLT5mbGF2b3VyKSB7Ci0JCWNhc2UgUlBDX0FVVEhfTlVMTDoKLQkJCWlmIChycXN0cC0+cnFfcHJvYyAhPSBDQl9OVUxMKQotCQkJCXJldCA9IFNWQ19ERU5JRUQ7Ci0JCQlicmVhazsKLQkJY2FzZSBSUENfQVVUSF9VTklYOgotCQkJYnJlYWs7Ci0JCWNhc2UgUlBDX0FVVEhfR1NTOgotCQkJcmV0ID0gY2hlY2tfZ3NzX2NhbGxiYWNrX3ByaW5jaXBhbChjbHAsIHJxc3RwKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0ID0gU1ZDX0RFTklFRDsKKwljYXNlIFJQQ19BVVRIX05VTEw6CisJCWlmIChycXN0cC0+cnFfcHJvYyAhPSBDQl9OVUxMKQorCQkJcmV0dXJuIFNWQ19EUk9QOworCQlicmVhazsKKwljYXNlIFJQQ19BVVRIX0dTUzoKKwkJLyogTm8gUlBDX0FVVEhfR1NTIHN1cHBvcnQgeWV0IGluIE5GU3Y0LjEgKi8KKwkJIGlmIChzdmNfaXNfYmFja2NoYW5uZWwocnFzdHApKQorCQkJcmV0dXJuIFNWQ19EUk9QOwogCX0KLQluZnNfcHV0X2NsaWVudChjbHApOwotCXJldHVybiByZXQ7CisJcmV0dXJuIFNWQ19PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFjay5oIGIvZnMvbmZzL2NhbGxiYWNrLmgKaW5kZXggZDNiNDRmOS4uNDZkOTNjZSAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrLmgKKysrIGIvZnMvbmZzL2NhbGxiYWNrLmgKQEAgLTcsNiArNyw3IEBACiAgKi8KICNpZm5kZWYgX19MSU5VWF9GU19ORlNfQ0FMTEJBQ0tfSAogI2RlZmluZSBfX0xJTlVYX0ZTX05GU19DQUxMQkFDS19ICisjaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Yy5oPgogCiAjZGVmaW5lIE5GUzRfQ0FMTEJBQ0sgMHg0MDAwMDAwMAogI2RlZmluZSBORlM0X0NBTExCQUNLX1hEUlNJWkUgMjA0OApAQCAtMzcsNyArMzgsNiBAQAogc3RydWN0IGNiX3Byb2Nlc3Nfc3RhdGUgewogCV9fYmUzMgkJCWRyY19zdGF0dXM7CiAJc3RydWN0IG5mc19jbGllbnQJKmNscDsKLQlzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQJKnN2Y19zaWQ7IC8qIHY0LjEgY2FsbGJhY2sgc2VydmljZSBzZXNzaW9uaWQgKi8KIH07CiAKIHN0cnVjdCBjYl9jb21wb3VuZF9oZHJfYXJnIHsKQEAgLTE2OCw3ICsxNjgsNyBAQAogZXh0ZXJuIHZvaWQgbmZzNF9jaGVja19kcmFpbl9iY19jb21wbGV0ZShzdHJ1Y3QgbmZzNF9zZXNzaW9uICpzZXMpOwogZXh0ZXJuIHZvaWQgbmZzNF9jYl90YWtlX3Nsb3Qoc3RydWN0IG5mc19jbGllbnQgKmNscCk7CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCi0KK2V4dGVybiBpbnQgY2hlY2tfZ3NzX2NhbGxiYWNrX3ByaW5jaXBhbChzdHJ1Y3QgbmZzX2NsaWVudCAqLCBzdHJ1Y3Qgc3ZjX3Jxc3QgKik7CiBleHRlcm4gX19iZTMyIG5mczRfY2FsbGJhY2tfZ2V0YXR0cihzdHJ1Y3QgY2JfZ2V0YXR0cmFyZ3MgKmFyZ3MsCiAJCQkJICAgIHN0cnVjdCBjYl9nZXRhdHRycmVzICpyZXMsCiAJCQkJICAgIHN0cnVjdCBjYl9wcm9jZXNzX3N0YXRlICpjcHMpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYyBiL2ZzL25mcy9jYWxsYmFja19wcm9jLmMKaW5kZXggNGJiOTFjYi4uODk1ODc1NyAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYworKysgYi9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jCkBAIC0zNzMsMTcgKzM3MywxMSBAQAogewogCXN0cnVjdCBuZnNfY2xpZW50ICpjbHA7CiAJaW50IGk7Ci0JX19iZTMyIHN0YXR1czsKKwlfX2JlMzIgc3RhdHVzID0gaHRvbmwoTkZTNEVSUl9CQURTRVNTSU9OKTsKIAogCWNwcy0+Y2xwID0gTlVMTDsKIAotCXN0YXR1cyA9IGh0b25sKE5GUzRFUlJfQkFEU0VTU0lPTik7Ci0JLyogSW5jb21pbmcgc2Vzc2lvbiBtdXN0IG1hdGNoIHRoZSBjYWxsYmFjayBzZXNzaW9uICovCi0JaWYgKG1lbWNtcCgmYXJncy0+Y3NhX3Nlc3Npb25pZCwgY3BzLT5zdmNfc2lkLCBORlM0X01BWF9TRVNTSU9OSURfTEVOKSkKLQkJZ290byBvdXQ7Ci0KLQljbHAgPSBuZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChhcmdzLT5jc2FfYWRkciwKLQkJCQkJICZhcmdzLT5jc2Ffc2Vzc2lvbmlkLCAxKTsKKwljbHAgPSBuZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChhcmdzLT5jc2FfYWRkciwgJmFyZ3MtPmNzYV9zZXNzaW9uaWQpOwogCWlmIChjbHAgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKQEAgLTQxNCw5ICs0MDgsOSBAQAogCXJlcy0+Y3NyX2hpZ2hlc3RzbG90aWQgPSBORlM0MV9CQ19NQVhfQ0FMTEJBQ0tTIC0gMTsKIAlyZXMtPmNzcl90YXJnZXRfaGlnaGVzdHNsb3RpZCA9IE5GUzQxX0JDX01BWF9DQUxMQkFDS1MgLSAxOwogCW5mczRfY2JfdGFrZV9zbG90KGNscCk7Ci0JY3BzLT5jbHAgPSBjbHA7IC8qIHB1dCBpbiBuZnM0X2NhbGxiYWNrX2NvbXBvdW5kICovCiAKIG91dDoKKwljcHMtPmNscCA9IGNscDsgLyogcHV0IGluIG5mczRfY2FsbGJhY2tfY29tcG91bmQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYXJncy0+Y3NhX25yY2xpc3RzOyBpKyspCiAJCWtmcmVlKGFyZ3MtPmNzYV9yY2xpc3RzW2ldLnJjbF9yZWZjYWxscyk7CiAJa2ZyZWUoYXJncy0+Y3NhX3JjbGlzdHMpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrX3hkci5jIGIvZnMvbmZzL2NhbGxiYWNrX3hkci5jCmluZGV4IDIzMTEyYzIuLjE0ZTBmOTMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jYWxsYmFja194ZHIuYworKysgYi9mcy9uZnMvY2FsbGJhY2tfeGRyLmMKQEAgLTc5NCwxMCArNzk0LDkgQEAKIAogCWlmIChoZHJfYXJnLm1pbm9ydmVyc2lvbiA9PSAwKSB7CiAJCWNwcy5jbHAgPSBuZnM0X2ZpbmRfY2xpZW50X2lkZW50KGhkcl9hcmcuY2JfaWRlbnQpOwotCQlpZiAoIWNwcy5jbHApCisJCWlmICghY3BzLmNscCB8fCAhY2hlY2tfZ3NzX2NhbGxiYWNrX3ByaW5jaXBhbChjcHMuY2xwLCBycXN0cCkpCiAJCQlyZXR1cm4gcnBjX2Ryb3BfcmVwbHk7Ci0JfSBlbHNlCi0JCWNwcy5zdmNfc2lkID0gYmNfeHBydF9zaWQocnFzdHApOworCX0KIAogCWhkcl9yZXMudGFnbGVuID0gaGRyX2FyZy50YWdsZW47CiAJaGRyX3Jlcy50YWcgPSBoZHJfYXJnLnRhZzsKZGlmZiAtLWdpdCBhL2ZzL25mcy9jbGllbnQuYyBiL2ZzL25mcy9jbGllbnQuYwppbmRleCAxOTJmMmY4Li5iZDNjYTMyIDEwMDY0NAotLS0gYS9mcy9uZnMvY2xpZW50LmMKKysrIGIvZnMvbmZzL2NsaWVudC5jCkBAIC0xMjA2LDE2ICsxMjA2LDExIEBACiAgKiBGb3IgQ0JfQ09NUE9VTkQgY2FsbHMsIGZpbmQgYSBjbGllbnQgYnkgSVAgYWRkcmVzcywgcHJvdG9jb2wgdmVyc2lvbiwKICAqIG1pbm9ydmVyc2lvbiwgYW5kIHNlc3Npb25JRAogICoKLSAqIENSRUFURV9TRVNTSU9OIHRyaWdnZXJzIGEgQ0JfTlVMTCBwaW5nIGZyb20gc2VydmVycy4gVGhlIGNhbGxiYWNrIHNlcnZpY2UKLSAqIHNlc3Npb25pZCBjYW4gb25seSBiZSBzZXQgYWZ0ZXIgdGhlIENSRUFURV9TRVNTSU9OIHJldHVybiwgc28gYSBDQl9OVUxMCi0gKiBjYW4gYXJyaXZlIGJlZm9yZSB0aGUgY2FsbGJhY2sgc2Vzc2lvbmlkIGlzIHNldC4gRm9yIENCX05VTEwgY2FsbHMsCi0gKiBmaW5kIGEgY2xpZW50IGJ5IElQIGFkZHJlc3MgcHJvdG9jb2wgdmVyc2lvbiwgYW5kIG1pbm9ydmVyc2lvbi4KLSAqCiAgKiBSZXR1cm5zIE5VTEwgaWYgbm8gc3VjaCBjbGllbnQKICAqLwogc3RydWN0IG5mc19jbGllbnQgKgogbmZzNF9maW5kX2NsaWVudF9zZXNzaW9uaWQoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLAotCQkJICAgc3RydWN0IG5mczRfc2Vzc2lvbmlkICpzaWQsIGludCBpc19jYl9jb21wb3VuZCkKKwkJCSAgIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqc2lkKQogewogCXN0cnVjdCBuZnNfY2xpZW50ICpjbHA7CiAKQEAgLTEyMjcsOSArMTIyMiw5IEBACiAJCWlmICghbmZzNF9oYXNfc2Vzc2lvbihjbHApKQogCQkJY29udGludWU7CiAKLQkJLyogTWF0Y2ggc2Vzc2lvbmlkIHVubGVzcyBjYl9udWxsIGNhbGwqLwotCQlpZiAoaXNfY2JfY29tcG91bmQgJiYgKG1lbWNtcChjbHAtPmNsX3Nlc3Npb24tPnNlc3NfaWQuZGF0YSwKLQkJICAgIHNpZC0+ZGF0YSwgTkZTNF9NQVhfU0VTU0lPTklEX0xFTikgIT0gMCkpCisJCS8qIE1hdGNoIHNlc3Npb25pZCovCisJCWlmIChtZW1jbXAoY2xwLT5jbF9zZXNzaW9uLT5zZXNzX2lkLmRhdGEsCisJCSAgICBzaWQtPmRhdGEsIE5GUzRfTUFYX1NFU1NJT05JRF9MRU4pICE9IDApCiAJCQljb250aW51ZTsKIAogCQlhdG9taWNfaW5jKCZjbHAtPmNsX2NvdW50KTsKQEAgLTEyNDQsNyArMTIzOSw3IEBACiAKIHN0cnVjdCBuZnNfY2xpZW50ICoKIG5mczRfZmluZF9jbGllbnRfc2Vzc2lvbmlkKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkciwKLQkJCSAgIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqc2lkLCBpbnQgaXNfY2JfY29tcG91bmQpCisJCQkgICBzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKnNpZCkKIHsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy9kZWxlZ2F0aW9uLmMgYi9mcy9uZnMvZGVsZWdhdGlvbi5jCmluZGV4IDM2NGU0MzIuLmJiYmM2YmYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kZWxlZ2F0aW9uLmMKKysrIGIvZnMvbmZzL2RlbGVnYXRpb24uYwpAQCAtMjMsOCArMjMsNiBAQAogCiBzdGF0aWMgdm9pZCBuZnNfZG9fZnJlZV9kZWxlZ2F0aW9uKHN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqZGVsZWdhdGlvbikKIHsKLQlpZiAoZGVsZWdhdGlvbi0+Y3JlZCkKLQkJcHV0X3JwY2NyZWQoZGVsZWdhdGlvbi0+Y3JlZCk7CiAJa2ZyZWUoZGVsZWdhdGlvbik7CiB9CiAKQEAgLTM3LDYgKzM1LDEwIEBACiAKIHN0YXRpYyB2b2lkIG5mc19mcmVlX2RlbGVnYXRpb24oc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uKQogeworCWlmIChkZWxlZ2F0aW9uLT5jcmVkKSB7CisJCXB1dF9ycGNjcmVkKGRlbGVnYXRpb24tPmNyZWQpOworCQlkZWxlZ2F0aW9uLT5jcmVkID0gTlVMTDsKKwl9CiAJY2FsbF9yY3UoJmRlbGVnYXRpb24tPnJjdSwgbmZzX2ZyZWVfZGVsZWdhdGlvbl9jYWxsYmFjayk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXJlY3QuYyBiL2ZzL25mcy9kaXJlY3QuYwppbmRleCBlNmFjZTBkLi45OTQzYTc1IDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyZWN0LmMKKysrIGIvZnMvbmZzL2RpcmVjdC5jCkBAIC00MDcsMTUgKzQwNywxOCBAQAogCQlwb3MgKz0gdmVjLT5pb3ZfbGVuOwogCX0KIAorCS8qCisJICogSWYgbm8gYnl0ZXMgd2VyZSBzdGFydGVkLCByZXR1cm4gdGhlIGVycm9yLCBhbmQgbGV0IHRoZQorCSAqIGdlbmVyaWMgbGF5ZXIgaGFuZGxlIHRoZSBjb21wbGV0aW9uLgorCSAqLworCWlmIChyZXF1ZXN0ZWRfYnl0ZXMgPT0gMCkgeworCQluZnNfZGlyZWN0X3JlcV9yZWxlYXNlKGRyZXEpOworCQlyZXR1cm4gcmVzdWx0IDwgMCA/IHJlc3VsdCA6IC1FSU87CisJfQorCiAJaWYgKHB1dF9kcmVxKGRyZXEpKQogCQluZnNfZGlyZWN0X2NvbXBsZXRlKGRyZXEpOwotCi0JaWYgKHJlcXVlc3RlZF9ieXRlcyAhPSAwKQotCQlyZXR1cm4gMDsKLQotCWlmIChyZXN1bHQgPCAwKQotCQlyZXR1cm4gcmVzdWx0OwotCXJldHVybiAtRUlPOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3NpemVfdCBuZnNfZGlyZWN0X3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKQEAgLTg0MSwxNSArODQ0LDE4IEBACiAJCXBvcyArPSB2ZWMtPmlvdl9sZW47CiAJfQogCisJLyoKKwkgKiBJZiBubyBieXRlcyB3ZXJlIHN0YXJ0ZWQsIHJldHVybiB0aGUgZXJyb3IsIGFuZCBsZXQgdGhlCisJICogZ2VuZXJpYyBsYXllciBoYW5kbGUgdGhlIGNvbXBsZXRpb24uCisJICovCisJaWYgKHJlcXVlc3RlZF9ieXRlcyA9PSAwKSB7CisJCW5mc19kaXJlY3RfcmVxX3JlbGVhc2UoZHJlcSk7CisJCXJldHVybiByZXN1bHQgPCAwID8gcmVzdWx0IDogLUVJTzsKKwl9CisKIAlpZiAocHV0X2RyZXEoZHJlcSkpCiAJCW5mc19kaXJlY3Rfd3JpdGVfY29tcGxldGUoZHJlcSwgZHJlcS0+aW5vZGUpOwotCi0JaWYgKHJlcXVlc3RlZF9ieXRlcyAhPSAwKQotCQlyZXR1cm4gMDsKLQotCWlmIChyZXN1bHQgPCAwKQotCQlyZXR1cm4gcmVzdWx0OwotCXJldHVybiAtRUlPOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3NpemVfdCBuZnNfZGlyZWN0X3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCmRpZmYgLS1naXQgYS9mcy9uZnMvaW5vZGUuYyBiL2ZzL25mcy9pbm9kZS5jCmluZGV4IGQ4NTEyNDIuLjFjYzYwMGUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbm9kZS5jCisrKyBiL2ZzL25mcy9pbm9kZS5jCkBAIC04ODEsOSArODgxLDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgbmZzX3djY191cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBuZnNfd2NjX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKIHsKIAlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOworCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKIAogCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfUFJFQ0hBTkdFKQogCQkJJiYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0NIQU5HRSkKQEAgLTg5MSwyNSArODkyLDMyIEBACiAJCW5mc2ktPmNoYW5nZV9hdHRyID0gZmF0dHItPmNoYW5nZV9hdHRyOwogCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKIAkJCW5mc2ktPmNhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJRF9EQVRBOworCQlyZXQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFI7CiAJfQogCS8qIElmIHdlIGhhdmUgYXRvbWljIFdDQyBkYXRhLCB3ZSBtYXkgdXBkYXRlIHNvbWUgYXR0cmlidXRlcyAqLwogCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfUFJFQ1RJTUUpCiAJCQkmJiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQ1RJTUUpCi0JCQkmJiB0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfY3RpbWUsICZmYXR0ci0+cHJlX2N0aW1lKSkKLQkJCW1lbWNweSgmaW5vZGUtPmlfY3RpbWUsICZmYXR0ci0+Y3RpbWUsIHNpemVvZihpbm9kZS0+aV9jdGltZSkpOworCQkJJiYgdGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX2N0aW1lLCAmZmF0dHItPnByZV9jdGltZSkpIHsKKwkJbWVtY3B5KCZpbm9kZS0+aV9jdGltZSwgJmZhdHRyLT5jdGltZSwgc2l6ZW9mKGlub2RlLT5pX2N0aW1lKSk7CisJCXJldCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUjsKKwl9CiAKIAlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1BSRU1USU1FKQogCQkJJiYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX01USU1FKQogCQkJJiYgdGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX210aW1lLCAmZmF0dHItPnByZV9tdGltZSkpIHsKLQkJCW1lbWNweSgmaW5vZGUtPmlfbXRpbWUsICZmYXR0ci0+bXRpbWUsIHNpemVvZihpbm9kZS0+aV9tdGltZSkpOwotCQkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCi0JCQkJbmZzaS0+Y2FjaGVfdmFsaWRpdHkgfD0gTkZTX0lOT19JTlZBTElEX0RBVEE7CisJCW1lbWNweSgmaW5vZGUtPmlfbXRpbWUsICZmYXR0ci0+bXRpbWUsIHNpemVvZihpbm9kZS0+aV9tdGltZSkpOworCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkJCW5mc2ktPmNhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJRF9EQVRBOworCQlyZXQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFI7CiAJfQogCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfUFJFU0laRSkKIAkJCSYmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9TSVpFKQogCQkJJiYgaV9zaXplX3JlYWQoaW5vZGUpID09IG5mc19zaXplX3RvX2xvZmZfdChmYXR0ci0+cHJlX3NpemUpCi0JCQkmJiBuZnNpLT5ucGFnZXMgPT0gMCkKLQkJCWlfc2l6ZV93cml0ZShpbm9kZSwgbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5zaXplKSk7CisJCQkmJiBuZnNpLT5ucGFnZXMgPT0gMCkgeworCQlpX3NpemVfd3JpdGUoaW5vZGUsIG5mc19zaXplX3RvX2xvZmZfdChmYXR0ci0+c2l6ZSkpOworCQlyZXQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFI7CisJfQorCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtMTIyMyw3ICsxMjMxLDcgQEAKIAkJCXwgTkZTX0lOT19SRVZBTF9QQUdFQ0FDSEUpOwogCiAJLyogRG8gYXRvbWljIHdlYWsgY2FjaGUgY29uc2lzdGVuY3kgdXBkYXRlcyAqLwotCW5mc193Y2NfdXBkYXRlX2lub2RlKGlub2RlLCBmYXR0cik7CisJaW52YWxpZCB8PSBuZnNfd2NjX3VwZGF0ZV9pbm9kZShpbm9kZSwgZmF0dHIpOwogCiAJLyogTW9yZSBjYWNoZSBjb25zaXN0ZW5jeSBjaGVja3MgKi8KIAlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQ0hBTkdFKSB7CmRpZmYgLS1naXQgYS9mcy9uZnMvaW50ZXJuYWwuaCBiL2ZzL25mcy9pbnRlcm5hbC5oCmluZGV4IDQ2NDRmMDQuLmNmOWZkYmQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbnRlcm5hbC5oCisrKyBiL2ZzL25mcy9pbnRlcm5hbC5oCkBAIC0xMzMsOCArMTMzLDcgQEAKIGV4dGVybiBzdHJ1Y3QgbmZzX2NsaWVudCAqbmZzNF9maW5kX2NsaWVudF9ub19pZGVudChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKik7CiBleHRlcm4gc3RydWN0IG5mc19jbGllbnQgKm5mczRfZmluZF9jbGllbnRfaWRlbnQoaW50KTsKIGV4dGVybiBzdHJ1Y3QgbmZzX2NsaWVudCAqCi1uZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IG5mczRfc2Vzc2lvbmlkICosCi0JCQkgICBpbnQpOworbmZzNF9maW5kX2NsaWVudF9zZXNzaW9uaWQoY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqKTsKIGV4dGVybiBzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzX2NyZWF0ZV9zZXJ2ZXIoCiAJCQkJCWNvbnN0IHN0cnVjdCBuZnNfcGFyc2VkX21vdW50X2RhdGEgKiwKIAkJCQkJc3RydWN0IG5mc19maCAqKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnMzYWNsLmMgYi9mcy9uZnMvbmZzM2FjbC5jCmluZGV4IDlmODhjNWYuLjI3NDM0MjcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnMzYWNsLmMKKysrIGIvZnMvbmZzL25mczNhY2wuYwpAQCAtMzExLDggKzMxMSw4IEBACiAJaWYgKCFuZnNfc2VydmVyX2NhcGFibGUoaW5vZGUsIE5GU19DQVBfQUNMUykpCiAJCWdvdG8gb3V0OwogCi0JLyogV2UgYXJlIGRvaW5nIHRoaXMgaGVyZSwgYmVjYXVzZSBYRFIgbWFyc2hhbGxpbmcgY2FuIG9ubHkKLQkgICByZXR1cm4gLUVOT01FTS4gKi8KKwkvKiBXZSBhcmUgZG9pbmcgdGhpcyBoZXJlIGJlY2F1c2UgWERSIG1hcnNoYWxsaW5nIGRvZXMgbm90CisJICogcmV0dXJuIGFueSByZXN1bHRzLCBpdCBCVUdzLiAqLwogCXN0YXR1cyA9IC1FTk9TUEM7CiAJaWYgKGFjbCAhPSBOVUxMICYmIGFjbC0+YV9jb3VudCA+IE5GU19BQ0xfTUFYX0VOVFJJRVMpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczN4ZHIuYyBiL2ZzL25mcy9uZnMzeGRyLmMKaW5kZXggMDFjNWU4Yi4uMTgzYzZiMSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczN4ZHIuYworKysgYi9mcy9uZnMvbmZzM3hkci5jCkBAIC0xMzI4LDEwICsxMzI4LDEzIEBACiAKIAllbmNvZGVfbmZzX2ZoMyh4ZHIsIE5GU19GSChhcmdzLT5pbm9kZSkpOwogCWVuY29kZV91aW50MzIoeGRyLCBhcmdzLT5tYXNrKTsKLQlpZiAoYXJncy0+bnBhZ2VzICE9IDApCi0JCXhkcl93cml0ZV9wYWdlcyh4ZHIsIGFyZ3MtPnBhZ2VzLCAwLCBhcmdzLT5sZW4pOwogCiAJYmFzZSA9IHJlcS0+cnFfc2xlbjsKKwlpZiAoYXJncy0+bnBhZ2VzICE9IDApCisJCXhkcl93cml0ZV9wYWdlcyh4ZHIsIGFyZ3MtPnBhZ2VzLCAwLCBhcmdzLT5sZW4pOworCWVsc2UKKwkJeGRyX3Jlc2VydmVfc3BhY2UoeGRyLCBORlNfQUNMX0lOTElORV9CVUZTSVpFKTsKKwogCWVycm9yID0gbmZzYWNsX2VuY29kZSh4ZHItPmJ1ZiwgYmFzZSwgYXJncy0+aW5vZGUsCiAJCQkgICAgKGFyZ3MtPm1hc2sgJiBORlNfQUNMKSA/CiAJCQkgICAgYXJncy0+YWNsX2FjY2VzcyA6IE5VTEwsIDEsIDApOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRmaWxlbGF5b3V0ZGV2LmMgYi9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYwppbmRleCA1MWZlNjRhLi5mNWM5YjEyIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYworKysgYi9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAKIAkvKiBpcHY2IGxlbmd0aCBwbHVzIHBvcnQgaXMgbGVnYWwgKi8KIAlpZiAocmxlbiA+IElORVQ2X0FERFJTVFJMRU4gKyA4KSB7Ci0JCWRwcmludGsoIiVzIEludmFsaWQgYWRkcmVzcywgbGVuZ3RoICVkXG4iLCBfX2Z1bmNfXywKKwkJZHByaW50aygiJXM6IEludmFsaWQgYWRkcmVzcywgbGVuZ3RoICVkXG4iLCBfX2Z1bmNfXywKIAkJCXJsZW4pOwogCQlnb3RvIG91dF9lcnI7CiAJfQpAQCAtMjI1LDYgKzIyNSwxMSBAQAogCS8qIHJlcGxhY2UgdGhlIHBvcnQgZG90cyB3aXRoIGRhc2hlcyBmb3IgdGhlIGluNF9wdG9uKCkgZGVsaW1pdGVyKi8KIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCWNoYXIgKnJlcyA9IHN0cnJjaHIoYnVmLCAnLicpOworCQlpZiAoIXJlcykgeworCQkJZHByaW50aygiJXM6IEZhaWxlZCBmaW5kaW5nIGV4cGVjdGVkIGRvdHMgaW4gcG9ydFxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CiAJCSpyZXMgPSAnLSc7CiAJfQogCkBAIC0yNDAsNyArMjQ1LDcgQEAKIAlwb3J0ID0gaHRvbnMoKHRtcFswXSA8PCA4KSB8ICh0bXBbMV0pKTsKIAogCWRzID0gbmZzNF9wbmZzX2RzX2FkZChpbm9kZSwgaXBfYWRkciwgcG9ydCk7Ci0JZHByaW50aygiJXMgRGVjb2RlZCBhZGRyZXNzIGFuZCBwb3J0ICVzXG4iLCBfX2Z1bmNfXywgYnVmKTsKKwlkcHJpbnRrKCIlczogRGVjb2RlZCBhZGRyZXNzIGFuZCBwb3J0ICVzXG4iLCBfX2Z1bmNfXywgYnVmKTsKIG91dF9mcmVlOgogCWtmcmVlKGJ1Zik7CiBvdXRfZXJyOgpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCA5ZDk5MmIwLi43ODkzNmE4IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9iY194cHJ0Lmg+CiAjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CiAKICNpbmNsdWRlICJuZnM0X2ZzLmgiCiAjaW5jbHVkZSAiZGVsZWdhdGlvbi5oIgpAQCAtNDU3MiwyNyArNDU3MywxNiBAQAogCSpwID0gaHRvbmwoKHUzMiljbHAtPmNsX2Jvb3RfdGltZS50dl9uc2VjKTsKIAlhcmdzLnZlcmlmaWVyID0gJnZlcmlmaWVyOwogCi0Jd2hpbGUgKDEpIHsKLQkJYXJncy5pZF9sZW4gPSBzY25wcmludGYoYXJncy5pZCwgc2l6ZW9mKGFyZ3MuaWQpLAotCQkJCQkiJXMvJXMgJXUiLAotCQkJCQljbHAtPmNsX2lwYWRkciwKLQkJCQkJcnBjX3BlZXJhZGRyMnN0cihjbHAtPmNsX3JwY2NsaWVudCwKLQkJCQkJCQkgUlBDX0RJU1BMQVlfQUREUiksCi0JCQkJCWNscC0+Y2xfaWRfdW5pcXVpZmllcik7CisJYXJncy5pZF9sZW4gPSBzY25wcmludGYoYXJncy5pZCwgc2l6ZW9mKGFyZ3MuaWQpLAorCQkJCSIlcy8lcy4lcy8ldSIsCisJCQkJY2xwLT5jbF9pcGFkZHIsCisJCQkJaW5pdF91dHNuYW1lKCktPm5vZGVuYW1lLAorCQkJCWluaXRfdXRzbmFtZSgpLT5kb21haW5uYW1lLAorCQkJCWNscC0+Y2xfcnBjY2xpZW50LT5jbF9hdXRoLT5hdV9mbGF2b3IpOwogCi0JCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoY2xwLT5jbF9ycGNjbGllbnQsICZtc2csIDApOwotCi0JCWlmIChzdGF0dXMgIT0gLU5GUzRFUlJfQ0xJRF9JTlVTRSkKLQkJCWJyZWFrOwotCi0JCWlmIChzaWduYWxsZWQoKSkKLQkJCWJyZWFrOwotCi0JCWlmICgrK2NscC0+Y2xfaWRfdW5pcXVpZmllciA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCi0Jc3RhdHVzID0gbmZzNF9jaGVja19jbF9leGNoYW5nZV9mbGFncyhjbHAtPmNsX2V4Y2hhbmdlX2ZsYWdzKTsKKwlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKGNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAwKTsKKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gbmZzNF9jaGVja19jbF9leGNoYW5nZV9mbGFncyhjbHAtPmNsX2V4Y2hhbmdlX2ZsYWdzKTsKIAlkcHJpbnRrKCI8LS0gJXMgc3RhdHVzPSAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0c3RhdGUuYyBiL2ZzL25mcy9uZnM0c3RhdGUuYwppbmRleCAyMzM2ZDUzLi5lNjc0MmI1IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzL25mczRzdGF0ZS5jCkBAIC0yMzIsMTIgKzIzMiw2IEBACiAJc3RhdHVzID0gbmZzNF9wcm9jX2NyZWF0ZV9zZXNzaW9uKGNscCk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBuZnM0X3NldF9jYWxsYmFja19zZXNzaW9uaWQoY2xwKTsKLQlpZiAoc3RhdHVzICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU2Vzc2lvbmlkIG5vdCBzZXQuIE5vIGNhbGxiYWNrIHNlcnZpY2VcbiIpOwotCQluZnNfY2FsbGJhY2tfZG93bigxKTsKLQkJc3RhdHVzID0gMDsKLQl9CiAJbmZzNDFfc2V0dXBfc3RhdGVfcmVuZXdhbChjbHApOwogCW5mc19tYXJrX2NsaWVudF9yZWFkeShjbHAsIE5GU19DU19SRUFEWSk7CiBvdXQ6CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHhkci5jIGIvZnMvbmZzL25mczR4ZHIuYwppbmRleCAyYWI4ZTVjLi40ZTJjMTY4IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHhkci5jCisrKyBiL2ZzL25mcy9uZnM0eGRyLmMKQEAgLTYwODYsMTEgKzYwODYsMTEgQEAKIAlfX2JlMzIgKnAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOwogCWlmICh1bmxpa2VseSghcCkpCiAJCWdvdG8gb3V0X292ZXJmbG93OwotCWlmICghbnRvaGwoKnArKykpIHsKKwlpZiAoKnAgPT0geGRyX3plcm8pIHsKIAkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CiAJCWlmICh1bmxpa2VseSghcCkpCiAJCQlnb3RvIG91dF9vdmVyZmxvdzsKLQkJaWYgKCFudG9obCgqcCsrKSkKKwkJaWYgKCpwID09IHhkcl96ZXJvKQogCQkJcmV0dXJuIC1FQUdBSU47CiAJCWVudHJ5LT5lb2YgPSAxOwogCQlyZXR1cm4gLUVCQURDT09LSUU7CkBAIC02MTAxLDcgKzYxMDEsNyBAQAogCQlnb3RvIG91dF9vdmVyZmxvdzsKIAllbnRyeS0+cHJldl9jb29raWUgPSBlbnRyeS0+Y29va2llOwogCXAgPSB4ZHJfZGVjb2RlX2h5cGVyKHAsICZlbnRyeS0+Y29va2llKTsKLQllbnRyeS0+bGVuID0gbnRvaGwoKnArKyk7CisJZW50cnktPmxlbiA9IGJlMzJfdG9fY3B1cChwKTsKIAogCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIGVudHJ5LT5sZW4pOwogCWlmICh1bmxpa2VseSghcCkpCkBAIC02MTMyLDkgKzYxMzIsNiBAQAogCWlmIChlbnRyeS0+ZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfVFlQRSkKIAkJZW50cnktPmRfdHlwZSA9IG5mc191bW9kZV90b19kdHlwZShlbnRyeS0+ZmF0dHItPm1vZGUpOwogCi0JaWYgKHZlcmlmeV9hdHRyX2xlbih4ZHIsIHAsIGxlbikgPCAwKQotCQlnb3RvIG91dF9vdmVyZmxvdzsKLQogCXJldHVybiAwOwogCiBvdXRfb3ZlcmZsb3c6CmRpZmYgLS1naXQgYS9mcy9uZnMvcG5mcy5jIGIvZnMvbmZzL3BuZnMuYwppbmRleCBiYzQwODk3Li4xYjFiYzFhIDEwMDY0NAotLS0gYS9mcy9uZnMvcG5mcy5jCisrKyBiL2ZzL25mcy9wbmZzLmMKQEAgLTk1MSw3ICs5NTEsNyBAQAogewogCXN0cnVjdCBwbmZzX2RldmljZWlkX2NhY2hlICpsb2NhbCA9IGNscC0+Y2xfZGV2aWRfY2FjaGU7CiAKLQlkcHJpbnRrKCItLT4gJXMgY2xfZGV2aWRfY2FjaGUgJXBcbiIsIF9fZnVuY19fLCBjbHAtPmNsX2RldmlkX2NhY2hlKTsKKwlkcHJpbnRrKCItLT4gJXMgKHslZH0pXG4iLCBfX2Z1bmNfXywgYXRvbWljX3JlYWQoJmxvY2FsLT5kY19yZWYpKTsKIAlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmbG9jYWwtPmRjX3JlZiwgJmNscC0+Y2xfbG9jaykpIHsKIAkJaW50IGk7CiAJCS8qIFZlcmlmeSBjYWNoZSBpcyBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3dyaXRlLmMgYi9mcy9uZnMvd3JpdGUuYwppbmRleCAxMGQ2NDhlYS4uYzgyNzhmNCAxMDA2NDQKLS0tIGEvZnMvbmZzL3dyaXRlLmMKKysrIGIvZnMvbmZzL3dyaXRlLmMKQEAgLTkzMiw3ICs5MzIsNyBAQAogCXdoaWxlICghbGlzdF9lbXB0eSgmbGlzdCkpIHsKIAkJZGF0YSA9IGxpc3RfZW50cnkobGlzdC5uZXh0LCBzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEsIHBhZ2VzKTsKIAkJbGlzdF9kZWwoJmRhdGEtPnBhZ2VzKTsKLQkJbmZzX3dyaXRlZGF0YV9yZWxlYXNlKGRhdGEpOworCQluZnNfd3JpdGVkYXRhX2ZyZWUoZGF0YSk7CiAJfQogCW5mc19yZWRpcnR5X3JlcXVlc3QocmVxKTsKIAlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL25mc19jb21tb24vbmZzYWNsLmMgYi9mcy9uZnNfY29tbW9uL25mc2FjbC5jCmluZGV4IGZjMWM1MjUuLjg0YzI3ZDYgMTAwNjQ0Ci0tLSBhL2ZzL25mc19jb21tb24vbmZzYWNsLmMKKysrIGIvZnMvbmZzX2NvbW1vbi9uZnNhY2wuYwpAQCAtNDIsNiArNDIsMTEgQEAKIAlnaWRfdCBnaWQ7CiB9OwogCitzdHJ1Y3QgbmZzYWNsX3NpbXBsZV9hY2wgeworCXN0cnVjdCBwb3NpeF9hY2wgYWNsOworCXN0cnVjdCBwb3NpeF9hY2xfZW50cnkgYWNlWzRdOworfTsKKwogc3RhdGljIGludAogeGRyX25mc2FjZV9lbmNvZGUoc3RydWN0IHhkcl9hcnJheTJfZGVzYyAqZGVzYywgdm9pZCAqZWxlbSkKIHsKQEAgLTcyLDkgKzc3LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXVuc2lnbmVkIGludAotbmZzYWNsX2VuY29kZShzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCB1bnNpZ25lZCBpbnQgYmFzZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCBlbmNvZGVfZW50cmllcywgaW50IHR5cGVmbGFnKQorLyoqCisgKiBuZnNhY2xfZW5jb2RlIC0gRW5jb2RlIGFuIE5GU3YzIEFDTAorICoKKyAqIEBidWY6IGRlc3RpbmF0aW9uIHhkcl9idWYgdG8gY29udGFpbiBYRFIgZW5jb2RlZCBBQ0wKKyAqIEBiYXNlOiBieXRlIG9mZnNldCBpbiB4ZHJfYnVmIHdoZXJlIFhEUidkIEFDTCBiZWdpbnMKKyAqIEBpbm9kZTogaW5vZGUgb2YgZmlsZSB3aG9zZSBBQ0wgdGhpcyBpcworICogQGFjbDogcG9zaXhfYWNsIHRvIGVuY29kZQorICogQGVuY29kZV9lbnRyaWVzOiB3aGV0aGVyIHRvIGVuY29kZSBBQ0VzIGFzIHdlbGwKKyAqIEB0eXBlZmxhZzogQUNMIHR5cGU6IE5GU19BQ0xfREVGQVVMVCBvciB6ZXJvCisgKgorICogUmV0dXJucyBzaXplIG9mIGVuY29kZWQgQUNMIGluIGJ5dGVzIG9yIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUuCisgKi8KK2ludCBuZnNhY2xfZW5jb2RlKHN0cnVjdCB4ZHJfYnVmICpidWYsIHVuc2lnbmVkIGludCBiYXNlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IGVuY29kZV9lbnRyaWVzLCBpbnQgdHlwZWZsYWcpCiB7CiAJaW50IGVudHJpZXMgPSAoYWNsICYmIGFjbC0+YV9jb3VudCkgPyBtYXhfdChpbnQsIGFjbC0+YV9jb3VudCwgNCkgOiAwOwogCXN0cnVjdCBuZnNhY2xfZW5jb2RlX2Rlc2MgbmZzYWNsX2Rlc2MgPSB7CkBAIC04OCwxNyArMTA0LDIyIEBACiAJCS51aWQgPSBpbm9kZS0+aV91aWQsCiAJCS5naWQgPSBpbm9kZS0+aV9naWQsCiAJfTsKKwlzdHJ1Y3QgbmZzYWNsX3NpbXBsZV9hY2wgYWNsYnVmOwogCWludCBlcnI7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqYWNsMiA9IE5VTEw7CiAKIAlpZiAoZW50cmllcyA+IE5GU19BQ0xfTUFYX0VOVFJJRVMgfHwKIAkgICAgeGRyX2VuY29kZV93b3JkKGJ1ZiwgYmFzZSwgZW50cmllcykpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChlbmNvZGVfZW50cmllcyAmJiBhY2wgJiYgYWNsLT5hX2NvdW50ID09IDMpIHsKLQkJLyogRmFrZSB1cCBhbiBBQ0xfTUFTSyBlbnRyeS4gKi8KLQkJYWNsMiA9IHBvc2l4X2FjbF9hbGxvYyg0LCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFhY2wyKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDIgPSAmYWNsYnVmLmFjbDsKKworCQkvKiBBdm9pZCB0aGUgdXNlIG9mIHBvc2l4X2FjbF9hbGxvYygpLiAgbmZzYWNsX2VuY29kZSgpIGlzCisJCSAqIGludm9rZWQgaW4gY29udGV4dHMgd2hlcmUgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGlzCisJCSAqIGZhdGFsLiAgRm9ydHVuYXRlbHkgdGhpcyBmYWtlIEFDTCBpcyBzbWFsbCBlbm91Z2ggdG8KKwkJICogY29uc3RydWN0IG9uIHRoZSBzdGFjay4gKi8KKwkJbWVtc2V0KGFjbDIsIDAsIHNpemVvZihhY2wyKSk7CisJCXBvc2l4X2FjbF9pbml0KGFjbDIsIDQpOworCiAJCS8qIEluc2VydCBlbnRyaWVzIGluIGNhbm9uaWNhbCBvcmRlcjogb3RoZXIgb3JkZXJzIHNlZW0KIAkJIHRvIGNvbmZ1c2UgU29sYXJpcyBWeEZTLiAqLwogCQlhY2wyLT5hX2VudHJpZXNbMF0gPSBhY2wtPmFfZW50cmllc1swXTsgIC8qIEFDTF9VU0VSX09CSiAqLwpAQCAtMTA5LDggKzEzMCw2IEBACiAJCW5mc2FjbF9kZXNjLmFjbCA9IGFjbDI7CiAJfQogCWVyciA9IHhkcl9lbmNvZGVfYXJyYXkyKGJ1ZiwgYmFzZSArIDQsICZuZnNhY2xfZGVzYy5kZXNjKTsKLQlpZiAoYWNsMikKLQkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsMik7CiAJaWYgKCFlcnIpCiAJCWVyciA9IDggKyBuZnNhY2xfZGVzYy5kZXNjLmVsZW1fc2l6ZSAqCiAJCQkgIG5mc2FjbF9kZXNjLmRlc2MuYXJyYXlfbGVuOwpAQCAtMjI0LDkgKzI0MywxOCBAQAogCXJldHVybiAwOwogfQogCi11bnNpZ25lZCBpbnQKLW5mc2FjbF9kZWNvZGUoc3RydWN0IHhkcl9idWYgKmJ1ZiwgdW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGludCAqYWNsY250LAotCSAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKipwYWNsKQorLyoqCisgKiBuZnNhY2xfZGVjb2RlIC0gRGVjb2RlIGFuIE5GU3YzIEFDTAorICoKKyAqIEBidWY6IHhkcl9idWYgY29udGFpbmluZyBYRFInZCBBQ0wgZGF0YSB0byBkZWNvZGUKKyAqIEBiYXNlOiBieXRlIG9mZnNldCBpbiB4ZHJfYnVmIHdoZXJlIFhEUidkIEFDTCBiZWdpbnMKKyAqIEBhY2xjbnQ6IGNvdW50IG9mIEFDRXMgaW4gZGVjb2RlZCBwb3NpeF9hY2wKKyAqIEBwYWNsOiBidWZmZXIgaW4gd2hpY2ggdG8gcGxhY2UgZGVjb2RlZCBwb3NpeF9hY2wKKyAqCisgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGRlY29kZWQgQUNMIGluIGJ5dGVzLCBvciBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlLgorICovCitpbnQgbmZzYWNsX2RlY29kZShzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCB1bnNpZ25lZCBpbnQgYmFzZSwgdW5zaWduZWQgaW50ICphY2xjbnQsCisJCSAgc3RydWN0IHBvc2l4X2FjbCAqKnBhY2wpCiB7CiAJc3RydWN0IG5mc2FjbF9kZWNvZGVfZGVzYyBuZnNhY2xfZGVzYyA9IHsKIAkJLmRlc2MgPSB7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRjYWxsYmFjay5jIGIvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYwppbmRleCAzYmU5NzVlLi5jZGUzNmNiIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRjYWxsYmFjay5jCisrKyBiL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKQEAgLTQ4NCw3ICs0ODQsNyBAQAogb3V0OgogCXJldHVybiBzdGF0dXM7CiBvdXRfZGVmYXVsdDoKLQlyZXR1cm4gbmZzX2NiX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKKwlyZXR1cm4gbmZzX2NiX3N0YXRfdG9fZXJybm8obmZzZXJyKTsKIH0KIAogLyoKQEAgLTU2NCwxMSArNTY0LDkgQEAKIAlpZiAodW5saWtlbHkoc3RhdHVzKSkKIAkJZ290byBvdXQ7CiAJaWYgKHVubGlrZWx5KG5mc2VyciAhPSBORlM0X09LKSkKLQkJZ290byBvdXRfZGVmYXVsdDsKKwkJc3RhdHVzID0gbmZzX2NiX3N0YXRfdG9fZXJybm8obmZzZXJyKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwotb3V0X2RlZmF1bHQ6Ci0JcmV0dXJuIG5mc19jYl9zdGF0X3RvX2Vycm5vKHN0YXR1cyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRzdGF0ZS5jIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwppbmRleCBkOThkMDIxLi41NGI2MGJmIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRzdGF0ZS5jCisrKyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKQEAgLTIzMCw5ICsyMzAsNiBAQAogCWRwLT5kbF9jbGllbnQgPSBjbHA7CiAJZ2V0X25mczRfZmlsZShmcCk7CiAJZHAtPmRsX2ZpbGUgPSBmcDsKLQlkcC0+ZGxfdmZzX2ZpbGUgPSBmaW5kX3JlYWRhYmxlX2ZpbGUoZnApOwotCWdldF9maWxlKGRwLT5kbF92ZnNfZmlsZSk7Ci0JZHAtPmRsX2Zsb2NrID0gTlVMTDsKIAlkcC0+ZGxfdHlwZSA9IHR5cGU7CiAJZHAtPmRsX3N0YXRlaWQuc2lfYm9vdCA9IGJvb3RfdGltZTsKIAlkcC0+ZGxfc3RhdGVpZC5zaV9zdGF0ZW93bmVyaWQgPSBjdXJyZW50X2RlbGVnaWQrKzsKQEAgLTI0MSw4ICsyMzgsNiBAQAogCWZoX2NvcHlfc2hhbGxvdygmZHAtPmRsX2ZoLCAmY3VycmVudF9maC0+ZmhfaGFuZGxlKTsKIAlkcC0+ZGxfdGltZSA9IDA7CiAJYXRvbWljX3NldCgmZHAtPmRsX2NvdW50LCAxKTsKLQlsaXN0X2FkZCgmZHAtPmRsX3BlcmZpbGUsICZmcC0+ZmlfZGVsZWdhdGlvbnMpOwotCWxpc3RfYWRkKCZkcC0+ZGxfcGVyY2xudCwgJmNscC0+Y2xfZGVsZWdhdGlvbnMpOwogCUlOSVRfV09SSygmZHAtPmRsX3JlY2FsbC5jYl93b3JrLCBuZnNkNF9kb19jYWxsYmFja19ycGMpOwogCXJldHVybiBkcDsKIH0KQEAgLTI1MywzNiArMjQ4LDMwIEBACiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRwLT5kbF9jb3VudCkpIHsKIAkJZHByaW50aygiTkZTRDogZnJlZWluZyBkcCAlcFxuIixkcCk7CiAJCXB1dF9uZnM0X2ZpbGUoZHAtPmRsX2ZpbGUpOwotCQlmcHV0KGRwLT5kbF92ZnNfZmlsZSk7CiAJCWttZW1fY2FjaGVfZnJlZShkZWxlZ19zbGFiLCBkcCk7CiAJCW51bV9kZWxlZ2F0aW9ucy0tOwogCX0KIH0KIAotLyogUmVtb3ZlIHRoZSBhc3NvY2lhdGVkIGZpbGVfbG9jayBmaXJzdCwgdGhlbiByZW1vdmUgdGhlIGRlbGVnYXRpb24uCi0gKiBsZWFzZV9tb2RpZnkoKSBpcyBjYWxsZWQgdG8gcmVtb3ZlIHRoZSBGU19MRUFTRSBmaWxlX2xvY2sgZnJvbQotICogdGhlIGlfZmxvY2sgbGlzdCwgZXZlbnR1YWxseSBjYWxsaW5nIG5mc2QncyBsb2NrX21hbmFnZXIKLSAqIGZsX3JlbGVhc2VfY2FsbGJhY2suCi0gKi8KLXN0YXRpYyB2b2lkCi1uZnM0X2Nsb3NlX2RlbGVnYXRpb24oc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHApCitzdGF0aWMgdm9pZCBuZnM0X3B1dF9kZWxlZ19sZWFzZShzdHJ1Y3QgbmZzNF9maWxlICpmcCkKIHsKLQlkcHJpbnRrKCJORlNEOiBjbG9zZV9kZWxlZ2F0aW9uIGRwICVwXG4iLGRwKTsKLQkvKiBYWFg6IGRvIHdlIGV2ZW4gbmVlZCB0aGlzIGNoZWNrPzogKi8KLQlpZiAoZHAtPmRsX2Zsb2NrKQotCQl2ZnNfc2V0bGVhc2UoZHAtPmRsX3Zmc19maWxlLCBGX1VOTENLLCAmZHAtPmRsX2Zsb2NrKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZnAtPmZpX2RlbGVnZWVzKSkgeworCQl2ZnNfc2V0bGVhc2UoZnAtPmZpX2RlbGVnX2ZpbGUsIEZfVU5MQ0ssICZmcC0+ZmlfbGVhc2UpOworCQlmcC0+ZmlfbGVhc2UgPSBOVUxMOworCQlmcC0+ZmlfZGVsZWdfZmlsZSA9IE5VTEw7CisJfQogfQogCiAvKiBDYWxsZWQgdW5kZXIgdGhlIHN0YXRlIGxvY2suICovCiBzdGF0aWMgdm9pZAogdW5oYXNoX2RlbGVnYXRpb24oc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHApCiB7Ci0JbGlzdF9kZWxfaW5pdCgmZHAtPmRsX3BlcmZpbGUpOwogCWxpc3RfZGVsX2luaXQoJmRwLT5kbF9wZXJjbG50KTsKIAlzcGluX2xvY2soJnJlY2FsbF9sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZkcC0+ZGxfcGVyZmlsZSk7CiAJbGlzdF9kZWxfaW5pdCgmZHAtPmRsX3JlY2FsbF9scnUpOwogCXNwaW5fdW5sb2NrKCZyZWNhbGxfbG9jayk7Ci0JbmZzNF9jbG9zZV9kZWxlZ2F0aW9uKGRwKTsKKwluZnM0X3B1dF9kZWxlZ19sZWFzZShkcC0+ZGxfZmlsZSk7CiAJbmZzNF9wdXRfZGVsZWdhdGlvbihkcCk7CiB9CiAKQEAgLTk1OCw4ICs5NDcsNiBAQAogCXNwaW5fbG9jaygmcmVjYWxsX2xvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eSgmY2xwLT5jbF9kZWxlZ2F0aW9ucykpIHsKIAkJZHAgPSBsaXN0X2VudHJ5KGNscC0+Y2xfZGVsZWdhdGlvbnMubmV4dCwgc3RydWN0IG5mczRfZGVsZWdhdGlvbiwgZGxfcGVyY2xudCk7Ci0JCWRwcmludGsoIk5GU0Q6IGV4cGlyZSBjbGllbnQuIGRwICVwLCBmcCAlcFxuIiwgZHAsCi0JCQkJZHAtPmRsX2Zsb2NrKTsKIAkJbGlzdF9kZWxfaW5pdCgmZHAtPmRsX3BlcmNsbnQpOwogCQlsaXN0X21vdmUoJmRwLT5kbF9yZWNhbGxfbHJ1LCAmcmVhcGxpc3QpOwogCX0KQEAgLTIwNzgsNiArMjA2NSw3IEBACiAJCWZwLT5maV9pbm9kZSA9IGlncmFiKGlubyk7CiAJCWZwLT5maV9pZCA9IGN1cnJlbnRfZmlsZWlkKys7CiAJCWZwLT5maV9oYWRfY29uZmxpY3QgPSBmYWxzZTsKKwkJZnAtPmZpX2xlYXNlID0gTlVMTDsKIAkJbWVtc2V0KGZwLT5maV9mZHMsIDAsIHNpemVvZihmcC0+ZmlfZmRzKSk7CiAJCW1lbXNldChmcC0+ZmlfYWNjZXNzLCAwLCBzaXplb2YoZnAtPmZpX2FjY2VzcykpOwogCQlzcGluX2xvY2soJnJlY2FsbF9sb2NrKTsKQEAgLTIzMjksMjMgKzIzMTcsOCBAQAogCQluZnM0X2ZpbGVfcHV0X2FjY2VzcyhmcCwgT19SRE9OTFkpOwogfQogCi0vKgotICogU3Bhd24gYSB0aHJlYWQgdG8gcGVyZm9ybSBhIHJlY2FsbCBvbiB0aGUgZGVsZWdhdGlvbiByZXByZXNlbnRlZAotICogYnkgdGhlIGxlYXNlIChmaWxlX2xvY2spCi0gKgotICogQ2FsbGVkIGZyb20gYnJlYWtfbGVhc2UoKSB3aXRoIGxvY2tfZmxvY2tzKCkgaGVsZC4KLSAqIE5vdGU6IHdlIGFzc3VtZSBicmVha19sZWFzZSB3aWxsIG9ubHkgY2FsbCB0aGlzICpvbmNlKiBmb3IgYW55IGdpdmVuCi0gKiBsZWFzZS4KLSAqLwotc3RhdGljCi12b2lkIG5mc2RfYnJlYWtfZGVsZWdfY2Ioc3RydWN0IGZpbGVfbG9jayAqZmwpCitzdGF0aWMgdm9pZCBuZnNkX2JyZWFrX29uZV9kZWxlZyhzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcCkKIHsKLQlzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcCA9IChzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICopZmwtPmZsX293bmVyOwotCi0JZHByaW50aygiTkZTRCBuZnNkX2JyZWFrX2RlbGVnX2NiOiBkcCAlcCBmbCAlcFxuIixkcCxmbCk7Ci0JaWYgKCFkcCkKLQkJcmV0dXJuOwotCiAJLyogV2UncmUgYXNzdW1pbmcgdGhlIHN0YXRlIGNvZGUgbmV2ZXIgZHJvcHMgaXRzIHJlZmVyZW5jZQogCSAqIHdpdGhvdXQgZmlyc3QgcmVtb3ZpbmcgdGhlIGxlYXNlLiAgU2luY2Ugd2UncmUgaW4gdGhpcyBsZWFzZQogCSAqIGNhbGxiYWNrIChhbmQgc2luY2UgdGhlIGxlYXNlIGNvZGUgaXMgc2VyaWFsaXplZCBieSB0aGUga2VybmVsCkBAIC0yMzUzLDIyICsyMzI2LDM1IEBACiAJICogaXQncyBzYWZlIHRvIHRha2UgYSByZWZlcmVuY2U6ICovCiAJYXRvbWljX2luYygmZHAtPmRsX2NvdW50KTsKIAotCXNwaW5fbG9jaygmcmVjYWxsX2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJmRwLT5kbF9yZWNhbGxfbHJ1LCAmZGVsX3JlY2FsbF9scnUpOwotCXNwaW5fdW5sb2NrKCZyZWNhbGxfbG9jayk7CiAKIAkvKiBvbmx5IHBsYWNlIGRsX3RpbWUgaXMgc2V0LiBwcm90ZWN0ZWQgYnkgbG9ja19mbG9ja3MqLwogCWRwLT5kbF90aW1lID0gZ2V0X3NlY29uZHMoKTsKIAorCW5mc2Q0X2NiX3JlY2FsbChkcCk7Cit9CisKKy8qIENhbGxlZCBmcm9tIGJyZWFrX2xlYXNlKCkgd2l0aCBsb2NrX2Zsb2NrcygpIGhlbGQuICovCitzdGF0aWMgdm9pZCBuZnNkX2JyZWFrX2RlbGVnX2NiKHN0cnVjdCBmaWxlX2xvY2sgKmZsKQoreworCXN0cnVjdCBuZnM0X2ZpbGUgKmZwID0gKHN0cnVjdCBuZnM0X2ZpbGUgKilmbC0+Zmxfb3duZXI7CisJc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHA7CisKKwlCVUdfT04oIWZwKTsKKwkvKiBXZSBhc3N1bWUgYnJlYWtfbGVhc2UgaXMgb25seSBjYWxsZWQgb25jZSBwZXIgbGVhc2U6ICovCisJQlVHX09OKGZwLT5maV9oYWRfY29uZmxpY3QpOwogCS8qCiAJICogV2UgZG9uJ3Qgd2FudCB0aGUgbG9ja3MgY29kZSB0byB0aW1lb3V0IHRoZSBsZWFzZSBmb3IgdXM7Ci0JICogd2UnbGwgcmVtb3ZlIGl0IG91cnNlbGYgaWYgdGhlIGRlbGVnYXRpb24gaXNuJ3QgcmV0dXJuZWQKLQkgKiBpbiB0aW1lLgorCSAqIHdlJ2xsIHJlbW92ZSBpdCBvdXJzZWxmIGlmIGEgZGVsZWdhdGlvbiBpc24ndCByZXR1cm5lZAorCSAqIGluIHRpbWU6CiAJICovCiAJZmwtPmZsX2JyZWFrX3RpbWUgPSAwOwogCi0JZHAtPmRsX2ZpbGUtPmZpX2hhZF9jb25mbGljdCA9IHRydWU7Ci0JbmZzZDRfY2JfcmVjYWxsKGRwKTsKKwlzcGluX2xvY2soJnJlY2FsbF9sb2NrKTsKKwlmcC0+ZmlfaGFkX2NvbmZsaWN0ID0gdHJ1ZTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRwLCAmZnAtPmZpX2RlbGVnYXRpb25zLCBkbF9wZXJmaWxlKQorCQluZnNkX2JyZWFrX29uZV9kZWxlZyhkcCk7CisJc3Bpbl91bmxvY2soJnJlY2FsbF9sb2NrKTsKIH0KIAogc3RhdGljCkBAIC0yNDU5LDEzICsyNDQ1LDE1IEBACiBzdGF0aWMgc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqCiBmaW5kX2RlbGVnYXRpb25fZmlsZShzdHJ1Y3QgbmZzNF9maWxlICpmcCwgc3RhdGVpZF90ICpzdGlkKQogewotCXN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmRwOworCXN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmRwID0gTlVMTDsKIAorCXNwaW5fbG9jaygmcmVjYWxsX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHAsICZmcC0+ZmlfZGVsZWdhdGlvbnMsIGRsX3BlcmZpbGUpIHsKIAkJaWYgKGRwLT5kbF9zdGF0ZWlkLnNpX3N0YXRlb3duZXJpZCA9PSBzdGlkLT5zaV9zdGF0ZW93bmVyaWQpCi0JCQlyZXR1cm4gZHA7CisJCQlicmVhazsKIAl9Ci0JcmV0dXJuIE5VTEw7CisJc3Bpbl91bmxvY2soJnJlY2FsbF9sb2NrKTsKKwlyZXR1cm4gZHA7CiB9CiAKIGludCBzaGFyZV9hY2Nlc3NfdG9fZmxhZ3ModTMyIHNoYXJlX2FjY2VzcykKQEAgLTI2NDEsNiArMjYyOSw2NiBAQAogCXJldHVybiBjbHAtPmNsX21pbm9ydmVyc2lvbiAmJiBjbHAtPmNsX2NiX3N0YXRlID09IE5GU0Q0X0NCX1VOS05PV047CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9sb2NrICpuZnM0X2FsbG9jX2luaXRfbGVhc2Uoc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHAsIGludCBmbGFnKQoreworCXN0cnVjdCBmaWxlX2xvY2sgKmZsOworCisJZmwgPSBsb2Nrc19hbGxvY19sb2NrKCk7CisJaWYgKCFmbCkKKwkJcmV0dXJuIE5VTEw7CisJbG9ja3NfaW5pdF9sb2NrKGZsKTsKKwlmbC0+ZmxfbG1vcHMgPSAmbmZzZF9sZWFzZV9tbmdfb3BzOworCWZsLT5mbF9mbGFncyA9IEZMX0xFQVNFOworCWZsLT5mbF90eXBlID0gZmxhZyA9PSBORlM0X09QRU5fREVMRUdBVEVfUkVBRD8gRl9SRExDSzogRl9XUkxDSzsKKwlmbC0+ZmxfZW5kID0gT0ZGU0VUX01BWDsKKwlmbC0+Zmxfb3duZXIgPSAoZmxfb3duZXJfdCkoZHAtPmRsX2ZpbGUpOworCWZsLT5mbF9waWQgPSBjdXJyZW50LT50Z2lkOworCXJldHVybiBmbDsKK30KKworc3RhdGljIGludCBuZnM0X3NldGxlYXNlKHN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmRwLCBpbnQgZmxhZykKK3sKKwlzdHJ1Y3QgbmZzNF9maWxlICpmcCA9IGRwLT5kbF9maWxlOworCXN0cnVjdCBmaWxlX2xvY2sgKmZsOworCWludCBzdGF0dXM7CisKKwlmbCA9IG5mczRfYWxsb2NfaW5pdF9sZWFzZShkcCwgZmxhZyk7CisJaWYgKCFmbCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZmwtPmZsX2ZpbGUgPSBmaW5kX3JlYWRhYmxlX2ZpbGUoZnApOworCWxpc3RfYWRkKCZkcC0+ZGxfcGVyY2xudCwgJmRwLT5kbF9jbGllbnQtPmNsX2RlbGVnYXRpb25zKTsKKwlzdGF0dXMgPSB2ZnNfc2V0bGVhc2UoZmwtPmZsX2ZpbGUsIGZsLT5mbF90eXBlLCAmZmwpOworCWlmIChzdGF0dXMpIHsKKwkJbGlzdF9kZWxfaW5pdCgmZHAtPmRsX3BlcmNsbnQpOworCQlsb2Nrc19mcmVlX2xvY2soZmwpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZnAtPmZpX2xlYXNlID0gZmw7CisJZnAtPmZpX2RlbGVnX2ZpbGUgPSBmbC0+ZmxfZmlsZTsKKwlnZXRfZmlsZShmcC0+ZmlfZGVsZWdfZmlsZSk7CisJYXRvbWljX3NldCgmZnAtPmZpX2RlbGVnZWVzLCAxKTsKKwlsaXN0X2FkZCgmZHAtPmRsX3BlcmZpbGUsICZmcC0+ZmlfZGVsZWdhdGlvbnMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5mczRfc2V0X2RlbGVnYXRpb24oc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHAsIGludCBmbGFnKQoreworCXN0cnVjdCBuZnM0X2ZpbGUgKmZwID0gZHAtPmRsX2ZpbGU7CisKKwlpZiAoIWZwLT5maV9sZWFzZSkKKwkJcmV0dXJuIG5mczRfc2V0bGVhc2UoZHAsIGZsYWcpOworCXNwaW5fbG9jaygmcmVjYWxsX2xvY2spOworCWlmIChmcC0+ZmlfaGFkX2NvbmZsaWN0KSB7CisJCXNwaW5fdW5sb2NrKCZyZWNhbGxfbG9jayk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlhdG9taWNfaW5jKCZmcC0+ZmlfZGVsZWdlZXMpOworCWxpc3RfYWRkKCZkcC0+ZGxfcGVyZmlsZSwgJmZwLT5maV9kZWxlZ2F0aW9ucyk7CisJc3Bpbl91bmxvY2soJnJlY2FsbF9sb2NrKTsKKwlsaXN0X2FkZCgmZHAtPmRsX3BlcmNsbnQsICZkcC0+ZGxfY2xpZW50LT5jbF9kZWxlZ2F0aW9ucyk7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBBdHRlbXB0IHRvIGhhbmQgb3V0IGEgZGVsZWdhdGlvbi4KICAqLwpAQCAtMjY1MCw3ICsyNjk4LDYgQEAKIAlzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcDsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpzb3AgPSBzdHAtPnN0X3N0YXRlb3duZXI7CiAJaW50IGNiX3VwOwotCXN0cnVjdCBmaWxlX2xvY2sgKmZsOwogCWludCBzdGF0dXMsIGZsYWcgPSAwOwogCiAJY2JfdXAgPSBuZnNkNF9jYl9jaGFubmVsX2dvb2Qoc29wLT5zb19jbGllbnQpOwpAQCAtMjY4MSwzNiArMjcyOCwxMSBAQAogCX0KIAogCWRwID0gYWxsb2NfaW5pdF9kZWxlZyhzb3AtPnNvX2NsaWVudCwgc3RwLCBmaCwgZmxhZyk7Ci0JaWYgKGRwID09IE5VTEwpIHsKLQkJZmxhZyA9IE5GUzRfT1BFTl9ERUxFR0FURV9OT05FOwotCQlnb3RvIG91dDsKLQl9Ci0Jc3RhdHVzID0gLUVOT01FTTsKLQlmbCA9IGxvY2tzX2FsbG9jX2xvY2soKTsKLQlpZiAoIWZsKQotCQlnb3RvIG91dDsKLQlsb2Nrc19pbml0X2xvY2soZmwpOwotCWZsLT5mbF9sbW9wcyA9ICZuZnNkX2xlYXNlX21uZ19vcHM7Ci0JZmwtPmZsX2ZsYWdzID0gRkxfTEVBU0U7Ci0JZmwtPmZsX3R5cGUgPSBmbGFnID09IE5GUzRfT1BFTl9ERUxFR0FURV9SRUFEPyBGX1JETENLOiBGX1dSTENLOwotCWZsLT5mbF9lbmQgPSBPRkZTRVRfTUFYOwotCWZsLT5mbF9vd25lciA9ICAoZmxfb3duZXJfdClkcDsKLQlmbC0+ZmxfZmlsZSA9IGZpbmRfcmVhZGFibGVfZmlsZShzdHAtPnN0X2ZpbGUpOwotCUJVR19PTighZmwtPmZsX2ZpbGUpOwotCWZsLT5mbF9waWQgPSBjdXJyZW50LT50Z2lkOwotCWRwLT5kbF9mbG9jayA9IGZsOwotCi0JLyogdmZzX3NldGxlYXNlIGNoZWNrcyB0byBzZWUgaWYgZGVsZWdhdGlvbiBzaG91bGQgYmUgaGFuZGVkIG91dC4KLQkgKiB0aGUgbG9ja19tYW5hZ2VyIGNhbGxiYWNrIGZsX2NoYW5nZSBpcyB1c2VkCi0JICovCi0JaWYgKChzdGF0dXMgPSB2ZnNfc2V0bGVhc2UoZmwtPmZsX2ZpbGUsIGZsLT5mbF90eXBlLCAmZmwpKSkgewotCQlkcHJpbnRrKCJORlNEOiBzZXRsZWFzZSBmYWlsZWQgWyVkXSwgbm8gZGVsZWdhdGlvblxuIiwgc3RhdHVzKTsKLQkJZHAtPmRsX2Zsb2NrID0gTlVMTDsKLQkJbG9ja3NfZnJlZV9sb2NrKGZsKTsKLQkJdW5oYXNoX2RlbGVnYXRpb24oZHApOwotCQlmbGFnID0gTkZTNF9PUEVOX0RFTEVHQVRFX05PTkU7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoZHAgPT0gTlVMTCkKKwkJZ290byBvdXRfbm9fZGVsZWc7CisJc3RhdHVzID0gbmZzNF9zZXRfZGVsZWdhdGlvbihkcCwgZmxhZyk7CisJaWYgKHN0YXR1cykKKwkJZ290byBvdXRfZnJlZTsKIAogCW1lbWNweSgmb3Blbi0+b3BfZGVsZWdhdGVfc3RhdGVpZCwgJmRwLT5kbF9zdGF0ZWlkLCBzaXplb2YoZHAtPmRsX3N0YXRlaWQpKTsKIApAQCAtMjcyMiw2ICsyNzQ0LDEyIEBACiAJCQkmJiBvcGVuLT5vcF9kZWxlZ2F0ZV90eXBlICE9IE5GUzRfT1BFTl9ERUxFR0FURV9OT05FKQogCQlkcHJpbnRrKCJORlNEOiBXQVJOSU5HOiByZWZ1c2luZyBkZWxlZ2F0aW9uIHJlY2xhaW1cbiIpOwogCW9wZW4tPm9wX2RlbGVnYXRlX3R5cGUgPSBmbGFnOworCXJldHVybjsKK291dF9mcmVlOgorCW5mczRfcHV0X2RlbGVnYXRpb24oZHApOworb3V0X25vX2RlbGVnOgorCWZsYWcgPSBORlM0X09QRU5fREVMRUdBVEVfTk9ORTsKKwlnb3RvIG91dDsKIH0KIAogLyoKQEAgLTI5MTYsOCArMjk0NCw2IEBACiAJCQkJdGVzdF92YWwgPSB1OwogCQkJYnJlYWs7CiAJCX0KLQkJZHByaW50aygiTkZTRDogcHVyZ2luZyB1bnVzZWQgZGVsZWdhdGlvbiBkcCAlcCwgZnAgJXBcbiIsCi0JCQkgICAgICAgICAgICBkcCwgZHAtPmRsX2Zsb2NrKTsKIAkJbGlzdF9tb3ZlKCZkcC0+ZGxfcmVjYWxsX2xydSwgJnJlYXBsaXN0KTsKIAl9CiAJc3Bpbl91bmxvY2soJnJlY2FsbF9sb2NrKTsKQEAgLTMxMjgsNyArMzE1NCw3IEBACiAJCQlnb3RvIG91dDsKIAkJcmVuZXdfY2xpZW50KGRwLT5kbF9jbGllbnQpOwogCQlpZiAoZmlscHApIHsKLQkJCSpmaWxwcCA9IGZpbmRfcmVhZGFibGVfZmlsZShkcC0+ZGxfZmlsZSk7CisJCQkqZmlscHAgPSBkcC0+ZGxfZmlsZS0+ZmlfZGVsZWdfZmlsZTsKIAkJCUJVR19PTighKmZpbHBwKTsKIAkJfQogCX0gZWxzZSB7IC8qIG9wZW4gb3IgbG9jayBzdGF0ZWlkICovCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczR4ZHIuYyBiL2ZzL25mc2QvbmZzNHhkci5jCmluZGV4IDk1NjYyOWIuLjEyNzViODYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHhkci5jCisrKyBiL2ZzL25mc2QvbmZzNHhkci5jCkBAIC0zMTcsOCArMzE3LDggQEAKIAkJUkVBRF9CVUYoZHVtbXkzMik7CiAJCWxlbiArPSAoWERSX1FVQURMRU4oZHVtbXkzMikgPDwgMik7CiAJCVJFQURNRU0oYnVmLCBkdW1teTMyKTsKLQkJaWYgKChob3N0X2VyciA9IG5mc2RfbWFwX25hbWVfdG9fdWlkKGFyZ3AtPnJxc3RwLCBidWYsIGR1bW15MzIsICZpYXR0ci0+aWFfdWlkKSkpCi0JCQlnb3RvIG91dF9uZnNlcnI7CisJCWlmICgoc3RhdHVzID0gbmZzZF9tYXBfbmFtZV90b191aWQoYXJncC0+cnFzdHAsIGJ1ZiwgZHVtbXkzMiwgJmlhdHRyLT5pYV91aWQpKSkKKwkJCXJldHVybiBzdGF0dXM7CiAJCWlhdHRyLT5pYV92YWxpZCB8PSBBVFRSX1VJRDsKIAl9CiAJaWYgKGJtdmFsWzFdICYgRkFUVFI0X1dPUkQxX09XTkVSX0dST1VQKSB7CkBAIC0zMjgsOCArMzI4LDggQEAKIAkJUkVBRF9CVUYoZHVtbXkzMik7CiAJCWxlbiArPSAoWERSX1FVQURMRU4oZHVtbXkzMikgPDwgMik7CiAJCVJFQURNRU0oYnVmLCBkdW1teTMyKTsKLQkJaWYgKChob3N0X2VyciA9IG5mc2RfbWFwX25hbWVfdG9fZ2lkKGFyZ3AtPnJxc3RwLCBidWYsIGR1bW15MzIsICZpYXR0ci0+aWFfZ2lkKSkpCi0JCQlnb3RvIG91dF9uZnNlcnI7CisJCWlmICgoc3RhdHVzID0gbmZzZF9tYXBfbmFtZV90b19naWQoYXJncC0+cnFzdHAsIGJ1ZiwgZHVtbXkzMiwgJmlhdHRyLT5pYV9naWQpKSkKKwkJCXJldHVybiBzdGF0dXM7CiAJCWlhdHRyLT5pYV92YWxpZCB8PSBBVFRSX0dJRDsKIAl9CiAJaWYgKGJtdmFsWzFdICYgRkFUVFI0X1dPUkQxX1RJTUVfQUNDRVNTX1NFVCkgewpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9zdGF0ZS5oIGIvZnMvbmZzZC9zdGF0ZS5oCmluZGV4IDMwNzQ2NTYuLjJkMzEyMjQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2Qvc3RhdGUuaAorKysgYi9mcy9uZnNkL3N0YXRlLmgKQEAgLTgzLDggKzgzLDYgQEAKIAlhdG9taWNfdAkJZGxfY291bnQ7ICAgICAgIC8qIHJlZiBjb3VudCAqLwogCXN0cnVjdCBuZnM0X2NsaWVudAkqZGxfY2xpZW50OwogCXN0cnVjdCBuZnM0X2ZpbGUJKmRsX2ZpbGU7Ci0Jc3RydWN0IGZpbGUJCSpkbF92ZnNfZmlsZTsKLQlzdHJ1Y3QgZmlsZV9sb2NrCSpkbF9mbG9jazsKIAl1MzIJCQlkbF90eXBlOwogCXRpbWVfdAkJCWRsX3RpbWU7CiAvKiBGb3IgcmVjYWxsOiAqLwpAQCAtMzc5LDYgKzM3Nyw5IEBACiAJICovCiAJYXRvbWljX3QJCWZpX3JlYWRlcnM7CiAJYXRvbWljX3QJCWZpX3dyaXRlcnM7CisJc3RydWN0IGZpbGUJCSpmaV9kZWxlZ19maWxlOworCXN0cnVjdCBmaWxlX2xvY2sJKmZpX2xlYXNlOworCWF0b21pY190CQlmaV9kZWxlZ2VlczsKIAlzdHJ1Y3QgaW5vZGUJCSpmaV9pbm9kZTsKIAl1MzIgICAgICAgICAgICAgICAgICAgICBmaV9pZDsgICAgICAvKiB1c2VkIHdpdGggc3RhdGVvd25lci0+c29faWQgCiAJCQkJCSAgICAgKiBmb3Igc3RhdGVpZF9oYXNodGJsIGhhc2ggKi8KZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IDY0MTExN2YuLmRhMWQ5NzAgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtODA4LDcgKzgwOCw3IEBACiAJCWlmIChyYS0+cF9jb3VudCA9PSAwKQogCQkJZnJhcCA9IHJhcDsKIAl9Ci0JZGVwdGggPSBuZnNkc3RhdHMucmFfc2l6ZSoxMS8xMDsKKwlkZXB0aCA9IG5mc2RzdGF0cy5yYV9zaXplOwogCWlmICghZnJhcCkgewkKIAkJc3Bpbl91bmxvY2soJnJhYi0+cGJfbG9jayk7CiAJCXJldHVybiBOVUxMOwpAQCAtMTc0NCw2ICsxNzQ0LDEzIEBACiAJaG9zdF9lcnIgPSBuZnNkX2JyZWFrX2xlYXNlKG9kZW50cnktPmRfaW5vZGUpOwogCWlmIChob3N0X2VycikKIAkJZ290byBvdXRfZHJvcF93cml0ZTsKKwlpZiAobmRlbnRyeS0+ZF9pbm9kZSkgeworCQlob3N0X2VyciA9IG5mc2RfYnJlYWtfbGVhc2UobmRlbnRyeS0+ZF9pbm9kZSk7CisJCWlmIChob3N0X2VycikKKwkJCWdvdG8gb3V0X2Ryb3Bfd3JpdGU7CisJfQorCWlmIChob3N0X2VycikKKwkJZ290byBvdXRfZHJvcF93cml0ZTsKIAlob3N0X2VyciA9IHZmc19yZW5hbWUoZmRpciwgb2RlbnRyeSwgdGRpciwgbmRlbnRyeSk7CiAJaWYgKCFob3N0X2VycikgewogCQlob3N0X2VyciA9IGNvbW1pdF9tZXRhZGF0YSh0ZmhwKTsKQEAgLTE4MTIsMjIgKzE4MTksMjIgQEAKIAogCWhvc3RfZXJyID0gbW50X3dhbnRfd3JpdGUoZmhwLT5maF9leHBvcnQtPmV4X3BhdGgubW50KTsKIAlpZiAoaG9zdF9lcnIpCi0JCWdvdG8gb3V0X25mc2VycjsKKwkJZ290byBvdXRfcHV0OwogCiAJaG9zdF9lcnIgPSBuZnNkX2JyZWFrX2xlYXNlKHJkZW50cnktPmRfaW5vZGUpOwogCWlmIChob3N0X2VycikKLQkJZ290byBvdXRfcHV0OworCQlnb3RvIG91dF9kcm9wX3dyaXRlOwogCWlmICh0eXBlICE9IFNfSUZESVIpCiAJCWhvc3RfZXJyID0gdmZzX3VubGluayhkaXJwLCByZGVudHJ5KTsKIAllbHNlCiAJCWhvc3RfZXJyID0gdmZzX3JtZGlyKGRpcnAsIHJkZW50cnkpOworCWlmICghaG9zdF9lcnIpCisJCWhvc3RfZXJyID0gY29tbWl0X21ldGFkYXRhKGZocCk7CitvdXRfZHJvcF93cml0ZToKKwltbnRfZHJvcF93cml0ZShmaHAtPmZoX2V4cG9ydC0+ZXhfcGF0aC5tbnQpOwogb3V0X3B1dDoKIAlkcHV0KHJkZW50cnkpOwogCi0JaWYgKCFob3N0X2VycikKLQkJaG9zdF9lcnIgPSBjb21taXRfbWV0YWRhdGEoZmhwKTsKLQotCW1udF9kcm9wX3dyaXRlKGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CiBvdXRfbmZzZXJyOgogCWVyciA9IG5mc2Vycm5vKGhvc3RfZXJyKTsKIG91dDoKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9idG5vZGUuYyBiL2ZzL25pbGZzMi9idG5vZGUuYwppbmRleCAzODhlOWU4Li44NWY3YmFhIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYnRub2RlLmMKKysrIGIvZnMvbmlsZnMyL2J0bm9kZS5jCkBAIC0zNSwxMSArMzUsNiBAQAogI2luY2x1ZGUgImJ0bm9kZS5oIgogCiAKLXZvaWQgbmlsZnNfYnRub2RlX2NhY2hlX2luaXRfb25jZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYnRuYykKLXsKLQluaWxmc19tYXBwaW5nX2luaXRfb25jZShidG5jKTsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2J0bm9kZV9hb3BzID0gewogCS5zeW5jX3BhZ2UJCT0gYmxvY2tfc3luY19wYWdlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9idG5vZGUuaCBiL2ZzL25pbGZzMi9idG5vZGUuaAppbmRleCA3OTAzNzQ5Li4xYjhlYmQ4IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYnRub2RlLmgKKysrIGIvZnMvbmlsZnMyL2J0bm9kZS5oCkBAIC0zNyw3ICszNyw2IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdiaDsKIH07CiAKLXZvaWQgbmlsZnNfYnRub2RlX2NhY2hlX2luaXRfb25jZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKIHZvaWQgbmlsZnNfYnRub2RlX2NhY2hlX2luaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKik7CiB2b2lkIG5pbGZzX2J0bm9kZV9jYWNoZV9jbGVhcihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKIHN0cnVjdCBidWZmZXJfaGVhZCAqbmlsZnNfYnRub2RlX2NyZWF0ZV9ibG9jayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYnRuYywKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9tZHQuYyBiL2ZzL25pbGZzMi9tZHQuYwppbmRleCA2YTBlMmExLi5hMGJhYmQyIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvbWR0LmMKKysrIGIvZnMvbmlsZnMyL21kdC5jCkBAIC00NTQsOSArNDU0LDkgQEAKIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpID0gaW5vZGUtPmlfc2ItPnNfYmRpOwogCiAJSU5JVF9MSVNUX0hFQUQoJnNoYWRvdy0+ZnJvemVuX2J1ZmZlcnMpOwotCW5pbGZzX21hcHBpbmdfaW5pdF9vbmNlKCZzaGFkb3ctPmZyb3plbl9kYXRhKTsKKwlhZGRyZXNzX3NwYWNlX2luaXRfb25jZSgmc2hhZG93LT5mcm96ZW5fZGF0YSk7CiAJbmlsZnNfbWFwcGluZ19pbml0KCZzaGFkb3ctPmZyb3plbl9kYXRhLCBiZGksICZzaGFkb3dfbWFwX2FvcHMpOwotCW5pbGZzX21hcHBpbmdfaW5pdF9vbmNlKCZzaGFkb3ctPmZyb3plbl9idG5vZGVzKTsKKwlhZGRyZXNzX3NwYWNlX2luaXRfb25jZSgmc2hhZG93LT5mcm96ZW5fYnRub2Rlcyk7CiAJbmlsZnNfbWFwcGluZ19pbml0KCZzaGFkb3ctPmZyb3plbl9idG5vZGVzLCBiZGksICZzaGFkb3dfbWFwX2FvcHMpOwogCW1pLT5taV9zaGFkb3cgPSBzaGFkb3c7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvcGFnZS5jIGIvZnMvbmlsZnMyL3BhZ2UuYwppbmRleCAwYzQzMjQxLi5hNTg1YjM1IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvcGFnZS5jCisrKyBiL2ZzL25pbGZzMi9wYWdlLmMKQEAgLTQ5MiwxOSArNDkyLDYgQEAKIAlyZXR1cm4gbmM7CiB9CiAKLXZvaWQgbmlsZnNfbWFwcGluZ19pbml0X29uY2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCi17Ci0JbWVtc2V0KG1hcHBpbmcsIDAsIHNpemVvZigqbWFwcGluZykpOwotCUlOSVRfUkFESVhfVFJFRSgmbWFwcGluZy0+cGFnZV90cmVlLCBHRlBfQVRPTUlDKTsKLQlzcGluX2xvY2tfaW5pdCgmbWFwcGluZy0+dHJlZV9sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmbWFwcGluZy0+cHJpdmF0ZV9saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmbWFwcGluZy0+cHJpdmF0ZV9sb2NrKTsKLQotCXNwaW5fbG9ja19pbml0KCZtYXBwaW5nLT5pX21tYXBfbG9jayk7Ci0JSU5JVF9SQVdfUFJJT19UUkVFX1JPT1QoJm1hcHBpbmctPmlfbW1hcCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIpOwotfQotCiB2b2lkIG5pbGZzX21hcHBpbmdfaW5pdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksCiAJCQljb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zICphb3BzKQpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3BhZ2UuaCBiL2ZzL25pbGZzMi9wYWdlLmgKaW5kZXggNjIyZGYyNy4uMmEwMDk1MyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3BhZ2UuaAorKysgYi9mcy9uaWxmczIvcGFnZS5oCkBAIC02MSw3ICs2MSw2IEBACiBpbnQgbmlsZnNfY29weV9kaXJ0eV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKIHZvaWQgbmlsZnNfY29weV9iYWNrX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHN0cnVjdCBhZGRyZXNzX3NwYWNlICopOwogdm9pZCBuaWxmc19jbGVhcl9kaXJ0eV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKLXZvaWQgbmlsZnNfbWFwcGluZ19pbml0X29uY2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpOwogdm9pZCBuaWxmc19tYXBwaW5nX2luaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLAogCQkJY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyAqYW9wcyk7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc3VwZXIuYyBiL2ZzL25pbGZzMi9zdXBlci5jCmluZGV4IDA5OTRmNmE3Li4xNjczYjNkIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc3VwZXIuYworKysgYi9mcy9uaWxmczIvc3VwZXIuYwpAQCAtNzA0LDcgKzcwNCw4IEBACiAJc2JwWzBdLT5zX3N0YXRlID0KIAkJY3B1X3RvX2xlMTYobGUxNl90b19jcHUoc2JwWzBdLT5zX3N0YXRlKSAmIH5OSUxGU19WQUxJRF9GUyk7CiAJLyogc3luY2hyb25pemUgc2JwWzFdIHdpdGggc2JwWzBdICovCi0JbWVtY3B5KHNicFsxXSwgc2JwWzBdLCBuaWxmcy0+bnNfc2JzaXplKTsKKwlpZiAoc2JwWzFdKQorCQltZW1jcHkoc2JwWzFdLCBzYnBbMF0sIG5pbGZzLT5uc19zYnNpemUpOwogCXJldHVybiBuaWxmc19jb21taXRfc3VwZXIoc2JpLCBOSUxGU19TQl9DT01NSVRfQUxMKTsKIH0KIApAQCAtMTI3OCw3ICsxMjc5LDcgQEAKICNpZmRlZiBDT05GSUdfTklMRlNfWEFUVFIKIAlpbml0X3J3c2VtKCZpaS0+eGF0dHJfc2VtKTsKICNlbmRpZgotCW5pbGZzX2J0bm9kZV9jYWNoZV9pbml0X29uY2UoJmlpLT5pX2J0bm9kZV9jYWNoZSk7CisJYWRkcmVzc19zcGFjZV9pbml0X29uY2UoJmlpLT5pX2J0bm9kZV9jYWNoZSk7CiAJaWktPmlfYm1hcCA9ICZpaS0+aV9ibWFwX2RhdGE7CiAJaW5vZGVfaW5pdF9vbmNlKCZpaS0+dmZzX2lub2RlKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL250ZnMvbWZ0LmMgYi9mcy9udGZzL21mdC5jCmluZGV4IGI1NzJiNjcuLjMyNmU3NDcgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbWZ0LmMKKysrIGIvZnMvbnRmcy9tZnQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKgogICogbWZ0LmMgLSBOVEZTIGtlcm5lbCBtZnQgcmVjb3JkIG9wZXJhdGlvbnMuIFBhcnQgb2YgdGhlIExpbnV4LU5URlMgcHJvamVjdC4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNiBBbnRvbiBBbHRhcGFybWFrb3YKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDExIEFudG9uIEFsdGFwYXJtYWtvdiBhbmQgVHV4ZXJhIEluYy4KICAqIENvcHlyaWdodCAoYykgMjAwMiBSaWNoYXJkIFJ1c3NvbgogICoKICAqIFRoaXMgcHJvZ3JhbS9pbmNsdWRlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNTc2LDYgKzI1NzYsOCBAQAogCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAlpZiAoYmFzZV9uaSkgeworCQlNRlRfUkVDT1JEICptX3RtcDsKKwogCQkvKgogCQkgKiBTZXR1cCB0aGUgYmFzZSBtZnQgcmVjb3JkIGluIHRoZSBleHRlbnQgbWZ0IHJlY29yZC4gIFRoaXMKIAkJICogY29tcGxldGVzIGluaXRpYWxpemF0aW9uIG9mIHRoZSBhbGxvY2F0ZWQgZXh0ZW50IG1mdCByZWNvcmQKQEAgLTI1ODgsMTEgKzI1OTAsMTEgQEAKIAkJICogYXR0YWNoIGl0IHRvIHRoZSBiYXNlIGlub2RlIEBiYXNlX25pIGFuZCBtYXAsIHBpbiwgYW5kIGxvY2sKIAkJICogaXRzLCBpLmUuIHRoZSBhbGxvY2F0ZWQsIG1mdCByZWNvcmQuCiAJCSAqLwotCQltID0gbWFwX2V4dGVudF9tZnRfcmVjb3JkKGJhc2VfbmksIGJpdCwgJm5pKTsKLQkJaWYgKElTX0VSUihtKSkgeworCQltX3RtcCA9IG1hcF9leHRlbnRfbWZ0X3JlY29yZChiYXNlX25pLCBiaXQsICZuaSk7CisJCWlmIChJU19FUlIobV90bXApKSB7CiAJCQludGZzX2Vycm9yKHZvbC0+c2IsICJGYWlsZWQgdG8gbWFwIGFsbG9jYXRlZCBleHRlbnQgIgogCQkJCQkibWZ0IHJlY29yZCAweCVsbHguIiwgKGxvbmcgbG9uZyliaXQpOwotCQkJZXJyID0gUFRSX0VSUihtKTsKKwkJCWVyciA9IFBUUl9FUlIobV90bXApOwogCQkJLyogU2V0IHRoZSBtZnQgcmVjb3JkIGl0c2VsZiBub3QgaW4gdXNlLiAqLwogCQkJbS0+ZmxhZ3MgJj0gY3B1X3RvX2xlMTYoCiAJCQkJCX5sZTE2X3RvX2NwdShNRlRfUkVDT1JEX0lOX1VTRSkpOwpAQCAtMjYwMyw2ICsyNjA1LDcgQEAKIAkJCW50ZnNfdW5tYXBfcGFnZShwYWdlKTsKIAkJCWdvdG8gdW5kb19tZnRibXBfYWxsb2M7CiAJCX0KKwkJQlVHX09OKG0gIT0gbV90bXApOwogCQkvKgogCQkgKiBNYWtlIHN1cmUgdGhlIGFsbG9jYXRlZCBtZnQgcmVjb3JkIGlzIHdyaXR0ZW4gb3V0IHRvIGRpc2suCiAJCSAqIE5vIG5lZWQgdG8gc2V0IHRoZSBpbm9kZSBkaXJ0eSBiZWNhdXNlIHRoZSBjYWxsZXIgaXMgZ29pbmcKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IDA2ZDFmNzQuLjM4Zjk4NmQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtOTkzLDggKzk5Myw3IEBACiB9CiAKIC8qIEhhbmRsZSBxdW90YSBvbiBxdW90YWN0bCAqLwotc3RhdGljIGludCBvY2ZzMl9xdW90YV9vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwKLQkJCSAgY2hhciAqcGF0aCkKK3N0YXRpYyBpbnQgb2NmczJfcXVvdGFfb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBmb3JtYXRfaWQpCiB7CiAJdW5zaWduZWQgaW50IGZlYXR1cmVbTUFYUVVPVEFTXSA9IHsgT0NGUzJfRkVBVFVSRV9ST19DT01QQVRfVVNSUVVPVEEsCiAJCQkJCSAgICAgT0NGUzJfRkVBVFVSRV9ST19DT01QQVRfR1JQUVVPVEF9OwpAQCAtMTAxMyw3ICsxMDEyLDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBxdW90YWN0bF9vcHMgb2NmczJfcXVvdGFjdGxfb3BzID0gewotCS5xdW90YV9vbgk9IG9jZnMyX3F1b3RhX29uLAorCS5xdW90YV9vbl9tZXRhCT0gb2NmczJfcXVvdGFfb24sCiAJLnF1b3RhX29mZgk9IG9jZnMyX3F1b3RhX29mZiwKIAkucXVvdGFfc3luYwk9IGRxdW90X3F1b3RhX3N5bmMsCiAJLmdldF9pbmZvCT0gZHF1b3RfZ2V0X2RxaW5mbywKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCBlNTIzODllLi41YTJjNmViIDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKKysrIGIvZnMvb3Blbi5jCkBAIC03OTAsNiArNzkwLDggQEAKIAogCS8qIFBpY2sgdXAgdGhlIGZpbHAgZnJvbSB0aGUgb3BlbiBpbnRlbnQgKi8KIAlmaWxwID0gbmQtPmludGVudC5vcGVuLmZpbGU7CisJbmQtPmludGVudC5vcGVuLmZpbGUgPSBOVUxMOworCiAJLyogSGFzIHRoZSBmaWxlc3lzdGVtIGluaXRpYWxpc2VkIHRoZSBmaWxlIGZvciB1cz8gKi8KIAlpZiAoZmlscC0+Zl9wYXRoLmRlbnRyeSA9PSBOVUxMKSB7CiAJCXBhdGhfZ2V0KCZuZC0+cGF0aCk7CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2xkbS5jIGIvZnMvcGFydGl0aW9ucy9sZG0uYwppbmRleCA3ODljNjI1Li5iMTBlMzU0IDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2xkbS5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvbGRtLmMKQEAgLTI1MSw2ICsyNTEsMTEgQEAKIAl9CiAKIAl2bS0+dmJsa19zaXplICAgICA9IGdldF91bmFsaWduZWRfYmUzMihkYXRhICsgMHgwOCk7CisJaWYgKHZtLT52YmxrX3NpemUgPT0gMCkgeworCQlsZG1fZXJyb3IgKCJJbGxlZ2FsIFZCTEsgc2l6ZSIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCiAJdm0tPnZibGtfb2Zmc2V0ICAgPSBnZXRfdW5hbGlnbmVkX2JlMzIoZGF0YSArIDB4MEMpOwogCXZtLT5sYXN0X3ZibGtfc2VxID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGRhdGEgKyAweDA0KTsKIApkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9tYWMuYyBiL2ZzL3BhcnRpdGlvbnMvbWFjLmMKaW5kZXggNjhkNmEyMS4uMTFmNjg4YiAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9tYWMuYworKysgYi9mcy9wYXJ0aXRpb25zL21hYy5jCkBAIC0yOSwxMCArMjksOSBAQAogCiBpbnQgbWFjX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKQogewotCWludCBzbG90ID0gMTsKIAlTZWN0b3Igc2VjdDsKIAl1bnNpZ25lZCBjaGFyICpkYXRhOwotCWludCBibGssIGJsb2Nrc19pbl9tYXA7CisJaW50IHNsb3QsIGJsb2Nrc19pbl9tYXA7CiAJdW5zaWduZWQgc2Vjc2l6ZTsKICNpZmRlZiBDT05GSUdfUFBDX1BNQUMKIAlpbnQgZm91bmRfcm9vdCA9IDA7CkBAIC01OSwxMCArNTgsMTQgQEAKIAkJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CiAJCXJldHVybiAwOwkJLyogbm90IGEgTWFjT1MgZGlzayAqLwogCX0KLQlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICIgW21hY10iLCBQQUdFX1NJWkUpOwogCWJsb2Nrc19pbl9tYXAgPSBiZTMyX3RvX2NwdShwYXJ0LT5tYXBfY291bnQpOwotCWZvciAoYmxrID0gMTsgYmxrIDw9IGJsb2Nrc19pbl9tYXA7ICsrYmxrKSB7Ci0JCWludCBwb3MgPSBibGsgKiBzZWNzaXplOworCWlmIChibG9ja3NfaW5fbWFwIDwgMCB8fCBibG9ja3NfaW5fbWFwID49IERJU0tfTUFYX1BBUlRTKSB7CisJCXB1dF9kZXZfc2VjdG9yKHNlY3QpOworCQlyZXR1cm4gMDsKKwl9CisJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCAiIFttYWNdIiwgUEFHRV9TSVpFKTsKKwlmb3IgKHNsb3QgPSAxOyBzbG90IDw9IGJsb2Nrc19pbl9tYXA7ICsrc2xvdCkgeworCQlpbnQgcG9zID0gc2xvdCAqIHNlY3NpemU7CiAJCXB1dF9kZXZfc2VjdG9yKHNlY3QpOwogCQlkYXRhID0gcmVhZF9wYXJ0X3NlY3RvcihzdGF0ZSwgcG9zLzUxMiwgJnNlY3QpOwogCQlpZiAoIWRhdGEpCkBAIC0xMTMsMTMgKzExNiwxMSBAQAogCQkJfQogCiAJCQlpZiAoZ29vZG5lc3MgPiBmb3VuZF9yb290X2dvb2RuZXNzKSB7Ci0JCQkJZm91bmRfcm9vdCA9IGJsazsKKwkJCQlmb3VuZF9yb290ID0gc2xvdDsKIAkJCQlmb3VuZF9yb290X2dvb2RuZXNzID0gZ29vZG5lc3M7CiAJCQl9CiAJCX0KICNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KLQotCQkrK3Nsb3Q7CiAJfQogI2lmZGVmIENPTkZJR19QUENfUE1BQwogCWlmIChmb3VuZF9yb290X2dvb2RuZXNzKQpkaWZmIC0tZ2l0IGEvZnMvcGlwZS5jIGIvZnMvcGlwZS5jCmluZGV4IDg5ZTllMTkuLmRhNDJmN2QgMTAwNjQ0Ci0tLSBhL2ZzL3BpcGUuYworKysgYi9mcy9waXBlLmMKQEAgLTQ0MSw3ICs0NDEsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGRvX3dha2V1cCkgewotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbCgmcGlwZS0+d2FpdCwgUE9MTE9VVCk7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luY19wb2xsKCZwaXBlLT53YWl0LCBQT0xMT1VUIHwgUE9MTFdSTk9STSk7CiAgCQkJa2lsbF9mYXN5bmMoJnBpcGUtPmZhc3luY193cml0ZXJzLCBTSUdJTywgUE9MTF9PVVQpOwogCQl9CiAJCXBpcGVfd2FpdChwaXBlKTsKQEAgLTQ1MCw3ICs0NTAsNyBAQAogCiAJLyogU2lnbmFsIHdyaXRlcnMgYXN5bmNocm9ub3VzbHkgdGhhdCB0aGVyZSBpcyBtb3JlIHJvb20uICovCiAJaWYgKGRvX3dha2V1cCkgewotCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luY19wb2xsKCZwaXBlLT53YWl0LCBQT0xMT1VUKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbCgmcGlwZS0+d2FpdCwgUE9MTE9VVCB8IFBPTExXUk5PUk0pOwogCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3dyaXRlcnMsIFNJR0lPLCBQT0xMX09VVCk7CiAJfQogCWlmIChyZXQgPiAwKQpAQCAtNjEyLDcgKzYxMiw3IEBACiAJCQlicmVhazsKIAkJfQogCQlpZiAoZG9fd2FrZXVwKSB7Ci0JCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luY19wb2xsKCZwaXBlLT53YWl0LCBQT0xMSU4pOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbCgmcGlwZS0+d2FpdCwgUE9MTElOIHwgUE9MTFJETk9STSk7CiAJCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3JlYWRlcnMsIFNJR0lPLCBQT0xMX0lOKTsKIAkJCWRvX3dha2V1cCA9IDA7CiAJCX0KQEAgLTYyMyw3ICs2MjMsNyBAQAogb3V0OgogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChkb193YWtldXApIHsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbCgmcGlwZS0+d2FpdCwgUE9MTElOKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbCgmcGlwZS0+d2FpdCwgUE9MTElOIHwgUE9MTFJETk9STSk7CiAJCWtpbGxfZmFzeW5jKCZwaXBlLT5mYXN5bmNfcmVhZGVycywgU0lHSU8sIFBPTExfSU4pOwogCX0KIAlpZiAocmV0ID4gMCkKQEAgLTcxNSw3ICs3MTUsNyBAQAogCWlmICghcGlwZS0+cmVhZGVycyAmJiAhcGlwZS0+d3JpdGVycykgewogCQlmcmVlX3BpcGVfaW5mbyhpbm9kZSk7CiAJfSBlbHNlIHsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbCgmcGlwZS0+d2FpdCwgUE9MTElOIHwgUE9MTE9VVCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jX3BvbGwoJnBpcGUtPndhaXQsIFBPTExJTiB8IFBPTExPVVQgfCBQT0xMUkROT1JNIHwgUE9MTFdSTk9STSB8IFBPTExFUlIgfCBQT0xMSFVQKTsKIAkJa2lsbF9mYXN5bmMoJnBpcGUtPmZhc3luY19yZWFkZXJzLCBTSUdJTywgUE9MTF9JTik7CiAJCWtpbGxfZmFzeW5jKCZwaXBlLT5mYXN5bmNfd3JpdGVycywgU0lHSU8sIFBPTExfT1VUKTsKIAl9CmRpZmYgLS1naXQgYS9mcy9wb3NpeF9hY2wuYyBiL2ZzL3Bvc2l4X2FjbC5jCmluZGV4IDM5ZGY5NWEuLmIxY2Y2YmYgMTAwNjQ0Ci0tLSBhL2ZzL3Bvc2l4X2FjbC5jCisrKyBiL2ZzL3Bvc2l4X2FjbC5jCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogCitFWFBPUlRfU1lNQk9MKHBvc2l4X2FjbF9pbml0KTsKIEVYUE9SVF9TWU1CT0wocG9zaXhfYWNsX2FsbG9jKTsKIEVYUE9SVF9TWU1CT0wocG9zaXhfYWNsX2Nsb25lKTsKIEVYUE9SVF9TWU1CT0wocG9zaXhfYWNsX3ZhbGlkKTsKQEAgLTMyLDYgKzMzLDE2IEBACiBFWFBPUlRfU1lNQk9MKHBvc2l4X2FjbF9wZXJtaXNzaW9uKTsKIAogLyoKKyAqIEluaXQgYSBmcmVzaCBwb3NpeF9hY2wKKyAqLwordm9pZAorcG9zaXhfYWNsX2luaXQoc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgY291bnQpCit7CisJYXRvbWljX3NldCgmYWNsLT5hX3JlZmNvdW50LCAxKTsKKwlhY2wtPmFfY291bnQgPSBjb3VudDsKK30KKworLyoKICAqIEFsbG9jYXRlIGEgbmV3IEFDTCB3aXRoIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGVudHJpZXMuCiAgKi8KIHN0cnVjdCBwb3NpeF9hY2wgKgpAQCAtNDAsMTAgKzUxLDggQEAKIAljb25zdCBzaXplX3Qgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcG9zaXhfYWNsKSArCiAJICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihzdHJ1Y3QgcG9zaXhfYWNsX2VudHJ5KTsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBrbWFsbG9jKHNpemUsIGZsYWdzKTsKLQlpZiAoYWNsKSB7Ci0JCWF0b21pY19zZXQoJmFjbC0+YV9yZWZjb3VudCwgMSk7Ci0JCWFjbC0+YV9jb3VudCA9IGNvdW50OwotCX0KKwlpZiAoYWNsKQorCQlwb3NpeF9hY2xfaW5pdChhY2wsIGNvdW50KTsKIAlyZXR1cm4gYWNsOwogfQogCmRpZmYgLS1naXQgYS9mcy9wcm9jL0tjb25maWcgYi9mcy9wcm9jL0tjb25maWcKaW5kZXggNmEwMDY4OC4uMTVhZjYyMiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9LY29uZmlnCisrKyBiL2ZzL3Byb2MvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKIGNvbmZpZyBQUk9DX0ZTCi0JYm9vbCAiL3Byb2MgZmlsZSBzeXN0ZW0gc3VwcG9ydCIgaWYgRU1CRURERUQKKwlib29sICIvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0IiBpZiBFWFBFUlQKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIGlzIGEgdmlydHVhbCBmaWxlIHN5c3RlbSBwcm92aWRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXR1cwpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBFeHBvcnRzIHRoZSBkdW1wIGltYWdlIG9mIGNyYXNoZWQga2VybmVsIGluIEVMRiBmb3JtYXQuCiAKIGNvbmZpZyBQUk9DX1NZU0NUTAotCWJvb2wgIlN5c2N0bCBzdXBwb3J0ICgvcHJvYy9zeXMpIiBpZiBFTUJFRERFRAorCWJvb2wgIlN5c2N0bCBzdXBwb3J0ICgvcHJvYy9zeXMpIiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIFBST0NfRlMKIAlzZWxlY3QgU1lTQ1RMCiAJZGVmYXVsdCB5CkBAIC02MSw3ICs2MSw3IEBACiBjb25maWcgUFJPQ19QQUdFX01PTklUT1IKICAJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiBQUk9DX0ZTICYmIE1NVQotCWJvb2wgIkVuYWJsZSAvcHJvYyBwYWdlIG1vbml0b3JpbmciIGlmIEVNQkVEREVECisJYm9vbCAiRW5hYmxlIC9wcm9jIHBhZ2UgbW9uaXRvcmluZyIgaWYgRVhQRVJUCiAgCWhlbHAKIAkgIFZhcmlvdXMgL3Byb2MgZmlsZXMgZXhpc3QgdG8gbW9uaXRvciBwcm9jZXNzIG1lbW9yeSB1dGlsaXphdGlvbjoKIAkgIC9wcm9jL3BpZC9zbWFwcywgL3Byb2MvcGlkL2NsZWFyX3JlZnMsIC9wcm9jL3BpZC9wYWdlbWFwLApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9hcnJheS5jIGIvZnMvcHJvYy9hcnJheS5jCmluZGV4IGRmMmI3MDMuLjdjOTljMWMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYXJyYXkuYworKysgYi9mcy9wcm9jL2FycmF5LmMKQEAgLTM1Myw5ICszNTMsNiBAQAogCXRhc2tfY2FwKG0sIHRhc2spOwogCXRhc2tfY3B1c19hbGxvd2VkKG0sIHRhc2spOwogCWNwdXNldF90YXNrX3N0YXR1c19hbGxvd2VkKG0sIHRhc2spOwotI2lmIGRlZmluZWQoQ09ORklHX1MzOTApCi0JdGFza19zaG93X3JlZ3MobSwgdGFzayk7Ci0jZW5kaWYKIAl0YXNrX2NvbnRleHRfc3dpdGNoX2NvdW50cyhtLCB0YXNrKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvY29uc29sZXMuYyBiL2ZzL3Byb2MvY29uc29sZXMuYwppbmRleCBlYWZjMjJhLi5iNzAxZWFhIDEwMDY0NAotLS0gYS9mcy9wcm9jL2NvbnNvbGVzLmMKKysrIGIvZnMvcHJvYy9jb25zb2xlcy5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJc3RydWN0IGNvbnNvbGUgKmNvbjsKIAlsb2ZmX3Qgb2ZmID0gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmb3JfZWFjaF9jb25zb2xlKGNvbikKIAkJaWYgKG9mZisrID09ICpwb3MpCiAJCQlicmVhazsKQEAgLTg0LDcgKzg0LDcgQEAKIAogc3RhdGljIHZvaWQgY19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjb25zb2xlc19vcCA9IHsKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL2RxdW90LmMgYi9mcy9xdW90YS9kcXVvdC5jCmluZGV4IDg0YmVjZDMuLmEyYTYyMmUgMTAwNjQ0Ci0tLSBhL2ZzL3F1b3RhL2RxdW90LmMKKysrIGIvZnMvcXVvdGEvZHF1b3QuYwpAQCAtMjE4OSw4ICsyMTg5LDggQEAKIH0KIEVYUE9SVF9TWU1CT0woZHF1b3RfcmVzdW1lKTsKIAotaW50IGRxdW90X3F1b3RhX29uX3BhdGgoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBmb3JtYXRfaWQsCi0JCSAgICAgIHN0cnVjdCBwYXRoICpwYXRoKQoraW50IGRxdW90X3F1b3RhX29uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgZm9ybWF0X2lkLAorCQkgICBzdHJ1Y3QgcGF0aCAqcGF0aCkKIHsKIAlpbnQgZXJyb3IgPSBzZWN1cml0eV9xdW90YV9vbihwYXRoLT5kZW50cnkpOwogCWlmIChlcnJvcikKQEAgLTIyMDQsMjAgKzIyMDQsNiBAQAogCQkJCQkgICAgIERRVU9UX0xJTUlUU19FTkFCTEVEKTsKIAlyZXR1cm4gZXJyb3I7CiB9Ci1FWFBPUlRfU1lNQk9MKGRxdW90X3F1b3RhX29uX3BhdGgpOwotCi1pbnQgZHF1b3RfcXVvdGFfb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBmb3JtYXRfaWQsIGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IHBhdGggcGF0aDsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGtlcm5fcGF0aChuYW1lLCBMT09LVVBfRk9MTE9XLCAmcGF0aCk7Ci0JaWYgKCFlcnJvcikgewotCQllcnJvciA9IGRxdW90X3F1b3RhX29uX3BhdGgoc2IsIHR5cGUsIGZvcm1hdF9pZCwgJnBhdGgpOwotCQlwYXRoX3B1dCgmcGF0aCk7Ci0JfQotCXJldHVybiBlcnJvcjsKLX0KIEVYUE9SVF9TWU1CT0woZHF1b3RfcXVvdGFfb24pOwogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvcXVvdGEuYyBiL2ZzL3F1b3RhL3F1b3RhLmMKaW5kZXggYjI5OTk2MS4uYjM0YmRiMiAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvcXVvdGEuYworKysgYi9mcy9xdW90YS9xdW90YS5jCkBAIC02NCwxOCArNjQsMTUgQEAKIH0KIAogc3RhdGljIGludCBxdW90YV9xdW90YW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgY21kLCBxaWRfdCBpZCwKLQkJICAgICAgICAgdm9pZCBfX3VzZXIgKmFkZHIpCisJCSAgICAgICAgIHN0cnVjdCBwYXRoICpwYXRoKQogewotCWNoYXIgKnBhdGhuYW1lOwotCWludCByZXQgPSAtRU5PU1lTOwotCi0JcGF0aG5hbWUgPSBnZXRuYW1lKGFkZHIpOwotCWlmIChJU19FUlIocGF0aG5hbWUpKQotCQlyZXR1cm4gUFRSX0VSUihwYXRobmFtZSk7Ci0JaWYgKHNiLT5zX3Fjb3AtPnF1b3RhX29uKQotCQlyZXQgPSBzYi0+c19xY29wLT5xdW90YV9vbihzYiwgdHlwZSwgaWQsIHBhdGhuYW1lKTsKLQlwdXRuYW1lKHBhdGhuYW1lKTsKLQlyZXR1cm4gcmV0OworCWlmICghc2ItPnNfcWNvcC0+cXVvdGFfb24gJiYgIXNiLT5zX3Fjb3AtPnF1b3RhX29uX21ldGEpCisJCXJldHVybiAtRU5PU1lTOworCWlmIChzYi0+c19xY29wLT5xdW90YV9vbl9tZXRhKQorCQlyZXR1cm4gc2ItPnNfcWNvcC0+cXVvdGFfb25fbWV0YShzYiwgdHlwZSwgaWQpOworCWlmIChJU19FUlIocGF0aCkpCisJCXJldHVybiBQVFJfRVJSKHBhdGgpOworCXJldHVybiBzYi0+c19xY29wLT5xdW90YV9vbihzYiwgdHlwZSwgaWQsIHBhdGgpOwogfQogCiBzdGF0aWMgaW50IHF1b3RhX2dldGZtdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgdm9pZCBfX3VzZXIgKmFkZHIpCkBAIC0yNDEsNyArMjM4LDcgQEAKIAogLyogQ29weSBwYXJhbWV0ZXJzIGFuZCBjYWxsIHByb3BlciBmdW5jdGlvbiAqLwogc3RhdGljIGludCBkb19xdW90YWN0bChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGNtZCwgcWlkX3QgaWQsCi0JCSAgICAgICB2b2lkIF9fdXNlciAqYWRkcikKKwkJICAgICAgIHZvaWQgX191c2VyICphZGRyLCBzdHJ1Y3QgcGF0aCAqcGF0aCkKIHsKIAlpbnQgcmV0OwogCkBAIC0yNTYsNyArMjUzLDcgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBRX1FVT1RBT046Ci0JCXJldHVybiBxdW90YV9xdW90YW9uKHNiLCB0eXBlLCBjbWQsIGlkLCBhZGRyKTsKKwkJcmV0dXJuIHF1b3RhX3F1b3Rhb24oc2IsIHR5cGUsIGNtZCwgaWQsIHBhdGgpOwogCWNhc2UgUV9RVU9UQU9GRjoKIAkJaWYgKCFzYi0+c19xY29wLT5xdW90YV9vZmYpCiAJCQlyZXR1cm4gLUVOT1NZUzsKQEAgLTMzNSw2ICszMzIsNyBAQAogewogCXVpbnQgY21kcywgdHlwZTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gTlVMTDsKKwlzdHJ1Y3QgcGF0aCBwYXRoLCAqcGF0aHAgPSBOVUxMOwogCWludCByZXQ7CiAKIAljbWRzID0gY21kID4+IFNVQkNNRFNISUZUOwpAQCAtMzUxLDEyICszNDksMjcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJLyoKKwkgKiBQYXRoIGZvciBxdW90YW9uIGhhcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgZ3JhYmJpbmcgc3VwZXJibG9jaworCSAqIGJlY2F1c2UgdGhhdCBnZXRzIHNfdW1vdW50IHNlbSB3aGljaCBpcyBhbHNvIHBvc3NpYmx5IG5lZWRlZCBieSBwYXRoCisJICogcmVzb2x1dGlvbiAodGhpbmsgYWJvdXQgYXV0b2ZzKSBhbmQgdGh1cyBkZWFkbG9ja3MgY291bGQgYXJpc2UuCisJICovCisJaWYgKGNtZHMgPT0gUV9RVU9UQU9OKSB7CisJCXJldCA9IHVzZXJfcGF0aF9hdChBVF9GRENXRCwgYWRkciwgTE9PS1VQX0ZPTExPVywgJnBhdGgpOworCQlpZiAocmV0KQorCQkJcGF0aHAgPSBFUlJfUFRSKHJldCk7CisJCWVsc2UKKwkJCXBhdGhwID0gJnBhdGg7CisJfQorCiAJc2IgPSBxdW90YWN0bF9ibG9jayhzcGVjaWFsKTsKIAlpZiAoSVNfRVJSKHNiKSkKIAkJcmV0dXJuIFBUUl9FUlIoc2IpOwogCi0JcmV0ID0gZG9fcXVvdGFjdGwoc2IsIHR5cGUsIGNtZHMsIGlkLCBhZGRyKTsKKwlyZXQgPSBkb19xdW90YWN0bChzYiwgdHlwZSwgY21kcywgaWQsIGFkZHIsIHBhdGhwKTsKIAogCWRyb3Bfc3VwZXIoc2IpOworCWlmIChwYXRocCAmJiAhSVNfRVJSKHBhdGhwKSkKKwkJcGF0aF9wdXQocGF0aHApOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9zdXBlci5jIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwppbmRleCAyNTc1NjgyLi4wYWFiMDRmIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9zdXBlci5jCisrKyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKQEAgLTYzMiw3ICs2MzIsNyBAQAogc3RhdGljIGludCByZWlzZXJmc19yZWxlYXNlX2RxdW90KHN0cnVjdCBkcXVvdCAqKTsKIHN0YXRpYyBpbnQgcmVpc2VyZnNfbWFya19kcXVvdF9kaXJ0eShzdHJ1Y3QgZHF1b3QgKik7CiBzdGF0aWMgaW50IHJlaXNlcmZzX3dyaXRlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCk7Ci1zdGF0aWMgaW50IHJlaXNlcmZzX3F1b3RhX29uKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIGludCwgY2hhciAqKTsKK3N0YXRpYyBpbnQgcmVpc2VyZnNfcXVvdGFfb24oc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgaW50LCBzdHJ1Y3QgcGF0aCAqKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcXVvdF9vcGVyYXRpb25zIHJlaXNlcmZzX3F1b3RhX29wZXJhdGlvbnMgPSB7CiAJLndyaXRlX2RxdW90ID0gcmVpc2VyZnNfd3JpdGVfZHF1b3QsCkBAIC0yMDQ4LDI1ICsyMDQ4LDIxIEBACiAgKiBTdGFuZGFyZCBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb24gcXVvdGFfb24KICAqLwogc3RhdGljIGludCByZWlzZXJmc19xdW90YV9vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwKLQkJCSAgICAgY2hhciAqbmFtZSkKKwkJCSAgICAgc3RydWN0IHBhdGggKnBhdGgpCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3QgcGF0aCBwYXRoOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKIAogCWlmICghKFJFSVNFUkZTX1NCKHNiKS0+c19tb3VudF9vcHQgJiAoMSA8PCBSRUlTRVJGU19RVU9UQSkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWVyciA9IGtlcm5fcGF0aChuYW1lLCBMT09LVVBfRk9MTE9XLCAmcGF0aCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKIAkvKiBRdW90YWZpbGUgbm90IG9uIHRoZSBzYW1lIGZpbGVzeXN0ZW0/ICovCi0JaWYgKHBhdGgubW50LT5tbnRfc2IgIT0gc2IpIHsKKwlpZiAocGF0aC0+bW50LT5tbnRfc2IgIT0gc2IpIHsKIAkJZXJyID0gLUVYREVWOwogCQlnb3RvIG91dDsKIAl9Ci0JaW5vZGUgPSBwYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IHBhdGgtPmRlbnRyeS0+ZF9pbm9kZTsKIAkvKiBXZSBtdXN0IG5vdCBwYWNrIHRhaWxzIGZvciBxdW90YSBmaWxlcyBvbiByZWlzZXJmcyBmb3IgcXVvdGEgSU8gdG8gd29yayAqLwogCWlmICghKFJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzICYgaV9ub3BhY2tfbWFzaykpIHsKIAkJZXJyID0gcmVpc2VyZnNfdW5wYWNrKGlub2RlLCBOVUxMKTsKQEAgLTIwODIsNyArMjA3OCw3IEBACiAJLyogSm91cm5hbGluZyBxdW90YT8gKi8KIAlpZiAoUkVJU0VSRlNfU0Ioc2IpLT5zX3FmX25hbWVzW3R5cGVdKSB7CiAJCS8qIFF1b3RhZmlsZSBub3Qgb2YgZnMgcm9vdD8gKi8KLQkJaWYgKHBhdGguZGVudHJ5LT5kX3BhcmVudCAhPSBzYi0+c19yb290KQorCQlpZiAocGF0aC0+ZGVudHJ5LT5kX3BhcmVudCAhPSBzYi0+c19yb290KQogCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInN1cGVyLTY1MjEiLAogCQkJCSAiUXVvdGEgZmlsZSBub3Qgb24gZmlsZXN5c3RlbSByb290LiAiCiAJCQkJICJKb3VybmFsbGVkIHF1b3RhIHdpbGwgbm90IHdvcmsuIik7CkBAIC0yMTAxLDkgKzIwOTcsOCBAQAogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAJfQotCWVyciA9IGRxdW90X3F1b3RhX29uX3BhdGgoc2IsIHR5cGUsIGZvcm1hdF9pZCwgJnBhdGgpOworCWVyciA9IGRxdW90X3F1b3RhX29uKHNiLCB0eXBlLCBmb3JtYXRfaWQsIHBhdGgpOwogb3V0OgotCXBhdGhfcHV0KCZwYXRoKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9ibG9jay5jIGIvZnMvc3F1YXNoZnMvYmxvY2suYwppbmRleCAyZmIyODgyLi44YWI0OGJjIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy9ibG9jay5jCisrKyBiL2ZzL3NxdWFzaGZzL2Jsb2NrLmMKQEAgLTYzLDYgKzYzLDE0IEBACiAJCSpsZW5ndGggPSAodW5zaWduZWQgY2hhcikgYmgtPmJfZGF0YVsqb2Zmc2V0XSB8CiAJCQkodW5zaWduZWQgY2hhcikgYmgtPmJfZGF0YVsqb2Zmc2V0ICsgMV0gPDwgODsKIAkJKm9mZnNldCArPSAyOworCisJCWlmICgqb2Zmc2V0ID09IG1zYmxrLT5kZXZibGtzaXplKSB7CisJCQlwdXRfYmgoYmgpOworCQkJYmggPSBzYl9icmVhZChzYiwgKysoKmN1cl9pbmRleCkpOworCQkJaWYgKGJoID09IE5VTEwpCisJCQkJcmV0dXJuIE5VTEw7CisJCQkqb2Zmc2V0ID0gMDsKKwkJfQogCX0KIAogCXJldHVybiBiaDsKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL3h6X3dyYXBwZXIuYyBiL2ZzL3NxdWFzaGZzL3h6X3dyYXBwZXIuYwppbmRleCA4NTY3NTZjLi5jNGViNDAwIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy94el93cmFwcGVyLmMKKysrIGIvZnMvc3F1YXNoZnMveHpfd3JhcHBlci5jCkBAIC05NSwxMiArOTUsNiBAQAogCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmhba10pKQogCQkJCWdvdG8gcmVsZWFzZV9tdXRleDsKIAotCQkJaWYgKGF2YWlsID09IDApIHsKLQkJCQlvZmZzZXQgPSAwOwotCQkJCXB1dF9iaChiaFtrKytdKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQogCQkJc3RyZWFtLT5idWYuaW4gPSBiaFtrXS0+Yl9kYXRhICsgb2Zmc2V0OwogCQkJc3RyZWFtLT5idWYuaW5fc2l6ZSA9IGF2YWlsOwogCQkJc3RyZWFtLT5idWYuaW5fcG9zID0gMDsKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL3psaWJfd3JhcHBlci5jIGIvZnMvc3F1YXNoZnMvemxpYl93cmFwcGVyLmMKaW5kZXggODE4YTVlMC4uNDY2MWFlMiAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvemxpYl93cmFwcGVyLmMKKysrIGIvZnMvc3F1YXNoZnMvemxpYl93cmFwcGVyLmMKQEAgLTgyLDEyICs4Miw2IEBACiAJCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaFtrXSkpCiAJCQkJZ290byByZWxlYXNlX211dGV4OwogCi0JCQlpZiAoYXZhaWwgPT0gMCkgewotCQkJCW9mZnNldCA9IDA7Ci0JCQkJcHV0X2JoKGJoW2srK10pOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCiAJCQlzdHJlYW0tPm5leHRfaW4gPSBiaFtrXS0+Yl9kYXRhICsgb2Zmc2V0OwogCQkJc3RyZWFtLT5hdmFpbF9pbiA9IGF2YWlsOwogCQkJb2Zmc2V0ID0gMDsKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDc0ZTE0OWUuLjdlOWRkNGMgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKKysrIGIvZnMvc3VwZXIuYwpAQCAtMTc3LDYgKzE3NywxMSBAQAogCXN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmcyA9IHMtPnNfdHlwZTsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcy0+c19hY3RpdmUpKSB7CiAJCWZzLT5raWxsX3NiKHMpOworCQkvKgorCQkgKiBXZSBuZWVkIHRvIGNhbGwgcmN1X2JhcnJpZXIgc28gYWxsIHRoZSBkZWxheWVkIHJjdSBmcmVlCisJCSAqIGlub2RlcyBhcmUgZmx1c2hlZCBiZWZvcmUgd2UgcmVsZWFzZSB0aGUgZnMgbW9kdWxlLgorCQkgKi8KKwkJcmN1X2JhcnJpZXIoKTsKIAkJcHV0X2ZpbGVzeXN0ZW0oZnMpOwogCQlwdXRfc3VwZXIocyk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL0tjb25maWcgYi9mcy9zeXNmcy9LY29uZmlnCmluZGV4IGY0YjY3NTguLjhjNDFmZWEgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL0tjb25maWcKKysrIGIvZnMvc3lzZnMvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKIGNvbmZpZyBTWVNGUwotCWJvb2wgInN5c2ZzIGZpbGUgc3lzdGVtIHN1cHBvcnQiIGlmIEVNQkVEREVECisJYm9vbCAic3lzZnMgZmlsZSBzeXN0ZW0gc3VwcG9ydCIgaWYgRVhQRVJUCiAJZGVmYXVsdCB5CiAJaGVscAogCVRoZSBzeXNmcyBmaWxlc3lzdGVtIGlzIGEgdmlydHVhbCBmaWxlc3lzdGVtIHRoYXQgdGhlIGtlcm5lbCB1c2VzIHRvCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19kaXNjYXJkLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19kaXNjYXJkLmMKaW5kZXggMDUyMDFhZS4uZDYxNjExYyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZGlzY2FyZC5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2Rpc2NhcmQuYwpAQCAtMTUyLDYgKzE1Miw4IEBACiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtWEZTX0VSUk9SKEVQRVJNKTsKKwlpZiAoIWJsa19xdWV1ZV9kaXNjYXJkKHEpKQorCQlyZXR1cm4gLVhGU19FUlJPUihFT1BOT1RTVVBQKTsKIAlpZiAoY29weV9mcm9tX3VzZXIoJnJhbmdlLCB1cmFuZ2UsIHNpemVvZihyYW5nZSkpKQogCQlyZXR1cm4gLVhGU19FUlJPUihFRkFVTFQpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwppbmRleCBiMDZlZGUxLi5mNWUyYTE5IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKQEAgLTk4NSwxMCArOTg1LDIyIEBACiAKIAkJLyoKIAkJICogRXh0ZW50IHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBhcHByb3ByaWF0ZSBibG9jawotCQkgKiBzaXplLCBpZiBzZXQgYXQgYWxsLgorCQkgKiBzaXplLCBpZiBzZXQgYXQgYWxsLiBJdCBtdXN0IGFsc28gYmUgc21hbGxlciB0aGFuIHRoZQorCQkgKiBtYXhpbXVtIGV4dGVudCBzaXplIHN1cHBvcnRlZCBieSB0aGUgZmlsZXN5c3RlbS4KKwkJICoKKwkJICogQWxzbywgZm9yIG5vbi1yZWFsdGltZSBmaWxlcywgbGltaXQgdGhlIGV4dGVudCBzaXplIGhpbnQgdG8KKwkJICogaGFsZiB0aGUgc2l6ZSBvZiB0aGUgQUdzIGluIHRoZSBmaWxlc3lzdGVtIHNvIGFsaWdubWVudAorCQkgKiBkb2Vzbid0IHJlc3VsdCBpbiBleHRlbnRzIGxhcmdlciB0aGFuIGFuIEFHLgogCQkgKi8KIAkJaWYgKGZhLT5mc3hfZXh0c2l6ZSAhPSAwKSB7Ci0JCQl4ZnNfZXh0bGVuX3QJc2l6ZTsKKwkJCXhmc19leHRsZW5fdCAgICBzaXplOworCQkJeGZzX2ZzYmxvY2tfdCAgIGV4dHNpemVfZnNiOworCisJCQlleHRzaXplX2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgZmEtPmZzeF9leHRzaXplKTsKKwkJCWlmIChleHRzaXplX2ZzYiA+IE1BWEVYVExFTikgeworCQkJCWNvZGUgPSBYRlNfRVJST1IoRUlOVkFMKTsKKwkJCQlnb3RvIGVycm9yX3JldHVybjsKKwkJCX0KIAogCQkJaWYgKFhGU19JU19SRUFMVElNRV9JTk9ERShpcCkgfHwKIAkJCSAgICAoKG1hc2sgJiBGU1hfWEZMQUdTKSAmJgpAQCAtOTk3LDYgKzEwMDksMTAgQEAKIAkJCQkgICAgICAgbXAtPm1fc2Iuc2JfYmxvY2tsb2c7CiAJCQl9IGVsc2UgewogCQkJCXNpemUgPSBtcC0+bV9zYi5zYl9ibG9ja3NpemU7CisJCQkJaWYgKGV4dHNpemVfZnNiID4gbXAtPm1fc2Iuc2JfYWdibG9ja3MgLyAyKSB7CisJCQkJCWNvZGUgPSBYRlNfRVJST1IoRUlOVkFMKTsKKwkJCQkJZ290byBlcnJvcl9yZXR1cm47CisJCQkJfQogCQkJfQogCiAJCQlpZiAoZmEtPmZzeF9leHRzaXplICUgc2l6ZSkgewpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbS5jIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCmluZGV4IGY4ZTg1NGIuLjIwNmEyODEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmMKQEAgLTE4NjMsMTIgKzE4NjMsMTQgQEAKIAl4ZnNfZHF1b3RfdAkqZHFwb3V0OwogCXhmc19kcXVvdF90CSpkcXA7CiAJaW50CQlyZXN0YXJ0czsKKwlpbnQJCXN0YXJ0YWdhaW47CiAKIAlyZXN0YXJ0cyA9IDA7CiAJZHFwb3V0ID0gTlVMTDsKIAogCS8qIGxvY2tvcmRlcjogaGFzaGNoYWlubG9jaywgZnJlZWxpc3Rsb2NrLCBtcGxpc3Rsb2NrLCBkcWxvY2ssIGRxZmxvY2sgKi8KLXN0YXJ0YWdhaW46CithZ2FpbjoKKwlzdGFydGFnYWluID0gMDsKIAltdXRleF9sb2NrKCZ4ZnNfR3FtLT5xbV9kcWZybGlzdF9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHFwLCAmeGZzX0dxbS0+cW1fZHFmcmxpc3QsIHFfZnJlZWxpc3QpIHsKQEAgLTE4ODUsMTMgKzE4ODcsMTAgQEAKIAkJCUFTU0VSVCghIChkcXAtPmRxX2ZsYWdzICYgWEZTX0RRX0lOQUNUSVZFKSk7CiAKIAkJCXRyYWNlX3hmc19kcXJlY2xhaW1fd2FudChkcXApOwotCi0JCQl4ZnNfZHF1bmxvY2soZHFwKTsKLQkJCW11dGV4X3VubG9jaygmeGZzX0dxbS0+cW1fZHFmcmxpc3RfbG9jayk7Ci0JCQlpZiAoKytyZXN0YXJ0cyA+PSBYRlNfUU1fUkVDTEFJTV9NQVhfUkVTVEFSVFMpCi0JCQkJcmV0dXJuIE5VTEw7CiAJCQlYUU1fU1RBVFNfSU5DKHhxbXN0YXRzLnhzX3FtX2Rxd2FudHMpOwotCQkJZ290byBzdGFydGFnYWluOworCQkJcmVzdGFydHMrKzsKKwkJCXN0YXJ0YWdhaW4gPSAxOworCQkJZ290byBkcXVubG9jazsKIAkJfQogCiAJCS8qCkBAIC0xOTA2LDIzICsxOTA1LDIwIEBACiAJCQlBU1NFUlQobGlzdF9lbXB0eSgmZHFwLT5xX21wbGlzdCkpOwogCQkJbGlzdF9kZWxfaW5pdCgmZHFwLT5xX2ZyZWVsaXN0KTsKIAkJCXhmc19HcW0tPnFtX2RxZnJsaXN0X2NudC0tOwotCQkJeGZzX2RxdW5sb2NrKGRxcCk7CiAJCQlkcXBvdXQgPSBkcXA7CiAJCQlYUU1fU1RBVFNfSU5DKHhxbXN0YXRzLnhzX3FtX2RxaW5hY3RfcmVjbGFpbXMpOwotCQkJYnJlYWs7CisJCQlnb3RvIGRxdW5sb2NrOwogCQl9CiAKIAkJQVNTRVJUKGRxcC0+cV9oYXNoKTsKIAkJQVNTRVJUKCFsaXN0X2VtcHR5KCZkcXAtPnFfbXBsaXN0KSk7CiAKIAkJLyoKLQkJICogVHJ5IHRvIGdyYWIgdGhlIGZsdXNoIGxvY2suIElmIHRoaXMgZHF1b3QgaXMgaW4gdGhlIHByb2Nlc3Mgb2YKLQkJICogZ2V0dGluZyBmbHVzaGVkIHRvIGRpc2ssIHdlIGRvbid0IHdhbnQgdG8gcmVjbGFpbSBpdC4KKwkJICogVHJ5IHRvIGdyYWIgdGhlIGZsdXNoIGxvY2suIElmIHRoaXMgZHF1b3QgaXMgaW4gdGhlIHByb2Nlc3MKKwkJICogb2YgZ2V0dGluZyBmbHVzaGVkIHRvIGRpc2ssIHdlIGRvbid0IHdhbnQgdG8gcmVjbGFpbSBpdC4KIAkJICovCi0JCWlmICgheGZzX2RxZmxvY2tfbm93YWl0KGRxcCkpIHsKLQkJCXhmc19kcXVubG9jayhkcXApOwotCQkJY29udGludWU7Ci0JCX0KKwkJaWYgKCF4ZnNfZHFmbG9ja19ub3dhaXQoZHFwKSkKKwkJCWdvdG8gZHF1bmxvY2s7CiAKIAkJLyoKIAkJICogV2UgaGF2ZSB0aGUgZmx1c2ggbG9jayBzbyB3ZSBrbm93IHRoYXQgdGhpcyBpcyBub3QgaW4gdGhlCkBAIC0xOTQ0LDggKzE5NDAsNyBAQAogCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLAogCQkJInhmc19xbV9kcXJlY2xhaW06IGRxdW90ICVwIGZsdXNoIGZhaWxlZCIsIGRxcCk7CiAJCQl9Ci0JCQl4ZnNfZHF1bmxvY2soZHFwKTsgLyogZHFmbHVzaCB1bmxvY2tzIGRxZmxvY2sgKi8KLQkJCWNvbnRpbnVlOworCQkJZ290byBkcXVubG9jazsKIAkJfQogCiAJCS8qCkBAIC0xOTY3LDEzICsxOTYyLDggQEAKIAkJICovCiAJCWlmICghbXV0ZXhfdHJ5bG9jaygmbXAtPm1fcXVvdGFpbmZvLT5xaV9kcWxpc3RfbG9jaykpIHsKIAkJCXJlc3RhcnRzKys7Ci0JCQltdXRleF91bmxvY2soJmRxcC0+cV9oYXNoLT5xaF9sb2NrKTsKLQkJCXhmc19kcWZ1bmxvY2soZHFwKTsKLQkJCXhmc19kcXVubG9jayhkcXApOwotCQkJbXV0ZXhfdW5sb2NrKCZ4ZnNfR3FtLT5xbV9kcWZybGlzdF9sb2NrKTsKLQkJCWlmIChyZXN0YXJ0cysrID49IFhGU19RTV9SRUNMQUlNX01BWF9SRVNUQVJUUykKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCWdvdG8gc3RhcnRhZ2FpbjsKKwkJCXN0YXJ0YWdhaW4gPSAxOworCQkJZ290byBxaHVubG9jazsKIAkJfQogCiAJCUFTU0VSVChkcXAtPnFfbnJlZnMgPT0gMCk7CkBAIC0xOTg2LDE0ICsxOTc2LDIwIEBACiAJCXhmc19HcW0tPnFtX2RxZnJsaXN0X2NudC0tOwogCQlkcXBvdXQgPSBkcXA7CiAJCW11dGV4X3VubG9jaygmbXAtPm1fcXVvdGFpbmZvLT5xaV9kcWxpc3RfbG9jayk7CitxaHVubG9jazoKIAkJbXV0ZXhfdW5sb2NrKCZkcXAtPnFfaGFzaC0+cWhfbG9jayk7CiBkcWZ1bmxvY2s6CiAJCXhmc19kcWZ1bmxvY2soZHFwKTsKK2RxdW5sb2NrOgogCQl4ZnNfZHF1bmxvY2soZHFwKTsKIAkJaWYgKGRxcG91dCkKIAkJCWJyZWFrOwogCQlpZiAocmVzdGFydHMgPj0gWEZTX1FNX1JFQ0xBSU1fTUFYX1JFU1RBUlRTKQotCQkJcmV0dXJuIE5VTEw7CisJCQlicmVhazsKKwkJaWYgKHN0YXJ0YWdhaW4pIHsKKwkJCW11dGV4X3VubG9jaygmeGZzX0dxbS0+cW1fZHFmcmxpc3RfbG9jayk7CisJCQlnb3RvIGFnYWluOworCQl9CiAJfQogCW11dGV4X3VubG9jaygmeGZzX0dxbS0+cW1fZHFmcmxpc3RfbG9jayk7CiAJcmV0dXJuIGRxcG91dDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYWxsb2MuaCBiL2ZzL3hmcy94ZnNfYWxsb2MuaAppbmRleCAwYWI1NmIzLi5kMGIzYmM3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2FsbG9jLmgKKysrIGIvZnMveGZzL3hmc19hbGxvYy5oCkBAIC03NSw2ICs3NSwyMiBAQAogI2RlZmluZSBYRlNfQUxMT0NfU0VUX0FTSURFKG1wKSAgKDQgKyAoKG1wKS0+bV9zYi5zYl9hZ2NvdW50ICogNCkpCiAKIC8qCisgKiBXaGVuIGRlY2lkaW5nIGhvdyBtdWNoIHNwYWNlIHRvIGFsbG9jYXRlIG91dCBvZiBhbiBBRywgd2UgbGltaXQgdGhlCisgKiBhbGxvY2F0aW9uIG1heGltdW0gc2l6ZSB0byB0aGUgc2l6ZSB0aGUgQUcuIEhvd2V2ZXIsIHdlIGNhbm5vdCB1c2UgYWxsIHRoZQorICogYmxvY2tzIGluIHRoZSBBRyAtIHNvbWUgYXJlIHBlcm1hbmVudGx5IHVzZWQgYnkgbWV0YWRhdGEuIFRoZXNlCisgKiBibG9ja3MgYXJlIGdlbmVyYWxseToKKyAqCS0gdGhlIEFHIHN1cGVyYmxvY2ssIEFHRiwgQUdJIGFuZCBBR0ZMCisgKgktIHRoZSBBR0YgKGJubyBhbmQgY250KSBhbmQgQUdJIGJ0cmVlIHJvb3QgYmxvY2tzCisgKgktIDQgYmxvY2tzIG9uIHRoZSBBR0ZMIGFjY29yZGluZyB0byBYRlNfQUxMT0NfU0VUX0FTSURFKCkgbGltaXRzCisgKgorICogVGhlIEFHIGhlYWRlcnMgYXJlIHNlY3RvciBzaXplZCwgc28gdGhlIGFtb3VudCBvZiBzcGFjZSB0aGV5IHRha2UgdXAgaXMKKyAqIGRlcGVuZGVudCBvbiBmaWxlc3lzdGVtIGdlb21ldHJ5LiBUaGUgb3RoZXJzIGFyZSBhbGwgc2luZ2xlIGJsb2Nrcy4KKyAqLworI2RlZmluZSBYRlNfQUxMT0NfQUdfTUFYX1VTQUJMRShtcCkJXAorCSgobXApLT5tX3NiLnNiX2FnYmxvY2tzIC0gWEZTX0JCX1RPX0ZTQihtcCwgWEZTX0ZTU19UT19CQihtcCwgNCkpIC0gNykKKworCisvKgogICogQXJndW1lbnQgc3RydWN0dXJlIGZvciB4ZnNfYWxsb2Mgcm91dGluZXMuCiAgKiBUaGlzIGlzIHR1cm5lZCBpbnRvIGEgc3RydWN0dXJlIHRvIGF2b2lkIGhhdmluZyAyMCBhcmd1bWVudHMgcGFzc2VkCiAgKiBkb3duIHNldmVyYWwgbGV2ZWxzIG9mIHRoZSBzdGFjay4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcC5jIGIvZnMveGZzL3hmc19ibWFwLmMKaW5kZXggNDExMWNkMy4uZGMzYWZkNzcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcC5jCisrKyBiL2ZzL3hmcy94ZnNfYm1hcC5jCkBAIC0xMDM4LDE3ICsxMDM4LDM0IEBACiAJCSAqIEZpbGxpbmcgaW4gdGhlIG1pZGRsZSBwYXJ0IG9mIGEgcHJldmlvdXMgZGVsYXllZCBhbGxvY2F0aW9uLgogCQkgKiBDb250aWd1aXR5IGlzIGltcG9zc2libGUgaGVyZS4KIAkJICogVGhpcyBjYXNlIGlzIGF2b2lkZWQgYWxtb3N0IGFsbCB0aGUgdGltZS4KKwkJICoKKwkJICogV2Ugc3RhcnQgd2l0aCBhIGRlbGF5ZWQgYWxsb2NhdGlvbjoKKwkJICoKKwkJICogK2RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQrCisJCSAqICBQUkVWIEAgaWR4CisJCSAqCisJICAgICAgICAgKiBhbmQgd2UgYXJlIGFsbG9jYXRpbmc6CisJCSAqICAgICAgICAgICAgICAgICAgICAgK3JycnJycnJycnJycnJycnJyKworCQkgKgkJCSAgICAgIG5ldworCQkgKgorCQkgKiBhbmQgd2Ugc2V0IGl0IHVwIGZvciBpbnNlcnRpb24gYXM6CisJCSAqICtkZGRkZGRkZGRkZGRkZGRkZGRkK3JycnJycnJycnJycnJycnJyK2RkZGRkZGRkZGRkZGRkZGRkKworCQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcKKwkJICogIFBSRVYgQCBpZHggICAgICAgICAgTEVGVCAgICAgICAgICAgICAgUklHSFQKKwkJICogICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0ZWQgYXQgaWR4ICsgMQogCQkgKi8KIAkJdGVtcCA9IG5ldy0+YnJfc3RhcnRvZmYgLSBQUkVWLmJyX3N0YXJ0b2ZmOwotCQl0cmFjZV94ZnNfYm1hcF9wcmVfdXBkYXRlKGlwLCBpZHgsIDAsIF9USElTX0lQXyk7Ci0JCXhmc19ibWJ0X3NldF9ibG9ja2NvdW50KGVwLCB0ZW1wKTsKLQkJclswXSA9ICpuZXc7Ci0JCXJbMV0uYnJfc3RhdGUgPSBQUkVWLmJyX3N0YXRlOwotCQlyWzFdLmJyX3N0YXJ0YmxvY2sgPSAwOwotCQlyWzFdLmJyX3N0YXJ0b2ZmID0gbmV3X2VuZG9mZjsKIAkJdGVtcDIgPSBQUkVWLmJyX3N0YXJ0b2ZmICsgUFJFVi5icl9ibG9ja2NvdW50IC0gbmV3X2VuZG9mZjsKLQkJclsxXS5icl9ibG9ja2NvdW50ID0gdGVtcDI7Ci0JCXhmc19pZXh0X2luc2VydChpcCwgaWR4ICsgMSwgMiwgJnJbMF0sIHN0YXRlKTsKKwkJdHJhY2VfeGZzX2JtYXBfcHJlX3VwZGF0ZShpcCwgaWR4LCAwLCBfVEhJU19JUF8pOworCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudChlcCwgdGVtcCk7CS8qIHRydW5jYXRlIFBSRVYgKi8KKwkJTEVGVCA9ICpuZXc7CisJCVJJR0hULmJyX3N0YXRlID0gUFJFVi5icl9zdGF0ZTsKKwkJUklHSFQuYnJfc3RhcnRibG9jayA9IG51bGxzdGFydGJsb2NrKAorCQkJCShpbnQpeGZzX2JtYXBfd29yc3RfaW5kbGVuKGlwLCB0ZW1wMikpOworCQlSSUdIVC5icl9zdGFydG9mZiA9IG5ld19lbmRvZmY7CisJCVJJR0hULmJyX2Jsb2NrY291bnQgPSB0ZW1wMjsKKwkJLyogaW5zZXJ0IExFRlQgKHJbMF0pIGFuZCBSSUdIVCAoclsxXSkgYXQgdGhlIHNhbWUgdGltZSAqLworCQl4ZnNfaWV4dF9pbnNlcnQoaXAsIGlkeCArIDEsIDIsICZMRUZULCBzdGF0ZSk7CiAJCWlwLT5pX2RmLmlmX2xhc3RleCA9IGlkeCArIDE7CiAJCWlwLT5pX2QuZGlfbmV4dGVudHMrKzsKIAkJaWYgKGN1ciA9PSBOVUxMKQpAQCAtMjQzMCw3ICsyNDQ3LDcgQEAKIAkJc3RhcnRhZyA9IGFnID0gMDsKIAogCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnKTsKLQl3aGlsZSAoKmJsZW4gPCBhcC0+YWxlbikgeworCXdoaWxlICgqYmxlbiA8IGFyZ3MtPm1heGxlbikgewogCQlpZiAoIXBhZy0+cGFnZl9pbml0KSB7CiAJCQllcnJvciA9IHhmc19hbGxvY19wYWdmX2luaXQobXAsIGFyZ3MtPnRwLCBhZywKIAkJCQkJCSAgICBYRlNfQUxMT0NfRkxBR19UUllMT0NLKTsKQEAgLTI0NTIsNyArMjQ2OSw3IEBACiAJCQlub3Rpbml0ID0gMTsKIAogCQlpZiAoeGZzX2lub2RlX2lzX2ZpbGVzdHJlYW0oYXAtPmlwKSkgewotCQkJaWYgKCpibGVuID49IGFwLT5hbGVuKQorCQkJaWYgKCpibGVuID49IGFyZ3MtPm1heGxlbikKIAkJCQlicmVhazsKIAogCQkJaWYgKGFwLT51c2VyZGF0YSkgewpAQCAtMjQ5OCwxNCArMjUxNSwxNCBAQAogCSAqIElmIHRoZSBiZXN0IHNlZW4gbGVuZ3RoIGlzIGxlc3MgdGhhbiB0aGUgcmVxdWVzdAogCSAqIGxlbmd0aCwgdXNlIHRoZSBiZXN0IGFzIHRoZSBtaW5pbXVtLgogCSAqLwotCWVsc2UgaWYgKCpibGVuIDwgYXAtPmFsZW4pCisJZWxzZSBpZiAoKmJsZW4gPCBhcmdzLT5tYXhsZW4pCiAJCWFyZ3MtPm1pbmxlbiA9ICpibGVuOwogCS8qCi0JICogT3RoZXJ3aXNlIHdlJ3ZlIHNlZW4gYW4gZXh0ZW50IGFzIGJpZyBhcyBhbGVuLAorCSAqIE90aGVyd2lzZSB3ZSd2ZSBzZWVuIGFuIGV4dGVudCBhcyBiaWcgYXMgbWF4bGVuLAogCSAqIHVzZSB0aGF0IGFzIHRoZSBtaW5pbXVtLgogCSAqLwogCWVsc2UKLQkJYXJncy0+bWlubGVuID0gYXAtPmFsZW47CisJCWFyZ3MtPm1pbmxlbiA9IGFyZ3MtPm1heGxlbjsKIAogCS8qCiAJICogc2V0IHRoZSBmYWlsdXJlIGZhbGxiYWNrIGNhc2UgdG8gbG9vayBpbiB0aGUgc2VsZWN0ZWQKQEAgLTI1NzMsNyArMjU5MCw5IEBACiAJYXJncy50cCA9IGFwLT50cDsKIAlhcmdzLm1wID0gbXA7CiAJYXJncy5mc2JubyA9IGFwLT5ydmFsOwotCWFyZ3MubWF4bGVuID0gTUlOKGFwLT5hbGVuLCBtcC0+bV9zYi5zYl9hZ2Jsb2Nrcyk7CisKKwkvKiBUcmltIHRoZSBhbGxvY2F0aW9uIGJhY2sgdG8gdGhlIG1heGltdW0gYW4gQUcgY2FuIGZpdC4gKi8KKwlhcmdzLm1heGxlbiA9IE1JTihhcC0+YWxlbiwgWEZTX0FMTE9DX0FHX01BWF9VU0FCTEUobXApKTsKIAlhcmdzLmZpcnN0YmxvY2sgPSBhcC0+Zmlyc3RibG9jazsKIAlibGVuID0gMDsKIAlpZiAobnVsbGZiKSB7CkBAIC0yNjIxLDcgKzI2NDAsNyBAQAogCQkJLyoKIAkJCSAqIEFkanVzdCBmb3IgYWxpZ25tZW50CiAJCQkgKi8KLQkJCWlmIChibGVuID4gYXJncy5hbGlnbm1lbnQgJiYgYmxlbiA8PSBhcC0+YWxlbikKKwkJCWlmIChibGVuID4gYXJncy5hbGlnbm1lbnQgJiYgYmxlbiA8PSBhcmdzLm1heGxlbikKIAkJCQlhcmdzLm1pbmxlbiA9IGJsZW4gLSBhcmdzLmFsaWdubWVudDsKIAkJCWFyZ3MubWluYWxpZ25zbG9wID0gMDsKIAkJfSBlbHNlIHsKQEAgLTI2NDAsNyArMjY1OSw3IEBACiAJCQkgKiBvZiBtaW5sZW4rYWxpZ25tZW50K3Nsb3AgZG9lc24ndCBnbyB1cAogCQkJICogYmV0d2VlbiB0aGUgY2FsbHMuCiAJCQkgKi8KLQkJCWlmIChibGVuID4gbXAtPm1fZGFsaWduICYmIGJsZW4gPD0gYXAtPmFsZW4pCisJCQlpZiAoYmxlbiA+IG1wLT5tX2RhbGlnbiAmJiBibGVuIDw9IGFyZ3MubWF4bGVuKQogCQkJCW5leHRtaW5sZW4gPSBibGVuIC0gbXAtPm1fZGFsaWduOwogCQkJZWxzZQogCQkJCW5leHRtaW5sZW4gPSBhcmdzLm1pbmxlbjsKQEAgLTQ0ODUsNiArNDUwNCwxNiBAQAogCQkJCS8qIEZpZ3VyZSBvdXQgdGhlIGV4dGVudCBzaXplLCBhZGp1c3QgYWxlbiAqLwogCQkJCWV4dHN6ID0geGZzX2dldF9leHRzel9oaW50KGlwKTsKIAkJCQlpZiAoZXh0c3opIHsKKwkJCQkJLyoKKwkJCQkJICogbWFrZSBzdXJlIHdlIGRvbid0IGV4Y2VlZCBhIHNpbmdsZQorCQkJCQkgKiBleHRlbnQgbGVuZ3RoIHdoZW4gd2UgYWxpZ24gdGhlCisJCQkJCSAqIGV4dGVudCBieSByZWR1Y2luZyBsZW5ndGggd2UgYXJlCisJCQkJCSAqIGdvaW5nIHRvIGFsbG9jYXRlIGJ5IHRoZSBtYXhpbXVtCisJCQkJCSAqIGFtb3VudCBleHRlbnQgc2l6ZSBhbGlnbWVudCBtYXkKKwkJCQkJICogcmVxdWlyZS4KKwkJCQkJICovCisJCQkJCWFsZW4gPSBYRlNfRklMQkxLU19NSU4obGVuLAorCQkJCQkJICAgTUFYRVhUTEVOIC0gKDIgKiBleHRzeiAtIDEpKTsKIAkJCQkJZXJyb3IgPSB4ZnNfYm1hcF9leHRzaXplX2FsaWduKG1wLAogCQkJCQkJCSZnb3QsICZwcmV2LCBleHRzeiwKIAkJCQkJCQlydCwgZW9mLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19idWZfaXRlbS5jIGIvZnMveGZzL3hmc19idWZfaXRlbS5jCmluZGV4IDk4YzZmNzMuLjZmOGMyMWMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYworKysgYi9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKQEAgLTQyNywxMyArNDI3LDE1IEBACiAKIAkJaWYgKHJlbW92ZSkgewogCQkJLyoKLQkJCSAqIFdlIGhhdmUgdG8gcmVtb3ZlIHRoZSBsb2cgaXRlbSBmcm9tIHRoZSB0cmFuc2FjdGlvbgotCQkJICogYXMgd2UgYXJlIGFib3V0IHRvIHJlbGVhc2Ugb3VyIHJlZmVyZW5jZSB0byB0aGUKLQkJCSAqIGJ1ZmZlci4gIElmIHdlIGRvbid0LCB0aGUgdW5sb2NrIHRoYXQgb2NjdXJzIGxhdGVyCi0JCQkgKiBpbiB4ZnNfdHJhbnNfdW5jb21taXQoKSB3aWxsIHJ5IHRvIHJlZmVyZW5jZSB0aGUKKwkJCSAqIElmIHdlIGFyZSBpbiBhIHRyYW5zYWN0aW9uIGNvbnRleHQsIHdlIGhhdmUgdG8KKwkJCSAqIHJlbW92ZSB0aGUgbG9nIGl0ZW0gZnJvbSB0aGUgdHJhbnNhY3Rpb24gYXMgd2UgYXJlCisJCQkgKiBhYm91dCB0byByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gdGhlIGJ1ZmZlci4gIElmIHdlCisJCQkgKiBkb24ndCwgdGhlIHVubG9jayB0aGF0IG9jY3VycyBsYXRlciBpbgorCQkJICogeGZzX3RyYW5zX3VuY29tbWl0KCkgd2lsbCB0cnkgdG8gcmVmZXJlbmNlIHRoZQogCQkJICogYnVmZmVyIHdoaWNoIHdlIG5vIGxvbmdlciBoYXZlIGEgaG9sZCBvbi4KIAkJCSAqLwotCQkJeGZzX3RyYW5zX2RlbF9pdGVtKGxpcCk7CisJCQlpZiAobGlwLT5saV9kZXNjKQorCQkJCXhmc190cmFuc19kZWxfaXRlbShsaXApOwogCiAJCQkvKgogCQkJICogU2luY2UgdGhlIHRyYW5zYWN0aW9uIG5vIGxvbmdlciByZWZlcnMgdG8gdGhlIGJ1ZmZlciwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMgYi9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jCmluZGV4IDc1ZjJlZjYuLmQyMmU2MjYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYwpAQCAtMTM4LDcgKzEzOCw4IEBACiAKIAlpZiAocmVtb3ZlKSB7CiAJCUFTU0VSVCghKGxpcC0+bGlfZmxhZ3MgJiBYRlNfTElfSU5fQUlMKSk7Ci0JCXhmc190cmFuc19kZWxfaXRlbShsaXApOworCQlpZiAobGlwLT5saV9kZXNjKQorCQkJeGZzX3RyYW5zX2RlbF9pdGVtKGxpcCk7CiAJCXhmc19lZmlfaXRlbV9mcmVlKGVmaXApOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc29wcy5jIGIvZnMveGZzL3hmc19mc29wcy5jCmluZGV4IGNlYzg5ZGQuLjg1NjY4ZWYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZnNvcHMuYworKysgYi9mcy94ZnMveGZzX2Zzb3BzLmMKQEAgLTUzLDYgKzUzLDkgQEAKIAl4ZnNfZnNvcF9nZW9tX3QJCSpnZW8sCiAJaW50CQkJbmV3X3ZlcnNpb24pCiB7CisKKwltZW1zZXQoZ2VvLCAwLCBzaXplb2YoKmdlbykpOworCiAJZ2VvLT5ibG9ja3NpemUgPSBtcC0+bV9zYi5zYl9ibG9ja3NpemU7CiAJZ2VvLT5ydGV4dHNpemUgPSBtcC0+bV9zYi5zYl9yZXh0c2l6ZTsKIAlnZW8tPmFnYmxvY2tzID0gbXAtPm1fc2Iuc2JfYWdibG9ja3M7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvbWFwLmMgYi9mcy94ZnMveGZzX2lvbWFwLmMKaW5kZXggNTU1ODJiZC4uOGEwZjA0NCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb21hcC5jCisrKyBiL2ZzL3hmcy94ZnNfaW9tYXAuYwpAQCAtMzM3LDcgKzMzNywxMiBAQAogCQlpbnQgc2hpZnQgPSAwOwogCQlpbnQ2NF90IGZyZWVzcDsKIAotCQlhbGxvY19ibG9ja3MgPSBYRlNfQl9UT19GU0IobXAsIGlwLT5pX3NpemUpOworCQkvKgorCQkgKiByb3VuZGRvd25fcG93X29mX3R3bygpIHJldHVybnMgYW4gdW5kZWZpbmVkIHJlc3VsdAorCQkgKiBpZiB3ZSBwYXNzIGluIGFsbG9jX2Jsb2NrcyA9IDAuIEhlbmNlIHRoZSAiKyAxIiB0bworCQkgKiBlbnN1cmUgd2UgYWx3YXlzIHBhc3MgaW4gYSBub24temVybyB2YWx1ZS4KKwkJICovCisJCWFsbG9jX2Jsb2NrcyA9IFhGU19CX1RPX0ZTQihtcCwgaXAtPmlfc2l6ZSkgKyAxOwogCQlhbGxvY19ibG9ja3MgPSBYRlNfRklMRU9GRl9NSU4oTUFYRVhUTEVOLAogCQkJCQlyb3VuZGRvd25fcG93X29mX3R3byhhbGxvY19ibG9ja3MpKTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2cuaCBiL2ZzL3hmcy94ZnNfbG9nLmgKaW5kZXggOTE2ZWI3ZC4uM2JkMzI5MSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2cuaAorKysgYi9mcy94ZnMveGZzX2xvZy5oCkBAIC0xOTEsNyArMTkxLDcgQEAKIAogeGxvZ190aWRfdCB4ZnNfbG9nX2dldF90cmFuc19pZGVudChzdHJ1Y3QgeGZzX3RyYW5zICp0cCk7CiAKLWludAl4ZnNfbG9nX2NvbW1pdF9jaWwoc3RydWN0IHhmc19tb3VudCAqbXAsIHN0cnVjdCB4ZnNfdHJhbnMgKnRwLAordm9pZAl4ZnNfbG9nX2NvbW1pdF9jaWwoc3RydWN0IHhmc19tb3VudCAqbXAsIHN0cnVjdCB4ZnNfdHJhbnMgKnRwLAogCQkJCXN0cnVjdCB4ZnNfbG9nX3ZlYyAqbG9nX3ZlY3RvciwKIAkJCQl4ZnNfbHNuX3QgKmNvbW1pdF9sc24sIGludCBmbGFncyk7CiBib29sCXhmc19sb2dfaXRlbV9pbl9jdXJyZW50X2Noa3B0KHN0cnVjdCB4ZnNfbG9nX2l0ZW0gKmxpcCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19jaWwuYyBiL2ZzL3hmcy94ZnNfbG9nX2NpbC5jCmluZGV4IDlkYzgxMjUuLjljYTU5YmUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX2NpbC5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nX2NpbC5jCkBAIC01NDMsNyArNTQzLDcgQEAKIAogCWVycm9yID0geGxvZ193cml0ZShsb2csICZsdmhkciwgdGljLCAmY3R4LT5zdGFydF9sc24sIE5VTEwsIDApOwogCWlmIChlcnJvcikKLQkJZ290byBvdXRfYWJvcnQ7CisJCWdvdG8gb3V0X2Fib3J0X2ZyZWVfdGlja2V0OwogCiAJLyoKIAkgKiBub3cgdGhhdCB3ZSd2ZSB3cml0dGVuIHRoZSBjaGVja3BvaW50IGludG8gdGhlIGxvZywgc3RyaWN0bHkKQEAgLTU2OSw4ICs1NjksOSBAQAogCX0KIAlzcGluX3VubG9jaygmY2lsLT54Y19jaWxfbG9jayk7CiAKKwkvKiB4ZnNfbG9nX2RvbmUgYWx3YXlzIGZyZWVzIHRoZSB0aWNrZXQgb24gZXJyb3IuICovCiAJY29tbWl0X2xzbiA9IHhmc19sb2dfZG9uZShsb2ctPmxfbXAsIHRpYywgJmNvbW1pdF9pY2xvZywgMCk7Ci0JaWYgKGVycm9yIHx8IGNvbW1pdF9sc24gPT0gLTEpCisJaWYgKGNvbW1pdF9sc24gPT0gLTEpCiAJCWdvdG8gb3V0X2Fib3J0OwogCiAJLyogYXR0YWNoIGFsbCB0aGUgdHJhbnNhY3Rpb25zIHcvIGJ1c3kgZXh0ZW50cyB0byBpY2xvZyAqLwpAQCAtNjAwLDYgKzYwMSw4IEBACiAJa21lbV9mcmVlKG5ld19jdHgpOwogCXJldHVybiAwOwogCitvdXRfYWJvcnRfZnJlZV90aWNrZXQ6CisJeGZzX2xvZ190aWNrZXRfcHV0KHRpYyk7CiBvdXRfYWJvcnQ6CiAJeGxvZ19jaWxfY29tbWl0dGVkKGN0eCwgWEZTX0xJX0FCT1JURUQpOwogCXJldHVybiBYRlNfRVJST1IoRUlPKTsKQEAgLTYyMiw3ICs2MjUsNyBAQAogICogYmFja2dyb3VuZCBjb21taXQsIHJldHVybnMgd2l0aG91dCBpdCBoZWxkIG9uY2UgYmFja2dyb3VuZCBjb21taXRzIGFyZQogICogYWxsb3dlZCBhZ2Fpbi4KICAqLwotaW50Cit2b2lkCiB4ZnNfbG9nX2NvbW1pdF9jaWwoCiAJc3RydWN0IHhmc19tb3VudAkqbXAsCiAJc3RydWN0IHhmc190cmFucwkqdHAsCkBAIC02MzcsMTEgKzY0MCw2IEBACiAJaWYgKGZsYWdzICYgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUykKIAkJbG9nX2ZsYWdzID0gWEZTX0xPR19SRUxfUEVSTV9SRVNFUlY7CiAKLQlpZiAoWExPR19GT1JDRURfU0hVVERPV04obG9nKSkgewotCQl4bG9nX2NpbF9mcmVlX2xvZ3ZlYyhsb2dfdmVjdG9yKTsKLQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwotCX0KLQogCS8qCiAJICogZG8gYWxsIHRoZSBoYXJkIHdvcmsgb2YgZm9ybWF0dGluZyBpdGVtcyAoaW5jbHVkaW5nIG1lbW9yeQogCSAqIGFsbG9jYXRpb24pIG91dHNpZGUgdGhlIENJTCBjb250ZXh0IGxvY2suIFRoaXMgcHJldmVudHMgc3RhbGxpbmcgQ0lMCkBAIC03MDEsNyArNjk5LDYgQEAKIAkgKi8KIAlpZiAocHVzaCkKIAkJeGxvZ19jaWxfcHVzaChsb2csIDApOwotCXJldHVybiAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFucy5jIGIvZnMveGZzL3hmc190cmFucy5jCmluZGV4IDMzZGJjNGUuLjc2OTIyNzkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnMuYworKysgYi9mcy94ZnMveGZzX3RyYW5zLmMKQEAgLTE0NDYsNiArMTQ0NiwxNCBAQAogICogQnVsayBvcGVyYXRpb24gdmVyc2lvbiBvZiB4ZnNfdHJhbnNfY29tbWl0dGVkIHRoYXQgdGFrZXMgYSBsb2cgdmVjdG9yIG9mCiAgKiBpdGVtcyB0byBpbnNlcnQgaW50byB0aGUgQUlMLiBUaGlzIHVzZXMgYnVsayBBSUwgaW5zZXJ0aW9uIHRlY2huaXF1ZXMgdG8KICAqIG1pbmltaXNlIGxvY2sgdHJhZmZpYy4KKyAqCisgKiBJZiB3ZSBhcmUgY2FsbGVkIHdpdGggdGhlIGFib3J0ZWQgZmxhZyBzZXQsIGl0IGlzIGJlY2F1c2UgYSBsb2cgd3JpdGUgZHVyaW5nCisgKiBhIENJTCBjaGVja3BvaW50IGNvbW1pdCBoYXMgZmFpbGVkLiBJbiB0aGlzIGNhc2UsIGFsbCB0aGUgaXRlbXMgaW4gdGhlCisgKiBjaGVja3BvaW50IGhhdmUgYWxyZWFkeSBnb25lIHRocm91Z2ggSU9QX0NPTU1JVEVEIGFuZCBJT1BfVU5MT0NLLCB3aGljaAorICogbWVhbnMgdGhhdCBjaGVja3BvaW50IGNvbW1pdCBhYm9ydCBoYW5kbGluZyBpcyB0cmVhdGVkIGV4YWN0bHkgdGhlIHNhbWUKKyAqIGFzIGFuIGljbG9nIHdyaXRlIGVycm9yIGV2ZW4gdGhvdWdoIHdlIGhhdmVuJ3Qgc3RhcnRlZCBhbnkgSU8geWV0LiBIZW5jZSBpbgorICogdGhpcyBjYXNlIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIElPUF9DT01NSVRURUQgcHJvY2Vzc2luZywgZm9sbG93ZWQgYnkgYW4KKyAqIElPUF9VTlBJTihhYm9ydGVkKSBjYWxsLgogICovCiB2b2lkCiB4ZnNfdHJhbnNfY29tbWl0dGVkX2J1bGsoCkBAIC0xNDcyLDYgKzE0ODAsMTYgQEAKIAkJaWYgKFhGU19MU05fQ01QKGl0ZW1fbHNuLCAoeGZzX2xzbl90KS0xKSA9PSAwKQogCQkJY29udGludWU7CiAKKwkJLyoKKwkJICogaWYgd2UgYXJlIGFib3J0aW5nIHRoZSBvcGVyYXRpb24sIG5vIHBvaW50IGluIGluc2VydGluZyB0aGUKKwkJICogb2JqZWN0IGludG8gdGhlIEFJTCBhcyB3ZSBhcmUgaW4gYSBzaHV0ZG93biBzaXR1YXRpb24uCisJCSAqLworCQlpZiAoYWJvcnRlZCkgeworCQkJQVNTRVJUKFhGU19GT1JDRURfU0hVVERPV04oYWlscC0+eGFfbW91bnQpKTsKKwkJCUlPUF9VTlBJTihsaXAsIDEpOworCQkJY29udGludWU7CisJCX0KKwogCQlpZiAoaXRlbV9sc24gIT0gY29tbWl0X2xzbikgewogCiAJCQkvKgpAQCAtMTUwMywyMCArMTUyMSwyNCBAQAogfQogCiAvKgotICogQ2FsbGVkIGZyb20gdGhlIHRyYW5zX2NvbW1pdCBjb2RlIHdoZW4gd2Ugbm90aWNlIHRoYXQKLSAqIHRoZSBmaWxlc3lzdGVtIGlzIGluIHRoZSBtaWRkbGUgb2YgYSBmb3JjZWQgc2h1dGRvd24uCisgKiBDYWxsZWQgZnJvbSB0aGUgdHJhbnNfY29tbWl0IGNvZGUgd2hlbiB3ZSBub3RpY2UgdGhhdCB0aGUgZmlsZXN5c3RlbSBpcyBpbgorICogdGhlIG1pZGRsZSBvZiBhIGZvcmNlZCBzaHV0ZG93bi4KKyAqCisgKiBXaGVuIHdlIGFyZSBjYWxsZWQgaGVyZSwgd2UgaGF2ZSBhbHJlYWR5IHBpbm5lZCBhbGwgdGhlIGl0ZW1zIGluIHRoZQorICogdHJhbnNhY3Rpb24uIEhvd2V2ZXIsIG5laXRoZXIgSU9QX0NPTU1JVFRJTkcgb3IgSU9QX1VOTE9DSyBoYXMgYmVlbiBjYWxsZWQKKyAqIHNvIHdlIGNhbiBzaW1wbHkgd2FsayB0aGUgaXRlbXMgaW4gdGhlIHRyYW5zYWN0aW9uLCB1bnBpbiB0aGVtIHdpdGggYW4gYWJvcnQKKyAqIGZsYWcgYW5kIHRoZW4gZnJlZSB0aGUgaXRlbXMuIE5vdGUgdGhhdCB1bnBpbm5pbmcgdGhlIGl0ZW1zIGNhbiByZXN1bHQgaW4KKyAqIHRoZW0gYmVpbmcgZnJlZWQgaW1tZWRpYXRlbHksIHNvIHdlIG5lZWQgdG8gdXNlIGEgc2FmZSBsaXN0IHRyYXZlcnNhbCBtZXRob2QKKyAqIGhlcmUuCiAgKi8KIFNUQVRJQyB2b2lkCiB4ZnNfdHJhbnNfdW5jb21taXQoCiAJc3RydWN0IHhmc190cmFucwkqdHAsCiAJdWludAkJCWZsYWdzKQogewotCXN0cnVjdCB4ZnNfbG9nX2l0ZW1fZGVzYyAqbGlkcDsKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtX2Rlc2MgKmxpZHAsICpuOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShsaWRwLCAmdHAtPnRfaXRlbXMsIGxpZF90cmFucykgewotCQkvKgotCQkgKiBVbnBpbiBhbGwgYnV0IHRob3NlIHRoYXQgYXJlbid0IGRpcnR5LgotCQkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGlkcCwgbiwgJnRwLT50X2l0ZW1zLCBsaWRfdHJhbnMpIHsKIAkJaWYgKGxpZHAtPmxpZF9mbGFncyAmIFhGU19MSURfRElSVFkpCiAJCQlJT1BfVU5QSU4obGlkcC0+bGlkX2l0ZW0sIDEpOwogCX0KQEAgLTE3MzMsNyArMTc1NSw2IEBACiAJaW50CQkJZmxhZ3MpCiB7CiAJc3RydWN0IHhmc19sb2dfdmVjCSpsb2dfdmVjdG9yOwotCWludAkJCWVycm9yOwogCiAJLyoKIAkgKiBHZXQgZWFjaCBsb2cgaXRlbSB0byBhbGxvY2F0ZSBhIHZlY3RvciBzdHJ1Y3R1cmUgZm9yCkBAIC0xNzQ0LDkgKzE3NjUsNyBAQAogCWlmICghbG9nX3ZlY3RvcikKIAkJcmV0dXJuIEVOT01FTTsKIAotCWVycm9yID0geGZzX2xvZ19jb21taXRfY2lsKG1wLCB0cCwgbG9nX3ZlY3RvciwgY29tbWl0X2xzbiwgZmxhZ3MpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOworCXhmc19sb2dfY29tbWl0X2NpbChtcCwgdHAsIGxvZ192ZWN0b3IsIGNvbW1pdF9sc24sIGZsYWdzKTsKIAogCWN1cnJlbnRfcmVzdG9yZV9mbGFnc19uZXN0ZWQoJnRwLT50X3BmbGFncywgUEZfRlNUUkFOUyk7CiAJeGZzX3RyYW5zX2ZyZWUodHApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjZXhjZXAuaCBiL2luY2x1ZGUvYWNwaS9hY2V4Y2VwLmgKaW5kZXggMTc3MTRiZS4uNWI2YzM5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjZXhjZXAuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNleGNlcC5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjbmFtZXMuaCBiL2luY2x1ZGUvYWNwaS9hY25hbWVzLmgKaW5kZXggOWNmNzM2ZS4uZmMxNTc1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjbmFtZXMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNuYW1lcy5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmggYi9pbmNsdWRlL2FjcGkvYWNvdXRwdXQuaAppbmRleCBiYzRhNmRlLi5lZjFjZWY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNvdXRwdXQuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNvdXRwdXQuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpLmggYi9pbmNsdWRlL2FjcGkvYWNwaS5oCmluZGV4IGEwOTFjYWIuLmRlMzk5MTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3BpLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGkuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oIGIvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKaW5kZXggNjViM2Y1OC4uYTMyNTJhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKQEAgLTgsNyArOCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaXhmLmggYi9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKaW5kZXggMjQxYjhhMC4uZTQ2ZWM5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpeGYuaApAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogLyogQ3VycmVudCBBQ1BJQ0Egc3Vic3lzdGVtIHZlcnNpb24gaW4gWVlZWU1NREQgZm9ybWF0ICovCiAKLSNkZWZpbmUgQUNQSV9DQV9WRVJTSU9OICAgICAgICAgICAgICAgICAweDIwMTAxMjA5CisjZGVmaW5lIEFDUElfQ0FfVkVSU0lPTiAgICAgICAgICAgICAgICAgMHgyMDExMDExMgogCiAjaW5jbHVkZSAiYWN0eXBlcy5oIgogI2luY2x1ZGUgImFjdGJsLmgiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNyZXN0eXAuaCBiL2luY2x1ZGUvYWNwaS9hY3Jlc3R5cC5oCmluZGV4IGU1NTI2MzUuLjBhNjZjYzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3Jlc3R5cC5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3Jlc3R5cC5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdGJsLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwuaAppbmRleCBhZDIwMDE2Li43ZTQyYmZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0YmwuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3RibDEuaCBiL2luY2x1ZGUvYWNwaS9hY3RibDEuaAppbmRleCBjZDc3YWE3Li43NTA0YmM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0YmwxLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjdGJsMS5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdGJsMi5oIGIvaW5jbHVkZS9hY3BpL2FjdGJsMi5oCmluZGV4IGQ0MTM2YjIuLjBmYzE1ZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3RibDIuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwyLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oIGIvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaAppbmRleCA5MzlhNDMxLi42NGY4MzhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNlbnYuaCBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2Vudi5oCmluZGV4IGEzZTMzNGEuLjVhZjNlZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2Vudi5oCisrKyBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2Vudi5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTEsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZ2NjLmggYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNnY2MuaAppbmRleCA1ZGNiOTUzLi5lMjI4ODkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNnY2MuaAorKysgYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNnY2MuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmggYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oCmluZGV4IDU3MjE4OWUuLjVkMmE1ZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmgKKysrIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDExLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKaW5kZXggMzFiNjE4OC4uYjRiZmUzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKQEAgLTQsNiArNCw4IEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2lmZGVmIENPTkZJR19NTVUKIAorI2luY2x1ZGUgPGxpbnV4L21tX3R5cGVzLmg+CisKICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTCiBleHRlcm4gaW50IHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAppbmRleCA2ODY0OTMzLi5mZTc3ZTMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCkBAIC0xMjQsNyArMTI0LDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0VWRU5UX1RSQUNJTkcKLSNkZWZpbmUgRlRSQUNFX0VWRU5UUygpCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfZnRyYWNlX2V2ZW50cykgPSAuOwlcCisjZGVmaW5lIEZUUkFDRV9FVkVOVFMoKQkuID0gQUxJR04oOCk7CQkJCQlcCisJCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X2Z0cmFjZV9ldmVudHMpID0gLjsJXAogCQkJKihfZnRyYWNlX2V2ZW50cykJCQkJXAogCQkJVk1MSU5VWF9TWU1CT0woX19zdG9wX2Z0cmFjZV9ldmVudHMpID0gLjsKICNlbHNlCkBAIC0xNDAsNyArMTQxLDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUwotI2RlZmluZSBUUkFDRV9TWVNDQUxMUygpIFZNTElOVVhfU1lNQk9MKF9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGEpID0gLjsJXAorI2RlZmluZSBUUkFDRV9TWVNDQUxMUygpIC4gPSBBTElHTig4KTsJCQkJCVwKKwkJCSBWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X3N5c2NhbGxzX21ldGFkYXRhKSA9IC47CVwKIAkJCSAqKF9fc3lzY2FsbHNfbWV0YWRhdGEpCQkJCVwKIAkJCSBWTUxJTlVYX1NZTUJPTChfX3N0b3Bfc3lzY2FsbHNfbWV0YWRhdGEpID0gLjsKICNlbHNlCkBAIC0xNjUsMTAgKzE2Nyw4IEBACiAJQ1BVX0tFRVAoZXhpdC5kYXRhKQkJCQkJCVwKIAlNRU1fS0VFUChpbml0LmRhdGEpCQkJCQkJXAogCU1FTV9LRUVQKGV4aXQuZGF0YSkJCQkJCQlcCi0JLiA9IEFMSUdOKDMyKTsJCQkJCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX190cmFjZXBvaW50cykgPSAuOwkJCVwKKwlTVFJVQ1RfQUxJR04oKTsJCQkJCQkJXAogCSooX190cmFjZXBvaW50cykJCQkJCQlcCi0JVk1MSU5VWF9TWU1CT0woX19zdG9wX19fdHJhY2Vwb2ludHMpID0gLjsJCQlcCiAJLyogaW1wbGVtZW50IGR5bmFtaWMgcHJpbnRrIGRlYnVnICovCQkJCVwKIAkuID0gQUxJR04oOCk7CQkJCQkJCVwKIAlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdmVyYm9zZSkgPSAuOyAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTc2LDEzICsxNzYsNyBAQAogCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3ZlcmJvc2UpID0gLjsJCQkJXAogCUxJS0VMWV9QUk9GSUxFKCkJCSAgICAgICAJCQkJXAogCUJSQU5DSF9QUk9GSUxFKCkJCQkJCQlcCi0JVFJBQ0VfUFJJTlRLUygpCQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlTVFJVQ1RfQUxJR04oKTsJCQkJCQkJXAotCUZUUkFDRV9FVkVOVFMoKQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JU1RSVUNUX0FMSUdOKCk7CQkJCQkJCVwKLQlUUkFDRV9TWVNDQUxMUygpCisJVFJBQ0VfUFJJTlRLUygpCiAKIC8qCiAgKiBEYXRhIHNlY3Rpb24gaGVscGVycwpAQCAtMjIwLDYgKzIxNCwxMCBAQAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X3JvZGF0YSkgPSAuOwkJCVwKIAkJKigucm9kYXRhKSAqKC5yb2RhdGEuKikJCQkJCVwKIAkJKihfX3Zlcm1hZ2ljKQkJLyogS2VybmVsIHZlcnNpb24gbWFnaWMgKi8JXAorCQkuID0gQUxJR04oOCk7CQkJCQkJXAorCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdHJhY2Vwb2ludHNfcHRycykgPSAuOwkJXAorCQkqKF9fdHJhY2Vwb2ludHNfcHRycykJLyogVHJhY2Vwb2ludHM6IHBvaW50ZXIgYXJyYXkgKi9cCisJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3RyYWNlcG9pbnRzX3B0cnMpID0gLjsJCVwKIAkJKihfX21hcmtlcnNfc3RyaW5ncykJLyogTWFya2Vyczogc3RyaW5ncyAqLwkJXAogCQkqKF9fdHJhY2Vwb2ludHNfc3RyaW5ncykvKiBUcmFjZXBvaW50czogc3RyaW5ncyAqLwlcCiAJfQkJCQkJCQkJXApAQCAtMzY0LDYgKzM2MiwxMyBAQAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fcGFyYW0pID0gLjsJCQlcCiAJCSooX19wYXJhbSkJCQkJCQlcCiAJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3BhcmFtKSA9IC47CQkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkvKiBCdWlsdC1pbiBtb2R1bGUgdmVyc2lvbnMuICovCQkJCQlcCisJX19tb2R2ZXIgOiBBVChBRERSKF9fbW9kdmVyKSAtIExPQURfT0ZGU0VUKSB7CQkJXAorCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fbW9kdmVyKSA9IC47CQkJXAorCQkqKF9fbW9kdmVyKQkJCQkJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fbW9kdmVyKSA9IC47CQkJXAogCQkuID0gQUxJR04oKGFsaWduKSk7CQkJCQlcCiAJCVZNTElOVVhfU1lNQk9MKF9fZW5kX3JvZGF0YSkgPSAuOwkJCVwKIAl9CQkJCQkJCQlcCkBAIC00NzUsNiArNDgwLDggQEAKIAlLRVJORUxfQ1RPUlMoKQkJCQkJCQlcCiAJKiguaW5pdC5yb2RhdGEpCQkJCQkJCVwKIAlNQ09VTlRfUkVDKCkJCQkJCQkJXAorCUZUUkFDRV9FVkVOVFMoKQkJCQkJCQlcCisJVFJBQ0VfU1lTQ0FMTFMoKQkJCQkJCVwKIAlERVZfRElTQ0FSRChpbml0LnJvZGF0YSkJCQkJCVwKIAlDUFVfRElTQ0FSRChpbml0LnJvZGF0YSkJCQkJCVwKIAlNRU1fRElTQ0FSRChpbml0LnJvZGF0YSkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybVAuaCBiL2luY2x1ZGUvZHJtL2RybVAuaAppbmRleCBhNDY5NGM2Li5mZTI5YWFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1QLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtUC5oCkBAIC0xMzY3LDcgKzEzNjcsNyBAQAogZXh0ZXJuIHUzMiBkcm1fdmJsYW5rX2NvdW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKIGV4dGVybiB1MzIgZHJtX3ZibGFua19jb3VudF9hbmRfdGltZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YywKIAkJCQkgICAgIHN0cnVjdCB0aW1ldmFsICp2Ymxhbmt0aW1lKTsKLWV4dGVybiB2b2lkIGRybV9oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiBib29sIGRybV9oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKIGV4dGVybiBpbnQgZHJtX3ZibGFua19nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIHZvaWQgZHJtX3ZibGFua19wdXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIHZvaWQgZHJtX3ZibGFua19vZmYoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKaW5kZXggYWNkN2ZhZC4uODAxYmU1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCkBAIC0yNzUsNiArMjc1LDcgQEAKIAogLyoqCiAgKiBkcm1fY3J0Y19mdW5jcyAtIGNvbnRyb2wgQ1JUQ3MgZm9yIGEgZ2l2ZW4gZGV2aWNlCisgKiBAcmVzZXQ6IHJlc2V0IENSVEMgYWZ0ZXIgc3RhdGUgaGFzIGJlZW4gaW52YWxpZGF0ZSAoZS5nLiByZXN1bWUpCiAgKiBAZHBtczogY29udHJvbCBkaXNwbGF5IHBvd2VyIGxldmVscwogICogQHNhdmU6IHNhdmUgQ1JUQyBzdGF0ZQogICogQHJlc29yZTogcmVzdG9yZSBDUlRDIHN0YXRlCkBAIC0zMDIsNiArMzAzLDggQEAKIAl2b2lkICgqc2F2ZSkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsgLyogc3VzcGVuZD8gKi8KIAkvKiBSZXN0b3JlIENSVEMgc3RhdGUgKi8KIAl2b2lkICgqcmVzdG9yZSkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsgLyogcmVzdW1lPyAqLworCS8qIFJlc2V0IENSVEMgc3RhdGUgKi8KKwl2b2lkICgqcmVzZXQpKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CiAKIAkvKiBjdXJzb3IgY29udHJvbHMgKi8KIAlpbnQgKCpjdXJzb3Jfc2V0KShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LApAQCAtMzc5LDYgKzM4Miw3IEBACiAgKiBAZHBtczogc2V0IHBvd2VyIHN0YXRlIChzZWUgZHJtX2NydGNfZnVuY3MgYWJvdmUpCiAgKiBAc2F2ZTogc2F2ZSBjb25uZWN0b3Igc3RhdGUKICAqIEByZXN0b3JlOiByZXN0b3JlIGNvbm5lY3RvciBzdGF0ZQorICogQHJlc2V0OiByZXNldCBjb25uZWN0b3IgYWZ0ZXIgc3RhdGUgaGFzIGJlZW4gaW52YWxpZGF0ZSAoZS5nLiByZXN1bWUpCiAgKiBAbW9kZV92YWxpZDogaXMgdGhpcyBtb2RlIHZhbGlkIG9uIHRoZSBnaXZlbiBjb25uZWN0b3I/CiAgKiBAbW9kZV9maXh1cDogdHJ5IHRvIGZpeHVwIHByb3Bvc2VkIG1vZGUgZm9yIHRoaXMgY29ubmVjdG9yCiAgKiBAbW9kZV9zZXQ6IHNldCB0aGlzIG1vZGUKQEAgLTM5Niw2ICs0MDAsNyBAQAogCXZvaWQgKCpkcG1zKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBpbnQgbW9kZSk7CiAJdm9pZCAoKnNhdmUpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwogCXZvaWQgKCpyZXN0b3JlKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKKwl2b2lkICgqcmVzZXQpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIGFueXRoaW5nIGlzIGF0dGFjaGVkIHRvIHRoZSBjb25uZWN0b3IuCiAJICogQGZvcmNlIGlzIHNldCB0byBmYWxzZSB3aGlsc3QgcG9sbGluZywgdHJ1ZSB3aGVuIGNoZWNraW5nIHRoZQpAQCAtNDEzLDYgKzQxOCw3IEBACiB9OwogCiBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgeworCXZvaWQgKCpyZXNldCkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKIAl2b2lkICgqZGVzdHJveSkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKIH07CiAKQEAgLTY1Niw2ICs2NjIsNyBAQAogCQkJCQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOwogZXh0ZXJuIHZvaWQgZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CiBleHRlcm4gdm9pZCBkcm1fbW9kZV9jb25maWdfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGRybV9tb2RlX2NvbmZpZ19yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgZHJtX21vZGVfc2V0X25hbWUoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOwogZXh0ZXJuIGJvb2wgZHJtX21vZGVfZXF1YWwoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUxLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCmluZGV4IGZlMjlhZTMuLjVmZjExOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKQEAgLTI4LDcgKzI4LDYgQEAKIAl7MHgxMDAyLCAweDQxNTYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzNTB9LCBcCiAJezB4MTAwMiwgMHg0MjM3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMjAwfFJBREVPTl9JU19JR1B9LCBcCiAJezB4MTAwMiwgMHg0MjQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1IyMDB9LCBcCi0JezB4MTAwMiwgMHg0MjQzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1IyMDB9LCBcCiAJezB4MTAwMiwgMHg0MzM2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMTAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfSwgXAogCXsweDEwMDIsIDB4NDMzNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzIwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWX0sIFwKIAl7MHgxMDAyLCAweDQ0MzcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMyMDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmggYi9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKaW5kZXggZTk1YTg2Yi4uZTVjNjA3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaApAQCAtOTA3LDYgKzkwNyw3IEBACiAjZGVmaW5lIFJBREVPTl9JTkZPX1RJTElOR19DT05GSUcJMHgwNgogI2RlZmluZSBSQURFT05fSU5GT19XQU5UX0hZUEVSWgkJMHgwNwogI2RlZmluZSBSQURFT05fSU5GT19XQU5UX0NNQVNLCQkweDA4IC8qIGdldCBhY2Nlc3MgdG8gQ01BU0sgb24gcjMwMCAqLworI2RlZmluZSBSQURFT05fSU5GT19DTE9DS19DUllTVEFMX0ZSRVEJMHgwOSAvKiBjbG9jayBjcnlzdGFsIGZyZXF1ZW5jeSAqLwogCiBzdHJ1Y3QgZHJtX3JhZGVvbl9pbmZvIHsKIAl1aW50MzJfdAkJcmVxdWVzdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKaW5kZXggMjI5NmQ4Yi4uYjBhZGE2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKQEAgLTEsNSArMSw2IEBACiBoZWFkZXIteSArPSBieXRlb3JkZXIvCiBoZWFkZXIteSArPSBjYW4vCitoZWFkZXIteSArPSBjYWlmLwogaGVhZGVyLXkgKz0gZHZiLwogaGVhZGVyLXkgKz0gaGRsYy8KIGhlYWRlci15ICs9IGlzZG4vCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FjcGkuaCBiL2luY2x1ZGUvbGludXgvYWNwaS5oCmluZGV4IGViMTc2YmIuLmEyZTkxMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWNwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYWNwaS5oCkBAIC0zMDYsOSArMzA2LDYgQEAKIAkJCQkJICAgICB1MzIgKm1hc2ssIHUzMiByZXEpOwogZXh0ZXJuIHZvaWQgYWNwaV9lYXJseV9pbml0KHZvaWQpOwogCi1pbnQgYWNwaV9vc19tYXBfZ2VuZXJpY19hZGRyZXNzKHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqYWRkcik7Ci12b2lkIGFjcGlfb3NfdW5tYXBfZ2VuZXJpY19hZGRyZXNzKHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqYWRkcik7Ci0KICNlbHNlCS8qICFDT05GSUdfQUNQSSAqLwogCiAjZGVmaW5lIGFjcGlfZGlzYWJsZWQgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hY3BpX2lvLmggYi9pbmNsdWRlL2xpbnV4L2FjcGlfaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTgwMDEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hY3BpX2lvLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBfQUNQSV9JT19IXworI2RlZmluZSBfQUNQSV9JT19IXworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmFjcGlfb3NfaW9yZW1hcChhY3BpX3BoeXNpY2FsX2FkZHJlc3MgcGh5cywKKwkJCQkJICAgIGFjcGlfc2l6ZSBzaXplKQoreworICAgICAgIHJldHVybiBpb3JlbWFwX2NhY2hlKHBoeXMsIHNpemUpOworfQorCitpbnQgYWNwaV9vc19tYXBfZ2VuZXJpY19hZGRyZXNzKHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqYWRkcik7Cit2b2lkIGFjcGlfb3NfdW5tYXBfZ2VuZXJpY19hZGRyZXNzKHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqYWRkcik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYWlmL0tidWlsZCBiL2luY2x1ZGUvbGludXgvY2FpZi9LYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTljZjI1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY2FpZi9LYnVpbGQKQEAgLTAsMCArMSwyIEBACitoZWFkZXIteSArPSBjYWlmX3NvY2tldC5oCitoZWFkZXIteSArPSBpZl9jYWlmLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29uc29sZS5oIGIvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKaW5kZXggOTc3NGZlNi4uNzQ1M2NmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKQEAgLTEzOSw5ICsxMzksOSBAQAogZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfY29uc29sZShzdHJ1Y3QgY29uc29sZSAqKTsKIGV4dGVybiBpbnQgdW5yZWdpc3Rlcl9jb25zb2xlKHN0cnVjdCBjb25zb2xlICopOwogZXh0ZXJuIHN0cnVjdCBjb25zb2xlICpjb25zb2xlX2RyaXZlcnM7Ci1leHRlcm4gdm9pZCBhY3F1aXJlX2NvbnNvbGVfc2VtKHZvaWQpOwotZXh0ZXJuIGludCB0cnlfYWNxdWlyZV9jb25zb2xlX3NlbSh2b2lkKTsKLWV4dGVybiB2b2lkIHJlbGVhc2VfY29uc29sZV9zZW0odm9pZCk7CitleHRlcm4gdm9pZCBjb25zb2xlX2xvY2sodm9pZCk7CitleHRlcm4gaW50IGNvbnNvbGVfdHJ5bG9jayh2b2lkKTsKK2V4dGVybiB2b2lkIGNvbnNvbGVfdW5sb2NrKHZvaWQpOwogZXh0ZXJuIHZvaWQgY29uc29sZV9jb25kaXRpb25hbF9zY2hlZHVsZSh2b2lkKTsKIGV4dGVybiB2b2lkIGNvbnNvbGVfdW5ibGFuayh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgdHR5X2RyaXZlciAqY29uc29sZV9kZXZpY2UoaW50ICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2JubC5oIGIvaW5jbHVkZS9saW51eC9kY2JubC5oCmluZGV4IDY4Y2QyNDguLjY2OTAwZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGNibmwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RjYm5sLmgKQEAgLTEwMSw4ICsxMDEsOCBAQAogICovCiBzdHJ1Y3QgZGNiX2FwcCB7CiAJX191OAlzZWxlY3RvcjsKLQlfX3UzMglwcm90b2NvbDsKIAlfX3U4CXByaW9yaXR5OworCV9fdTE2CXByb3RvY29sOwogfTsKIAogc3RydWN0IGRjYm1zZyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaCBiL2luY2x1ZGUvbGludXgvZnJlZXplci5oCmluZGV4IGRhN2U1MmIuLjFlZmZjOGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnJlZXplci5oCisrKyBiL2luY2x1ZGUvbGludXgvZnJlZXplci5oCkBAIC0xMDksNyArMTA5LDcgQEAKIH0KIAogLyoKLSAqIENoZWNrIGlmIHRoZSB0YXNrIHNob3VsZCBiZSBjb3VudGVkIGFzIGZyZWV6ZWFibGUgYnkgdGhlIGZyZWV6ZXIKKyAqIENoZWNrIGlmIHRoZSB0YXNrIHNob3VsZCBiZSBjb3VudGVkIGFzIGZyZWV6YWJsZSBieSB0aGUgZnJlZXplcgogICovCiBzdGF0aWMgaW5saW5lIGludCBmcmVlemVyX3Nob3VsZF9za2lwKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCAzMmIzOGNkLi5lMzhiNTBhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtNjQ5LDYgKzY0OSw3IEBACiAJc3BpbmxvY2tfdAkJcHJpdmF0ZV9sb2NrOwkvKiBmb3IgdXNlIGJ5IHRoZSBhZGRyZXNzX3NwYWNlICovCiAJc3RydWN0IGxpc3RfaGVhZAlwcml2YXRlX2xpc3Q7CS8qIGRpdHRvICovCiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UJKmFzc29jX21hcHBpbmc7CS8qIGRpdHRvICovCisJc3RydWN0IG11dGV4CQl1bm1hcF9tdXRleDsgICAgLyogdG8gcHJvdGVjdCB1bm1hcHBpbmcgKi8KIH0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2YobG9uZykpKSk7CiAJLyoKIAkgKiBPbiBtb3N0IGFyY2hpdGVjdHVyZXMgdGhhdCBhbGlnbm1lbnQgaXMgYWxyZWFkeSB0aGUgY2FzZTsgYnV0CkBAIC0yMTM5LDcgKzIxNDAsNyBAQAogCQkJCSAgIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOwogZXh0ZXJuIGludCByZXZhbGlkYXRlX2Rpc2soc3RydWN0IGdlbmRpc2sgKik7CiBleHRlcm4gaW50IGNoZWNrX2Rpc2tfY2hhbmdlKHN0cnVjdCBibG9ja19kZXZpY2UgKik7Ci1leHRlcm4gaW50IF9faW52YWxpZGF0ZV9kZXZpY2Uoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKK2V4dGVybiBpbnQgX19pbnZhbGlkYXRlX2RldmljZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIGJvb2wpOwogZXh0ZXJuIGludCBpbnZhbGlkYXRlX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqLCBpbnQpOwogI2VuZGlmCiB1bnNpZ25lZCBsb25nIGludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKQEAgLTIyMjUsNiArMjIyNiw3IEBACiAKIGV4dGVybiBpbnQgaW5vZGVfaW5pdF9hbHdheXMoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiB2b2lkIGlub2RlX2luaXRfb25jZShzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gdm9pZCBhZGRyZXNzX3NwYWNlX2luaXRfb25jZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyk7CiBleHRlcm4gdm9pZCBpaG9sZChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7CiBleHRlcm4gdm9pZCBpcHV0KHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKiBpZ3JhYihzdHJ1Y3QgaW5vZGUgKik7CkBAIC0yNTU1LDkgKzI1NTcsMTIgQEAKIAkJICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpOwogaW50IF9faW5pdCBnZXRfZmlsZXN5c3RlbV9saXN0KGNoYXIgKmJ1Zik7CiAKKyNkZWZpbmUgX19GTU9ERV9FWEVDCQkoKF9fZm9yY2UgaW50KSBGTU9ERV9FWEVDKQorI2RlZmluZSBfX0ZNT0RFX05PTk9USUZZCSgoX19mb3JjZSBpbnQpIEZNT0RFX05PTk9USUZZKQorCiAjZGVmaW5lIEFDQ19NT0RFKHgpICgiXDAwNFwwMDJcMDA2XDAwNiJbKHgpJk9fQUNDTU9ERV0pCiAjZGVmaW5lIE9QRU5fRk1PREUoZmxhZykgKChfX2ZvcmNlIGZtb2RlX3QpKCgoZmxhZyArIDEpICYgT19BQ0NNT0RFKSB8IFwKLQkJCQkJICAgIChmbGFnICYgRk1PREVfTk9OT1RJRlkpKSkKKwkJCQkJICAgIChmbGFnICYgX19GTU9ERV9OT05PVElGWSkpKQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9GU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaAppbmRleCBhM2IxNDhhLi4wYjg0YzYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKQEAgLTI0OSw3ICsyNDksNyBAQAogCQkJCQkgKCgxIDw8IFpPTkVTX1NISUZUKSAtIDEpOwogCiAJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGJpdCkpCi0JCU1BWUJFX0JVSUxEX0JVR19PTigoR0ZQX1pPTkVfQkFEID4+IGJpdCkgJiAxKTsKKwkJQlVJTERfQlVHX09OKChHRlBfWk9ORV9CQUQgPj4gYml0KSAmIDEpOwogCWVsc2UgewogI2lmZGVmIENPTkZJR19ERUJVR19WTQogCQlCVUdfT04oKEdGUF9aT05FX0JBRCA+PiBiaXQpICYgMSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCmluZGV4IDhlNmM4YzQuLmRmMjljOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCkBAIC01Nyw3ICs1Nyw4IEBACiAJICAodHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgJgkJCQkJXAogCSAgICgxPDxUUkFOU1BBUkVOVF9IVUdFUEFHRV9SRVFfTUFEVl9GTEFHKSAmJgkJCVwKIAkgICAoKF9fdm1hKS0+dm1fZmxhZ3MgJiBWTV9IVUdFUEFHRSkpKSAmJgkJCVwKLQkgISgoX192bWEpLT52bV9mbGFncyAmIFZNX05PSFVHRVBBR0UpKQorCSAhKChfX3ZtYSktPnZtX2ZsYWdzICYgVk1fTk9IVUdFUEFHRSkgJiYJCQlcCisJICFpc192bWFfdGVtcG9yYXJ5X3N0YWNrKF9fdm1hKSkKICNkZWZpbmUgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZGVmcmFnKF9fdm1hKQkJCQlcCiAJKCh0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncyAmCQkJCQlcCiAJICAoMTw8VFJBTlNQQVJFTlRfSFVHRVBBR0VfREVGUkFHX0ZMQUcpKSB8fAkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmggYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCmluZGV4IDYwNDIyMjguLjI5NDE2OWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaApAQCAtOTU5LDcgKzk1OSw3IEBACiAvKiBibG9jay1hY2sgcGFyYW1ldGVycyAqLwogI2RlZmluZSBJRUVFODAyMTFfQUREQkFfUEFSQU1fUE9MSUNZX01BU0sgMHgwMDAyCiAjZGVmaW5lIElFRUU4MDIxMV9BRERCQV9QQVJBTV9USURfTUFTSyAweDAwM0MKLSNkZWZpbmUgSUVFRTgwMjExX0FEREJBX1BBUkFNX0JVRl9TSVpFX01BU0sgMHhGRkEwCisjZGVmaW5lIElFRUU4MDIxMV9BRERCQV9QQVJBTV9CVUZfU0laRV9NQVNLIDB4RkZDMAogI2RlZmluZSBJRUVFODAyMTFfREVMQkFfUEFSQU1fVElEX01BU0sgMHhGMDAwCiAjZGVmaW5lIElFRUU4MDIxMV9ERUxCQV9QQVJBTV9JTklUSUFUT1JfTUFTSyAweDA4MDAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC9idTIxMDEzLmggYi9pbmNsdWRlL2xpbnV4L2lucHV0L2J1MjEwMTMuaAppbmRleCBlNDcwZDM4Li4wNWUwMzI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lucHV0L2J1MjEwMTMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0L2J1MjEwMTMuaApAQCAtMTIsOCArMTIsNiBAQAogICogQGNzX2VuOglwb2ludGVyIHRvIHRoZSBjcyBlbmFibGUgZnVuY3Rpb24KICAqIEBjc19kaXM6CXBvaW50ZXIgdG8gdGhlIGNzIGRpc2FibGUgZnVuY3Rpb24KICAqIEBpcnFfcmVhZF92YWw6ICAgIHBvaW50ZXIgdG8gcmVhZCB0aGUgcGVuIGlycSB2YWx1ZSBmdW5jdGlvbgotICogQHhfbWF4X3JlczogeG1heCByZXNvbHV0aW9uCi0gKiBAeV9tYXhfcmVzOiB5bWF4IHJlc29sdXRpb24KICAqIEB0b3VjaF94X21heDogdG91Y2ggeCBtYXgKICAqIEB0b3VjaF95X21heDogdG91Y2ggeSBtYXgKICAqIEBjc19waW46IGNoaXAgc2VsZWN0IHBpbgpAQCAtMjksOCArMjcsNiBAQAogCWludCAoKmNzX2VuKShpbnQgcmVzZXRfcGluKTsKIAlpbnQgKCpjc19kaXMpKGludCByZXNldF9waW4pOwogCWludCAoKmlycV9yZWFkX3ZhbCkodm9pZCk7Ci0JaW50IHhfbWF4X3JlczsKLQlpbnQgeV9tYXhfcmVzOwogCWludCB0b3VjaF94X21heDsKIAlpbnQgdG91Y2hfeV9tYXg7CiAJdW5zaWduZWQgaW50IGNzX3BpbjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmgKaW5kZXggNjk3NDc0Ni4uZmU3YzRiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmgKQEAgLTQsOCArNCw4IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogCi0jZGVmaW5lIE1BVFJJWF9NQVhfUk9XUwkJMTYKLSNkZWZpbmUgTUFUUklYX01BWF9DT0xTCQkxNgorI2RlZmluZSBNQVRSSVhfTUFYX1JPV1MJCTMyCisjZGVmaW5lIE1BVFJJWF9NQVhfQ09MUwkJMzIKIAogI2RlZmluZSBLRVkocm93LCBjb2wsIHZhbCkJKCgoKHJvdykgJiAoTUFUUklYX01BWF9ST1dTIC0gMSkpIDw8IDI0KSB8XAogCQkJCSAoKChjb2wpICYgKE1BVFJJWF9NQVhfQ09MUyAtIDEpKSA8PCAxNikgfFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxLmggYi9pbmNsdWRlL2xpbnV4L2lycS5oCmluZGV4IGFiZGUyNTIuLjgwZmNiNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnEuaApAQCAtNzQsNyArNzQsOCBAQAogCiAjZGVmaW5lIElSUUZfTU9ESUZZX01BU0sJXAogCShJUlFfVFlQRV9TRU5TRV9NQVNLIHwgSVJRX05PUFJPQkUgfCBJUlFfTk9SRVFVRVNUIHwgXAotCSBJUlFfTk9BVVRPRU4gfCBJUlFfTU9WRV9QQ05UWFQgfCBJUlFfTEVWRUwpCisJIElSUV9OT0FVVE9FTiB8IElSUV9NT1ZFX1BDTlRYVCB8IElSUV9MRVZFTCB8IElSUV9OT19CQUxBTkNJTkcgfCBcCisJIElSUV9QRVJfQ1BVKQogCiAjaWZkZWYgQ09ORklHX0lSUV9QRVJfQ1BVCiAjIGRlZmluZSBDSEVDS19JUlFfUEVSX0NQVSh2YXIpICgodmFyKSAmIElSUV9QRVJfQ1BVKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFkZXNjLmggYi9pbmNsdWRlL2xpbnV4L2lycWRlc2MuaAppbmRleCA2YTY0YzZmLi5jMWE5NWI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycWRlc2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycWRlc2MuaApAQCAtMTAxLDEzICsxMDEsNiBAQAogI2RlZmluZSBnZXRfaXJxX2Rlc2NfbXNpKGRlc2MpCQkoKGRlc2MpLT5pcnFfZGF0YS5tc2lfZGVzYykKIAogLyoKLSAqIE1vbm9saXRoaWMgZG9fSVJRIGltcGxlbWVudGF0aW9uLgotICovCi0jaWZuZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKLWV4dGVybiB1bnNpZ25lZCBpbnQgX19kb19JUlEodW5zaWduZWQgaW50IGlycSk7Ci0jZW5kaWYKLQotLyoKICAqIEFyY2hpdGVjdHVyZXMgY2FsbCB0aGlzIHRvIGxldCB0aGUgZ2VuZXJpYyBJUlEgbGF5ZXIKICAqIGhhbmRsZSBhbiBpbnRlcnJ1cHQuIElmIHRoZSBkZXNjcmlwdG9yIGlzIGF0dGFjaGVkIHRvIGFuCiAgKiBpcnFjaGlwLXN0eWxlIGNvbnRyb2xsZXIgdGhlbiB3ZSBjYWxsIHRoZSAtPmhhbmRsZV9pcnEoKSBoYW5kbGVyLApAQCAtMTE1LDE0ICsxMDgsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJpY19oYW5kbGVfaXJxX2Rlc2ModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotI2lmZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAlkZXNjLT5oYW5kbGVfaXJxKGlycSwgZGVzYyk7Ci0jZWxzZQotCWlmIChsaWtlbHkoZGVzYy0+aGFuZGxlX2lycSkpCi0JCWRlc2MtPmhhbmRsZV9pcnEoaXJxLCBkZXNjKTsKLQllbHNlCi0JCV9fZG9fSVJRKGlycSk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfaGFuZGxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggNWE5ZDkwNS4uMmZlNmU4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0yNDMsNiArMjQzLDggQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGdldF90YWludCh2b2lkKTsKIGV4dGVybiBpbnQgcm9vdF9tb3VudGZsYWdzOwogCitleHRlcm4gYm9vbCBlYXJseV9ib290X2lycXNfZGlzYWJsZWQ7CisKIC8qIFZhbHVlcyB1c2VkIGZvciBzeXN0ZW1fc3RhdGUgKi8KIGV4dGVybiBlbnVtIHN5c3RlbV9zdGF0ZXMgewogCVNZU1RFTV9CT09USU5HLApAQCAtNTczLDEyICs1NzUsNiBAQAogCWNoYXIgX2ZbMjAtMipzaXplb2YobG9uZyktc2l6ZW9mKGludCldOwkvKiBQYWRkaW5nOiBsaWJjNSB1c2VzIHRoaXMuLiAqLwogfTsKIAotLyogRm9yY2UgYSBjb21waWxhdGlvbiBlcnJvciBpZiBjb25kaXRpb24gaXMgdHJ1ZSAqLwotI2RlZmluZSBCVUlMRF9CVUdfT04oY29uZGl0aW9uKSAoKHZvaWQpQlVJTERfQlVHX09OX1pFUk8oY29uZGl0aW9uKSkKLQotLyogRm9yY2UgYSBjb21waWxhdGlvbiBlcnJvciBpZiBjb25kaXRpb24gaXMgY29uc3RhbnQgYW5kIHRydWUgKi8KLSNkZWZpbmUgTUFZQkVfQlVJTERfQlVHX09OKGNvbmQpICgodm9pZClzaXplb2YoY2hhclsxIC0gMiAqICEhKGNvbmQpXSkpCi0KIC8qIEZvcmNlIGEgY29tcGlsYXRpb24gZXJyb3IgaWYgYSBjb25zdGFudCBleHByZXNzaW9uIGlzIG5vdCBhIHBvd2VyIG9mIDIgKi8KICNkZWZpbmUgQlVJTERfQlVHX09OX05PVF9QT1dFUl9PRl8yKG4pCQkJXAogCUJVSUxEX0JVR19PTigobikgPT0gMCB8fCAoKChuKSAmICgobikgLSAxKSkgIT0gMCkpCkBAIC01OTAsNiArNTg2LDMyIEBACiAjZGVmaW5lIEJVSUxEX0JVR19PTl9aRVJPKGUpIChzaXplb2Yoc3RydWN0IHsgaW50Oi0hIShlKTsgfSkpCiAjZGVmaW5lIEJVSUxEX0JVR19PTl9OVUxMKGUpICgodm9pZCAqKXNpemVvZihzdHJ1Y3QgeyBpbnQ6LSEhKGUpOyB9KSkKIAorLyoqCisgKiBCVUlMRF9CVUdfT04gLSBicmVhayBjb21waWxlIGlmIGEgY29uZGl0aW9uIGlzIHRydWUuCisgKiBAY29uZGl0aW9uOiB0aGUgY29uZGl0aW9uIHdoaWNoIHRoZSBjb21waWxlciBzaG91bGQga25vdyBpcyBmYWxzZS4KKyAqCisgKiBJZiB5b3UgaGF2ZSBzb21lIGNvZGUgd2hpY2ggcmVsaWVzIG9uIGNlcnRhaW4gY29uc3RhbnRzIGJlaW5nIGVxdWFsLCBvcgorICogb3RoZXIgY29tcGlsZS10aW1lLWV2YWx1YXRlZCBjb25kaXRpb24sIHlvdSBzaG91bGQgdXNlIEJVSUxEX0JVR19PTiB0bworICogZGV0ZWN0IGlmIHNvbWVvbmUgY2hhbmdlcyBpdC4KKyAqCisgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyBnY2MncyByZWx1Y3RhbmNlIHRvIGNyZWF0ZSBhIG5lZ2F0aXZlIGFycmF5LCBidXQKKyAqIGdjYyAoYXMgb2YgNC40KSBvbmx5IGVtaXRzIHRoYXQgZXJyb3IgZm9yIG9idmlvdXMgY2FzZXMgKGVnLiBub3QgYXJndW1lbnRzCisgKiB0byBpbmxpbmUgZnVuY3Rpb25zKS4gIFNvIGFzIGEgZmFsbGJhY2sgd2UgdXNlIHRoZSBvcHRpbWl6ZXI7IGlmIGl0IGNhbid0CisgKiBwcm92ZSB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLCBpdCB3aWxsIGNhdXNlIGEgbGluayBlcnJvciBvbiB0aGUgdW5kZWZpbmVkCisgKiAiX19idWlsZF9idWdfb25fZmFpbGVkIi4gIFRoaXMgZXJyb3IgbWVzc2FnZSBjYW4gYmUgaGFyZGVyIHRvIHRyYWNrIGRvd24KKyAqIHRob3VnaCwgaGVuY2UgdGhlIHR3byBkaWZmZXJlbnQgbWV0aG9kcy4KKyAqLworI2lmbmRlZiBfX09QVElNSVpFX18KKyNkZWZpbmUgQlVJTERfQlVHX09OKGNvbmRpdGlvbikgKCh2b2lkKXNpemVvZihjaGFyWzEgLSAyKiEhKGNvbmRpdGlvbildKSkKKyNlbHNlCitleHRlcm4gaW50IF9fYnVpbGRfYnVnX29uX2ZhaWxlZDsKKyNkZWZpbmUgQlVJTERfQlVHX09OKGNvbmRpdGlvbikJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJKCh2b2lkKXNpemVvZihjaGFyWzEgLSAyKiEhKGNvbmRpdGlvbildKSk7CVwKKwkJaWYgKGNvbmRpdGlvbikgX19idWlsZF9idWdfb25fZmFpbGVkID0gMTsJXAorCX0gd2hpbGUoMCkKKyNlbmRpZgorCiAvKiBUcmFwIHBhc3RlcnMgb2YgX19GVU5DVElPTl9fIGF0IGNvbXBpbGUtdGltZSAqLwogI2RlZmluZSBfX0ZVTkNUSU9OX18gKF9fZnVuY19fKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tsaXN0LmggYi9pbmNsdWRlL2xpbnV4L2tsaXN0LmgKaW5kZXggZTkxYTRlNS4uYTM3MGNlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rbGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgva2xpc3QuaApAQCAtMjIsNyArMjIsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJa19saXN0OwogCXZvaWQJCQkoKmdldCkoc3RydWN0IGtsaXN0X25vZGUgKik7CiAJdm9pZAkJCSgqcHV0KShzdHJ1Y3Qga2xpc3Rfbm9kZSAqKTsKLX0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSk7Cit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkIChzaXplb2Yodm9pZCAqKSkpKTsKIAogI2RlZmluZSBLTElTVF9JTklUKF9uYW1lLCBfZ2V0LCBfcHV0KQkJCQkJXAogCXsgLmtfbG9jawk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKF9uYW1lLmtfbG9jayksCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ttZW1jaGVjay5oIGIvaW5jbHVkZS9saW51eC9rbWVtY2hlY2suaAppbmRleCAwOGQ3ZGM0Li4zOWY4NDUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ttZW1jaGVjay5oCisrKyBiL2luY2x1ZGUvbGludXgva21lbWNoZWNrLmgKQEAgLTc2LDcgKzc2LDcgQEAKIAkJCQkJCQkJCVwKIAkJX24gPSAobG9uZykgJigocHRyKS0+bmFtZSMjX2VuZCkJCQlcCiAJCQktIChsb25nKSAmKChwdHIpLT5uYW1lIyNfYmVnaW4pOwkJXAotCQlNQVlCRV9CVUlMRF9CVUdfT04oX24gPCAwKTsJCQkJXAorCQlCVUlMRF9CVUdfT04oX24gPCAwKTsJCQkJCVwKIAkJCQkJCQkJCVwKIAkJa21lbWNoZWNrX21hcmtfaW5pdGlhbGl6ZWQoJigocHRyKS0+bmFtZSMjX2JlZ2luKSwgX24pOwlcCiAJfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlzdC5oIGIvaW5jbHVkZS9saW51eC9saXN0LmgKaW5kZXggOWE1ZjhhNy4uM2E1NDI2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9saXN0LmgKQEAgLTk2LDYgKzk2LDExIEBACiAgKiBpbiBhbiB1bmRlZmluZWQgc3RhdGUuCiAgKi8KICNpZm5kZWYgQ09ORklHX0RFQlVHX0xJU1QKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2xpc3RfZGVsX2VudHJ5KHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQoreworCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGxpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQogewogCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKQEAgLTEwMyw2ICsxMDgsNyBAQAogCWVudHJ5LT5wcmV2ID0gTElTVF9QT0lTT04yOwogfQogI2Vsc2UKK2V4dGVybiB2b2lkIF9fbGlzdF9kZWxfZW50cnkoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpOwogZXh0ZXJuIHZvaWQgbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpOwogI2VuZGlmCiAKQEAgLTEzNSw3ICsxNDEsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWxfaW5pdChzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkKIHsKLQlfX2xpc3RfZGVsKGVudHJ5LT5wcmV2LCBlbnRyeS0+bmV4dCk7CisJX19saXN0X2RlbF9lbnRyeShlbnRyeSk7CiAJSU5JVF9MSVNUX0hFQUQoZW50cnkpOwogfQogCkBAIC0xNDYsNyArMTUyLDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGxpc3RfbW92ZShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewotCV9fbGlzdF9kZWwobGlzdC0+cHJldiwgbGlzdC0+bmV4dCk7CisJX19saXN0X2RlbF9lbnRyeShsaXN0KTsKIAlsaXN0X2FkZChsaXN0LCBoZWFkKTsKIH0KIApAQCAtMTU4LDcgKzE2NCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9tb3ZlX3RhaWwoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKIAkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7Ci0JX19saXN0X2RlbChsaXN0LT5wcmV2LCBsaXN0LT5uZXh0KTsKKwlfX2xpc3RfZGVsX2VudHJ5KGxpc3QpOwogCWxpc3RfYWRkX3RhaWwobGlzdCwgaGVhZCk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKaW5kZXggNzFjMDliMjYuLjRhZWYxZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCkBAIC00MzYsMTYgKzQzNiw4IEBACiAjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi8KIAogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwotZXh0ZXJuIHZvaWQgZWFybHlfYm9vdF9pcnFzX29mZih2b2lkKTsKLWV4dGVybiB2b2lkIGVhcmx5X2Jvb3RfaXJxc19vbih2b2lkKTsKIGV4dGVybiB2b2lkIHByaW50X2lycXRyYWNlX2V2ZW50cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9ib290X2lycXNfb2ZmKHZvaWQpCi17Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfYm9vdF9pcnFzX29uKHZvaWQpCi17Ci19CiBzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfaXJxdHJhY2VfZXZlbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycikKIHsKIH0KQEAgLTUyMiwxMiArNTE0LDE1IEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKICMgaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKICMgIGRlZmluZSBsb2NrX21hcF9hY3F1aXJlKGwpCQlsb2NrX2FjcXVpcmUobCwgMCwgMCwgMCwgMiwgTlVMTCwgX1RISVNfSVBfKQorIyAgZGVmaW5lIGxvY2tfbWFwX2FjcXVpcmVfcmVhZChsKQlsb2NrX2FjcXVpcmUobCwgMCwgMCwgMiwgMiwgTlVMTCwgX1RISVNfSVBfKQogIyBlbHNlCiAjICBkZWZpbmUgbG9ja19tYXBfYWNxdWlyZShsKQkJbG9ja19hY3F1aXJlKGwsIDAsIDAsIDAsIDEsIE5VTEwsIF9USElTX0lQXykKKyMgIGRlZmluZSBsb2NrX21hcF9hY3F1aXJlX3JlYWQobCkJbG9ja19hY3F1aXJlKGwsIDAsIDAsIDIsIDEsIE5VTEwsIF9USElTX0lQXykKICMgZW5kaWYKICMgZGVmaW5lIGxvY2tfbWFwX3JlbGVhc2UobCkJCQlsb2NrX3JlbGVhc2UobCwgMSwgX1RISVNfSVBfKQogI2Vsc2UKICMgZGVmaW5lIGxvY2tfbWFwX2FjcXVpcmUobCkJCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBsb2NrX21hcF9hY3F1aXJlX3JlYWQobCkJCWRvIHsgfSB3aGlsZSAoMCkKICMgZGVmaW5lIGxvY2tfbWFwX3JlbGVhc2UobCkJCQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCA2YTU3NmY5Li5mNTEyZTE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtMTQ2LDYgKzE0NiwxMCBAQAogCQkJCQkJZ2ZwX3QgZ2ZwX21hc2spOwogdTY0IG1lbV9jZ3JvdXBfZ2V0X2xpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0pOwogCisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCit2b2lkIG1lbV9jZ3JvdXBfc3BsaXRfaHVnZV9maXh1cChzdHJ1Y3QgcGFnZSAqaGVhZCwgc3RydWN0IHBhZ2UgKnRhaWwpOworI2VuZGlmCisKICNlbHNlIC8qIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSICovCiBzdHJ1Y3QgbWVtX2Nncm91cDsKIApAQCAtMzM1LDYgKzMzOSwxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9zcGxpdF9odWdlX2ZpeHVwKHN0cnVjdCBwYWdlICpoZWFkLAorCQkJCQkJc3RydWN0IHBhZ2UgKnRhaWwpCit7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfQ0dST1VQX01FTV9DT05UICovCiAKICNlbmRpZiAvKiBfTElOVVhfTUVNQ09OVFJPTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggOTU2YTM1NS4uZjYzODVmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtNDcwLDYgKzQ3MCw3IEBACiAJcGFnZVsxXS5scnUucHJldiA9ICh2b2lkICopb3JkZXI7CiB9CiAKKyNpZmRlZiBDT05GSUdfTU1VCiAvKgogICogRG8gcHRlX21rd3JpdGUsIGJ1dCBvbmx5IGlmIHRoZSB2bWEgc2F5cyBWTV9XUklURS4gIFdlIGRvIHRoaXMgd2hlbgogICogc2VydmljaW5nIGZhdWx0cyBmb3Igd3JpdGUgYWNjZXNzLiAgSW4gdGhlIG5vcm1hbCBjYXNlLCBkbyBhbHdheXMgd2FudApAQCAtNDgyLDYgKzQ4Myw3IEBACiAJCXB0ZSA9IHB0ZV9ta3dyaXRlKHB0ZSk7CiAJcmV0dXJuIHB0ZTsKIH0KKyNlbmRpZgogCiAvKgogICogTXVsdGlwbGUgcHJvY2Vzc2VzIG1heSAic2VlIiB0aGUgc2FtZSBwYWdlLiBFLmcuIGZvciB1bnRvdWNoZWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL3NoX21tY2lmLmggYi9pbmNsdWRlL2xpbnV4L21tYy9zaF9tbWNpZi5oCmluZGV4IGJmMTczNTAuLjM4ZDM5MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL3NoX21tY2lmLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvc2hfbW1jaWYuaApAQCAtOTQsMTIgKzk0LDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdTMyIHNoX21tY2lmX3JlYWRsKHZvaWQgX19pb21lbSAqYWRkciwgaW50IHJlZykKIHsKLQlyZXR1cm4gcmVhZGwoYWRkciArIHJlZyk7CisJcmV0dXJuIF9fcmF3X3JlYWRsKGFkZHIgKyByZWcpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2hfbW1jaWZfd3JpdGVsKHZvaWQgX19pb21lbSAqYWRkciwgaW50IHJlZywgdTMyIHZhbCkKIHsKLQl3cml0ZWwodmFsLCBhZGRyICsgcmVnKTsKKwlfX3Jhd193cml0ZWwodmFsLCBhZGRyICsgcmVnKTsKIH0KIAogI2RlZmluZSBTSF9NTUNJRl9CQlMgNTEyIC8qIGJvb3QgYmxvY2sgc2l6ZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggOGIxN2ZkOC4uNWRlNDIwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC01OCw2ICs1OCwxMiBAQAogCXZvaWQgKCpmcmVlKShzdHJ1Y3QgbW9kdWxlICopOwogfTsKIAorc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZSB7CisJc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgbWF0dHI7CisJY29uc3QgY2hhciAqbW9kdWxlX25hbWU7CisJY29uc3QgY2hhciAqdmVyc2lvbjsKK30gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKHNpemVvZih2b2lkICopKSkpOworCiBzdHJ1Y3QgbW9kdWxlX2tvYmplY3QKIHsKIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwpAQCAtMTYxLDcgKzE2NywyOCBAQAogICBVc2luZyB0aGlzIGF1dG9tYXRpY2FsbHkgYWRkcyBhIGNoZWNrc3VtIG9mIHRoZSAuYyBmaWxlcyBhbmQgdGhlCiAgIGxvY2FsIGhlYWRlcnMgaW4gInNyY3ZlcnNpb24iLgogKi8KKworI2lmIGRlZmluZWQoTU9EVUxFKSB8fCAhZGVmaW5lZChDT05GSUdfU1lTRlMpCiAjZGVmaW5lIE1PRFVMRV9WRVJTSU9OKF92ZXJzaW9uKSBNT0RVTEVfSU5GTyh2ZXJzaW9uLCBfdmVyc2lvbikKKyNlbHNlCisjZGVmaW5lIE1PRFVMRV9WRVJTSU9OKF92ZXJzaW9uKQkJCQkJXAorCWV4dGVybiBzc2l6ZV90IF9fbW9kdmVyX3ZlcnNpb25fc2hvdyhzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqLAlcCisJCQkJCSAgICAgc3RydWN0IG1vZHVsZSAqLCBjaGFyICopOwlcCisJc3RhdGljIHN0cnVjdCBtb2R1bGVfdmVyc2lvbl9hdHRyaWJ1dGUgX19tb2R2ZXJfdmVyc2lvbl9hdHRyCVwKKwlfX3VzZWQJCQkJCQkJCVwKKyAgICBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCJfX21vZHZlciIpLGFsaWduZWQoc2l6ZW9mKHZvaWQgKikpKSkgXAorCT0gewkJCQkJCQkJXAorCQkubWF0dHIJPSB7CQkJCQkJXAorCQkJLmF0dHIJPSB7CQkJCQlcCisJCQkJLm5hbWUJPSAidmVyc2lvbiIsCQkJXAorCQkJCS5tb2RlCT0gU19JUlVHTywJCQlcCisJCQl9LAkJCQkJCVwKKwkJCS5zaG93CT0gX19tb2R2ZXJfdmVyc2lvbl9zaG93LAkJXAorCQl9LAkJCQkJCQlcCisJCS5tb2R1bGVfbmFtZQk9IEtCVUlMRF9NT0ROQU1FLAkJCVwKKwkJLnZlcnNpb24JPSBfdmVyc2lvbiwJCQkJXAorCX0KKyNlbmRpZgogCiAvKiBPcHRpb25hbCBmaXJtd2FyZSBmaWxlIChvciBmaWxlcykgbmVlZGVkIGJ5IHRoZSBtb2R1bGUKICAqIGZvcm1hdCBpcyBzaW1wbHkgZmlybXdhcmUgZmlsZSBuYW1lLiAgTXVsdGlwbGUgZmlybXdhcmUKQEAgLTM1MCw3ICszNzcsNyBAQAogCSAgIGtlZXBpbmcgcG9pbnRlcnMgdG8gdGhpcyBzdHVmZiAqLwogCWNoYXIgKmFyZ3M7CiAjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCi0Jc3RydWN0IHRyYWNlcG9pbnQgKnRyYWNlcG9pbnRzOworCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKnRyYWNlcG9pbnRzX3B0cnM7CiAJdW5zaWduZWQgaW50IG51bV90cmFjZXBvaW50czsKICNlbmRpZgogI2lmZGVmIEhBVkVfSlVNUF9MQUJFTApAQCAtMzYyLDcgKzM4OSw3IEBACiAJdW5zaWduZWQgaW50IG51bV90cmFjZV9icHJpbnRrX2ZtdDsKICNlbmRpZgogI2lmZGVmIENPTkZJR19FVkVOVF9UUkFDSU5HCi0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp0cmFjZV9ldmVudHM7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICoqdHJhY2VfZXZlbnRzOwogCXVuc2lnbmVkIGludCBudW1fdHJhY2VfZXZlbnRzOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JECmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKaW5kZXggMTEyYWRmOC4uMDdiNDE5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaApAQCAtMTYsMTUgKzE2LDE3IEBACiAvKiBDaG9zZW4gc28gdGhhdCBzdHJ1Y3RzIHdpdGggYW4gdW5zaWduZWQgbG9uZyBsaW5lIHVwLiAqLwogI2RlZmluZSBNQVhfUEFSQU1fUFJFRklYX0xFTiAoNjQgLSBzaXplb2YodW5zaWduZWQgbG9uZykpCiAKLSNpZmRlZiBNT0RVTEUKICNkZWZpbmUgX19fbW9kdWxlX2NhdChhLGIpIF9fbW9kXyAjIyBhICMjIGIKICNkZWZpbmUgX19tb2R1bGVfY2F0KGEsYikgX19fbW9kdWxlX2NhdChhLGIpCisjaWZkZWYgTU9EVUxFCiAjZGVmaW5lIF9fTU9EVUxFX0lORk8odGFnLCBuYW1lLCBpbmZvKQkJCQkJICBcCiBzdGF0aWMgY29uc3QgY2hhciBfX21vZHVsZV9jYXQobmFtZSxfX0xJTkVfXylbXQkJCQkgIFwKICAgX191c2VkIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5tb2RpbmZvIiksIHVudXNlZCwgYWxpZ25lZCgxKSkpCSAgXAogICA9IF9fc3RyaW5naWZ5KHRhZykgIj0iIGluZm8KICNlbHNlICAvKiAhTU9EVUxFICovCi0jZGVmaW5lIF9fTU9EVUxFX0lORk8odGFnLCBuYW1lLCBpbmZvKQorLyogVGhpcyBzdHJ1Y3QgaXMgaGVyZSBmb3Igc3ludGFjdGljIGNvaGVyZW5jeSwgaXQgaXMgbm90IHVzZWQgKi8KKyNkZWZpbmUgX19NT0RVTEVfSU5GTyh0YWcsIG5hbWUsIGluZm8pCQkJCQkgIFwKKyAgc3RydWN0IF9fbW9kdWxlX2NhdChuYW1lLF9fTElORV9fKSB7fQogI2VuZGlmCiAjZGVmaW5lIF9fTU9EVUxFX1BBUk1fVFlQRShuYW1lLCBfdHlwZSkJCQkJCSAgXAogICBfX01PRFVMRV9JTkZPKHBhcm10eXBlLCBuYW1lIyN0eXBlLCAjbmFtZSAiOiIgX3R5cGUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oIGIvaW5jbHVkZS9saW51eC9tcm91dGUuaAppbmRleCAwZmE3YTNhLi5iMjFkNTY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbXJvdXRlLmgKQEAgLTE1MCw2ICsxNTAsNyBAQAogZXh0ZXJuIGludCBpcF9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqLCBpbnQsIGNoYXIgX191c2VyICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IGlwX21yb3V0ZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICosIGludCwgY2hhciBfX3VzZXIgKiwgaW50IF9fdXNlciAqKTsKIGV4dGVybiBpbnQgaXBtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOworZXh0ZXJuIGludCBpcG1yX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwogZXh0ZXJuIGludCBpcF9tcl9pbml0KHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXJvdXRlNi5oIGIvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKaW5kZXggNjA5MWFiNy4uOWQyZGViMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKKysrIGIvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKQEAgLTEzNiw2ICsxMzYsNyBAQAogZXh0ZXJuIGludCBpcDZfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKiwgaW50LCBjaGFyIF9fdXNlciAqLCBpbnQgX191c2VyICopOwogZXh0ZXJuIGludCBpcDZfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CitleHRlcm4gaW50IGlwNm1yX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwogZXh0ZXJuIGludCBpcDZfbXJfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGlwNl9tcl9jbGVhbnVwKHZvaWQpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzYWNsLmggYi9pbmNsdWRlL2xpbnV4L25mc2FjbC5oCmluZGV4IGYzMjFiNTcuLmZhYmNiMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzYWNsLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNhY2wuaApAQCAtNTEsMTAgKzUxLDEwIEBACiAJcmV0dXJuIHc7CiB9CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQKK2V4dGVybiBpbnQKIG5mc2FjbF9lbmNvZGUoc3RydWN0IHhkcl9idWYgKmJ1ZiwgdW5zaWduZWQgaW50IGJhc2UsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgZW5jb2RlX2VudHJpZXMsIGludCB0eXBlZmxhZyk7Ci1leHRlcm4gdW5zaWduZWQgaW50CitleHRlcm4gaW50CiBuZnNhY2xfZGVjb2RlKHN0cnVjdCB4ZHJfYnVmICpidWYsIHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBpbnQgKmFjbGNudCwKIAkgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICoqcGFjbCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb3Byb2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvb3Byb2ZpbGUuaAppbmRleCAzMmZiODEyLi4xY2E2NDExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29wcm9maWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9vcHJvZmlsZS5oCkBAIC0xNiw2ICsxNiw4IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3ByaW50ay5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICAKIC8qIEVhY2ggZXNjYXBlZCBlbnRyeSBpcyBwcmVmaXhlZCBieSBFU0NBUEVfQ09ERQpAQCAtMTg2LDEwICsxODgsMTcgQEAKIGludCBvcHJvZmlsZV9hZGRfZGF0YTY0KHN0cnVjdCBvcF9lbnRyeSAqZW50cnksIHU2NCB2YWwpOwogaW50IG9wcm9maWxlX3dyaXRlX2NvbW1pdChzdHJ1Y3Qgb3BfZW50cnkgKmVudHJ5KTsKIAotI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUworI2lmZGVmIENPTkZJR19IV19QRVJGX0VWRU5UUwogaW50IF9faW5pdCBvcHJvZmlsZV9wZXJmX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcyk7CiB2b2lkIG9wcm9maWxlX3BlcmZfZXhpdCh2b2lkKTsKIGNoYXIgKm9wX25hbWVfZnJvbV9wZXJmX2lkKHZvaWQpOwotI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBvcHJvZmlsZV9wZXJmX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcykKK3sKKwlwcl9pbmZvKCJvcHJvZmlsZTogaGFyZHdhcmUgY291bnRlcnMgbm90IGF2YWlsYWJsZVxuIik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgb3Byb2ZpbGVfcGVyZl9leGl0KHZvaWQpIHsgfQorI2VuZGlmIC8qIENPTkZJR19IV19QRVJGX0VWRU5UUyAqLwogCiAjZW5kaWYgLyogT1BST0ZJTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbS5oIGIvaW5jbHVkZS9saW51eC9wbS5oCmluZGV4IGRkOWM3YWIuLjIxNDE1Y2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtLmgKQEAgLTQzMSw2ICs0MzEsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQJZW50cnk7CiAJc3RydWN0IGNvbXBsZXRpb24JY29tcGxldGlvbjsKIAlzdHJ1Y3Qgd2FrZXVwX3NvdXJjZQkqd2FrZXVwOworI2Vsc2UKKwl1bnNpZ25lZCBpbnQJCXNob3VsZF93YWtldXA6MTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCiAJc3RydWN0IHRpbWVyX2xpc3QJc3VzcGVuZF90aW1lcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG1fd2FrZXVwLmggYi9pbmNsdWRlL2xpbnV4L3BtX3dha2V1cC5oCmluZGV4IDljZmYwMGQuLjAzYTY3ZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG1fd2FrZXVwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbV93YWtldXAuaApAQCAtMTA5LDExICsxMDksNiBAQAogCXJldHVybiBkZXYtPnBvd2VyLmNhbl93YWtldXA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBkZXZpY2VfbWF5X3dha2V1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGZhbHNlOwotfQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB3YWtldXBfc291cmNlICp3YWtldXBfc291cmNlX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lKQogewogCXJldHVybiBOVUxMOwpAQCAtMTM0LDI0ICsxMjksMzIgQEAKIAogc3RhdGljIGlubGluZSBpbnQgZGV2aWNlX3dha2V1cF9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXJldHVybiAtRUlOVkFMOworCWRldi0+cG93ZXIuc2hvdWxkX3dha2V1cCA9IHRydWU7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRldmljZV93YWtldXBfZGlzYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJZGV2LT5wb3dlci5zaG91bGRfd2FrZXVwID0gZmFsc2U7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRldmljZV9zZXRfd2FrZXVwX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKQoreworCWRldi0+cG93ZXIuc2hvdWxkX3dha2V1cCA9IGVuYWJsZTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZGV2aWNlX2luaXRfd2FrZXVwKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCB2YWwpCiB7Ci0JZGV2LT5wb3dlci5jYW5fd2FrZXVwID0gdmFsOwotCXJldHVybiB2YWwgPyAtRUlOVkFMIDogMDsKKwlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKGRldiwgdmFsKTsKKwlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoZGV2LCB2YWwpOworCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyBpbmxpbmUgaW50IGRldmljZV9zZXRfd2FrZXVwX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKQorc3RhdGljIGlubGluZSBib29sIGRldmljZV9tYXlfd2FrZXVwKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gZGV2LT5wb3dlci5jYW5fd2FrZXVwICYmIGRldi0+cG93ZXIuc2hvdWxkX3dha2V1cDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fcG1fc3RheV9hd2FrZShzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSAqd3MpIHt9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oIGIvaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaAppbmRleCBkNjgyODNhLi41NDIxMWMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oCisrKyBiL2luY2x1ZGUvbGludXgvcG9zaXhfYWNsLmgKQEAgLTcxLDYgKzcxLDcgQEAKIAogLyogcG9zaXhfYWNsLmMgKi8KIAorZXh0ZXJuIHZvaWQgcG9zaXhfYWNsX2luaXQoc3RydWN0IHBvc2l4X2FjbCAqLCBpbnQpOwogZXh0ZXJuIHN0cnVjdCBwb3NpeF9hY2wgKnBvc2l4X2FjbF9hbGxvYyhpbnQsIGdmcF90KTsKIGV4dGVybiBzdHJ1Y3QgcG9zaXhfYWNsICpwb3NpeF9hY2xfY2xvbmUoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqLCBnZnBfdCk7CiBleHRlcm4gaW50IHBvc2l4X2FjbF92YWxpZChjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YS5oIGIvaW5jbHVkZS9saW51eC9xdW90YS5oCmluZGV4IDk0YzFmMDMuLjlhODU0MTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcXVvdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKQEAgLTMyMiw5ICszMjIsMTIgQEAKIAlxc2l6ZV90ICooKmdldF9yZXNlcnZlZF9zcGFjZSkgKHN0cnVjdCBpbm9kZSAqKTsKIH07CiAKK3N0cnVjdCBwYXRoOworCiAvKiBPcGVyYXRpb25zIGhhbmRsaW5nIHJlcXVlc3RzIGZyb20gdXNlcnNwYWNlICovCiBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHsKLQlpbnQgKCpxdW90YV9vbikoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgaW50LCBjaGFyICopOworCWludCAoKnF1b3RhX29uKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBpbnQsIHN0cnVjdCBwYXRoICopOworCWludCAoKnF1b3RhX29uX21ldGEpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIGludCk7CiAJaW50ICgqcXVvdGFfb2ZmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50KTsKIAlpbnQgKCpxdW90YV9zeW5jKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBpbnQpOwogCWludCAoKmdldF9pbmZvKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBzdHJ1Y3QgaWZfZHFpbmZvICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oIGIvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCmluZGV4IDIyM2IxNGMuLmViMzU0ZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKQEAgLTc2LDExICs3Niw5IEBACiAKIGludCBkcXVvdF9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogCi1pbnQgZHF1b3RfcXVvdGFfb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBmb3JtYXRfaWQsCi0JY2hhciAqcGF0aCk7CiBpbnQgZHF1b3RfZW5hYmxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBpbnQgZm9ybWF0X2lkLAogCXVuc2lnbmVkIGludCBmbGFncyk7Ci1pbnQgZHF1b3RfcXVvdGFfb25fcGF0aChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwKK2ludCBkcXVvdF9xdW90YV9vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwKICAJc3RydWN0IHBhdGggKnBhdGgpOwogaW50IGRxdW90X3F1b3RhX29uX21vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgKnFmX25hbWUsCiAgCWludCBmb3JtYXRfaWQsIGludCB0eXBlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaAppbmRleCBmY2I5ODg0Li5hNTkzMGNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Jlc19jb3VudGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oCkBAIC0xODIsNiArMTgyLDI2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiByZXNfY291bnRlcl9jaGVja19tYXJnaW4gLSBjaGVjayBpZiB0aGUgY291bnRlciBhbGxvd3MgY2hhcmdpbmcKKyAqIEBjbnQ6IHRoZSByZXNvdXJjZSBjb3VudGVyIHRvIGNoZWNrCisgKiBAYnl0ZXM6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gY2hlY2sgdGhlIHJlbWFpbmluZyBzcGFjZSBhZ2FpbnN0CisgKgorICogUmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgb24gd2hldGhlciB0aGUgY291bnRlciBjYW4gYmUgY2hhcmdlZAorICogQGJ5dGVzIG9yIHdoZXRoZXIgdGhpcyB3b3VsZCBleGNlZWQgdGhlIGxpbWl0LgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgcmVzX2NvdW50ZXJfY2hlY2tfbWFyZ2luKHN0cnVjdCByZXNfY291bnRlciAqY250LAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBieXRlcykKK3sKKwlib29sIHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNudC0+bG9jaywgZmxhZ3MpOworCXJldCA9IGNudC0+bGltaXQgLSBjbnQtPnVzYWdlID49IGJ5dGVzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNudC0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCByZXNfY291bnRlcl9jaGVja191bmRlcl9zb2Z0X2xpbWl0KHN0cnVjdCByZXNfY291bnRlciAqY250KQogewogCWJvb2wgcmV0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaW9fcmVncy5oIGIvaW5jbHVkZS9saW51eC9yaW9fcmVncy5oCmluZGV4IGQ2M2RjYmEuLjkwMjZiMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmlvX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jpb19yZWdzLmgKQEAgLTE0LDEwICsxNCwxMiBAQAogI2RlZmluZSBMSU5VWF9SSU9fUkVHU19ICiAKIC8qCi0gKiBJbiBSYXBpZElPLCBlYWNoIGRldmljZSBoYXMgYSAyTUIgY29uZmlndXJhdGlvbiBzcGFjZSB0aGF0IGlzCisgKiBJbiBSYXBpZElPLCBlYWNoIGRldmljZSBoYXMgYSAxNk1CIGNvbmZpZ3VyYXRpb24gc3BhY2UgdGhhdCBpcwogICogYWNjZXNzZWQgdmlhIG1haW50ZW5hbmNlIHRyYW5zYWN0aW9ucy4gIFBvcnRpb25zIG9mIGNvbmZpZ3VyYXRpb24KICAqIHNwYWNlIGFyZSBzdGFuZGFyZGl6ZWQgYW5kL29yIHJlc2VydmVkLgogICovCisjZGVmaW5lIFJJT19NQUlOVF9TUEFDRV9TWgkweDEwMDAwMDAgLyogMTZNQiBvZiBSYXBpZElPIG1haW5lbmFuY2Ugc3BhY2UgKi8KKwogI2RlZmluZSBSSU9fREVWX0lEX0NBUgkJMHgwMAkvKiBbSV0gRGV2aWNlIElkZW50aXR5IENBUiAqLwogI2RlZmluZSBSSU9fREVWX0lORk9fQ0FSCTB4MDQJLyogW0ldIERldmljZSBJbmZvcm1hdGlvbiBDQVIgKi8KICNkZWZpbmUgUklPX0FTTV9JRF9DQVIJCTB4MDgJLyogW0ldIEFzc2VtYmx5IElkZW50aXR5IENBUiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydGMuaCBiL2luY2x1ZGUvbGludXgvcnRjLmgKaW5kZXggM2M5OTViNC4uODljM2U1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ydGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3J0Yy5oCkBAIC0yMDMsNiArMjAzLDE4IEBACiAJc3RydWN0IGhydGltZXIgcGllX3RpbWVyOyAvKiBzdWIgc2Vjb25kIGV4cCwgc28gbmVlZHMgaHJ0aW1lciAqLwogCWludCBwaWVfZW5hYmxlZDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaXJxd29yazsKKworCisjaWZkZWYgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTAorCXN0cnVjdCB3b3JrX3N0cnVjdCB1aWVfdGFzazsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB1aWVfdGltZXI7CisJLyogVGhvc2UgZmllbGRzIGFyZSBwcm90ZWN0ZWQgYnkgcnRjLT5pcnFfbG9jayAqLworCXVuc2lnbmVkIGludCBvbGRzZWNzOworCXVuc2lnbmVkIGludCB1aWVfaXJxX2FjdGl2ZToxOworCXVuc2lnbmVkIGludCBzdG9wX3VpZV9wb2xsaW5nOjE7CisJdW5zaWduZWQgaW50IHVpZV90YXNrX2FjdGl2ZToxOworCXVuc2lnbmVkIGludCB1aWVfdGltZXJfYWN0aXZlOjE7CisjZW5kaWYKIH07CiAjZGVmaW5lIHRvX3J0Y19kZXZpY2UoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBydGNfZGV2aWNlLCBkZXYpCiAKQEAgLTIzOCw2ICsyNTAsNyBAQAogZXh0ZXJuIGludCBydGNfZGV2X3VwZGF0ZV9pcnFfZW5hYmxlX2VtdWwoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YywKIAkJCQkJCXVuc2lnbmVkIGludCBlbmFibGVkKTsKIAordm9pZCBydGNfaGFuZGxlX2xlZ2FjeV9pcnEoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YywgaW50IG51bSwgaW50IG1vZGUpOwogdm9pZCBydGNfYWllX3VwZGF0ZV9pcnEodm9pZCAqcHJpdmF0ZSk7CiB2b2lkIHJ0Y191aWVfdXBkYXRlX2lycSh2b2lkICpwcml2YXRlKTsKIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHJ0Y19waWVfdXBkYXRlX2lycShzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpOwpAQCAtMjQ2LDggKzI1OSw2IEBACiBpbnQgcnRjX3VucmVnaXN0ZXIocnRjX3Rhc2tfdCAqdGFzayk7CiBpbnQgcnRjX2NvbnRyb2wocnRjX3Rhc2tfdCAqdCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCi12b2lkIHJ0Y190aW1lcl9lbnF1ZXVlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIgKnRpbWVyKTsKLXZvaWQgcnRjX3RpbWVyX3JlbW92ZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWVyICp0aW1lcik7CiB2b2lkIHJ0Y190aW1lcl9pbml0KHN0cnVjdCBydGNfdGltZXIgKnRpbWVyLCB2b2lkICgqZikodm9pZCogcCksIHZvaWQqIGRhdGEpOwogaW50IHJ0Y190aW1lcl9zdGFydChzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWVyKiB0aW1lciwKIAkJCWt0aW1lX3QgZXhwaXJlcywga3RpbWVfdCBwZXJpb2QpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IGQ3NDdmOTQuLjc3N2Q4YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTE3NDQsNyArMTc0NCw3IEBACiAjZGVmaW5lIFBGX01DRV9FQVJMWSAgICAweDA4MDAwMDAwICAgICAgLyogRWFybHkga2lsbCBmb3IgbWNlIHByb2Nlc3MgcG9saWN5ICovCiAjZGVmaW5lIFBGX01FTVBPTElDWQkweDEwMDAwMDAwCS8qIE5vbi1kZWZhdWx0IE5VTUEgbWVtcG9saWN5ICovCiAjZGVmaW5lIFBGX01VVEVYX1RFU1RFUgkweDIwMDAwMDAwCS8qIFRocmVhZCBiZWxvbmdzIHRvIHRoZSBydCBtdXRleCB0ZXN0ZXIgKi8KLSNkZWZpbmUgUEZfRlJFRVpFUl9TS0lQCTB4NDAwMDAwMDAJLyogRnJlZXplciBzaG91bGQgbm90IGNvdW50IGl0IGFzIGZyZWV6ZWFibGUgKi8KKyNkZWZpbmUgUEZfRlJFRVpFUl9TS0lQCTB4NDAwMDAwMDAJLyogRnJlZXplciBzaG91bGQgbm90IGNvdW50IGl0IGFzIGZyZWV6YWJsZSAqLwogI2RlZmluZSBQRl9GUkVFWkVSX05PU0lHIDB4ODAwMDAwMDAJLyogRnJlZXplciB3b24ndCBzZW5kIHNpZ25hbHMgdG8gaXQgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCBjNjQyYmI4Li5iMmI3Zjk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC0xNjYyLDcgKzE2NjIsNyBAQAogCQkgICAgY29uc3Qga2VybmVsX2NhcF90ICplZmZlY3RpdmUsCiAJCSAgICBjb25zdCBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLAogCQkgICAgY29uc3Qga2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpOwotaW50IHNlY3VyaXR5X2NhcGFibGUoaW50IGNhcCk7CitpbnQgc2VjdXJpdHlfY2FwYWJsZShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgaW50IGNhcCk7CiBpbnQgc2VjdXJpdHlfcmVhbF9jYXBhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgY2FwKTsKIGludCBzZWN1cml0eV9yZWFsX2NhcGFibGVfbm9hdWRpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGNhcCk7CiBpbnQgc2VjdXJpdHlfc3lzY3RsKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgb3ApOwpAQCAtMTg1Niw5ICsxODU2LDkgQEAKIAlyZXR1cm4gY2FwX2NhcHNldChuZXcsIG9sZCwgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfY2FwYWJsZShpbnQgY2FwKQorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfY2FwYWJsZShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgaW50IGNhcCkKIHsKLQlyZXR1cm4gY2FwX2NhcGFibGUoY3VycmVudCwgY3VycmVudF9jcmVkKCksIGNhcCwgU0VDVVJJVFlfQ0FQX0FVRElUKTsKKwlyZXR1cm4gY2FwX2NhcGFibGUoY3VycmVudCwgY3JlZCwgY2FwLCBTRUNVUklUWV9DQVBfQVVESVQpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9yZWFsX2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjYXApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9iY194cHJ0LmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9iY194cHJ0LmgKaW5kZXggYzUwYjQ1OC4uMDgyODg0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvYmNfeHBydC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2JjX3hwcnQuaApAQCAtNDcsMTQgKzQ3LDYgQEAKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqYmNfeHBydF9zaWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKLXsKLQlpZiAoc3ZjX2lzX2JhY2tjaGFubmVsKHJxc3RwKSkKLQkJcmV0dXJuIChzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKikKLQkJCXJxc3RwLT5ycV9zZXJ2ZXItPnN2X2JjX3hwcnQtPnhwdF9iY19zaWQ7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KICNlbHNlIC8qIENPTkZJR19ORlNfVjRfMSAqLwogc3RhdGljIGlubGluZSBpbnQgeHBydF9zZXR1cF9iYWNrY2hhbm5lbChzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsCiAJCQkJCSB1bnNpZ25lZCBpbnQgbWluX3JlcXMpCkBAIC02NywxMSArNTksNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqYmNfeHBydF9zaWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHhwcnRfZnJlZV9iY19yZXF1ZXN0KHN0cnVjdCBycGNfcnFzdCAqcmVxKQogewogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y194cHJ0LmgKaW5kZXggMDU5ODc3Yi4uN2FkOTc1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oCkBAIC03Nyw3ICs3Nyw2IEBACiAJc2l6ZV90CQkJeHB0X3JlbW90ZWxlbjsJLyogbGVuZ3RoIG9mIGFkZHJlc3MgKi8KIAlzdHJ1Y3QgcnBjX3dhaXRfcXVldWUJeHB0X2JjX3BlbmRpbmc7CS8qIGJhY2tjaGFubmVsIHdhaXQgcXVldWUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXhwdF91c2VyczsJLyogY2FsbGJhY2tzIG9uIGZyZWUgKi8KLQl2b2lkCQkJKnhwdF9iY19zaWQ7CS8qIGJhY2sgY2hhbm5lbCBzZXNzaW9uIElEICovCiAKIAlzdHJ1Y3QgbmV0CQkqeHB0X25ldDsKIAlzdHJ1Y3QgcnBjX3hwcnQJCSp4cHRfYmNfeHBydDsJLyogTkZTdjQuMSBiYWNrY2hhbm5lbCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCmluZGV4IDE4Y2QwNjguLjk4NjY0ZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKQEAgLTEyNSwzOSArMTI1LDM3IEBACiBleHRlcm4gc3RydWN0IHRyYWNlX2V2ZW50X2Z1bmN0aW9ucyBleGl0X3N5c2NhbGxfcHJpbnRfZnVuY3M7CiAKICNkZWZpbmUgU1lTQ0FMTF9UUkFDRV9FTlRFUl9FVkVOVChzbmFtZSkJCQkJXAotCXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YQkJCQkJXAotCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJCVwKKwlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJCVwKIAlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQlcCi0JICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCVwKLQkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKQkJCVwKIAkgIGV2ZW50X2VudGVyXyMjc25hbWUgPSB7CQkJCQlcCiAJCS5uYW1lICAgICAgICAgICAgICAgICAgID0gInN5c19lbnRlciIjc25hbWUsCQlcCiAJCS5jbGFzcwkJCT0gJmV2ZW50X2NsYXNzX3N5c2NhbGxfZW50ZXIsCVwKIAkJLmV2ZW50LmZ1bmNzICAgICAgICAgICAgPSAmZW50ZXJfc3lzY2FsbF9wcmludF9mdW5jcywJXAogCQkuZGF0YQkJCT0gKHZvaWQgKikmX19zeXNjYWxsX21ldGFfIyNzbmFtZSxcCiAJfTsJCQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQlcCisJICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkJCQlcCisJICpfX2V2ZW50X2VudGVyXyMjc25hbWUgPSAmZXZlbnRfZW50ZXJfIyNzbmFtZTsJCQlcCiAJX19UUkFDRV9FVkVOVF9GTEFHUyhlbnRlcl8jI3NuYW1lLCBUUkFDRV9FVkVOVF9GTF9DQVBfQU5ZKQogCiAjZGVmaW5lIFNZU0NBTExfVFJBQ0VfRVhJVF9FVkVOVChzbmFtZSkJCQkJCVwKLQlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEJCQkJCVwKLQlfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpIF9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CQlcCisJc3RhdGljIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CQlcCiAJc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJXAotCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQlcCi0JICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkJCQlcCiAJICBldmVudF9leGl0XyMjc25hbWUgPSB7CQkJCQlcCiAJCS5uYW1lICAgICAgICAgICAgICAgICAgID0gInN5c19leGl0IiNzbmFtZSwJCVwKIAkJLmNsYXNzCQkJPSAmZXZlbnRfY2xhc3Nfc3lzY2FsbF9leGl0LAlcCiAJCS5ldmVudC5mdW5jcwkJPSAmZXhpdF9zeXNjYWxsX3ByaW50X2Z1bmNzLAlcCiAJCS5kYXRhCQkJPSAodm9pZCAqKSZfX3N5c2NhbGxfbWV0YV8jI3NuYW1lLFwKIAl9OwkJCQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCVwKKwkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKQkJCVwKKwkqX19ldmVudF9leGl0XyMjc25hbWUgPSAmZXZlbnRfZXhpdF8jI3NuYW1lOwkJCVwKIAlfX1RSQUNFX0VWRU5UX0ZMQUdTKGV4aXRfIyNzbmFtZSwgVFJBQ0VfRVZFTlRfRkxfQ0FQX0FOWSkKIAogI2RlZmluZSBTWVNDQUxMX01FVEFEQVRBKHNuYW1lLCBuYikJCQkJXAogCVNZU0NBTExfVFJBQ0VfRU5URVJfRVZFTlQoc25hbWUpOwkJCVwKIAlTWVNDQUxMX1RSQUNFX0VYSVRfRVZFTlQoc25hbWUpOwkJCVwKIAlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX191c2VkCQkJXAotCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCVwKLQkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fc3lzY2FsbHNfbWV0YWRhdGEiKSkpCVwKIAkgIF9fc3lzY2FsbF9tZXRhXyMjc25hbWUgPSB7CQkJCVwKIAkJLm5hbWUgCQk9ICJzeXMiI3NuYW1lLAkJCVwKIAkJLm5iX2FyZ3MgCT0gbmIsCQkJCVwKQEAgLTE2NiwxNCArMTY0LDE1IEBACiAJCS5lbnRlcl9ldmVudAk9ICZldmVudF9lbnRlcl8jI3NuYW1lLAkJXAogCQkuZXhpdF9ldmVudAk9ICZldmVudF9leGl0XyMjc25hbWUsCQlcCiAJCS5lbnRlcl9maWVsZHMJPSBMSVNUX0hFQURfSU5JVChfX3N5c2NhbGxfbWV0YV8jI3NuYW1lLmVudGVyX2ZpZWxkcyksIFwKLQl9OworCX07CQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX191c2VkCQkJXAorCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19zeXNjYWxsc19tZXRhZGF0YSIpKSkJXAorCSAqX19wX3N5c2NhbGxfbWV0YV8jI3NuYW1lID0gJl9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CiAKICNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUwKHNuYW1lKQkJCQkJXAogCVNZU0NBTExfVFJBQ0VfRU5URVJfRVZFTlQoXyMjc25hbWUpOwkJCVwKIAlTWVNDQUxMX1RSQUNFX0VYSVRfRVZFTlQoXyMjc25hbWUpOwkJCVwKIAlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX191c2VkCQkJXAotCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCVwKLQkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fc3lzY2FsbHNfbWV0YWRhdGEiKSkpCVwKIAkgIF9fc3lzY2FsbF9tZXRhX18jI3NuYW1lID0gewkJCQlcCiAJCS5uYW1lIAkJPSAic3lzXyIjc25hbWUsCQkJXAogCQkubmJfYXJncyAJPSAwLAkJCQlcCkBAIC0xODEsNiArMTgwLDkgQEAKIAkJLmV4aXRfZXZlbnQJPSAmZXZlbnRfZXhpdF9fIyNzbmFtZSwJCVwKIAkJLmVudGVyX2ZpZWxkcwk9IExJU1RfSEVBRF9JTklUKF9fc3lzY2FsbF9tZXRhX18jI3NuYW1lLmVudGVyX2ZpZWxkcyksIFwKIAl9OwkJCQkJCQlcCisJc3RhdGljIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fdXNlZAkJCVwKKwkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fc3lzY2FsbHNfbWV0YWRhdGEiKSkpCVwKKwkgKl9fcF9zeXNjYWxsX21ldGFfIyNzbmFtZSA9ICZfX3N5c2NhbGxfbWV0YV9fIyNzbmFtZTsJXAogCWFzbWxpbmthZ2UgbG9uZyBzeXNfIyNzbmFtZSh2b2lkKQogI2Vsc2UKICNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUwKG5hbWUpCSAgIGFzbWxpbmthZ2UgbG9uZyBzeXNfIyNuYW1lKHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c3JxLmggYi9pbmNsdWRlL2xpbnV4L3N5c3JxLmgKaW5kZXggMzg3ZmE3ZC4uN2ZhZjkzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNycS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzcnEuaApAQCAtMTcsNiArMTcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAorLyogRW5hYmxlL2Rpc2FibGUgU1lTUlEgc3VwcG9ydCBieSBkZWZhdWx0ICgwPT1ubywgMT09eWVzKS4gKi8KKyNkZWZpbmUgU1lTUlFfREVGQVVMVF9FTkFCTEUJMQorCiAvKiBQb3NzaWJsZSB2YWx1ZXMgb2YgYml0bWFzayBmb3IgZW5hYmxpbmcgc3lzcnEgZnVuY3Rpb25zICovCiAvKiAweDAwMDEgaXMgcmVzZXJ2ZWQgZm9yIGVuYWJsZSBldmVyeXRoaW5nICovCiAjZGVmaW5lIFNZU1JRX0VOQUJMRV9MT0cJMHgwMDAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaCBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCmluZGV4IGM2ODE0NjEuLjk3Yzg0YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCisrKyBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCkBAIC0zMywxMiArMzMsNyBAQAogCXZvaWQgKCpyZWdmdW5jKSh2b2lkKTsKIAl2b2lkICgqdW5yZWdmdW5jKSh2b2lkKTsKIAlzdHJ1Y3QgdHJhY2Vwb2ludF9mdW5jIF9fcmN1ICpmdW5jczsKLX0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKTsJCS8qCi0JCQkJCSAqIEFsaWduZWQgb24gMzIgYnl0ZXMgYmVjYXVzZSBpdCBpcwotCQkJCQkgKiBnbG9iYWxseSB2aXNpYmxlIGFuZCBnY2MgaGFwcGlseQotCQkJCQkgKiBhbGlnbiB0aGVzZSBvbiB0aGUgc3RydWN0dXJlIHNpemUuCi0JCQkJCSAqIEtlZXAgaW4gc3luYyB3aXRoIHZtbGludXgubGRzLmguCi0JCQkJCSAqLworfTsKIAogLyoKICAqIENvbm5lY3QgYSBwcm9iZSB0byBhIHRyYWNlcG9pbnQuCkBAIC02MSwxNSArNTYsMTUgQEAKIAogc3RydWN0IHRyYWNlcG9pbnRfaXRlciB7CiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwotCXN0cnVjdCB0cmFjZXBvaW50ICp0cmFjZXBvaW50OworCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKnRyYWNlcG9pbnQ7CiB9OwogCiBleHRlcm4gdm9pZCB0cmFjZXBvaW50X2l0ZXJfc3RhcnQoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcik7CiBleHRlcm4gdm9pZCB0cmFjZXBvaW50X2l0ZXJfbmV4dChzdHJ1Y3QgdHJhY2Vwb2ludF9pdGVyICppdGVyKTsKIGV4dGVybiB2b2lkIHRyYWNlcG9pbnRfaXRlcl9zdG9wKHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgKml0ZXIpOwogZXh0ZXJuIHZvaWQgdHJhY2Vwb2ludF9pdGVyX3Jlc2V0KHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgKml0ZXIpOwotZXh0ZXJuIGludCB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICoqdHJhY2Vwb2ludCwKLQlzdHJ1Y3QgdHJhY2Vwb2ludCAqYmVnaW4sIHN0cnVjdCB0cmFjZXBvaW50ICplbmQpOworZXh0ZXJuIGludCB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKip0cmFjZXBvaW50LAorCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKmJlZ2luLCBzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICplbmQpOwogCiAvKgogICogdHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyIG11c3QgYmUgY2FsbGVkIGJldHdlZW4gdGhlIGxhc3QgdHJhY2Vwb2ludApAQCAtODQsMTEgKzc5LDEzIEBACiAjZGVmaW5lIFBBUkFNUyhhcmdzLi4uKSBhcmdzCiAKICNpZmRlZiBDT05GSUdfVFJBQ0VQT0lOVFMKLWV4dGVybiB2b2lkIHRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwKLQlzdHJ1Y3QgdHJhY2Vwb2ludCAqZW5kKTsKK2V4dGVybgordm9pZCB0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICpiZWdpbiwKKwlzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICplbmQpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqYmVnaW4sCi0Jc3RydWN0IHRyYWNlcG9pbnQgKmVuZCkKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqYmVnaW4sCisJc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqZW5kKQogeyB9CiAjZW5kaWYgLyogQ09ORklHX1RSQUNFUE9JTlRTICovCiAKQEAgLTE3NCwxMiArMTcxLDIwIEBACiAJewkJCQkJCQkJXAogCX0KIAorLyoKKyAqIFdlIGhhdmUgbm8gZ3VhcmFudGVlIHRoYXQgZ2NjIGFuZCB0aGUgbGlua2VyIHdvbid0IHVwLWFsaWduIHRoZSB0cmFjZXBvaW50CisgKiBzdHJ1Y3R1cmVzLCBzbyB3ZSBjcmVhdGUgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGl0ZXJhdGlvbgorICogb24gdGhlIHRyYWNlcG9pbnRzLgorICovCiAjZGVmaW5lIERFRklORV9UUkFDRV9GTihuYW1lLCByZWcsIHVucmVnKQkJCQlcCiAJc3RhdGljIGNvbnN0IGNoYXIgX190cHN0cnRhYl8jI25hbWVbXQkJCQlcCiAJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50c19zdHJpbmdzIikpKSA9ICNuYW1lOwlcCiAJc3RydWN0IHRyYWNlcG9pbnQgX190cmFjZXBvaW50XyMjbmFtZQkJCQlcCi0JX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50cyIpLCBhbGlnbmVkKDMyKSkpID0JXAotCQl7IF9fdHBzdHJ0YWJfIyNuYW1lLCAwLCByZWcsIHVucmVnLCBOVUxMIH0KKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzIikpKSA9CQkJXAorCQl7IF9fdHBzdHJ0YWJfIyNuYW1lLCAwLCByZWcsIHVucmVnLCBOVUxMIH07CQlcCisJc3RhdGljIHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgX190cmFjZXBvaW50X3B0cl8jI25hbWUgX191c2VkCVwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzX3B0cnMiKSkpID0JCVwKKwkJJl9fdHJhY2Vwb2ludF8jI25hbWU7CiAKICNkZWZpbmUgREVGSU5FX1RSQUNFKG5hbWUpCQkJCQkJXAogCURFRklORV9UUkFDRV9GTihuYW1lLCBOVUxMLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oIGIvaW5jbHVkZS9saW51eC91c2IvY2RjLmgKaW5kZXggNWU4NmRjNy4uODFhOTI3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvY2RjLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvY2RjLmgKQEAgLTg5LDcgKzg5LDcgQEAKIAogI2RlZmluZSBVU0JfQ0RDX0NPTU1fRkVBVFVSRQkweDAxCiAjZGVmaW5lIFVTQl9DRENfQ0FQX0xJTkUJMHgwMgotI2RlZmluZSBVU0JfQ0RDX0NBUF9CUksJMHgwNAorI2RlZmluZSBVU0JfQ0RDX0NBUF9CUksJCTB4MDQKICNkZWZpbmUgVVNCX0NEQ19DQVBfTk9USUZZCTB4MDgKIAogLyogIlVuaW9uIEZ1bmN0aW9uYWwgRGVzY3JpcHRvciIgZnJvbSBDREMgc3BlYyA1LjIuMy44ICovCkBAIC0yNzEsNiArMjcxLDExIEBACiAJX19sZTE2CXdMZW5ndGg7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IHVzYl9jZGNfc3BlZWRfY2hhbmdlIHsKKwlfX2xlMzIJRExCaXRSUmF0ZTsJLyogY29udGFpbnMgdGhlIGRvd25saW5rIGJpdCByYXRlIChJTiBwaXBlKSAqLworCV9fbGUzMglVTEJpdFJhdGU7CS8qIGNvbnRhaW5zIHRoZSB1cGxpbmsgYml0IHJhdGUgKE9VVCBwaXBlKSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCkBAIC0yOTIsNyArMjk3LDcgQEAKIAlfX2xlMTYJd05kcE91dERpdmlzb3I7CiAJX19sZTE2CXdOZHBPdXRQYXlsb2FkUmVtYWluZGVyOwogCV9fbGUxNgl3TmRwT3V0QWxpZ25tZW50OwotCV9fbGUxNgl3UGFkZGluZzI7CisJX19sZTE2CXdOdGJPdXRNYXhEYXRhZ3JhbXM7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyoKQEAgLTMwNyw3ICszMTIsNyBAQAogCV9fbGUxNgl3SGVhZGVyTGVuZ3RoOwogCV9fbGUxNgl3U2VxdWVuY2U7CiAJX19sZTE2CXdCbG9ja0xlbmd0aDsKLQlfX2xlMTYJd0ZwSW5kZXg7CisJX19sZTE2CXdOZHBJbmRleDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgdXNiX2NkY19uY21fbnRoMzIgewpAQCAtMzE1LDcgKzMyMCw3IEBACiAJX19sZTE2CXdIZWFkZXJMZW5ndGg7CiAJX19sZTE2CXdTZXF1ZW5jZTsKIAlfX2xlMzIJZHdCbG9ja0xlbmd0aDsKLQlfX2xlMzIJZHdGcEluZGV4OworCV9fbGUzMglkd05kcEluZGV4OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qCkBAIC0zMzcsNyArMzQyLDcgQEAKIHN0cnVjdCB1c2JfY2RjX25jbV9uZHAxNiB7CiAJX19sZTMyCWR3U2lnbmF0dXJlOwogCV9fbGUxNgl3TGVuZ3RoOwotCV9fbGUxNgl3TmV4dEZwSW5kZXg7CisJX19sZTE2CXdOZXh0TmRwSW5kZXg7CiAJc3RydWN0CXVzYl9jZGNfbmNtX2RwZTE2IGRwZTE2WzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTM3NSw2ICszODAsNyBAQAogI2RlZmluZSBVU0JfQ0RDX05DTV9OQ0FQX0VOQ0FQX0NPTU1BTkQJCQkoMSA8PCAyKQogI2RlZmluZSBVU0JfQ0RDX05DTV9OQ0FQX01BWF9EQVRBR1JBTV9TSVpFCQkoMSA8PCAzKQogI2RlZmluZSBVU0JfQ0RDX05DTV9OQ0FQX0NSQ19NT0RFCQkJKDEgPDwgNCkKKyNkZWZpbmUJVVNCX0NEQ19OQ01fTkNBUF9OVEJfSU5QVVRfU0laRQkJCSgxIDw8IDUpCiAKIC8qIENEQyBOQ00gc3ViY2xhc3MgVGFibGUgNi0zOiBOVEIgUGFyYW1ldGVyIFN0cnVjdHVyZSAqLwogI2RlZmluZSBVU0JfQ0RDX05DTV9OVEIxNl9TVVBQT1JURUQJCQkoMSA8PCAwKQpAQCAtMzkyLDYgKzM5OCwxMyBAQAogI2RlZmluZSBVU0JfQ0RDX05DTV9OVEJfTUlOX0lOX1NJWkUJCQkyMDQ4CiAjZGVmaW5lIFVTQl9DRENfTkNNX05UQl9NSU5fT1VUX1NJWkUJCQkyMDQ4CiAKKy8qIE5UQiBJbnB1dCBTaXplIFN0cnVjdHVyZSAqLworc3RydWN0IHVzYl9jZGNfbmNtX25kcF9pbnB1dF9zaXplIHsKKwlfX2xlMzIJZHdOdGJJbk1heFNpemU7CisJX19sZTE2CXdOdGJJbk1heERhdGFncmFtczsKKwlfX2xlMTYJd1Jlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qIENEQyBOQ00gc3ViY2xhc3MgNi4yLjExIFNldENyY01vZGUgKi8KICNkZWZpbmUgVVNCX0NEQ19OQ01fQ1JDX05PVF9BUFBFTkRFRAkJCTB4MDAKICNkZWZpbmUgVVNCX0NEQ19OQ01fQ1JDX0FQUEVOREVECQkJMHgwMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvaGNkLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaAppbmRleCBkZDZlZTQ5Li5hODU0ZmU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaApAQCAtMTEyLDYgKzExMiw3IEBACiAJLyogRmxhZ3MgdGhhdCBnZXQgc2V0IG9ubHkgZHVyaW5nIEhDRCByZWdpc3RyYXRpb24gb3IgcmVtb3ZhbC4gKi8KIAl1bnNpZ25lZAkJcmhfcmVnaXN0ZXJlZDoxOy8qIGlzIHJvb3QgaHViIHJlZ2lzdGVyZWQ/ICovCiAJdW5zaWduZWQJCXJoX3BvbGxhYmxlOjE7CS8qIG1heSB3ZSBwb2xsIHRoZSByb290IGh1Yj8gKi8KKwl1bnNpZ25lZAkJbXNpeF9lbmFibGVkOjE7CS8qIGRyaXZlciBoYXMgTVNJLVggZW5hYmxlZD8gKi8KIAogCS8qIFRoZSBuZXh0IGZsYWcgaXMgYSBzdG9wZ2FwLCB0byBiZSByZW1vdmVkIHdoZW4gYWxsIHRoZSBIQ0RzCiAJICogc3VwcG9ydCB0aGUgbmV3IHJvb3QtaHViIHBvbGxpbmcgbWVjaGFuaXNtLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvbXNtX2hzdXNiX2h3LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2JfaHcuaAppbmRleCBiOTJlMTczLi43ZDFiYWJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2JfaHcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2JfaHcuaApAQCAtMTYsMTIgKzE2LDggQEAKICNpZm5kZWYgX19MSU5VWF9VU0JfR0FER0VUX01TTTcyS19VRENfSF9fCiAjZGVmaW5lIF9fTElOVVhfVVNCX0dBREdFVF9NU003MktfVURDX0hfXwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVNNN1gwMEEKLSNkZWZpbmUgVVNCX1NCVVNDRkcgICAgICAgICAgKE1TTV9VU0JfQkFTRSArIDB4MDA5MCkKLSNlbHNlCiAjZGVmaW5lIFVTQl9BSEJCVVJTVCAgICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAwOTApCiAjZGVmaW5lIFVTQl9BSEJNT0RFICAgICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAwOTgpCi0jZW5kaWYKICNkZWZpbmUgVVNCX0NBUExFTkdUSCAgICAgICAgKE1TTV9VU0JfQkFTRSArIDB4MDEwMCkgLyogOCBiaXQgKi8KIAogI2RlZmluZSBVU0JfVVNCQ01EICAgICAgICAgICAoTVNNX1VTQl9CQVNFICsgMHgwMTQwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAppbmRleCAxNmQ2ODJmLi5jOTA0OTEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaApAQCAtMzQ3LDYgKzM0Nyw5IEBACiBleHRlcm4gaW50IHVzYl9zZXJpYWxfaGFuZGxlX3N5c3JxX2NoYXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCQkJdW5zaWduZWQgaW50IGNoKTsKIGV4dGVybiBpbnQgdXNiX3NlcmlhbF9oYW5kbGVfYnJlYWsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2hhbmRsZV9kY2RfY2hhbmdlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnVzYl9wb3J0LAorCQkJCQkgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkJIHVuc2lnbmVkIGludCBzdGF0dXMpOwogCiAKIGV4dGVybiBpbnQgdXNiX3NlcmlhbF9idXNfcmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyICpkZXZpY2UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaAppbmRleCAwMDkzZGQ3Li44MDA2MTdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaApAQCAtMTA5LDcgKzEwOSwxMCBAQAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBmYml0KQogewogCS8qIERpZCB5b3UgZm9yZ2V0IHRvIGZpeCBhc3N1bXB0aW9ucyBvbiBtYXggZmVhdHVyZXM/ICovCi0JTUFZQkVfQlVJTERfQlVHX09OKGZiaXQgPj0gMzIpOworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChmYml0KSkKKwkJQlVJTERfQlVHX09OKGZiaXQgPj0gMzIpOworCWVsc2UKKwkJQlVHX09OKGZiaXQgPj0gMzIpOwogCiAJaWYgKGZiaXQgPCBWSVJUSU9fVFJBTlNQT1JUX0ZfU1RBUlQpCiAJCXZpcnRpb19jaGVja19kcml2ZXJfb2ZmZXJlZF9mZWF0dXJlKHZkZXYsIGZiaXQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCmluZGV4IGE4NTA2NGQuLmU0ZDMzMzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKQEAgLTcsNyArNyw4IEBACiAgKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KICAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuCiAgKgotICogQ29weXJpZ2h0IChDKSBSZWQgSGF0LCBJbmMuLCAyMDA5LCAyMDEwCisgKiBDb3B5cmlnaHQgKEMpIFJlZCBIYXQsIEluYy4sIDIwMDksIDIwMTAsIDIwMTEKKyAqIENvcHlyaWdodCAoQykgQW1pdCBTaGFoIDxhbWl0LnNoYWhAcmVkaGF0LmNvbT4sIDIwMDksIDIwMTAsIDIwMTEKICAqLwogCiAvKiBGZWF0dXJlIGJpdHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmluZGV4IDFhYzExNTguLmY3OTk4YTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtMjUwLDcgKzI1MCw3IEBACiBlbnVtIHsKIAlXUV9OT05fUkVFTlRSQU5UCT0gMSA8PCAwLCAvKiBndWFyYW50ZWUgbm9uLXJlZW50cmFuY2UgKi8KIAlXUV9VTkJPVU5ECQk9IDEgPDwgMSwgLyogbm90IGJvdW5kIHRvIGFueSBjcHUgKi8KLQlXUV9GUkVFWkVBQkxFCQk9IDEgPDwgMiwgLyogZnJlZXplIGR1cmluZyBzdXNwZW5kICovCisJV1FfRlJFRVpBQkxFCQk9IDEgPDwgMiwgLyogZnJlZXplIGR1cmluZyBzdXNwZW5kICovCiAJV1FfTUVNX1JFQ0xBSU0JCT0gMSA8PCAzLCAvKiBtYXkgYmUgdXNlZCBmb3IgbWVtb3J5IHJlY2xhaW0gKi8KIAlXUV9ISUdIUFJJCQk9IDEgPDwgNCwgLyogaGlnaCBwcmlvcml0eSAqLwogCVdRX0NQVV9JTlRFTlNJVkUJPSAxIDw8IDUsIC8qIGNwdSBpbnN0ZW5zaXZlIHdvcmtxdWV1ZSAqLwpAQCAtMzE4LDcgKzMxOCw3IEBACiAvKioKICAqIGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlIC0gYWxsb2NhdGUgYW4gb3JkZXJlZCB3b3JrcXVldWUKICAqIEBuYW1lOiBuYW1lIG9mIHRoZSB3b3JrcXVldWUKLSAqIEBmbGFnczogV1FfKiBmbGFncyAob25seSBXUV9GUkVFWkVBQkxFIGFuZCBXUV9NRU1fUkVDTEFJTSBhcmUgbWVhbmluZ2Z1bCkKKyAqIEBmbGFnczogV1FfKiBmbGFncyAob25seSBXUV9GUkVFWkFCTEUgYW5kIFdRX01FTV9SRUNMQUlNIGFyZSBtZWFuaW5nZnVsKQogICoKICAqIEFsbG9jYXRlIGFuIG9yZGVyZWQgd29ya3F1ZXVlLiAgQW4gb3JkZXJlZCB3b3JrcXVldWUgZXhlY3V0ZXMgYXQKICAqIG1vc3Qgb25lIHdvcmsgaXRlbSBhdCBhbnkgZ2l2ZW4gdGltZSBpbiB0aGUgcXVldWVkIG9yZGVyLiAgVGhleSBhcmUKQEAgLTMzNSw4ICszMzUsOCBAQAogCiAjZGVmaW5lIGNyZWF0ZV93b3JrcXVldWUobmFtZSkJCQkJCVwKIAlhbGxvY193b3JrcXVldWUoKG5hbWUpLCBXUV9NRU1fUkVDTEFJTSwgMSkKLSNkZWZpbmUgY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKG5hbWUpCQkJXAotCWFsbG9jX3dvcmtxdWV1ZSgobmFtZSksIFdRX0ZSRUVaRUFCTEUgfCBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU0sIDEpCisjZGVmaW5lIGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKG5hbWUpCQkJXAorCWFsbG9jX3dvcmtxdWV1ZSgobmFtZSksIFdRX0ZSRUVaQUJMRSB8IFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSwgMSkKICNkZWZpbmUgY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUobmFtZSkJCQlcCiAJYWxsb2Nfd29ya3F1ZXVlKChuYW1lKSwgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLCAxKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL210OXYwMTEuaCBiL2luY2x1ZGUvbWVkaWEvbXQ5djAxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMjlmYzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL210OXYwMTEuaApAQCAtMCwwICsxLDE3IEBACisvKiBtdDl2MDExIHNlbnNvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19NVDlWMDExX0hfXworI2RlZmluZSBfX01UOVYwMTFfSF9fCisKK3N0cnVjdCBtdDl2MDExX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIHh0YWw7CS8qIEh6ICovCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvcmMtY29yZS5oIGIvaW5jbHVkZS9tZWRpYS9yYy1jb3JlLmgKaW5kZXggYTIzYzFmYy4uMjk2MzI2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9yYy1jb3JlLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9yYy1jb3JlLmgKQEAgLTE4Myw2ICsxODMsOSBAQAogfQogCiAjZGVmaW5lIElSX01BWF9EVVJBVElPTiAgICAgICAgIDB4RkZGRkZGRkYgICAgICAvKiBhIGJpdCBtb3JlIHRoYW4gNCBzZWNvbmRzICovCisjZGVmaW5lIFVTX1RPX05TKHVzZWMpCQkoKHVzZWMpICogMTAwMCkKKyNkZWZpbmUgTVNfVE9fVVMobXNlYykJCSgobXNlYykgKiAxMDAwKQorI2RlZmluZSBNU19UT19OUyhtc2VjKQkJKChtc2VjKSAqIDEwMDAgKiAxMDAwKQogCiB2b2lkIGlyX3Jhd19ldmVudF9oYW5kbGUoc3RydWN0IHJjX2RldiAqZGV2KTsKIGludCBpcl9yYXdfZXZlbnRfc3RvcmUoc3RydWN0IHJjX2RldiAqZGV2LCBzdHJ1Y3QgaXJfcmF3X2V2ZW50ICpldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NhYTcxNDYuaCBiL2luY2x1ZGUvbWVkaWEvc2FhNzE0Ni5oCmluZGV4IGFjN2NlMDAuLjc5ODI3MTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Ni5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc2FhNzE0Ni5oCkBAIC0xMTUsNyArMTE1LDcgQEAKIAogCS8qIGRpZmZlcmVudCBkZXZpY2UgbG9ja3MgKi8KIAlzcGlubG9ja190CQkJc2xvY2s7Ci0Jc3RydWN0IG11dGV4CQkJbG9jazsKKwlzdHJ1Y3QgbXV0ZXgJCQl2NGwyX2xvY2s7CiAKIAl1bnNpZ25lZCBjaGFyCQkJX19pb21lbSAqbWVtOwkJLyogcG9pbnRlciB0byBtYXBwZWQgSU8gbWVtb3J5ICovCiAJdTMyCQkJCXJldmlzaW9uOwkvKiBjaGlwIHJldmlzaW9uOyBuZWVkZWQgZm9yIGJ1Zy13b3JrYXJvdW5kcyovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmggYi9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKaW5kZXggMmQ2NWIzNS4uYTY1OTMxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaApAQCAtMTM4LDIxICsxMzgsMTAgQEAKIAogLyogTG9hZCBhbiBpMmMgbW9kdWxlIGFuZCByZXR1cm4gYW4gaW5pdGlhbGl6ZWQgdjRsMl9zdWJkZXYgc3RydWN0LgogICAgVGhlIGNsaWVudF90eXBlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSBjaGlwIHRoYXQncyBvbiB0aGUgYWRhcHRlci4gKi8KLXN0cnVjdCB2NGwyX3N1YmRldiAqdjRsMl9pMmNfbmV3X3N1YmRldl9jZmcoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiwKK3N0cnVjdCB2NGwyX3N1YmRldiAqdjRsMl9pMmNfbmV3X3N1YmRldihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2LAogCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IGNoYXIgKmNsaWVudF90eXBlLAotCQlpbnQgaXJxLCB2b2lkICpwbGF0Zm9ybV9kYXRhLAogCQl1OCBhZGRyLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqcHJvYmVfYWRkcnMpOwogCi0vKiBMb2FkIGFuIGkyYyBtb2R1bGUgYW5kIHJldHVybiBhbiBpbml0aWFsaXplZCB2NGwyX3N1YmRldiBzdHJ1Y3QuCi0gICBUaGUgY2xpZW50X3R5cGUgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlIGNoaXAgdGhhdCdzIG9uIHRoZSBhZGFwdGVyLiAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnY0bDJfaTJjX25ld19zdWJkZXYoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiwKLQkJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBjb25zdCBjaGFyICpjbGllbnRfdHlwZSwKLQkJdTggYWRkciwgY29uc3QgdW5zaWduZWQgc2hvcnQgKnByb2JlX2FkZHJzKQotewotCXJldHVybiB2NGwyX2kyY19uZXdfc3ViZGV2X2NmZyh2NGwyX2RldiwgYWRhcHRlciwgY2xpZW50X3R5cGUsIDAsIE5VTEwsCi0JCQkJICAgICAgIGFkZHIsIHByb2JlX2FkZHJzKTsKLX0KLQogc3RydWN0IGkyY19ib2FyZF9pbmZvOwogCiBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnY0bDJfaTJjX25ld19zdWJkZXZfYm9hcmQoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jdHJscy5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWN0cmxzLmgKaW5kZXggZDY5YWI0YS4uOTdkMDYzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWN0cmxzLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWN0cmxzLmgKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KIAogLyogZm9yd2FyZCByZWZlcmVuY2VzICovCiBzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXI7CkBAIC01Myw4ICs1NCwxMCBAQAogICAqIEBoYW5kbGVyOglUaGUgaGFuZGxlciB0aGF0IG93bnMgdGhlIGNvbnRyb2wuCiAgICogQGNsdXN0ZXI6CVBvaW50IHRvIHN0YXJ0IG9mIGNsdXN0ZXIgYXJyYXkuCiAgICogQG5jb250cm9sczoJTnVtYmVyIG9mIGNvbnRyb2xzIGluIGNsdXN0ZXIgYXJyYXkuCi0gICogQGhhc19uZXc6CUludGVybmFsIGZsYWc6IHNldCB3aGVuIHRoZXJlIGlzIGEgdmFsaWQgbmV3IHZhbHVlLgogICAqIEBkb25lOglJbnRlcm5hbCBmbGFnOiBzZXQgZm9yIGVhY2ggcHJvY2Vzc2VkIGNvbnRyb2wuCisgICogQGlzX25ldzoJU2V0IHdoZW4gdGhlIHVzZXIgc3BlY2lmaWVkIGEgbmV3IHZhbHVlIGZvciB0aGlzIGNvbnRyb2wuIEl0CisgICoJCWlzIGFsc28gc2V0IHdoZW4gY2FsbGVkIGZyb20gdjRsMl9jdHJsX2hhbmRsZXJfc2V0dXAuIERyaXZlcnMKKyAgKgkJc2hvdWxkIG5ldmVyIHNldCB0aGlzIGZsYWcuCiAgICogQGlzX3ByaXZhdGU6IElmIHNldCwgdGhlbiB0aGlzIGNvbnRyb2wgaXMgcHJpdmF0ZSB0byBpdHMgaGFuZGxlciBhbmQgaXQKICAgKgkJd2lsbCBub3QgYmUgYWRkZWQgdG8gYW55IG90aGVyIGhhbmRsZXJzLiBEcml2ZXJzIGNhbiBzZXQKICAgKgkJdGhpcyBmbGFnLgpAQCAtOTcsOSArMTAwLDkgQEAKIAlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhhbmRsZXI7CiAJc3RydWN0IHY0bDJfY3RybCAqKmNsdXN0ZXI7CiAJdW5zaWduZWQgbmNvbnRyb2xzOwotCXVuc2lnbmVkIGludCBoYXNfbmV3OjE7CiAJdW5zaWduZWQgaW50IGRvbmU6MTsKIAorCXVuc2lnbmVkIGludCBpc19uZXc6MTsKIAl1bnNpZ25lZCBpbnQgaXNfcHJpdmF0ZToxOwogCXVuc2lnbmVkIGludCBpc192b2xhdGlsZToxOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItc3ViZGV2LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItc3ViZGV2LmgKaW5kZXggYjAzMTZhNy4uZGFmMWU1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaApAQCAtMTA2LDEwICsxMDYsNyBAQAogCXU4IHN0cmVuZ3RoOwkvKiBQaW4gZHJpdmUgc3RyZW5ndGggKi8KIH07CiAKLS8qIHNfY29uZmlnOiBpZiBzZXQsIHRoZW4gaXQgaXMgYWx3YXlzIGNhbGxlZCBieSB0aGUgdjRsMl9pMmNfbmV3X3N1YmRldioKLQlmdW5jdGlvbnMgYWZ0ZXIgdGhlIHY0bDJfc3ViZGV2IHdhcyByZWdpc3RlcmVkLiBJdCBpcyB1c2VkIHRvIHBhc3MKLQlwbGF0Zm9ybSBkYXRhIHRvIHRoZSBzdWJkZXYgd2hpY2ggY2FuIGJlIHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotCisvKgogICAgc19pb19waW5fY29uZmlnOiBjb25maWd1cmUgb25lIG9yIG1vcmUgY2hpcCBJL08gcGlucyBmb3IgY2hpcHMgdGhhdAogCW11bHRpcGxleCBkaWZmZXJlbnQgaW50ZXJuYWwgc2lnbmFsIHBhZHMgb3V0IHRvIElPIHBpbnMuICBUaGlzIGZ1bmN0aW9uCiAJdGFrZXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mICduJyBwaW4gY29uZmlndXJhdGlvbiBlbnRyaWVzLCBvbmUgZm9yCkBAIC0xNDEsNyArMTM4LDYgQEAKIHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB7CiAJaW50ICgqZ19jaGlwX2lkZW50KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCk7CiAJaW50ICgqbG9nX3N0YXR1cykoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCk7Ci0JaW50ICgqc19jb25maWcpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBpcnEsIHZvaWQgKnBsYXRmb3JtX2RhdGEpOwogCWludCAoKnNfaW9fcGluX2NvbmZpZykoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc2l6ZV90IG4sCiAJCQkJICAgICAgc3RydWN0IHY0bDJfc3ViZGV2X2lvX3Bpbl9jb25maWcgKnBpbmNmZyk7CiAJaW50ICgqaW5pdCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCk7CkBAIC00MTUsNiArNDExLDIxIEBACiAJY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3NlbnNvcl9vcHMJKnNlbnNvcjsKIH07CiAKKy8qCisgKiBJbnRlcm5hbCBvcHMuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGRyaXZlcnMsIG9ubHkgdGhlIHY0bDIgZnJhbWV3b3JrIGNhbiBjYWxsCisgKiB0aGVzZSBvcHMuCisgKgorICogcmVnaXN0ZXJlZDogY2FsbGVkIHdoZW4gdGhpcyBzdWJkZXYgaXMgcmVnaXN0ZXJlZC4gV2hlbiBjYWxsZWQgdGhlIHY0bDJfZGV2CisgKglmaWVsZCBpcyBzZXQgdG8gdGhlIGNvcnJlY3QgdjRsMl9kZXZpY2UuCisgKgorICogdW5yZWdpc3RlcmVkOiBjYWxsZWQgd2hlbiB0aGlzIHN1YmRldiBpcyB1bnJlZ2lzdGVyZWQuIFdoZW4gY2FsbGVkIHRoZQorICoJdjRsMl9kZXYgZmllbGQgaXMgc3RpbGwgc2V0IHRvIHRoZSBjb3JyZWN0IHY0bDJfZGV2aWNlLgorICovCitzdHJ1Y3QgdjRsMl9zdWJkZXZfaW50ZXJuYWxfb3BzIHsKKwlpbnQgKCpyZWdpc3RlcmVkKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKTsKKwl2b2lkICgqdW5yZWdpc3RlcmVkKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKTsKK307CisKICNkZWZpbmUgVjRMMl9TVUJERVZfTkFNRV9TSVpFIDMyCiAKIC8qIFNldCB0aGlzIGZsYWcgaWYgdGhpcyBzdWJkZXYgaXMgYSBpMmMgZGV2aWNlLiAqLwpAQCAtNDMxLDYgKzQ0Miw4IEBACiAJdTMyIGZsYWdzOwogCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXY7CiAJY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyAqb3BzOworCS8qIE5ldmVyIGNhbGwgdGhlc2UgaW50ZXJuYWwgb3BzIGZyb20gd2l0aGluIGEgZHJpdmVyISAqLworCWNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9pbnRlcm5hbF9vcHMgKmludGVybmFsX29wczsKIAkvKiBUaGUgY29udHJvbCBoYW5kbGVyIG9mIHRoaXMgc3ViZGV2LiBNYXkgYmUgTlVMTC4gKi8KIAlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmN0cmxfaGFuZGxlcjsKIAkvKiBuYW1lIG11c3QgYmUgdW5pcXVlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IGEyOWZlYjAuLmQyY2Y4ODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC0xODQsNiArMTg0LDcgQEAKIAlfX3UzMgkJIGxpbmtfbW9kZTsKIAlfX3U4ICAgICAgICAgICAgIGF1dGhfdHlwZTsKIAlfX3U4ICAgICAgICAgICAgIHNlY19sZXZlbDsKKwlfX3U4CQkgcGVuZGluZ19zZWNfbGV2ZWw7CiAJX191OCAgICAgICAgICAgICBwb3dlcl9zYXZlOwogCV9fdTE2ICAgICAgICAgICAgZGlzY190aW1lb3V0OwogCXVuc2lnbmVkIGxvbmcJIHBlbmQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaCBiL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oCmluZGV4IDhhNjRiODEuLmI0YzdjMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oCkBAIC0xOTUsNyArMTk1LDggQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGdlbmxtc2dfY2FuY2VsKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkcikKIHsKLQlubG1zZ19jYW5jZWwoc2tiLCBoZHIgLSBHRU5MX0hEUkxFTiAtIE5MTVNHX0hEUkxFTik7CisJaWYgKGhkcikKKwkJbmxtc2dfY2FuY2VsKHNrYiwgaGRyIC0gR0VOTF9IRFJMRU4gLSBOTE1TR19IRFJMRU4pOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCA0YTNjZDJjLi45NmU1MGUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC04OSw2ICs4OSwxOCBAQAogI2RlZmluZSBJUFY2X0FERFJfU0NPUEVfR0xPQkFMCQkweDBlCiAKIC8qCisgKglBZGRyIGZsYWdzCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIElQVjZfQUREUl9NQ19GTEFHX1RSQU5TSUVOVChhKQlcCisJKChhKS0+czZfYWRkclsxXSAmIDB4MTApCisjZGVmaW5lIElQVjZfQUREUl9NQ19GTEFHX1BSRUZJWChhKQlcCisJKChhKS0+czZfYWRkclsxXSAmIDB4MjApCisjZGVmaW5lIElQVjZfQUREUl9NQ19GTEFHX1JFTkRFWlZPVVMoYSkJXAorCSgoYSktPnM2X2FkZHJbMV0gJiAweDQwKQorI2VuZGlmCisKKy8qCiAgKglmcmFnbWVudGF0aW9uIGhlYWRlcgogICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oCmluZGV4IDk2YmE1ZjcuLjM0OWNlZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaApAQCAtNzcsOSArNzcsNiBAQAogCWlmIChlID09IE5VTEwpCiAJCXJldHVybjsKIAotCWlmICghKGUtPmN0bWFzayAmICgxIDw8IGV2ZW50KSkpCi0JCXJldHVybjsKLQogCXNldF9iaXQoZXZlbnQsICZlLT5jYWNoZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmgKaW5kZXggY2Q4NWIzYi4uZTUwNTM1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmgKQEAgLTIwMSwxOCArMjAxLDggQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQKLW5mX3Rwcm94eV9wdXRfc29jayhzdHJ1Y3Qgc29jayAqc2spCi17Ci0JLyogVElNRV9XQUlUIGluZXQgc29ja2V0cyBoYXZlIHRvIGJlIGhhbmRsZWQgZGlmZmVyZW50bHkgKi8KLQlpZiAoKHNrLT5za19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkgJiYgKHNrLT5za19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKSkKLQkJaW5ldF90d3NrX3B1dChpbmV0X3R3c2soc2spKTsKLQllbHNlCi0JCXNvY2tfcHV0KHNrKTsKLX0KLQogLyogYXNzaWduIGEgc29ja2V0IHRvIHRoZSBza2IgLS0gY29uc3VtZXMgc2sgKi8KLWludAordm9pZAogbmZfdHByb3h5X2Fzc2lnbl9zb2NrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzayk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaCBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKaW5kZXggZTllZWU5OS4uMDRmODU1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAorKysgYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCkBAIC0xOTksNyArMTk5LDcgQEAKIAogc3RydWN0IHFkaXNjX3NrYl9jYiB7CiAJdW5zaWduZWQgaW50CQlwa3RfbGVuOwotCWNoYXIJCQlkYXRhW107CisJbG9uZwkJCWRhdGFbXTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IHFkaXNjX3FsZW4oc3RydWN0IFFkaXNjICpxKQpAQCAtNDQ1LDcgKzQ0NSw2IEBACiB7CiAJX19za2JfcXVldWVfdGFpbChsaXN0LCBza2IpOwogCXNjaC0+cXN0YXRzLmJhY2tsb2cgKz0gcWRpc2NfcGt0X2xlbihza2IpOwotCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCiAJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiB9CkBAIC00NjAsOCArNDU5LDEwIEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fc2tiX2RlcXVldWUobGlzdCk7CiAKLQlpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkKKwlpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkgewogCQlzY2gtPnFzdGF0cy5iYWNrbG9nIC09IHFkaXNjX3BrdF9sZW4oc2tiKTsKKwkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CisJfQogCiAJcmV0dXJuIHNrYjsKIH0KQEAgLTQ3NCwxMCArNDc1LDExIEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX3FkaXNjX3F1ZXVlX2Ryb3BfaGVhZChzdHJ1Y3QgUWRpc2MgKnNjaCwKIAkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19xZGlzY19kZXF1ZXVlX2hlYWQoc2NoLCBsaXN0KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZShsaXN0KTsKIAogCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKSB7CiAJCXVuc2lnbmVkIGludCBsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7CisJCXNjaC0+cXN0YXRzLmJhY2tsb2cgLT0gbGVuOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIGxlbjsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3VzZXIuaCBiL2luY2x1ZGUvbmV0L3NjdHAvdXNlci5oCmluZGV4IDJhMTI4YzguLmU3M2ViZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvdXNlci5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvdXNlci5oCkBAIC03OCw2ICs3OCw3IEBACiAjZGVmaW5lIFNDVFBfR0VUX1BFRVJfQUREUl9JTkZPCTE1CiAjZGVmaW5lIFNDVFBfREVMQVlFRF9BQ0tfVElNRQkxNgogI2RlZmluZSBTQ1RQX0RFTEFZRURfQUNLIFNDVFBfREVMQVlFRF9BQ0tfVElNRQorI2RlZmluZSBTQ1RQX0RFTEFZRURfU0FDSyBTQ1RQX0RFTEFZRURfQUNLX1RJTUUKICNkZWZpbmUgU0NUUF9DT05URVhUCTE3CiAjZGVmaW5lIFNDVFBfRlJBR01FTlRfSU5URVJMRUFWRQkxOAogI2RlZmluZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfUE9JTlQJMTkgLyogU2V0L0dldCBwYXJ0aWFsIGRlbGl2ZXJ5IHBvaW50ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggZDg4NGQyNi4uYmMxY2Y3ZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTc1Myw2ICs3NTMsOCBAQAogCQkJCQlpbnQgbGV2ZWwsCiAJCQkJCWludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLAogCQkJCQlpbnQgX191c2VyICpvcHRpb24pOworCWludAkJCSgqY29tcGF0X2lvY3RsKShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKICNlbmRpZgogCWludAkJCSgqc2VuZG1zZykoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9kcy5oIGIvaW5jbHVkZS9wY21jaWEvZHMuaAppbmRleCA4NDc5YjY2Li4zZmQ1MDY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9kcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL2RzLmgKQEAgLTI2MSw2ICsyNjEsNyBAQAogI2RlZmluZSBDT05GX0VOQUJMRV9FU1IgICAgICAgICAweDAwMDgKICNkZWZpbmUgQ09ORl9FTkFCTEVfSU9DQVJECTB4MDAxMCAvKiBhdXRvLWVuYWJsZWQgaWYgSU8gcmVzb3VyY2VzIG9yIElSUQogCQkJCQkqIChDT05GX0VOQUJMRV9JUlEpIGluIHVzZSAqLworI2RlZmluZSBDT05GX0VOQUJMRV9aVkNBUkQJMHgwMDIwCiAKIC8qIGZsYWdzIHVzZWQgYnkgcGNtY2lhX2xvb3BfY29uZmlnKCkgYXV0b2NvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgQ09ORl9BVVRPX0NIRUNLX1ZDQwkweDAxMDAgLyogY2hlY2sgZm9yIG1hdGNoaW5nIFZjYz8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpLmggYi9pbmNsdWRlL3Njc2kvc2NzaS5oCmluZGV4IDY0OGQyMzMuLmI3NmQ0MDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2kuaApAQCAtOSw2ICs5LDcgQEAKICNkZWZpbmUgX1NDU0lfU0NTSV9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKIHN0cnVjdCBzY3NpX2NtbmQ7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2Jhc2UuaCBiL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2Jhc2UuaAppbmRleCAwN2ZkZmI2Li4wODI4YjZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9iYXNlLmgKKysrIGIvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oCkBAIC04LDcgKzgsNiBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+Ci0jaW5jbHVkZSAidGFyZ2V0X2NvcmVfbWliLmgiCiAKICNkZWZpbmUgVEFSR0VUX0NPUkVfTU9EX1ZFUlNJT04JCSJ2NC4wLjAtcmM2IgogI2RlZmluZSBTSFVURE9XTl9TSUdTCShzaWdtYXNrKFNJR0tJTEwpfHNpZ21hc2soU0lHSU5UKXxzaWdtYXNrKFNJR0FCUlQpKQpAQCAtMTk1LDYgKzE5NCwyMSBAQAogCVNBTV9UQVNLX0FUVFJfRU1VTEFURUQKIH0gdDEwX3Rhc2tfYXR0cl9pbmRleF90OwogCisvKgorICogVXNlZCBmb3IgdGFyZ2V0IFNDU0kgc3RhdGlzdGljcworICovCit0eXBlZGVmIGVudW0geworCVNDU0lfSU5TVF9JTkRFWCwKKwlTQ1NJX0RFVklDRV9JTkRFWCwKKwlTQ1NJX0FVVEhfSU5UUl9JTkRFWCwKKwlTQ1NJX0lOREVYX1RZUEVfTUFYCit9IHNjc2lfaW5kZXhfdDsKKworc3RydWN0IHNjc2lfaW5kZXhfdGFibGUgeworCXNwaW5sb2NrX3QJbG9jazsKKwl1MzIJCXNjc2lfbWliX2luZGV4W1NDU0lfSU5ERVhfVFlQRV9NQVhdOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKIHN0cnVjdCBzZV9jbWQ7CiAKIHN0cnVjdCB0MTBfYWx1YSB7CkBAIC01NzgsOCArNTkyLDYgQEAKIAlzcGlubG9ja190CQlzdGF0c19sb2NrOwogCS8qIFVzZWQgZm9yIFBSIFNQRUNfSV9QVD0xIGFuZCBSRUdJU1RFUl9BTkRfTU9WRSAqLwogCWF0b21pY190CQlhY2xfcHJfcmVmX2NvdW50OwotCS8qIFVzZWQgZm9yIE1JQiBhY2Nlc3MgKi8KLQlhdG9taWNfdAkJbWliX3JlZl9jb3VudDsKIAlzdHJ1Y3Qgc2VfZGV2X2VudHJ5CSpkZXZpY2VfbGlzdDsKIAlzdHJ1Y3Qgc2Vfc2Vzc2lvbgkqbmFjbF9zZXNzOwogCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZzsKQEAgLTU5NSw4ICs2MDcsNiBAQAogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKIHN0cnVjdCBzZV9zZXNzaW9uIHsKLQkvKiBVc2VkIGZvciBNSUIgYWNjZXNzICovCi0JYXRvbWljX3QJCW1pYl9yZWZfY291bnQ7CiAJdTY0CQkJc2Vzc19iaW5faXNpZDsKIAlzdHJ1Y3Qgc2Vfbm9kZV9hY2wJKnNlX25vZGVfYWNsOwogCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZzsKQEAgLTgwNiw3ICs4MTYsNiBAQAogCS8qIFZpcnR1YWwgaVNDU0kgZGV2aWNlcyBhdHRhY2hlZC4gKi8KIAl1MzIJCQlkZXZfY291bnQ7CiAJdTMyCQkJaGJhX2luZGV4OwotCWF0b21pY190CQlkZXZfbWliX2FjY2Vzc19jb3VudDsKIAlhdG9taWNfdAkJbG9hZF9iYWxhbmNlX3F1ZXVlOwogCWF0b21pY190CQlsZWZ0X3F1ZXVlX2RlcHRoOwogCS8qIE1heGltdW0gcXVldWUgZGVwdGggdGhlIEhCQSBjYW4gaGFuZGxlLiAqLwpAQCAtODQ1LDYgKzg1NCwxMiBAQAogCiAjZGVmaW5lIFNFX0xVTihjKQkJKChzdHJ1Y3Qgc2VfbHVuICopKGMpLT5zZV9sdW4pCiAKK3N0cnVjdCBzY3NpX3BvcnRfc3RhdHMgeworICAgICAgIHU2NCAgICAgY21kX3BkdXM7CisgICAgICAgdTY0ICAgICB0eF9kYXRhX29jdGV0czsKKyAgICAgICB1NjQgICAgIHJ4X2RhdGFfb2N0ZXRzOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKIHN0cnVjdCBzZV9wb3J0IHsKIAkvKiBSRUxBVElWRSBUQVJHRVQgUE9SVCBJREVOVElGRVIgKi8KIAl1MTYJCXNlcF9ydHBpOwpAQCAtODY3LDYgKzg4Miw3IEBACiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAogc3RydWN0IHNlX3RwZ19ucCB7CisJc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqdHBnX25wX3BhcmVudDsKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwCXRwZ19ucF9ncm91cDsKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuaCBiL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5oCmluZGV4IDY2ZjQ0ZTUuLjI0Njk0MDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5oCisrKyBiL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5oCkBAIC0xMTEsNiArMTExLDggQEAKIAogZXh0ZXJuIGludCBpbml0X3NlX2dsb2JhbCh2b2lkKTsKIGV4dGVybiB2b2lkIHJlbGVhc2Vfc2VfZ2xvYmFsKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5pdF9zY3NpX2luZGV4X3RhYmxlKHZvaWQpOworZXh0ZXJuIHUzMiBzY3NpX2dldF9uZXdfaW5kZXgoc2NzaV9pbmRleF90KTsKIGV4dGVybiB2b2lkIHRyYW5zcG9ydF9pbml0X3F1ZXVlX29iaihzdHJ1Y3Qgc2VfcXVldWVfb2JqICopOwogZXh0ZXJuIGludCB0cmFuc3BvcnRfc3Vic3lzdGVtX2NoZWNrX2luaXQodm9pZCk7CiBleHRlcm4gaW50IHRyYW5zcG9ydF9zdWJzeXN0ZW1fcmVnaXN0ZXIoc3RydWN0IHNlX3N1YnN5c3RlbV9hcGkgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oIGIvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAppbmRleCBlMTY2MTBjLi4zZTY4MzY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKQEAgLTQ0NiwxNCArNDQ2LDE2IEBACiAgKgkucmVnCQkJPSBmdHJhY2VfZXZlbnRfcmVnLAogICogfTsKICAqCi0gKiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAotICogX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQotICogX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XzxjYWxsPiA9IHsKKyAqIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgZXZlbnRfPGNhbGw+ID0gewogICoJLm5hbWUJCQk9ICI8Y2FsbD4iLAogICoJLmNsYXNzCQkJPSBldmVudF9jbGFzc188dGVtcGxhdGU+LAogICoJLmV2ZW50CQkJPSAmZnRyYWNlX2V2ZW50X3R5cGVfPGNhbGw+LAogICoJLnByaW50X2ZtdAkJPSBwcmludF9mbXRfPGNhbGw+LAogICogfTsKKyAqIC8vIGl0cyBvbmx5IHNhZmUgdG8gdXNlIHBvaW50ZXJzIHdoZW4gZG9pbmcgbGlua2VyIHRyaWNrcyB0bworICogLy8gY3JlYXRlIGFuIGFycmF5LgorICogc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQKKyAqIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSAqX19ldmVudF88Y2FsbD4gPSAmZXZlbnRfPGNhbGw+OwogICoKICAqLwogCkBAIC01NzksMjggKzU4MSwyOCBAQAogI3VuZGVmIERFRklORV9FVkVOVAogI2RlZmluZSBERUZJTkVfRVZFTlQodGVtcGxhdGUsIGNhbGwsIHByb3RvLCBhcmdzKQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQlcCi1fX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCQkJXAotX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XyMjY2FsbCA9IHsJCVwKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkIGV2ZW50XyMjY2FsbCA9IHsJCQlcCiAJLm5hbWUJCQk9ICNjYWxsLAkJCQlcCiAJLmNsYXNzCQkJPSAmZXZlbnRfY2xhc3NfIyN0ZW1wbGF0ZSwJCVwKIAkuZXZlbnQuZnVuY3MJCT0gJmZ0cmFjZV9ldmVudF90eXBlX2Z1bmNzXyMjdGVtcGxhdGUsCVwKIAkucHJpbnRfZm10CQk9IHByaW50X2ZtdF8jI3RlbXBsYXRlLAkJCVwKLX07Cit9OwkJCQkJCQkJCVwKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQlcCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgKl9fZXZlbnRfIyNjYWxsID0gJmV2ZW50XyMjY2FsbAogCiAjdW5kZWYgREVGSU5FX0VWRU5UX1BSSU5UCiAjZGVmaW5lIERFRklORV9FVkVOVF9QUklOVCh0ZW1wbGF0ZSwgY2FsbCwgcHJvdG8sIGFyZ3MsIHByaW50KQkJXAogCQkJCQkJCQkJXAogc3RhdGljIGNvbnN0IGNoYXIgcHJpbnRfZm10XyMjY2FsbFtdID0gcHJpbnQ7CQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQlcCi1fX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCQkJXAotX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XyMjY2FsbCA9IHsJCVwKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkIGV2ZW50XyMjY2FsbCA9IHsJCQlcCiAJLm5hbWUJCQk9ICNjYWxsLAkJCQlcCiAJLmNsYXNzCQkJPSAmZXZlbnRfY2xhc3NfIyN0ZW1wbGF0ZSwJCVwKIAkuZXZlbnQuZnVuY3MJCT0gJmZ0cmFjZV9ldmVudF90eXBlX2Z1bmNzXyMjY2FsbCwJXAogCS5wcmludF9mbXQJCT0gcHJpbnRfZm10XyMjY2FsbCwJCQlcCi19Cit9OwkJCQkJCQkJCVwKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQlcCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgKl9fZXZlbnRfIyNjYWxsID0gJmV2ZW50XyMjY2FsbAogCiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKIApkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDRlMzM3OTAuLmJlNzg4YzAgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTc0NSw4ICs3NDUsOCBAQAogZW5kaWYgIyBDR1JPVVBTCiAKIG1lbnVjb25maWcgTkFNRVNQQUNFUwotCWJvb2wgIk5hbWVzcGFjZXMgc3VwcG9ydCIgaWYgRU1CRURERUQKLQlkZWZhdWx0ICFFTUJFRERFRAorCWJvb2wgIk5hbWVzcGFjZXMgc3VwcG9ydCIgaWYgRVhQRVJUCisJZGVmYXVsdCAhRVhQRVJUCiAJaGVscAogCSAgUHJvdmlkZXMgdGhlIHdheSB0byBtYWtlIHRhc2tzIHdvcmsgd2l0aCBkaWZmZXJlbnQgb2JqZWN0cyB1c2luZwogCSAgdGhlIHNhbWUgaWQuIEZvciBleGFtcGxlIHNhbWUgSVBDIGlkIG1heSByZWZlciB0byBkaWZmZXJlbnQgb2JqZWN0cwpAQCAtODk5LDIzICs4OTksMzEgQEAKIGNvbmZpZyBBTk9OX0lOT0RFUwogCWJvb2wKIAotbWVudWNvbmZpZyBFTUJFRERFRAotCWJvb2wgIkNvbmZpZ3VyZSBzdGFuZGFyZCBrZXJuZWwgZmVhdHVyZXMgKGZvciBzbWFsbCBzeXN0ZW1zKSIKK21lbnVjb25maWcgRVhQRVJUCisJYm9vbCAiQ29uZmlndXJlIHN0YW5kYXJkIGtlcm5lbCBmZWF0dXJlcyAoZXhwZXJ0IHVzZXJzKSIKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBhbGxvd3MgY2VydGFpbiBiYXNlIGtlcm5lbCBvcHRpb25zIGFuZCBzZXR0aW5ncwogICAgICAgICAgIHRvIGJlIGRpc2FibGVkIG9yIHR3ZWFrZWQuIFRoaXMgaXMgZm9yIHNwZWNpYWxpemVkCiAgICAgICAgICAgZW52aXJvbm1lbnRzIHdoaWNoIGNhbiB0b2xlcmF0ZSBhICJub24tc3RhbmRhcmQiIGtlcm5lbC4KICAgICAgICAgICBPbmx5IHVzZSB0aGlzIGlmIHlvdSByZWFsbHkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCiAKK2NvbmZpZyBFTUJFRERFRAorCWJvb2wgIkVtYmVkZGVkIHN5c3RlbSIKKwlzZWxlY3QgRVhQRVJUCisJaGVscAorCSAgVGhpcyBvcHRpb24gc2hvdWxkIGJlIGVuYWJsZWQgaWYgY29tcGlsaW5nIHRoZSBrZXJuZWwgZm9yCisJICBhbiBlbWJlZGRlZCBzeXN0ZW0gc28gY2VydGFpbiBleHBlcnQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlCisJICBmb3IgY29uZmlndXJhdGlvbi4KKwogY29uZmlnIFVJRDE2Ci0JYm9vbCAiRW5hYmxlIDE2LWJpdCBVSUQgc3lzdGVtIGNhbGxzIiBpZiBFTUJFRERFRAorCWJvb2wgIkVuYWJsZSAxNi1iaXQgVUlEIHN5c3RlbSBjYWxscyIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBBUk0gfHwgQkxBQ0tGSU4gfHwgQ1JJUyB8fCBGUlYgfHwgSDgzMDAgfHwgWDg2XzMyIHx8IE02OEsgfHwgKFMzOTAgJiYgITY0QklUKSB8fCBTVVBFUkggfHwgU1BBUkMzMiB8fCAoU1BBUkM2NCAmJiBDT01QQVQpIHx8IFVNTCB8fCAoWDg2XzY0ICYmIElBMzJfRU1VTEFUSU9OKQogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgbGVnYWN5IDE2LWJpdCBVSUQgc3lzY2FsbCB3cmFwcGVycy4KIAogY29uZmlnIFNZU0NUTF9TWVNDQUxMCi0JYm9vbCAiU3lzY3RsIHN5c2NhbGwgc3VwcG9ydCIgaWYgRU1CRURERUQKKwlib29sICJTeXNjdGwgc3lzY2FsbCBzdXBwb3J0IiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIFBST0NfU1lTQ1RMCiAJZGVmYXVsdCB5CiAJc2VsZWN0IFNZU0NUTApAQCAtOTMyLDcgKzk0MCw3IEBACiAJICBJZiB1bnN1cmUgc2F5IFkgaGVyZS4KIAogY29uZmlnIEtBTExTWU1TCi0JIGJvb2wgIkxvYWQgYWxsIHN5bWJvbHMgZm9yIGRlYnVnZ2luZy9rc3ltb29wcyIgaWYgRU1CRURERUQKKwkgYm9vbCAiTG9hZCBhbGwgc3ltYm9scyBmb3IgZGVidWdnaW5nL2tzeW1vb3BzIiBpZiBFWFBFUlQKIAkgZGVmYXVsdCB5CiAJIGhlbHAKIAkgICBTYXkgWSBoZXJlIHRvIGxldCB0aGUga2VybmVsIHByaW50IG91dCBzeW1ib2xpYyBjcmFzaCBpbmZvcm1hdGlvbiBhbmQKQEAgLTk2Myw3ICs5NzEsNyBAQAogCiAKIGNvbmZpZyBIT1RQTFVHCi0JYm9vbCAiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBkZXZpY2VzIiBpZiBFTUJFRERFRAorCWJvb2wgIlN1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgZGV2aWNlcyIgaWYgRVhQRVJUCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhpcyBvcHRpb24gaXMgcHJvdmlkZWQgZm9yIHRoZSBjYXNlIHdoZXJlIG5vIGhvdHBsdWcgb3IgdWV2ZW50CkBAIC05NzMsNyArOTgxLDcgQEAKIAogY29uZmlnIFBSSU5USwogCWRlZmF1bHQgeQotCWJvb2wgIkVuYWJsZSBzdXBwb3J0IGZvciBwcmludGsiIGlmIEVNQkVEREVECisJYm9vbCAiRW5hYmxlIHN1cHBvcnQgZm9yIHByaW50ayIgaWYgRVhQRVJUCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBub3JtYWwgcHJpbnRrIHN1cHBvcnQuIFJlbW92aW5nIGl0CiAJICBlbGltaW5hdGVzIG1vc3Qgb2YgdGhlIG1lc3NhZ2Ugc3RyaW5ncyBmcm9tIHRoZSBrZXJuZWwgaW1hZ2UKQEAgLTk4Miw3ICs5OTAsNyBAQAogCSAgc3Ryb25nbHkgZGlzY291cmFnZWQuCiAKIGNvbmZpZyBCVUcKLQlib29sICJCVUcoKSBzdXBwb3J0IiBpZiBFTUJFRERFRAorCWJvb2wgIkJVRygpIHN1cHBvcnQiIGlmIEVYUEVSVAogCWRlZmF1bHQgeQogCWhlbHAKICAgICAgICAgICBEaXNhYmxpbmcgdGhpcyBvcHRpb24gZWxpbWluYXRlcyBzdXBwb3J0IGZvciBCVUcgYW5kIFdBUk4sIHJlZHVjaW5nCkBAIC05OTMsMTIgKzEwMDEsMTIgQEAKIAogY29uZmlnIEVMRl9DT1JFCiAJZGVmYXVsdCB5Ci0JYm9vbCAiRW5hYmxlIEVMRiBjb3JlIGR1bXBzIiBpZiBFTUJFRERFRAorCWJvb2wgIkVuYWJsZSBFTEYgY29yZSBkdW1wcyIgaWYgRVhQRVJUCiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIGdlbmVyYXRpbmcgY29yZSBkdW1wcy4gRGlzYWJsaW5nIHNhdmVzIGFib3V0IDRrLgogCiBjb25maWcgUENTUEtSX1BMQVRGT1JNCi0JYm9vbCAiRW5hYmxlIFBDLVNwZWFrZXIgc3VwcG9ydCIgaWYgRU1CRURERUQKKwlib29sICJFbmFibGUgUEMtU3BlYWtlciBzdXBwb3J0IiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIEFMUEhBIHx8IFg4NiB8fCBNSVBTIHx8IFBQQ19QUkVQIHx8IFBQQ19DSFJQIHx8IFBQQ19QU0VSSUVTCiAJZGVmYXVsdCB5CiAJaGVscApAQCAtMTAwNywxNCArMTAxNSwxNCBAQAogCiBjb25maWcgQkFTRV9GVUxMCiAJZGVmYXVsdCB5Ci0JYm9vbCAiRW5hYmxlIGZ1bGwtc2l6ZWQgZGF0YSBzdHJ1Y3R1cmVzIGZvciBjb3JlIiBpZiBFTUJFRERFRAorCWJvb2wgIkVuYWJsZSBmdWxsLXNpemVkIGRhdGEgc3RydWN0dXJlcyBmb3IgY29yZSIgaWYgRVhQRVJUCiAJaGVscAogCSAgRGlzYWJsaW5nIHRoaXMgb3B0aW9uIHJlZHVjZXMgdGhlIHNpemUgb2YgbWlzY2VsbGFuZW91cyBjb3JlCiAJICBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIHNhdmVzIG1lbW9yeSBvbiBzbWFsbCBtYWNoaW5lcywKIAkgIGJ1dCBtYXkgcmVkdWNlIHBlcmZvcm1hbmNlLgogCiBjb25maWcgRlVURVgKLQlib29sICJFbmFibGUgZnV0ZXggc3VwcG9ydCIgaWYgRU1CRURERUQKKwlib29sICJFbmFibGUgZnV0ZXggc3VwcG9ydCIgaWYgRVhQRVJUCiAJZGVmYXVsdCB5CiAJc2VsZWN0IFJUX01VVEVYRVMKIAloZWxwCkBAIC0xMDIzLDcgKzEwMzEsNyBAQAogCSAgcnVuIGdsaWJjLWJhc2VkIGFwcGxpY2F0aW9ucyBjb3JyZWN0bHkuCiAKIGNvbmZpZyBFUE9MTAotCWJvb2wgIkVuYWJsZSBldmVudHBvbGwgc3VwcG9ydCIgaWYgRU1CRURERUQKKwlib29sICJFbmFibGUgZXZlbnRwb2xsIHN1cHBvcnQiIGlmIEVYUEVSVAogCWRlZmF1bHQgeQogCXNlbGVjdCBBTk9OX0lOT0RFUwogCWhlbHAKQEAgLTEwMzEsNyArMTAzOSw3IEBACiAJICBzdXBwb3J0IGZvciBlcG9sbCBmYW1pbHkgb2Ygc3lzdGVtIGNhbGxzLgogCiBjb25maWcgU0lHTkFMRkQKLQlib29sICJFbmFibGUgc2lnbmFsZmQoKSBzeXN0ZW0gY2FsbCIgaWYgRU1CRURERUQKKwlib29sICJFbmFibGUgc2lnbmFsZmQoKSBzeXN0ZW0gY2FsbCIgaWYgRVhQRVJUCiAJc2VsZWN0IEFOT05fSU5PREVTCiAJZGVmYXVsdCB5CiAJaGVscApAQCAtMTA0MSw3ICsxMDQ5LDcgQEAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBUSU1FUkZECi0JYm9vbCAiRW5hYmxlIHRpbWVyZmQoKSBzeXN0ZW0gY2FsbCIgaWYgRU1CRURERUQKKwlib29sICJFbmFibGUgdGltZXJmZCgpIHN5c3RlbSBjYWxsIiBpZiBFWFBFUlQKIAlzZWxlY3QgQU5PTl9JTk9ERVMKIAlkZWZhdWx0IHkKIAloZWxwCkBAIC0xMDUxLDcgKzEwNTksNyBAQAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIEVWRU5URkQKLQlib29sICJFbmFibGUgZXZlbnRmZCgpIHN5c3RlbSBjYWxsIiBpZiBFTUJFRERFRAorCWJvb2wgIkVuYWJsZSBldmVudGZkKCkgc3lzdGVtIGNhbGwiIGlmIEVYUEVSVAogCXNlbGVjdCBBTk9OX0lOT0RFUwogCWRlZmF1bHQgeQogCWhlbHAKQEAgLTEwNjEsNyArMTA2OSw3IEBACiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgU0hNRU0KLQlib29sICJVc2UgZnVsbCBzaG1lbSBmaWxlc3lzdGVtIiBpZiBFTUJFRERFRAorCWJvb2wgIlVzZSBmdWxsIHNobWVtIGZpbGVzeXN0ZW0iIGlmIEVYUEVSVAogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gTU1VCiAJaGVscApAQCAtMTA3Miw3ICsxMDgwLDcgQEAKIAkgIHdoaWNoIG1heSBiZSBhcHByb3ByaWF0ZSBvbiBzbWFsbCBzeXN0ZW1zIHdpdGhvdXQgc3dhcC4KIAogY29uZmlnIEFJTwotCWJvb2wgIkVuYWJsZSBBSU8gc3VwcG9ydCIgaWYgRU1CRURERUQKKwlib29sICJFbmFibGUgQUlPIHN1cHBvcnQiIGlmIEVYUEVSVAogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgUE9TSVggYXN5bmNocm9ub3VzIEkvTyB3aGljaCBtYXkgYnkgdXNlZApAQCAtMTE0OSwxNiArMTE1NywxNiBAQAogCiBjb25maWcgVk1fRVZFTlRfQ09VTlRFUlMKIAlkZWZhdWx0IHkKLQlib29sICJFbmFibGUgVk0gZXZlbnQgY291bnRlcnMgZm9yIC9wcm9jL3Ztc3RhdCIgaWYgRU1CRURERUQKKwlib29sICJFbmFibGUgVk0gZXZlbnQgY291bnRlcnMgZm9yIC9wcm9jL3Ztc3RhdCIgaWYgRVhQRVJUCiAJaGVscAogCSAgVk0gZXZlbnQgY291bnRlcnMgYXJlIG5lZWRlZCBmb3IgZXZlbnQgY291bnRzIHRvIGJlIHNob3duLgogCSAgVGhpcyBvcHRpb24gYWxsb3dzIHRoZSBkaXNhYmxpbmcgb2YgdGhlIFZNIGV2ZW50IGNvdW50ZXJzCi0JICBvbiBFTUJFRERFRCBzeXN0ZW1zLiAgL3Byb2Mvdm1zdGF0IHdpbGwgb25seSBzaG93IHBhZ2UgY291bnRzCisJICBvbiBFWFBFUlQgc3lzdGVtcy4gIC9wcm9jL3Ztc3RhdCB3aWxsIG9ubHkgc2hvdyBwYWdlIGNvdW50cwogCSAgaWYgVk0gZXZlbnQgY291bnRlcnMgYXJlIGRpc2FibGVkLgogCiBjb25maWcgUENJX1FVSVJLUwogCWRlZmF1bHQgeQotCWJvb2wgIkVuYWJsZSBQQ0kgcXVpcmsgd29ya2Fyb3VuZHMiIGlmIEVNQkVEREVECisJYm9vbCAiRW5hYmxlIFBDSSBxdWlyayB3b3JrYXJvdW5kcyIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBQQ0kKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgd29ya2Fyb3VuZHMgZm9yIHZhcmlvdXMgUENJIGNoaXBzZXQKQEAgLTExNjcsNyArMTE3NSw3IEBACiAKIGNvbmZpZyBTTFVCX0RFQlVHCiAJZGVmYXVsdCB5Ci0JYm9vbCAiRW5hYmxlIFNMVUIgZGVidWdnaW5nIHN1cHBvcnQiIGlmIEVNQkVEREVECisJYm9vbCAiRW5hYmxlIFNMVUIgZGVidWdnaW5nIHN1cHBvcnQiIGlmIEVYUEVSVAogCWRlcGVuZHMgb24gU0xVQiAmJiBTWVNGUwogCWhlbHAKIAkgIFNMVUIgaGFzIGV4dGVuc2l2ZSBkZWJ1ZyBzdXBwb3J0IGZlYXR1cmVzLiBEaXNhYmxpbmcgdGhlc2UgY2FuCkBAIC0xMjExLDcgKzEyMTksNyBAQAogCSAgIGEgc2xhYiBhbGxvY2F0b3IuCiAKIGNvbmZpZyBTTE9CCi0JZGVwZW5kcyBvbiBFTUJFRERFRAorCWRlcGVuZHMgb24gRVhQRVJUCiAJYm9vbCAiU0xPQiAoU2ltcGxlIEFsbG9jYXRvcikiCiAJaGVscAogCSAgIFNMT0IgcmVwbGFjZXMgdGhlIHN0b2NrIGFsbG9jYXRvciB3aXRoIGEgZHJhc3RpY2FsbHkgc2ltcGxlcgpAQCAtMTIyMiw3ICsxMjMwLDcgQEAKIAogY29uZmlnIE1NQVBfQUxMT1dfVU5JTklUSUFMSVpFRAogCWJvb2wgIkFsbG93IG1tYXBwZWQgYW5vbnltb3VzIG1lbW9yeSB0byBiZSB1bmluaXRpYWxpemVkIgotCWRlcGVuZHMgb24gRU1CRURERUQgJiYgIU1NVQorCWRlcGVuZHMgb24gRVhQRVJUICYmICFNTVUKIAlkZWZhdWx0IG4KIAloZWxwCiAJICBOb3JtYWxseSwgYW5kIGFjY29yZGluZyB0byB0aGUgTGludXggc3BlYywgYW5vbnltb3VzIG1lbW9yeSBvYnRhaW5lZApkaWZmIC0tZ2l0IGEvaW5pdC9jYWxpYnJhdGUuYyBiL2luaXQvY2FsaWJyYXRlLmMKaW5kZXggNmViNDhlNS4uMjRmZTAyMiAxMDA2NDQKLS0tIGEvaW5pdC9jYWxpYnJhdGUuYworKysgYi9pbml0L2NhbGlicmF0ZS5jCkBAIC02Niw3ICs2Niw3IEBACiAJCXByZV9zdGFydCA9IDA7CiAJCXJlYWRfY3VycmVudF90aW1lcigmc3RhcnQpOwogCQlzdGFydF9qaWZmaWVzID0gamlmZmllczsKLQkJd2hpbGUgKGppZmZpZXMgPD0gKHN0YXJ0X2ppZmZpZXMgKyAxKSkgeworCQl3aGlsZSAodGltZV9iZWZvcmVfZXEoamlmZmllcywgc3RhcnRfamlmZmllcyArIDEpKSB7CiAJCQlwcmVfc3RhcnQgPSBzdGFydDsKIAkJCXJlYWRfY3VycmVudF90aW1lcigmc3RhcnQpOwogCQl9CkBAIC03NCw4ICs3NCw4IEBACiAKIAkJcHJlX2VuZCA9IDA7CiAJCWVuZCA9IHBvc3Rfc3RhcnQ7Ci0JCXdoaWxlIChqaWZmaWVzIDw9Ci0JCSAgICAgICAoc3RhcnRfamlmZmllcyArIDEgKyBERUxBWV9DQUxJQlJBVElPTl9USUNLUykpIHsKKwkJd2hpbGUgKHRpbWVfYmVmb3JlX2VxKGppZmZpZXMsIHN0YXJ0X2ppZmZpZXMgKyAxICsKKwkJCQkJICAgICAgIERFTEFZX0NBTElCUkFUSU9OX1RJQ0tTKSkgewogCQkJcHJlX2VuZCA9IGVuZDsKIAkJCXJlYWRfY3VycmVudF90aW1lcigmZW5kKTsKIAkJfQpkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCAwMDc5OWMxLi4zM2MzN2MzIDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtOTYsNiArOTYsMTUgQEAKIGV4dGVybiB2b2lkIHRjX2luaXQodm9pZCk7CiAjZW5kaWYKIAorLyoKKyAqIERlYnVnIGhlbHBlcjogdmlhIHRoaXMgZmxhZyB3ZSBrbm93IHRoYXQgd2UgYXJlIGluICdlYXJseSBib290dXAgY29kZScKKyAqIHdoZXJlIG9ubHkgdGhlIGJvb3QgcHJvY2Vzc29yIGlzIHJ1bm5pbmcgd2l0aCBJUlEgZGlzYWJsZWQuICBUaGlzIG1lYW5zCisgKiB0d28gdGhpbmdzIC0gSVJRIG11c3Qgbm90IGJlIGVuYWJsZWQgYmVmb3JlIHRoZSBmbGFnIGlzIGNsZWFyZWQgYW5kIHNvbWUKKyAqIG9wZXJhdGlvbnMgd2hpY2ggYXJlIG5vdCBhbGxvd2VkIHdpdGggSVJRIGRpc2FibGVkIGFyZSBhbGxvd2VkIHdoaWxlIHRoZQorICogZmxhZyBpcyBzZXQuCisgKi8KK2Jvb2wgZWFybHlfYm9vdF9pcnFzX2Rpc2FibGVkIF9fcmVhZF9tb3N0bHk7CisKIGVudW0gc3lzdGVtX3N0YXRlcyBzeXN0ZW1fc3RhdGUgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0woc3lzdGVtX3N0YXRlKTsKIApAQCAtNTU0LDcgKzU2Myw3IEBACiAJY2dyb3VwX2luaXRfZWFybHkoKTsKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JZWFybHlfYm9vdF9pcnFzX29mZigpOworCWVhcmx5X2Jvb3RfaXJxc19kaXNhYmxlZCA9IHRydWU7CiAKIC8qCiAgKiBJbnRlcnJ1cHRzIGFyZSBzdGlsbCBkaXNhYmxlZC4gRG8gbmVjZXNzYXJ5IHNldHVwcywgdGhlbgpAQCAtNjIxLDcgKzYzMCw3IEBACiAJaWYgKCFpcnFzX2Rpc2FibGVkKCkpCiAJCXByaW50ayhLRVJOX0NSSVQgInN0YXJ0X2tlcm5lbCgpOiBidWc6IGludGVycnVwdHMgd2VyZSAiCiAJCQkJICJlbmFibGVkIGVhcmx5XG4iKTsKLQllYXJseV9ib290X2lycXNfb24oKTsKKwllYXJseV9ib290X2lycXNfZGlzYWJsZWQgPSBmYWxzZTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAkvKiBJbnRlcnJ1cHRzIGFyZSBlbmFibGVkIG5vdyBzbyBhbGwgR0ZQIGFsbG9jYXRpb25zIGFyZSBzYWZlLiAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2NhcGFiaWxpdHkuYyBiL2tlcm5lbC9jYXBhYmlsaXR5LmMKaW5kZXggMmYwNTMwMy4uOWU5Mzg1ZiAxMDA2NDQKLS0tIGEva2VybmVsL2NhcGFiaWxpdHkuYworKysgYi9rZXJuZWwvY2FwYWJpbGl0eS5jCkBAIC0zMDYsNyArMzA2LDcgQEAKIAkJQlVHKCk7CiAJfQogCi0JaWYgKHNlY3VyaXR5X2NhcGFibGUoY2FwKSA9PSAwKSB7CisJaWYgKHNlY3VyaXR5X2NhcGFibGUoY3VycmVudF9jcmVkKCksIGNhcCkgPT0gMCkgewogCQljdXJyZW50LT5mbGFncyB8PSBQRl9TVVBFUlBSSVY7CiAJCXJldHVybiAxOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9jcmVkLmMgYi9rZXJuZWwvY3JlZC5jCmluZGV4IDZhMWFhMDAuLjNhOWQ2ZGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcmVkLmMKKysrIGIva2VybmVsL2NyZWQuYwpAQCAtMjUyLDEzICsyNTIsMTMgQEAKICNlbmRpZgogCiAJYXRvbWljX3NldCgmbmV3LT51c2FnZSwgMSk7CisjaWZkZWYgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTCisJbmV3LT5tYWdpYyA9IENSRURfTUFHSUM7CisjZW5kaWYKIAogCWlmIChzZWN1cml0eV9jcmVkX2FsbG9jX2JsYW5rKG5ldywgR0ZQX0tFUk5FTCkgPCAwKQogCQlnb3RvIGVycm9yOwogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTCi0JbmV3LT5tYWdpYyA9IENSRURfTUFHSUM7Ci0jZW5kaWYKIAlyZXR1cm4gbmV3OwogCiBlcnJvcjoKQEAgLTY1Nyw2ICs2NTcsOCBAQAogCXZhbGlkYXRlX2NyZWRzKG9sZCk7CiAKIAkqbmV3ID0gKm9sZDsKKwlhdG9taWNfc2V0KCZuZXctPnVzYWdlLCAxKTsKKwlzZXRfY3JlZF9zdWJzY3JpYmVycyhuZXcsIDApOwogCWdldF91aWQobmV3LT51c2VyKTsKIAlnZXRfZ3JvdXBfaW5mbyhuZXctPmdyb3VwX2luZm8pOwogCkBAIC02NzQsOCArNjc2LDYgQEAKIAlpZiAoc2VjdXJpdHlfcHJlcGFyZV9jcmVkcyhuZXcsIG9sZCwgR0ZQX0tFUk5FTCkgPCAwKQogCQlnb3RvIGVycm9yOwogCi0JYXRvbWljX3NldCgmbmV3LT51c2FnZSwgMSk7Ci0Jc2V0X2NyZWRfc3Vic2NyaWJlcnMobmV3LCAwKTsKIAlwdXRfY3JlZChvbGQpOwogCXZhbGlkYXRlX2NyZWRzKG5ldyk7CiAJcmV0dXJuIG5ldzsKQEAgLTc0OCw3ICs3NDgsMTEgQEAKIAlpZiAoY3JlZC0+bWFnaWMgIT0gQ1JFRF9NQUdJQykKIAkJcmV0dXJuIHRydWU7CiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgKLQlpZiAoc2VsaW51eF9pc19lbmFibGVkKCkpIHsKKwkvKgorCSAqIGNyZWQtPnNlY3VyaXR5ID09IE5VTEwgaWYgc2VjdXJpdHlfY3JlZF9hbGxvY19ibGFuaygpIG9yCisJICogc2VjdXJpdHlfcHJlcGFyZV9jcmVkcygpIHJldHVybmVkIGFuIGVycm9yLgorCSAqLworCWlmIChzZWxpbnV4X2lzX2VuYWJsZWQoKSAmJiBjcmVkLT5zZWN1cml0eSkgewogCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGNyZWQtPnNlY3VyaXR5IDwgUEFHRV9TSVpFKQogCQkJcmV0dXJuIHRydWU7CiAJCWlmICgoKih1MzIgKiljcmVkLT5zZWN1cml0eSAmIDB4ZmZmZmZmMDApID09CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL0tjb25maWcgYi9rZXJuZWwvaXJxL0tjb25maWcKaW5kZXggMzFkNzY2Yi4uOGU0MmZlYyAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9LY29uZmlnCisrKyBiL2tlcm5lbC9pcnEvS2NvbmZpZwpAQCAtOSw5ICs5LDYgQEAKIGNvbmZpZyBHRU5FUklDX0hBUkRJUlFTCiAgICAgICAgZGVmX2Jvb2wgeQogCi1jb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCi0gICAgICAgZGVmX2Jvb2wgeQotCiAjIFNlbGVjdCB0aGlzIHRvIGRpc2FibGUgdGhlIGRlcHJlY2F0ZWQgc3R1ZmYKIGNvbmZpZyBHRU5FUklDX0hBUkRJUlFTX05PX0RFUFJFQ0FURUQKICAgICAgICBkZWZfYm9vbCBuCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2hhbmRsZS5jIGIva2VybmVsL2lycS9oYW5kbGUuYwppbmRleCBlMjM0N2ViLi4zNTQwYTcxIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2hhbmRsZS5jCisrKyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKQEAgLTExOCwxMTQgKzExOCwzIEBACiAKIAlyZXR1cm4gcmV0dmFsOwogfQotCi0jaWZuZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKLQotI2lmZGVmIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVECi0jIHdhcm5pbmcgX19kb19JUlEgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIGNvbnZlcnQgdG8gcHJvcGVyIGZsb3cgaGFuZGxlcnMKLSNlbmRpZgotCi0vKioKLSAqIF9fZG9fSVJRIC0gb3JpZ2luYWwgYWxsIGluIG9uZSBoaWdobGV2ZWwgSVJRIGhhbmRsZXIKLSAqIEBpcnE6CXRoZSBpbnRlcnJ1cHQgbnVtYmVyCi0gKgotICogX19kb19JUlEgaGFuZGxlcyBhbGwgbm9ybWFsIGRldmljZSBJUlEncyAodGhlIHNwZWNpYWwKLSAqIFNNUCBjcm9zcy1DUFUgaW50ZXJydXB0cyBoYXZlIHRoZWlyIG93biBzcGVjaWZpYwotICogaGFuZGxlcnMpLgotICoKLSAqIFRoaXMgaXMgdGhlIG9yaWdpbmFsIHg4NiBpbXBsZW1lbnRhdGlvbiB3aGljaCBpcyB1c2VkIGZvciBldmVyeQotICogaW50ZXJydXB0IHR5cGUuCi0gKi8KLXVuc2lnbmVkIGludCBfX2RvX0lSUSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7Ci0Jc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwotCXVuc2lnbmVkIGludCBzdGF0dXM7Ci0KLQlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKLQotCWlmIChDSEVDS19JUlFfUEVSX0NQVShkZXNjLT5zdGF0dXMpKSB7Ci0JCWlycXJldHVybl90IGFjdGlvbl9yZXQ7Ci0KLQkJLyoKLQkJICogTm8gbG9ja2luZyByZXF1aXJlZCBmb3IgQ1BVLWxvY2FsIGludGVycnVwdHM6Ci0JCSAqLwotCQlpZiAoZGVzYy0+aXJxX2RhdGEuY2hpcC0+YWNrKQotCQkJZGVzYy0+aXJxX2RhdGEuY2hpcC0+YWNrKGlycSk7Ci0JCWlmIChsaWtlbHkoIShkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpKSkgewotCQkJYWN0aW9uX3JldCA9IGhhbmRsZV9JUlFfZXZlbnQoaXJxLCBkZXNjLT5hY3Rpb24pOwotCQkJaWYgKCFub2lycWRlYnVnKQotCQkJCW5vdGVfaW50ZXJydXB0KGlycSwgZGVzYywgYWN0aW9uX3JldCk7Ci0JCX0KLQkJZGVzYy0+aXJxX2RhdGEuY2hpcC0+ZW5kKGlycSk7Ci0JCXJldHVybiAxOwotCX0KLQotCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwotCWlmIChkZXNjLT5pcnFfZGF0YS5jaGlwLT5hY2spCi0JCWRlc2MtPmlycV9kYXRhLmNoaXAtPmFjayhpcnEpOwotCS8qCi0JICogUkVQTEFZIGlzIHdoZW4gTGludXggcmVzZW5kcyBhbiBJUlEgdGhhdCB3YXMgZHJvcHBlZCBlYXJsaWVyCi0JICogV0FJVElORyBpcyB1c2VkIGJ5IHByb2JlIHRvIG1hcmsgaXJxcyB0aGF0IGFyZSBiZWluZyB0ZXN0ZWQKLQkgKi8KLQlzdGF0dXMgPSBkZXNjLT5zdGF0dXMgJiB+KElSUV9SRVBMQVkgfCBJUlFfV0FJVElORyk7Ci0Jc3RhdHVzIHw9IElSUV9QRU5ESU5HOyAvKiB3ZSBfd2FudF8gdG8gaGFuZGxlIGl0ICovCi0KLQkvKgotCSAqIElmIHRoZSBJUlEgaXMgZGlzYWJsZWQgZm9yIHdoYXRldmVyIHJlYXNvbiwgd2UgY2Fubm90Ci0JICogdXNlIHRoZSBhY3Rpb24gd2UgaGF2ZS4KLQkgKi8KLQlhY3Rpb24gPSBOVUxMOwotCWlmIChsaWtlbHkoIShzdGF0dXMgJiAoSVJRX0RJU0FCTEVEIHwgSVJRX0lOUFJPR1JFU1MpKSkpIHsKLQkJYWN0aW9uID0gZGVzYy0+YWN0aW9uOwotCQlzdGF0dXMgJj0gfklSUV9QRU5ESU5HOyAvKiB3ZSBjb21taXQgdG8gaGFuZGxpbmcgKi8KLQkJc3RhdHVzIHw9IElSUV9JTlBST0dSRVNTOyAvKiB3ZSBhcmUgaGFuZGxpbmcgaXQgKi8KLQl9Ci0JZGVzYy0+c3RhdHVzID0gc3RhdHVzOwotCi0JLyoKLQkgKiBJZiB0aGVyZSBpcyBubyBJUlEgaGFuZGxlciBvciBpdCB3YXMgZGlzYWJsZWQsIGV4aXQgZWFybHkuCi0JICogU2luY2Ugd2Ugc2V0IFBFTkRJTkcsIGlmIGFub3RoZXIgcHJvY2Vzc29yIGlzIGhhbmRsaW5nCi0JICogYSBkaWZmZXJlbnQgaW5zdGFuY2Ugb2YgdGhpcyBzYW1lIGlycSwgdGhlIG90aGVyIHByb2Nlc3NvcgotCSAqIHdpbGwgdGFrZSBjYXJlIG9mIGl0LgotCSAqLwotCWlmICh1bmxpa2VseSghYWN0aW9uKSkKLQkJZ290byBvdXQ7Ci0KLQkvKgotCSAqIEVkZ2UgdHJpZ2dlcmVkIGludGVycnVwdHMgbmVlZCB0byByZW1lbWJlcgotCSAqIHBlbmRpbmcgZXZlbnRzLgotCSAqIFRoaXMgYXBwbGllcyB0byBhbnkgaHcgaW50ZXJydXB0cyB0aGF0IGFsbG93IGEgc2Vjb25kCi0JICogaW5zdGFuY2Ugb2YgdGhlIHNhbWUgaXJxIHRvIGFycml2ZSB3aGlsZSB3ZSBhcmUgaW4gZG9fSVJRCi0JICogb3IgaW4gdGhlIGhhbmRsZXIuIEJ1dCB0aGUgY29kZSBoZXJlIG9ubHkgaGFuZGxlcyB0aGUgX3NlY29uZF8KLQkgKiBpbnN0YW5jZSBvZiB0aGUgaXJxLCBub3QgdGhlIHRoaXJkIG9yIGZvdXJ0aC4gU28gaXQgaXMgbW9zdGx5Ci0JICogdXNlZnVsIGZvciBpcnEgaGFyZHdhcmUgdGhhdCBkb2VzIG5vdCBtYXNrIGNsZWFubHkgaW4gYW4KLQkgKiBTTVAgZW52aXJvbm1lbnQuCi0JICovCi0JZm9yICg7OykgewotCQlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OwotCi0JCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7Ci0KLQkJYWN0aW9uX3JldCA9IGhhbmRsZV9JUlFfZXZlbnQoaXJxLCBhY3Rpb24pOwotCQlpZiAoIW5vaXJxZGVidWcpCi0JCQlub3RlX2ludGVycnVwdChpcnEsIGRlc2MsIGFjdGlvbl9yZXQpOwotCi0JCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwotCQlpZiAobGlrZWx5KCEoZGVzYy0+c3RhdHVzICYgSVJRX1BFTkRJTkcpKSkKLQkJCWJyZWFrOwotCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9QRU5ESU5HOwotCX0KLQlkZXNjLT5zdGF0dXMgJj0gfklSUV9JTlBST0dSRVNTOwotCi1vdXQ6Ci0JLyoKLQkgKiBUaGUgLT5lbmQoKSBoYW5kbGVyIGhhcyB0byBkZWFsIHdpdGggaW50ZXJydXB0cyB3aGljaCBnb3QKLQkgKiBkaXNhYmxlZCB3aGlsZSB0aGUgaGFuZGxlciB3YXMgcnVubmluZy4KLQkgKi8KLQlkZXNjLT5pcnFfZGF0YS5jaGlwLT5lbmQoaXJxKTsKLQlyYXdfc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwotCi0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmggYi9rZXJuZWwvaXJxL2ludGVybmFscy5oCmluZGV4IDQ1NzFhZTcuLjk5YzNiYzggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKKysrIGIva2VybmVsL2lycS9pbnRlcm5hbHMuaApAQCAtMyw2ICszLDEyIEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9pcnFkZXNjLmg+CiAKKyNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQorIyBkZWZpbmUgSVJRX0JJVE1BUF9CSVRTCShOUl9JUlFTICsgODE5NikKKyNlbHNlCisjIGRlZmluZSBJUlFfQklUTUFQX0JJVFMJTlJfSVJRUworI2VuZGlmCisKIGV4dGVybiBpbnQgbm9pcnFkZWJ1ZzsKIAogI2RlZmluZSBpcnFfZGF0YV90b19kZXNjKGRhdGEpCWNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXJxX2Rlc2MsIGlycV9kYXRhKQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9pcnFkZXNjLmMgYi9rZXJuZWwvaXJxL2lycWRlc2MuYwppbmRleCAyODJmMjAyLi4yMDM5YmVhIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2lycWRlc2MuYworKysgYi9rZXJuZWwvaXJxL2lycWRlc2MuYwpAQCAtOTQsNyArOTQsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwobnJfaXJxcyk7CiAKIHN0YXRpYyBERUZJTkVfTVVURVgoc3BhcnNlX2lycV9sb2NrKTsKLXN0YXRpYyBERUNMQVJFX0JJVE1BUChhbGxvY2F0ZWRfaXJxcywgTlJfSVJRUyk7CitzdGF0aWMgREVDTEFSRV9CSVRNQVAoYWxsb2NhdGVkX2lycXMsIElSUV9CSVRNQVBfQklUUyk7CiAKICNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQogCkBAIC0yMTcsNiArMjE3LDE1IEBACiAJaW5pdGNudCA9IGFyY2hfcHJvYmVfbnJfaXJxcygpOwogCXByaW50ayhLRVJOX0lORk8gIk5SX0lSUVM6JWQgbnJfaXJxczolZCAlZFxuIiwgTlJfSVJRUywgbnJfaXJxcywgaW5pdGNudCk7CiAKKwlpZiAoV0FSTl9PTihucl9pcnFzID4gSVJRX0JJVE1BUF9CSVRTKSkKKwkJbnJfaXJxcyA9IElSUV9CSVRNQVBfQklUUzsKKworCWlmIChXQVJOX09OKGluaXRjbnQgPiBJUlFfQklUTUFQX0JJVFMpKQorCQlpbml0Y250ID0gSVJRX0JJVE1BUF9CSVRTOworCisJaWYgKGluaXRjbnQgPiBucl9pcnFzKQorCQlucl9pcnFzID0gaW5pdGNudDsKKwogCWZvciAoaSA9IDA7IGkgPCBpbml0Y250OyBpKyspIHsKIAkJZGVzYyA9IGFsbG9jX2Rlc2MoaSwgbm9kZSk7CiAJCXNldF9iaXQoaSwgYWxsb2NhdGVkX2lycXMpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9tYW5hZ2UuYyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKaW5kZXggMGNhYTU5Zi4uOTAzM2MxYyAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9tYW5hZ2UuYworKysgYi9rZXJuZWwvaXJxL21hbmFnZS5jCkBAIC0xMTAwLDcgKzExMDAsNyBAQAogCWlmIChyZXR2YWwpCiAJCWtmcmVlKGFjdGlvbik7CiAKLSNpZmRlZiBDT05GSUdfREVCVUdfU0hJUlEKKyNpZmRlZiBDT05GSUdfREVCVUdfU0hJUlFfRklYTUUKIAlpZiAoIXJldHZhbCAmJiAoaXJxZmxhZ3MgJiBJUlFGX1NIQVJFRCkpIHsKIAkJLyoKIAkJICogSXQncyBhIHNoYXJlZCBJUlEgLS0gdGhlIGRyaXZlciBvdWdodCB0byBiZSBwcmVwYXJlZCBmb3IgaXQKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMgYi9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCmluZGV4IDFkMjU0MTkuLjQ0MWZkNjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKKysrIGIva2VybmVsL2lycS9taWdyYXRpb24uYwpAQCAtNTYsNiArNTYsNyBAQAogdm9pZCBtb3ZlX25hdGl2ZV9pcnEoaW50IGlycSkKIHsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCWJvb2wgbWFza2VkOwogCiAJaWYgKGxpa2VseSghKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpKSkKIAkJcmV0dXJuOwpAQCAtNjMsOCArNjQsMTUgQEAKIAlpZiAodW5saWtlbHkoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSkKIAkJcmV0dXJuOwogCi0JZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX21hc2soJmRlc2MtPmlycV9kYXRhKTsKKwkvKgorCSAqIEJlIGNhcmVmdWwgdnMuIGFscmVhZHkgbWFza2VkIGludGVycnVwdHMuIElmIHRoaXMgaXMgYQorCSAqIHRocmVhZGVkIGludGVycnVwdCB3aXRoIE9ORVNIT1Qgc2V0LCB3ZSBjYW4gZW5kIHVwIHdpdGggYW4KKwkgKiBpbnRlcnJ1cHQgc3Rvcm0uCisJICovCisJbWFza2VkID0gZGVzYy0+c3RhdHVzICYgSVJRX01BU0tFRDsKKwlpZiAoIW1hc2tlZCkKKwkJZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX21hc2soJmRlc2MtPmlycV9kYXRhKTsKIAltb3ZlX21hc2tlZF9pcnEoaXJxKTsKLQlkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfdW5tYXNrKCZkZXNjLT5pcnFfZGF0YSk7CisJaWYgKCFtYXNrZWQpCisJCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV91bm1hc2soJmRlc2MtPmlycV9kYXRhKTsKIH0KLQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9yZXNlbmQuYyBiL2tlcm5lbC9pcnEvcmVzZW5kLmMKaW5kZXggODkxMTE1YS4uZGM0OTM1OCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9yZXNlbmQuYworKysgYi9rZXJuZWwvaXJxL3Jlc2VuZC5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaWZkZWYgQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORAogCiAvKiBCaXRtYXAgdG8gaGFuZGxlIHNvZnR3YXJlIHJlc2VuZCBvZiBpbnRlcnJ1cHRzOiAqLwotc3RhdGljIERFQ0xBUkVfQklUTUFQKGlycXNfcmVzZW5kLCBOUl9JUlFTKTsKK3N0YXRpYyBERUNMQVJFX0JJVE1BUChpcnFzX3Jlc2VuZCwgSVJRX0JJVE1BUF9CSVRTKTsKIAogLyoKICAqIFJ1biBzb2Z0d2FyZSByZXNlbmRzIG9mIElSUSdzCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tkZXAuYwppbmRleCA0MmJhNjVkLi4wZDIwNThkIDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcC5jCisrKyBiL2tlcm5lbC9sb2NrZGVwLmMKQEAgLTIyOTIsMjIgKzIyOTIsNiBAQAogfQogCiAvKgotICogRGVidWdnaW5nIGhlbHBlcjogdmlhIHRoaXMgZmxhZyB3ZSBrbm93IHRoYXQgd2UgYXJlIGluCi0gKiAnZWFybHkgYm9vdHVwIGNvZGUnLCBhbmQgd2lsbCB3YXJuIGFib3V0IGFueSBpbnZhbGlkIGlycXMtb24gZXZlbnQ6Ci0gKi8KLXN0YXRpYyBpbnQgZWFybHlfYm9vdF9pcnFzX2VuYWJsZWQ7Ci0KLXZvaWQgZWFybHlfYm9vdF9pcnFzX29mZih2b2lkKQotewotCWVhcmx5X2Jvb3RfaXJxc19lbmFibGVkID0gMDsKLX0KLQotdm9pZCBlYXJseV9ib290X2lycXNfb24odm9pZCkKLXsKLQllYXJseV9ib290X2lycXNfZW5hYmxlZCA9IDE7Ci19Ci0KLS8qCiAgKiBIYXJkaXJxcyB3aWxsIGJlIGVuYWJsZWQ6CiAgKi8KIHZvaWQgdHJhY2VfaGFyZGlycXNfb25fY2FsbGVyKHVuc2lnbmVkIGxvbmcgaXApCkBAIC0yMzE5LDcgKzIzMDMsNyBAQAogCWlmICh1bmxpa2VseSghZGVidWdfbG9ja3MgfHwgY3VycmVudC0+bG9ja2RlcF9yZWN1cnNpb24pKQogCQlyZXR1cm47CiAKLQlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTih1bmxpa2VseSghZWFybHlfYm9vdF9pcnFzX2VuYWJsZWQpKSkKKwlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTih1bmxpa2VseShlYXJseV9ib290X2lycXNfZGlzYWJsZWQpKSkKIAkJcmV0dXJuOwogCiAJaWYgKHVubGlrZWx5KGN1cnItPmhhcmRpcnFzX2VuYWJsZWQpKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggMzRlMDBiNy4uZWZhMjkwZSAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtMjQ2MCw5ICsyNDYwLDkgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCi0JbW9kLT50cmFjZXBvaW50cyA9IHNlY3Rpb25fb2JqcyhpbmZvLCAiX190cmFjZXBvaW50cyIsCi0JCQkJCXNpemVvZigqbW9kLT50cmFjZXBvaW50cyksCi0JCQkJCSZtb2QtPm51bV90cmFjZXBvaW50cyk7CisJbW9kLT50cmFjZXBvaW50c19wdHJzID0gc2VjdGlvbl9vYmpzKGluZm8sICJfX3RyYWNlcG9pbnRzX3B0cnMiLAorCQkJCQkgICAgIHNpemVvZigqbW9kLT50cmFjZXBvaW50c19wdHJzKSwKKwkJCQkJICAgICAmbW9kLT5udW1fdHJhY2Vwb2ludHMpOwogI2VuZGlmCiAjaWZkZWYgSEFWRV9KVU1QX0xBQkVMCiAJbW9kLT5qdW1wX2VudHJpZXMgPSBzZWN0aW9uX29ianMoaW5mbywgIl9fanVtcF90YWJsZSIsCkBAIC0zMzkzLDcgKzMzOTMsNyBAQAogCQkgICBzdHJ1Y3QgbW9kdmVyc2lvbl9pbmZvICp2ZXIsCiAJCSAgIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwLAogCQkgICBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqa3MsCi0JCSAgIHN0cnVjdCB0cmFjZXBvaW50ICp0cCkKKwkJICAgc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqdHApCiB7CiB9CiBFWFBPUlRfU1lNQk9MKG1vZHVsZV9sYXlvdXQpOwpAQCAtMzQwNyw4ICszNDA3LDggQEAKIAltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kLCAmbW9kdWxlcywgbGlzdCkKIAkJaWYgKCFtb2QtPnRhaW50cykKLQkJCXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKG1vZC0+dHJhY2Vwb2ludHMsCi0JCQkJbW9kLT50cmFjZXBvaW50cyArIG1vZC0+bnVtX3RyYWNlcG9pbnRzKTsKKwkJCXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKG1vZC0+dHJhY2Vwb2ludHNfcHRycywKKwkJCQltb2QtPnRyYWNlcG9pbnRzX3B0cnMgKyBtb2QtPm51bV90cmFjZXBvaW50cyk7CiAJbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOwogfQogCkBAIC0zNDMyLDggKzM0MzIsOCBAQAogCQkJZWxzZSBpZiAoaXRlcl9tb2QgPiBpdGVyLT5tb2R1bGUpCiAJCQkJaXRlci0+dHJhY2Vwb2ludCA9IE5VTEw7CiAJCQlmb3VuZCA9IHRyYWNlcG9pbnRfZ2V0X2l0ZXJfcmFuZ2UoJml0ZXItPnRyYWNlcG9pbnQsCi0JCQkJaXRlcl9tb2QtPnRyYWNlcG9pbnRzLAotCQkJCWl0ZXJfbW9kLT50cmFjZXBvaW50cworCQkJCWl0ZXJfbW9kLT50cmFjZXBvaW50c19wdHJzLAorCQkJCWl0ZXJfbW9kLT50cmFjZXBvaW50c19wdHJzCiAJCQkJCSsgaXRlcl9tb2QtPm51bV90cmFjZXBvaW50cyk7CiAJCQlpZiAoZm91bmQpIHsKIAkJCQlpdGVyLT5tb2R1bGUgPSBpdGVyX21vZDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYXJhbXMuYyBiL2tlcm5lbC9wYXJhbXMuYwppbmRleCAwODEwN2QxLi4wZGExNDExIDEwMDY0NAotLS0gYS9rZXJuZWwvcGFyYW1zLmMKKysrIGIva2VybmVsL3BhcmFtcy5jCkBAIC03MTksOSArNzE5LDcgQEAKIAkJCXBhcmFtc1tpXS5vcHMtPmZyZWUocGFyYW1zW2ldLmFyZyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBrZXJuZWxfYWRkX3N5c2ZzX3BhcmFtKGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJCSAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3BhcmFtLAotCQkJCQkgIHVuc2lnbmVkIGludCBuYW1lX3NraXApCitzdGF0aWMgc3RydWN0IG1vZHVsZV9rb2JqZWN0ICogX19pbml0IGxvY2F0ZV9tb2R1bGVfa29iamVjdChjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBtb2R1bGVfa29iamVjdCAqbWs7CiAJc3RydWN0IGtvYmplY3QgKmtvYmo7CkBAIC03MjksMTAgKzcyNyw3IEBACiAKIAlrb2JqID0ga3NldF9maW5kX29iaihtb2R1bGVfa3NldCwgbmFtZSk7CiAJaWYgKGtvYmopIHsKLQkJLyogV2UgYWxyZWFkeSBoYXZlIG9uZS4gIFJlbW92ZSBwYXJhbXMgc28gd2UgY2FuIGFkZCBtb3JlLiAqLwogCQltayA9IHRvX21vZHVsZV9rb2JqZWN0KGtvYmopOwotCQkvKiBXZSBuZWVkIHRvIHJlbW92ZSBpdCBiZWZvcmUgYWRkaW5nIHBhcmFtZXRlcnMuICovCi0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmbWstPmtvYmosICZtay0+bXAtPmdycCk7CiAJfSBlbHNlIHsKIAkJbWsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbW9kdWxlX2tvYmplY3QpLCBHRlBfS0VSTkVMKTsKIAkJQlVHX09OKCFtayk7CkBAIC03NDMsMTUgKzczOCwzNiBAQAogCQkJCQkgICAiJXMiLCBuYW1lKTsKIAkJaWYgKGVycikgewogCQkJa29iamVjdF9wdXQoJm1rLT5rb2JqKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiTW9kdWxlICclcycgZmFpbGVkIGFkZCB0byBzeXNmcywgIgotCQkJICAgICAgICJlcnJvciBudW1iZXIgJWRcbiIsIG5hbWUsIGVycik7Ci0JCQlwcmludGsoS0VSTl9FUlIJIlRoZSBzeXN0ZW0gd2lsbCBiZSB1bnN0YWJsZSBub3cuXG4iKTsKLQkJCXJldHVybjsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJNb2R1bGUgJyVzJyBmYWlsZWQgYWRkIHRvIHN5c2ZzLCBlcnJvciBudW1iZXIgJWRcbiIsCisJCQkJbmFtZSwgZXJyKTsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJUaGUgc3lzdGVtIHdpbGwgYmUgdW5zdGFibGUgbm93LlxuIik7CisJCQlyZXR1cm4gTlVMTDsKIAkJfQotCQkvKiBTbyB0aGF0IGV4aXQgcGF0aCBpcyBldmVuLiAqLworCisJCS8qIFNvIHRoYXQgd2UgaG9sZCByZWZlcmVuY2UgaW4gYm90aCBjYXNlcy4gKi8KIAkJa29iamVjdF9nZXQoJm1rLT5rb2JqKTsKIAl9CiAKKwlyZXR1cm4gbWs7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBrZXJuZWxfYWRkX3N5c2ZzX3BhcmFtKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCSAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3BhcmFtLAorCQkJCQkgIHVuc2lnbmVkIGludCBuYW1lX3NraXApCit7CisJc3RydWN0IG1vZHVsZV9rb2JqZWN0ICptazsKKwlpbnQgZXJyOworCisJbWsgPSBsb2NhdGVfbW9kdWxlX2tvYmplY3QobmFtZSk7CisJaWYgKCFtaykKKwkJcmV0dXJuOworCisJLyogV2UgbmVlZCB0byByZW1vdmUgb2xkIHBhcmFtZXRlcnMgYmVmb3JlIGFkZGluZyBtb3JlLiAqLworCWlmIChtay0+bXApCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmbWstPmtvYmosICZtay0+bXAtPmdycCk7CisKIAkvKiBUaGVzZSBzaG91bGQgbm90IGZhaWwgYXQgYm9vdC4gKi8KIAllcnIgPSBhZGRfc3lzZnNfcGFyYW0obWssIGtwYXJhbSwga3BhcmFtLT5uYW1lICsgbmFtZV9za2lwKTsKIAlCVUdfT04oZXJyKTsKQEAgLTc5Niw2ICs4MTIsMzIgQEAKIAl9CiB9CiAKK3NzaXplX3QgX19tb2R2ZXJfdmVyc2lvbl9zaG93KHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICptYXR0ciwKKwkJCSAgICAgIHN0cnVjdCBtb2R1bGUgKm1vZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBtb2R1bGVfdmVyc2lvbl9hdHRyaWJ1dGUgKnZhdHRyID0KKwkJY29udGFpbmVyX29mKG1hdHRyLCBzdHJ1Y3QgbW9kdWxlX3ZlcnNpb25fYXR0cmlidXRlLCBtYXR0cik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgdmF0dHItPnZlcnNpb24pOworfQorCitleHRlcm4gc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZSBfX3N0YXJ0X19fbW9kdmVyW10sIF9fc3RvcF9fX21vZHZlcltdOworCitzdGF0aWMgdm9pZCBfX2luaXQgdmVyc2lvbl9zeXNmc19idWlsdGluKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZSAqdmF0dHI7CisJc3RydWN0IG1vZHVsZV9rb2JqZWN0ICptazsKKwlpbnQgZXJyOworCisJZm9yICh2YXR0ciA9IF9fc3RhcnRfX19tb2R2ZXI7IHZhdHRyIDwgX19zdG9wX19fbW9kdmVyOyB2YXR0cisrKSB7CisJCW1rID0gbG9jYXRlX21vZHVsZV9rb2JqZWN0KHZhdHRyLT5tb2R1bGVfbmFtZSk7CisJCWlmIChtaykgeworCQkJZXJyID0gc3lzZnNfY3JlYXRlX2ZpbGUoJm1rLT5rb2JqLCAmdmF0dHItPm1hdHRyLmF0dHIpOworCQkJa29iamVjdF91ZXZlbnQoJm1rLT5rb2JqLCBLT0JKX0FERCk7CisJCQlrb2JqZWN0X3B1dCgmbWstPmtvYmopOworCQl9CisJfQorfQogCiAvKiBtb2R1bGUtcmVsYXRlZCBzeXNmcyBzdHVmZiAqLwogCkBAIC04NzUsNiArOTE3LDcgQEAKIAl9CiAJbW9kdWxlX3N5c2ZzX2luaXRpYWxpemVkID0gMTsKIAorCXZlcnNpb25fc3lzZnNfYnVpbHRpbigpOwogCXBhcmFtX3N5c2ZzX2J1aWx0aW4oKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3BlcmZfZXZlbnQuYyBiL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggODQ1MjJjNy4uNjU2MjIyZiAxMDA2NDQKLS0tIGEva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC03ODIsNiArNzgyLDEwIEBACiAJcmF3X3NwaW5fdW5sb2NrX2lycSgmY3R4LT5sb2NrKTsKIH0KIAorI2RlZmluZSBNQVhfSU5URVJSVVBUUyAofjBVTEwpCisKK3N0YXRpYyB2b2lkIHBlcmZfbG9nX3Rocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGVuYWJsZSk7CisKIHN0YXRpYyBpbnQKIGV2ZW50X3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKIAkJIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCkBAIC03OTQsNiArNzk4LDE3IEBACiAKIAlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRTsKIAlldmVudC0+b25jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwkvKgorCSAqIFVudGhyb3R0bGUgZXZlbnRzLCBzaW5jZSB3ZSBzY2hlZHVsZWQgd2UgbWlnaHQgaGF2ZSBtaXNzZWQgc2V2ZXJhbAorCSAqIHRpY2tzIGFscmVhZHksIGFsc28gZm9yIGEgaGVhdmlseSBzY2hlZHVsaW5nIHRhc2sgdGhlcmUgaXMgbGl0dGxlCisJICogZ3VhcmFudGVlIGl0J2xsIGdldCBhIHRpY2sgaW4gYSB0aW1lbHkgbWFubmVyLgorCSAqLworCWlmICh1bmxpa2VseShldmVudC0+aHcuaW50ZXJydXB0cyA9PSBNQVhfSU5URVJSVVBUUykpIHsKKwkJcGVyZl9sb2dfdGhyb3R0bGUoZXZlbnQsIDEpOworCQlldmVudC0+aHcuaW50ZXJydXB0cyA9IDA7CisJfQorCiAJLyoKIAkgKiBUaGUgbmV3IHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UgdHVybiBpdCBvbiBpbiB0aGUgaGFyZHdhcmU6CiAJICovCkBAIC0xNTk2LDEwICsxNjExLDYgQEAKIAl9CiB9CiAKLSNkZWZpbmUgTUFYX0lOVEVSUlVQVFMgKH4wVUxMKQotCi1zdGF0aWMgdm9pZCBwZXJmX2xvZ190aHJvdHRsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBlbmFibGUpOwotCiBzdGF0aWMgdTY0IHBlcmZfY2FsY3VsYXRlX3BlcmlvZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBuc2VjLCB1NjQgY291bnQpCiB7CiAJdTY0IGZyZXF1ZW5jeSA9IGV2ZW50LT5hdHRyLnNhbXBsZV9mcmVxOwpAQCAtMTkwMSwxMSArMTkxMiwxMiBAQAogCQlyZXR1cm47CiAKIAlyYXdfc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwotCXVwZGF0ZV9jb250ZXh0X3RpbWUoY3R4KTsKKwlpZiAoY3R4LT5pc19hY3RpdmUpCisJCXVwZGF0ZV9jb250ZXh0X3RpbWUoY3R4KTsKIAl1cGRhdGVfZXZlbnRfdGltZXMoZXZlbnQpOworCWlmIChldmVudC0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpCisJCWV2ZW50LT5wbXUtPnJlYWQoZXZlbnQpOwogCXJhd19zcGluX3VubG9jaygmY3R4LT5sb2NrKTsKLQotCWV2ZW50LT5wbXUtPnJlYWQoZXZlbnQpOwogfQogCiBzdGF0aWMgaW5saW5lIHU2NCBwZXJmX2V2ZW50X2NvdW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKQEAgLTE5OTksOCArMjAxMSw3IEBACiAJICogYWNjZXNzZWQgZnJvbSBOTUkuIFVzZSBhIHRlbXBvcmFyeSBtYW51YWwgcGVyIGNwdSBhbGxvY2F0aW9uCiAJICogdW50aWwgdGhhdCBnZXRzIHNvcnRlZCBvdXQuCiAJICovCi0Jc2l6ZSA9IHNpemVvZigqZW50cmllcykgKyBzaXplb2Yoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICopICoKLQkJbnVtX3Bvc3NpYmxlX2NwdXMoKTsKKwlzaXplID0gb2Zmc2V0b2Yoc3RydWN0IGNhbGxjaGFpbl9jcHVzX2VudHJpZXMsIGNwdV9lbnRyaWVzW25yX2NwdV9pZHNdKTsKIAogCWVudHJpZXMgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghZW50cmllcykKQEAgLTIyMDEsMTMgKzIyMTIsNiBAQAogCWlmICghdGFzaykKIAkJcmV0dXJuIEVSUl9QVFIoLUVTUkNIKTsKIAotCS8qCi0JICogQ2FuJ3QgYXR0YWNoIGV2ZW50cyB0byBhIGR5aW5nIHRhc2suCi0JICovCi0JZXJyID0gLUVTUkNIOwotCWlmICh0YXNrLT5mbGFncyAmIFBGX0VYSVRJTkcpCi0JCWdvdG8gZXJyb3V0OwotCiAJLyogUmV1c2UgcHRyYWNlIHBlcm1pc3Npb24gY2hlY2tzIGZvciBub3cuICovCiAJZXJyID0gLUVBQ0NFUzsKIAlpZiAoIXB0cmFjZV9tYXlfYWNjZXNzKHRhc2ssIFBUUkFDRV9NT0RFX1JFQUQpKQpAQCAtMjI2OCwxNCArMjI3MiwyNyBAQAogCiAJCWdldF9jdHgoY3R4KTsKIAotCQlpZiAoY21weGNoZygmdGFzay0+cGVyZl9ldmVudF9jdHhwW2N0eG5dLCBOVUxMLCBjdHgpKSB7Ci0JCQkvKgotCQkJICogV2UgcmFjZWQgd2l0aCBzb21lIG90aGVyIHRhc2s7IHVzZQotCQkJICogdGhlIGNvbnRleHQgdGhleSBzZXQuCi0JCQkgKi8KKwkJZXJyID0gMDsKKwkJbXV0ZXhfbG9jaygmdGFzay0+cGVyZl9ldmVudF9tdXRleCk7CisJCS8qCisJCSAqIElmIGl0IGhhcyBhbHJlYWR5IHBhc3NlZCBwZXJmX2V2ZW50X2V4aXRfdGFzaygpLgorCQkgKiB3ZSBtdXN0IHNlZSBQRl9FWElUSU5HLCBpdCB0YWtlcyB0aGlzIG11dGV4IHRvby4KKwkJICovCisJCWlmICh0YXNrLT5mbGFncyAmIFBGX0VYSVRJTkcpCisJCQllcnIgPSAtRVNSQ0g7CisJCWVsc2UgaWYgKHRhc2stPnBlcmZfZXZlbnRfY3R4cFtjdHhuXSkKKwkJCWVyciA9IC1FQUdBSU47CisJCWVsc2UKKwkJCXJjdV9hc3NpZ25fcG9pbnRlcih0YXNrLT5wZXJmX2V2ZW50X2N0eHBbY3R4bl0sIGN0eCk7CisJCW11dGV4X3VubG9jaygmdGFzay0+cGVyZl9ldmVudF9tdXRleCk7CisKKwkJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKIAkJCWtmcmVlKGN0eCk7Ci0JCQlnb3RvIHJldHJ5OworCisJCQlpZiAoZXJyID09IC1FQUdBSU4pCisJCQkJZ290byByZXRyeTsKKwkJCWdvdG8gZXJyb3V0OwogCQl9CiAJfQogCkBAIC01Mzc0LDYgKzUzOTEsOCBAQAogCWdvdG8gb3V0OwogfQogCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGNwdWN0eF9tdXRleDsKKwogaW50IHBlcmZfcG11X3JlZ2lzdGVyKHN0cnVjdCBwbXUgKnBtdSwgY2hhciAqbmFtZSwgaW50IHR5cGUpCiB7CiAJaW50IGNwdSwgcmV0OwpAQCAtNTQyMiw2ICs1NDQxLDcgQEAKIAogCQljcHVjdHggPSBwZXJfY3B1X3B0cihwbXUtPnBtdV9jcHVfY29udGV4dCwgY3B1KTsKIAkJX19wZXJmX2V2ZW50X2luaXRfY29udGV4dCgmY3B1Y3R4LT5jdHgpOworCQlsb2NrZGVwX3NldF9jbGFzcygmY3B1Y3R4LT5jdHgubXV0ZXgsICZjcHVjdHhfbXV0ZXgpOwogCQljcHVjdHgtPmN0eC50eXBlID0gY3B1X2NvbnRleHQ7CiAJCWNwdWN0eC0+Y3R4LnBtdSA9IHBtdTsKIAkJY3B1Y3R4LT5qaWZmaWVzX2ludGVydmFsID0gMTsKQEAgLTYxMjcsNyArNjE0Nyw3IEBACiAJICogc2NoZWR1bGVkLCBzbyB3ZSBhcmUgbm93IHNhZmUgZnJvbSByZXNjaGVkdWxpbmcgY2hhbmdpbmcKIAkgKiBvdXIgY29udGV4dC4KIAkgKi8KLQljaGlsZF9jdHggPSBjaGlsZC0+cGVyZl9ldmVudF9jdHhwW2N0eG5dOworCWNoaWxkX2N0eCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoY2hpbGQtPnBlcmZfZXZlbnRfY3R4cFtjdHhuXSk7CiAJdGFza19jdHhfc2NoZWRfb3V0KGNoaWxkX2N0eCwgRVZFTlRfQUxMKTsKIAogCS8qCkBAIC02NDQwLDExICs2NDYwLDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCi0JY2hpbGQtPnBlcmZfZXZlbnRfY3R4cFtjdHhuXSA9IE5VTEw7Ci0KLQltdXRleF9pbml0KCZjaGlsZC0+cGVyZl9ldmVudF9tdXRleCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNoaWxkLT5wZXJmX2V2ZW50X2xpc3QpOwotCiAJaWYgKGxpa2VseSghcGFyZW50LT5wZXJmX2V2ZW50X2N0eHBbY3R4bl0pKQogCQlyZXR1cm4gMDsKIApAQCAtNjUzMyw2ICs2NTQ4LDEwIEBACiB7CiAJaW50IGN0eG4sIHJldDsKIAorCW1lbXNldChjaGlsZC0+cGVyZl9ldmVudF9jdHhwLCAwLCBzaXplb2YoY2hpbGQtPnBlcmZfZXZlbnRfY3R4cCkpOworCW11dGV4X2luaXQoJmNoaWxkLT5wZXJmX2V2ZW50X211dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY2hpbGQtPnBlcmZfZXZlbnRfbGlzdCk7CisKIAlmb3JfZWFjaF90YXNrX2NvbnRleHRfbnIoY3R4bikgewogCQlyZXQgPSBwZXJmX2V2ZW50X2luaXRfY29udGV4dChjaGlsZCwgY3R4bik7CiAJCWlmIChyZXQpCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvbWFpbi5jIGIva2VybmVsL3Bvd2VyL21haW4uYwppbmRleCA3YjVkYjZhLi43MDE4NTMwIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvbWFpbi5jCisrKyBiL2tlcm5lbC9wb3dlci9tYWluLmMKQEAgLTMyNiw3ICszMjYsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBwbV9zdGFydF93b3JrcXVldWUodm9pZCkKIHsKLQlwbV93cSA9IGFsbG9jX3dvcmtxdWV1ZSgicG0iLCBXUV9GUkVFWkVBQkxFLCAwKTsKKwlwbV93cSA9IGFsbG9jX3dvcmtxdWV1ZSgicG0iLCBXUV9GUkVFWkFCTEUsIDApOwogCiAJcmV0dXJuIHBtX3dxID8gMCA6IC1FTk9NRU07CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jIGIva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYwppbmRleCBkNmQyYTEwLi4wY2YzYTI3IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCisrKyBiL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKQEAgLTIyLDcgKzIyLDcgQEAKICAqLwogI2RlZmluZSBUSU1FT1VUCSgyMCAqIEhaKQogCi1zdGF0aWMgaW5saW5lIGludCBmcmVlemVhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHApCitzdGF0aWMgaW5saW5lIGludCBmcmVlemFibGUoc3RydWN0IHRhc2tfc3RydWN0ICogcCkKIHsKIAlpZiAoKHAgPT0gY3VycmVudCkgfHwKIAkgICAgKHAtPmZsYWdzICYgUEZfTk9GUkVFWkUpIHx8CkBAIC01Myw3ICs1Myw3IEBACiAJCXRvZG8gPSAwOwogCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCQlkb19lYWNoX3RocmVhZChnLCBwKSB7Ci0JCQlpZiAoZnJvemVuKHApIHx8ICFmcmVlemVhYmxlKHApKQorCQkJaWYgKGZyb3plbihwKSB8fCAhZnJlZXphYmxlKHApKQogCQkJCWNvbnRpbnVlOwogCiAJCQlpZiAoIWZyZWV6ZV90YXNrKHAsIHNpZ19vbmx5KSkKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCiAJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAlkb19lYWNoX3RocmVhZChnLCBwKSB7Ci0JCWlmICghZnJlZXplYWJsZShwKSkKKwkJaWYgKCFmcmVlemFibGUocCkpCiAJCQljb250aW51ZTsKIAogCQlpZiAobm9zaWdfb25seSAmJiBzaG91bGRfc2VuZF9zaWduYWwocCkpCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCmluZGV4IDBkYWM3NWUuLjY0ZGI2NDggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCisrKyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCkBAIC0xNTE5LDExICsxNTE5LDggQEAKIHN3c3VzcF9hbGxvYyhzdHJ1Y3QgbWVtb3J5X2JpdG1hcCAqb3JpZ19ibSwgc3RydWN0IG1lbW9yeV9iaXRtYXAgKmNvcHlfYm0sCiAJCXVuc2lnbmVkIGludCBucl9wYWdlcywgdW5zaWduZWQgaW50IG5yX2hpZ2htZW0pCiB7Ci0JaW50IGVycm9yID0gMDsKLQogCWlmIChucl9oaWdobWVtID4gMCkgewotCQllcnJvciA9IGdldF9oaWdobWVtX2J1ZmZlcihQR19BTlkpOwotCQlpZiAoZXJyb3IpCisJCWlmIChnZXRfaGlnaG1lbV9idWZmZXIoUEdfQU5ZKSkKIAkJCWdvdG8gZXJyX291dDsKIAkJaWYgKG5yX2hpZ2htZW0gPiBhbGxvY19oaWdobWVtKSB7CiAJCQlucl9oaWdobWVtIC09IGFsbG9jX2hpZ2htZW07CkBAIC0xNTQ2LDcgKzE1NDMsNyBAQAogCiAgZXJyX291dDoKIAlzd3N1c3BfZnJlZSgpOwotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogYXNtbGlua2FnZSBpbnQgc3dzdXNwX3NhdmUodm9pZCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsuYyBiL2tlcm5lbC9wcmludGsuYwppbmRleCA1M2Q5YTllLi4zNjIzMTUyIDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay5jCkBAIC05Nyw3ICs5Nyw3IEBACiAvKgogICogbG9nYnVmX2xvY2sgcHJvdGVjdHMgbG9nX2J1ZiwgbG9nX3N0YXJ0LCBsb2dfZW5kLCBjb25fc3RhcnQgYW5kIGxvZ2dlZF9jaGFycwogICogSXQgaXMgYWxzbyB1c2VkIGluIGludGVyZXN0aW5nIHdheXMgdG8gcHJvdmlkZSBpbnRlcmxvY2tpbmcgaW4KLSAqIHJlbGVhc2VfY29uc29sZV9zZW0oKS4KKyAqIGNvbnNvbGVfdW5sb2NrKCk7LgogICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxvZ2J1Zl9sb2NrKTsKIApAQCAtMjYyLDI1ICsyNjIsNDcgQEAKIGludCBkbWVzZ19yZXN0cmljdDsKICNlbmRpZgogCitzdGF0aWMgaW50IHN5c2xvZ19hY3Rpb25fcmVzdHJpY3RlZChpbnQgdHlwZSkKK3sKKwlpZiAoZG1lc2dfcmVzdHJpY3QpCisJCXJldHVybiAxOworCS8qIFVubGVzcyByZXN0cmljdGVkLCB3ZSBhbGxvdyAicmVhZCBhbGwiIGFuZCAiZ2V0IGJ1ZmZlciBzaXplIiBmb3IgZXZlcnlib2R5ICovCisJcmV0dXJuIHR5cGUgIT0gU1lTTE9HX0FDVElPTl9SRUFEX0FMTCAmJiB0eXBlICE9IFNZU0xPR19BQ1RJT05fU0laRV9CVUZGRVI7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfc3lzbG9nX3Blcm1pc3Npb25zKGludCB0eXBlLCBib29sIGZyb21fZmlsZSkKK3sKKwkvKgorCSAqIElmIHRoaXMgaXMgZnJvbSAvcHJvYy9rbXNnIGFuZCB3ZSd2ZSBhbHJlYWR5IG9wZW5lZCBpdCwgdGhlbiB3ZSd2ZQorCSAqIGFscmVhZHkgZG9uZSB0aGUgY2FwYWJpbGl0aWVzIGNoZWNrcyBhdCBvcGVuIHRpbWUuCisJICovCisJaWYgKGZyb21fZmlsZSAmJiB0eXBlICE9IFNZU0xPR19BQ1RJT05fT1BFTikKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3lzbG9nX2FjdGlvbl9yZXN0cmljdGVkKHR5cGUpKSB7CisJCWlmIChjYXBhYmxlKENBUF9TWVNMT0cpKQorCQkJcmV0dXJuIDA7CisJCS8qIEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGFjY2VwdCBDQVBfU1lTX0FETUlOIHRvbywgd2l0aCBhIHdhcm5pbmcgKi8KKwkJaWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKKwkJCVdBUk5fT05DRSgxLCAiQXR0ZW1wdCB0byBhY2Nlc3Mgc3lzbG9nIHdpdGggQ0FQX1NZU19BRE1JTiAiCisJCQkJICJidXQgbm8gQ0FQX1NZU0xPRyAoZGVwcmVjYXRlZCkuXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVybiAtRVBFUk07CisJfQorCXJldHVybiAwOworfQorCiBpbnQgZG9fc3lzbG9nKGludCB0eXBlLCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgbGVuLCBib29sIGZyb21fZmlsZSkKIHsKIAl1bnNpZ25lZCBpLCBqLCBsaW1pdCwgY291bnQ7CiAJaW50IGRvX2NsZWFyID0gMDsKIAljaGFyIGM7Ci0JaW50IGVycm9yID0gMDsKKwlpbnQgZXJyb3I7CiAKLQkvKgotCSAqIElmIHRoaXMgaXMgZnJvbSAvcHJvYy9rbXNnIHdlIG9ubHkgZG8gdGhlIGNhcGFiaWxpdGllcyBjaGVja3MKLQkgKiBhdCBvcGVuIHRpbWUuCi0JICovCi0JaWYgKHR5cGUgPT0gU1lTTE9HX0FDVElPTl9PUEVOIHx8ICFmcm9tX2ZpbGUpIHsKLQkJaWYgKGRtZXNnX3Jlc3RyaWN0ICYmICFjYXBhYmxlKENBUF9TWVNMT0cpKQotCQkJZ290byB3YXJuOyAvKiBzd2l0Y2ggdG8gcmV0dXJuIC1FUEVSTSBhZnRlciAyLjYuMzkgKi8KLQkJaWYgKCh0eXBlICE9IFNZU0xPR19BQ1RJT05fUkVBRF9BTEwgJiYKLQkJICAgICB0eXBlICE9IFNZU0xPR19BQ1RJT05fU0laRV9CVUZGRVIpICYmCi0JCSAgICAhY2FwYWJsZShDQVBfU1lTTE9HKSkKLQkJCWdvdG8gd2FybjsgLyogc3dpdGNoIHRvIHJldHVybiAtRVBFUk0gYWZ0ZXIgMi42LjM5ICovCi0JfQorCWVycm9yID0gY2hlY2tfc3lzbG9nX3Blcm1pc3Npb25zKHR5cGUsIGZyb21fZmlsZSk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKIAogCWVycm9yID0gc2VjdXJpdHlfc3lzbG9nKHR5cGUpOwogCWlmIChlcnJvcikKQEAgLTQyMywxMiArNDQ1LDYgQEAKIAl9CiBvdXQ6CiAJcmV0dXJuIGVycm9yOwotd2FybjoKLQkvKiByZW1vdmUgYWZ0ZXIgMi42LjM5ICovCi0JaWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCVdBUk5fT05DRSgxLCAiQXR0ZW1wdCB0byBhY2Nlc3Mgc3lzbG9nIHdpdGggQ0FQX1NZU19BRE1JTiAiCi0JCSAgImJ1dCBubyBDQVBfU1lTTE9HIChkZXByZWNhdGVkIGFuZCBkZW5pZWQpLlxuIik7Ci0JcmV0dXJuIC1FUEVSTTsKIH0KIAogU1lTQ0FMTF9ERUZJTkUzKHN5c2xvZywgaW50LCB0eXBlLCBjaGFyIF9fdXNlciAqLCBidWYsIGludCwgbGVuKQpAQCAtNTAxLDcgKzUxNyw3IEBACiAvKgogICogQ2FsbCB0aGUgY29uc29sZSBkcml2ZXJzLCBhc2tpbmcgdGhlbSB0byB3cml0ZSBvdXQKICAqIGxvZ19idWZbc3RhcnRdIHRvIGxvZ19idWZbZW5kIC0gMV0uCi0gKiBUaGUgY29uc29sZV9zZW0gbXVzdCBiZSBoZWxkLgorICogVGhlIGNvbnNvbGVfbG9jayBtdXN0IGJlIGhlbGQuCiAgKi8KIHN0YXRpYyB2b2lkIGNhbGxfY29uc29sZV9kcml2ZXJzKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpCiB7CkBAIC02MDQsMTEgKzYyMCwxMSBAQAogICoKICAqIFRoaXMgaXMgcHJpbnRrKCkuICBJdCBjYW4gYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQuICBXZSB3YW50IGl0IHRvIHdvcmsuCiAgKgotICogV2UgdHJ5IHRvIGdyYWIgdGhlIGNvbnNvbGVfc2VtLiAgSWYgd2Ugc3VjY2VlZCwgaXQncyBlYXN5IC0gd2UgbG9nIHRoZSBvdXRwdXQgYW5kCisgKiBXZSB0cnkgdG8gZ3JhYiB0aGUgY29uc29sZV9sb2NrLiAgSWYgd2Ugc3VjY2VlZCwgaXQncyBlYXN5IC0gd2UgbG9nIHRoZSBvdXRwdXQgYW5kCiAgKiBjYWxsIHRoZSBjb25zb2xlIGRyaXZlcnMuICBJZiB3ZSBmYWlsIHRvIGdldCB0aGUgc2VtYXBob3JlIHdlIHBsYWNlIHRoZSBvdXRwdXQKICAqIGludG8gdGhlIGxvZyBidWZmZXIgYW5kIHJldHVybi4gIFRoZSBjdXJyZW50IGhvbGRlciBvZiB0aGUgY29uc29sZV9zZW0gd2lsbAotICogbm90aWNlIHRoZSBuZXcgb3V0cHV0IGluIHJlbGVhc2VfY29uc29sZV9zZW0oKSBhbmQgd2lsbCBzZW5kIGl0IHRvIHRoZQotICogY29uc29sZXMgYmVmb3JlIHJlbGVhc2luZyB0aGUgc2VtYXBob3JlLgorICogbm90aWNlIHRoZSBuZXcgb3V0cHV0IGluIGNvbnNvbGVfdW5sb2NrKCk7IGFuZCB3aWxsIHNlbmQgaXQgdG8gdGhlCisgKiBjb25zb2xlcyBiZWZvcmUgcmVsZWFzaW5nIHRoZSBsb2NrLgogICoKICAqIE9uZSBlZmZlY3Qgb2YgdGhpcyBkZWZlcnJlZCBwcmludGluZyBpcyB0aGF0IGNvZGUgd2hpY2ggY2FsbHMgcHJpbnRrKCkgYW5kCiAgKiB0aGVuIGNoYW5nZXMgY29uc29sZV9sb2dsZXZlbCBtYXkgYnJlYWsuIFRoaXMgaXMgYmVjYXVzZSBjb25zb2xlX2xvZ2xldmVsCkBAIC02NTksMTkgKzY3NSwxOSBAQAogLyoKICAqIFRyeSB0byBnZXQgY29uc29sZSBvd25lcnNoaXAgdG8gYWN0dWFsbHkgc2hvdyB0aGUga2VybmVsCiAgKiBtZXNzYWdlcyBmcm9tIGEgJ3ByaW50aycuIFJldHVybiB0cnVlIChhbmQgd2l0aCB0aGUKLSAqIGNvbnNvbGVfc2VtYXBob3JlIGhlbGQsIGFuZCAnY29uc29sZV9sb2NrZWQnIHNldCkgaWYgaXQKKyAqIGNvbnNvbGVfbG9jayBoZWxkLCBhbmQgJ2NvbnNvbGVfbG9ja2VkJyBzZXQpIGlmIGl0CiAgKiBpcyBzdWNjZXNzZnVsLCBmYWxzZSBvdGhlcndpc2UuCiAgKgogICogVGhpcyBnZXRzIGNhbGxlZCB3aXRoIHRoZSAnbG9nYnVmX2xvY2snIHNwaW5sb2NrIGhlbGQgYW5kCiAgKiBpbnRlcnJ1cHRzIGRpc2FibGVkLiBJdCBzaG91bGQgcmV0dXJuIHdpdGggJ2xvY2tidWZfbG9jaycKICAqIHJlbGVhc2VkIGJ1dCBpbnRlcnJ1cHRzIHN0aWxsIGRpc2FibGVkLgogICovCi1zdGF0aWMgaW50IGFjcXVpcmVfY29uc29sZV9zZW1hcGhvcmVfZm9yX3ByaW50ayh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIGludCBjb25zb2xlX3RyeWxvY2tfZm9yX3ByaW50ayh1bnNpZ25lZCBpbnQgY3B1KQogCV9fcmVsZWFzZXMoJmxvZ2J1Zl9sb2NrKQogewogCWludCByZXR2YWwgPSAwOwogCi0JaWYgKCF0cnlfYWNxdWlyZV9jb25zb2xlX3NlbSgpKSB7CisJaWYgKGNvbnNvbGVfdHJ5bG9jaygpKSB7CiAJCXJldHZhbCA9IDE7CiAKIAkJLyoKQEAgLTgyNywxMiArODQzLDEyIEBACiAJICogYWN0dWFsIG1hZ2ljIChwcmludCBvdXQgYnVmZmVycywgd2FrZSB1cCBrbG9nZCwKIAkgKiBldGMpLiAKIAkgKgotCSAqIFRoZSBhY3F1aXJlX2NvbnNvbGVfc2VtYXBob3JlX2Zvcl9wcmludGsoKSBmdW5jdGlvbgorCSAqIFRoZSBjb25zb2xlX3RyeWxvY2tfZm9yX3ByaW50aygpIGZ1bmN0aW9uCiAJICogd2lsbCByZWxlYXNlICdsb2didWZfbG9jaycgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0CiAJICogYWN0dWFsbHkgZ2V0cyB0aGUgc2VtYXBob3JlIG9yIG5vdC4KIAkgKi8KLQlpZiAoYWNxdWlyZV9jb25zb2xlX3NlbWFwaG9yZV9mb3JfcHJpbnRrKHRoaXNfY3B1KSkKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWlmIChjb25zb2xlX3RyeWxvY2tfZm9yX3ByaW50ayh0aGlzX2NwdSkpCisJCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlsb2NrZGVwX29uKCk7CiBvdXRfcmVzdG9yZV9pcnFzOgpAQCAtOTkzLDcgKzEwMDksNyBAQAogCWlmICghY29uc29sZV9zdXNwZW5kX2VuYWJsZWQpCiAJCXJldHVybjsKIAlwcmludGsoIlN1c3BlbmRpbmcgY29uc29sZShzKSAodXNlIG5vX2NvbnNvbGVfc3VzcGVuZCB0byBkZWJ1ZylcbiIpOwotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAljb25zb2xlX3N1c3BlbmRlZCA9IDE7CiAJdXAoJmNvbnNvbGVfc2VtKTsKIH0KQEAgLTEwMDQsNyArMTAyMCw3IEBACiAJCXJldHVybjsKIAlkb3duKCZjb25zb2xlX3NlbSk7CiAJY29uc29sZV9zdXNwZW5kZWQgPSAwOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogfQogCiAvKioKQEAgLTEwMjcsMjEgKzEwNDMsMjEgQEAKIAljYXNlIENQVV9EWUlORzoKIAljYXNlIENQVV9ET1dOX0ZBSUxFRDoKIAljYXNlIENQVV9VUF9DQU5DRUxFRDoKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOworCQljb25zb2xlX3VubG9jaygpOwogCX0KIAlyZXR1cm4gTk9USUZZX09LOwogfQogCiAvKioKLSAqIGFjcXVpcmVfY29uc29sZV9zZW0gLSBsb2NrIHRoZSBjb25zb2xlIHN5c3RlbSBmb3IgZXhjbHVzaXZlIHVzZS4KKyAqIGNvbnNvbGVfbG9jayAtIGxvY2sgdGhlIGNvbnNvbGUgc3lzdGVtIGZvciBleGNsdXNpdmUgdXNlLgogICoKLSAqIEFjcXVpcmVzIGEgc2VtYXBob3JlIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgY2FsbGVyIGhhcworICogQWNxdWlyZXMgYSBsb2NrIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgY2FsbGVyIGhhcwogICogZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgY29uc29sZSBzeXN0ZW0gYW5kIHRoZSBjb25zb2xlX2RyaXZlcnMgbGlzdC4KICAqCiAgKiBDYW4gc2xlZXAsIHJldHVybnMgbm90aGluZy4KICAqLwotdm9pZCBhY3F1aXJlX2NvbnNvbGVfc2VtKHZvaWQpCit2b2lkIGNvbnNvbGVfbG9jayh2b2lkKQogewogCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CiAJZG93bigmY29uc29sZV9zZW0pOwpAQCAtMTA1MCwyMSArMTA2NiwyOSBAQAogCWNvbnNvbGVfbG9ja2VkID0gMTsKIAljb25zb2xlX21heV9zY2hlZHVsZSA9IDE7CiB9Ci1FWFBPUlRfU1lNQk9MKGFjcXVpcmVfY29uc29sZV9zZW0pOworRVhQT1JUX1NZTUJPTChjb25zb2xlX2xvY2spOwogCi1pbnQgdHJ5X2FjcXVpcmVfY29uc29sZV9zZW0odm9pZCkKKy8qKgorICogY29uc29sZV90cnlsb2NrIC0gdHJ5IHRvIGxvY2sgdGhlIGNvbnNvbGUgc3lzdGVtIGZvciBleGNsdXNpdmUgdXNlLgorICoKKyAqIFRyaWVkIHRvIGFjcXVpcmUgYSBsb2NrIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgY2FsbGVyIGhhcworICogZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgY29uc29sZSBzeXN0ZW0gYW5kIHRoZSBjb25zb2xlX2RyaXZlcnMgbGlzdC4KKyAqCisgKiByZXR1cm5zIDEgb24gc3VjY2VzcywgYW5kIDAgb24gZmFpbHVyZSB0byBhY3F1aXJlIHRoZSBsb2NrLgorICovCitpbnQgY29uc29sZV90cnlsb2NrKHZvaWQpCiB7CiAJaWYgKGRvd25fdHJ5bG9jaygmY29uc29sZV9zZW0pKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOwogCWlmIChjb25zb2xlX3N1c3BlbmRlZCkgewogCQl1cCgmY29uc29sZV9zZW0pOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOwogCX0KIAljb25zb2xlX2xvY2tlZCA9IDE7CiAJY29uc29sZV9tYXlfc2NoZWR1bGUgPSAwOwotCXJldHVybiAwOworCXJldHVybiAxOwogfQotRVhQT1JUX1NZTUJPTCh0cnlfYWNxdWlyZV9jb25zb2xlX3NlbSk7CitFWFBPUlRfU1lNQk9MKGNvbnNvbGVfdHJ5bG9jayk7CiAKIGludCBpc19jb25zb2xlX2xvY2tlZCh2b2lkKQogewpAQCAtMTA5NSwyMCArMTExOSwyMCBAQAogfQogCiAvKioKLSAqIHJlbGVhc2VfY29uc29sZV9zZW0gLSB1bmxvY2sgdGhlIGNvbnNvbGUgc3lzdGVtCisgKiBjb25zb2xlX3VubG9jayAtIHVubG9jayB0aGUgY29uc29sZSBzeXN0ZW0KICAqCi0gKiBSZWxlYXNlcyB0aGUgc2VtYXBob3JlIHdoaWNoIHRoZSBjYWxsZXIgaG9sZHMgb24gdGhlIGNvbnNvbGUgc3lzdGVtCisgKiBSZWxlYXNlcyB0aGUgY29uc29sZV9sb2NrIHdoaWNoIHRoZSBjYWxsZXIgaG9sZHMgb24gdGhlIGNvbnNvbGUgc3lzdGVtCiAgKiBhbmQgdGhlIGNvbnNvbGUgZHJpdmVyIGxpc3QuCiAgKgotICogV2hpbGUgdGhlIHNlbWFwaG9yZSB3YXMgaGVsZCwgY29uc29sZSBvdXRwdXQgbWF5IGhhdmUgYmVlbiBidWZmZXJlZAotICogYnkgcHJpbnRrKCkuICBJZiB0aGlzIGlzIHRoZSBjYXNlLCByZWxlYXNlX2NvbnNvbGVfc2VtKCkgZW1pdHMKLSAqIHRoZSBvdXRwdXQgcHJpb3IgdG8gcmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUuCisgKiBXaGlsZSB0aGUgY29uc29sZV9sb2NrIHdhcyBoZWxkLCBjb25zb2xlIG91dHB1dCBtYXkgaGF2ZSBiZWVuIGJ1ZmZlcmVkCisgKiBieSBwcmludGsoKS4gIElmIHRoaXMgaXMgdGhlIGNhc2UsIGNvbnNvbGVfdW5sb2NrKCk7IGVtaXRzCisgKiB0aGUgb3V0cHV0IHByaW9yIHRvIHJlbGVhc2luZyB0aGUgbG9jay4KICAqCiAgKiBJZiB0aGVyZSBpcyBvdXRwdXQgd2FpdGluZyBmb3Iga2xvZ2QsIHdlIHdha2UgaXQgdXAuCiAgKgotICogcmVsZWFzZV9jb25zb2xlX3NlbSgpIG1heSBiZSBjYWxsZWQgZnJvbSBhbnkgY29udGV4dC4KKyAqIGNvbnNvbGVfdW5sb2NrKCk7IG1heSBiZSBjYWxsZWQgZnJvbSBhbnkgY29udGV4dC4KICAqLwotdm9pZCByZWxlYXNlX2NvbnNvbGVfc2VtKHZvaWQpCit2b2lkIGNvbnNvbGVfdW5sb2NrKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBfY29uX3N0YXJ0LCBfbG9nX2VuZDsKQEAgLTExNDEsNyArMTE2NSw3IEBACiAJaWYgKHdha2Vfa2xvZ2QpCiAJCXdha2VfdXBfa2xvZ2QoKTsKIH0KLUVYUE9SVF9TWU1CT0wocmVsZWFzZV9jb25zb2xlX3NlbSk7CitFWFBPUlRfU1lNQk9MKGNvbnNvbGVfdW5sb2NrKTsKIAogLyoqCiAgKiBjb25zb2xlX2NvbmRpdGlvbmFsX3NjaGVkdWxlIC0geWllbGQgdGhlIENQVSBpZiByZXF1aXJlZApAQCAtMTE1MCw3ICsxMTc0LDcgQEAKICAqIGlmIHRoaXMgQ1BVIHNob3VsZCB5aWVsZCB0aGUgQ1BVIHRvIGFub3RoZXIgdGFzaywgZG8KICAqIHNvIGhlcmUuCiAgKgotICogTXVzdCBiZSBjYWxsZWQgd2l0aGluIGFjcXVpcmVfY29uc29sZV9zZW0oKS4KKyAqIE11c3QgYmUgY2FsbGVkIHdpdGhpbiBjb25zb2xlX2xvY2soKTsuCiAgKi8KIHZvaWQgX19zY2hlZCBjb25zb2xlX2NvbmRpdGlvbmFsX3NjaGVkdWxlKHZvaWQpCiB7CkBAIC0xMTcxLDE0ICsxMTk1LDE0IEBACiAJCWlmIChkb3duX3RyeWxvY2soJmNvbnNvbGVfc2VtKSAhPSAwKQogCQkJcmV0dXJuOwogCX0gZWxzZQotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCiAJY29uc29sZV9sb2NrZWQgPSAxOwogCWNvbnNvbGVfbWF5X3NjaGVkdWxlID0gMDsKIAlmb3JfZWFjaF9jb25zb2xlKGMpCiAJCWlmICgoYy0+ZmxhZ3MgJiBDT05fRU5BQkxFRCkgJiYgYy0+dW5ibGFuaykKIAkJCWMtPnVuYmxhbmsoKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIH0KIAogLyoKQEAgLTExODksNyArMTIxMyw3IEBACiAJc3RydWN0IGNvbnNvbGUgKmM7CiAJc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciA9IE5VTEw7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZm9yX2VhY2hfY29uc29sZShjKSB7CiAJCWlmICghYy0+ZGV2aWNlKQogCQkJY29udGludWU7CkBAIC0xMTk3LDcgKzEyMjEsNyBAQAogCQlpZiAoZHJpdmVyKQogCQkJYnJlYWs7CiAJfQotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiBkcml2ZXI7CiB9CiAKQEAgLTEyMDgsMTcgKzEyMzIsMTcgQEAKICAqLwogdm9pZCBjb25zb2xlX3N0b3Aoc3RydWN0IGNvbnNvbGUgKmNvbnNvbGUpCiB7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWNvbnNvbGUtPmZsYWdzICY9IH5DT05fRU5BQkxFRDsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIH0KIEVYUE9SVF9TWU1CT0woY29uc29sZV9zdG9wKTsKIAogdm9pZCBjb25zb2xlX3N0YXJ0KHN0cnVjdCBjb25zb2xlICpjb25zb2xlKQogewotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAljb25zb2xlLT5mbGFncyB8PSBDT05fRU5BQkxFRDsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIH0KIEVYUE9SVF9TWU1CT0woY29uc29sZV9zdGFydCk7CiAKQEAgLTEzNDAsNyArMTM2NCw3IEBACiAJICoJUHV0IHRoaXMgY29uc29sZSBpbiB0aGUgbGlzdCAtIGtlZXAgdGhlCiAJICoJcHJlZmVycmVkIGRyaXZlciBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KIAkgKi8KLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWYgKChuZXdjb24tPmZsYWdzICYgQ09OX0NPTlNERVYpIHx8IGNvbnNvbGVfZHJpdmVycyA9PSBOVUxMKSB7CiAJCW5ld2Nvbi0+bmV4dCA9IGNvbnNvbGVfZHJpdmVyczsKIAkJY29uc29sZV9kcml2ZXJzID0gbmV3Y29uOwpAQCAtMTM1MiwxNCArMTM3NiwxNCBAQAogCX0KIAlpZiAobmV3Y29uLT5mbGFncyAmIENPTl9QUklOVEJVRkZFUikgewogCQkvKgotCQkgKiByZWxlYXNlX2NvbnNvbGVfc2VtKCkgd2lsbCBwcmludCBvdXQgdGhlIGJ1ZmZlcmVkIG1lc3NhZ2VzCisJCSAqIGNvbnNvbGVfdW5sb2NrKCk7IHdpbGwgcHJpbnQgb3V0IHRoZSBidWZmZXJlZCBtZXNzYWdlcwogCQkgKiBmb3IgdXMuCiAJCSAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9nYnVmX2xvY2ssIGZsYWdzKTsKIAkJY29uX3N0YXJ0ID0gbG9nX3N0YXJ0OwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2didWZfbG9jaywgZmxhZ3MpOwogCX0KLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAljb25zb2xlX3N5c2ZzX25vdGlmeSgpOwogCiAJLyoKQEAgLTEzOTYsNyArMTQyMCw3IEBACiAJCXJldHVybiBicmFpbGxlX3VucmVnaXN0ZXJfY29uc29sZShjb25zb2xlKTsKICNlbmRpZgogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlmIChjb25zb2xlX2RyaXZlcnMgPT0gY29uc29sZSkgewogCQljb25zb2xlX2RyaXZlcnM9Y29uc29sZS0+bmV4dDsKIAkJcmVzID0gMDsKQEAgLTE0MTgsNyArMTQ0Miw3IEBACiAJaWYgKGNvbnNvbGVfZHJpdmVycyAhPSBOVUxMICYmIGNvbnNvbGUtPmZsYWdzICYgQ09OX0NPTlNERVYpCiAJCWNvbnNvbGVfZHJpdmVycy0+ZmxhZ3MgfD0gQ09OX0NPTlNERVY7CiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAljb25zb2xlX3N5c2ZzX25vdGlmeSgpOwogCXJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvcHRyYWNlLmMgYi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggOTliYmFhMy4uMTcwOGIxZSAxMDA2NDQKLS0tIGEva2VybmVsL3B0cmFjZS5jCisrKyBiL2tlcm5lbC9wdHJhY2UuYwpAQCAtMzEzLDcgKzMxMyw3IEBACiAJCWNoaWxkLT5leGl0X2NvZGUgPSBkYXRhOwogCQlkZWFkID0gX19wdHJhY2VfZGV0YWNoKGN1cnJlbnQsIGNoaWxkKTsKIAkJaWYgKCFjaGlsZC0+ZXhpdF9zdGF0ZSkKLQkJCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7CisJCQl3YWtlX3VwX3N0YXRlKGNoaWxkLCBUQVNLX1RSQUNFRCB8IFRBU0tfU1RPUFBFRCk7CiAJfQogCXdyaXRlX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGVhM2U1ZWYuLjE4ZDM4ZTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC01NTMsOSArNTUzLDYgQEAKIAkvKiB0cnlfdG9fd2FrZV91cCgpIHN0YXRzICovCiAJdW5zaWduZWQgaW50IHR0d3VfY291bnQ7CiAJdW5zaWduZWQgaW50IHR0d3VfbG9jYWw7Ci0KLQkvKiBCS0wgc3RhdHMgKi8KLQl1bnNpZ25lZCBpbnQgYmtsX2NvdW50OwogI2VuZGlmCiB9OwogCkBAIC02MDksNiArNjA2LDkgQEAKIAlzdHJ1Y3QgdGFza19ncm91cCAqdGc7CiAJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKIAorCWlmIChwLT5mbGFncyAmIFBGX0VYSVRJTkcpCisJCXJldHVybiAmcm9vdF90YXNrX2dyb3VwOworCiAJY3NzID0gdGFza19zdWJzeXNfc3RhdGVfY2hlY2socCwgY3B1X2Nncm91cF9zdWJzeXNfaWQsCiAJCQlsb2NrZGVwX2lzX2hlbGQoJnRhc2tfcnEocCktPmxvY2spKTsKIAl0ZyA9IGNvbnRhaW5lcl9vZihjc3MsIHN0cnVjdCB0YXNrX2dyb3VwLCBjc3MpOwpAQCAtMzg4Nyw3ICszODg3LDcgQEAKIAlzY2hlZHN0YXRfaW5jKHRoaXNfcnEoKSwgc2NoZWRfY291bnQpOwogI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCiAJaWYgKHVubGlrZWx5KHByZXYtPmxvY2tfZGVwdGggPj0gMCkpIHsKLQkJc2NoZWRzdGF0X2luYyh0aGlzX3JxKCksIGJrbF9jb3VudCk7CisJCXNjaGVkc3RhdF9pbmModGhpc19ycSgpLCBycV9zY2hlZF9pbmZvLmJrbF9jb3VudCk7CiAJCXNjaGVkc3RhdF9pbmMocHJldiwgc2NoZWRfaW5mby5ia2xfY291bnQpOwogCX0KICNlbmRpZgpAQCAtNDg3MSw3ICs0ODcxLDggQEAKIAkJICogYXNzaWduZWQuCiAJCSAqLwogCQlpZiAocnRfYmFuZHdpZHRoX2VuYWJsZWQoKSAmJiBydF9wb2xpY3kocG9saWN5KSAmJgotCQkJCXRhc2tfZ3JvdXAocCktPnJ0X2JhbmR3aWR0aC5ydF9ydW50aW1lID09IDApIHsKKwkJCQl0YXNrX2dyb3VwKHApLT5ydF9iYW5kd2lkdGgucnRfcnVudGltZSA9PSAwICYmCisJCQkJIXRhc2tfZ3JvdXBfaXNfYXV0b2dyb3VwKHRhc2tfZ3JvdXAocCkpKSB7CiAJCQlfX3Rhc2tfcnFfdW5sb2NrKHJxKTsKIAkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5waV9sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gLUVQRVJNOwpAQCAtODg4Miw2ICs4ODgzLDIwIEBACiAJfQogfQogCitzdGF0aWMgdm9pZAorY3B1X2Nncm91cF9leGl0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCS8qCisJICogY2dyb3VwX2V4aXQoKSBpcyBjYWxsZWQgaW4gdGhlIGNvcHlfcHJvY2VzcygpIGZhaWx1cmUgcGF0aC4KKwkgKiBJZ25vcmUgdGhpcyBjYXNlIHNpbmNlIHRoZSB0YXNrIGhhc24ndCByYW4geWV0LCB0aGlzIGF2b2lkcworCSAqIHRyeWluZyB0byBwb2tlIGEgaGFsZiBmcmVlZCB0YXNrIHN0YXRlIGZyb20gZ2VuZXJpYyBjb2RlLgorCSAqLworCWlmICghKHRhc2stPmZsYWdzICYgUEZfRVhJVElORykpCisJCXJldHVybjsKKworCXNjaGVkX21vdmVfdGFzayh0YXNrKTsKK30KKwogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiBzdGF0aWMgaW50IGNwdV9zaGFyZXNfd3JpdGVfdTY0KHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBjZnR5cGUgKmNmdHlwZSwKIAkJCQl1NjQgc2hhcmV2YWwpCkBAIC04OTU0LDYgKzg5NjksNyBAQAogCS5kZXN0cm95CT0gY3B1X2Nncm91cF9kZXN0cm95LAogCS5jYW5fYXR0YWNoCT0gY3B1X2Nncm91cF9jYW5fYXR0YWNoLAogCS5hdHRhY2gJCT0gY3B1X2Nncm91cF9hdHRhY2gsCisJLmV4aXQJCT0gY3B1X2Nncm91cF9leGl0LAogCS5wb3B1bGF0ZQk9IGNwdV9jZ3JvdXBfcG9wdWxhdGUsCiAJLnN1YnN5c19pZAk9IGNwdV9jZ3JvdXBfc3Vic3lzX2lkLAogCS5lYXJseV9pbml0CT0gMSwKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9hdXRvZ3JvdXAuYyBiL2tlcm5lbC9zY2hlZF9hdXRvZ3JvdXAuYwppbmRleCAzMmE3MjNiLi45ZmI2NTYyIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfYXV0b2dyb3VwLmMKKysrIGIva2VybmVsL3NjaGVkX2F1dG9ncm91cC5jCkBAIC0yNyw2ICsyNywxMSBAQAogewogCXN0cnVjdCBhdXRvZ3JvdXAgKmFnID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBhdXRvZ3JvdXAsIGtyZWYpOwogCisjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECisJLyogV2UndmUgcmVkaXJlY3RlZCBSVCB0YXNrcyB0byB0aGUgcm9vdCB0YXNrIGdyb3VwLi4uICovCisJYWctPnRnLT5ydF9zZSA9IE5VTEw7CisJYWctPnRnLT5ydF9ycSA9IE5VTEw7CisjZW5kaWYKIAlzY2hlZF9kZXN0cm95X2dyb3VwKGFnLT50Zyk7CiB9CiAKQEAgLTU1LDYgKzYwLDEwIEBACiAJcmV0dXJuIGFnOwogfQogCisjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECitzdGF0aWMgdm9pZCBmcmVlX3J0X3NjaGVkX2dyb3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0Zyk7CisjZW5kaWYKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgYXV0b2dyb3VwICphdXRvZ3JvdXBfY3JlYXRlKHZvaWQpCiB7CiAJc3RydWN0IGF1dG9ncm91cCAqYWcgPSBremFsbG9jKHNpemVvZigqYWcpLCBHRlBfS0VSTkVMKTsKQEAgLTcyLDYgKzgxLDE5IEBACiAJaW5pdF9yd3NlbSgmYWctPmxvY2spOwogCWFnLT5pZCA9IGF0b21pY19pbmNfcmV0dXJuKCZhdXRvZ3JvdXBfc2VxX25yKTsKIAlhZy0+dGcgPSB0ZzsKKyNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKKwkvKgorCSAqIEF1dG9ncm91cCBSVCB0YXNrcyBhcmUgcmVkaXJlY3RlZCB0byB0aGUgcm9vdCB0YXNrIGdyb3VwCisJICogc28gd2UgZG9uJ3QgaGF2ZSB0byBtb3ZlIHRhc2tzIGFyb3VuZCB1cG9uIHBvbGljeSBjaGFuZ2UsCisJICogb3IgZmxhaWwgYXJvdW5kIHRyeWluZyB0byBhbGxvY2F0ZSBiYW5kd2lkdGggb24gdGhlIGZseS4KKwkgKiBBIGJhbmR3aWR0aCBleGNlcHRpb24gaW4gX19zY2hlZF9zZXRzY2hlZHVsZXIoKSBhbGxvd3MKKwkgKiB0aGUgcG9saWN5IGNoYW5nZSB0byBwcm9jZWVkLiAgVGhlcmVhZnRlciwgdGFza19ncm91cCgpCisJICogcmV0dXJucyAmcm9vdF90YXNrX2dyb3VwLCBzbyB6ZXJvIGJhbmR3aWR0aCBpcyByZXF1aXJlZC4KKwkgKi8KKwlmcmVlX3J0X3NjaGVkX2dyb3VwKHRnKTsKKwl0Zy0+cnRfc2UgPSByb290X3Rhc2tfZ3JvdXAucnRfc2U7CisJdGctPnJ0X3JxID0gcm9vdF90YXNrX2dyb3VwLnJ0X3JxOworI2VuZGlmCiAJdGctPmF1dG9ncm91cCA9IGFnOwogCiAJcmV0dXJuIGFnOwpAQCAtMTA2LDYgKzEyOCwxMSBAQAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgdGFza19ncm91cF9pc19hdXRvZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKQoreworCXJldHVybiB0ZyAhPSAmcm9vdF90YXNrX2dyb3VwICYmIHRnLT5hdXRvZ3JvdXA7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfZ3JvdXAgKgogYXV0b2dyb3VwX3Rhc2tfZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgdGFza19ncm91cCAqdGcpCiB7CkBAIC0yMzEsNiArMjU4LDExIEBACiAjaWZkZWYgQ09ORklHX1NDSEVEX0RFQlVHCiBzdGF0aWMgaW5saW5lIGludCBhdXRvZ3JvdXBfcGF0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKIHsKKwlpbnQgZW5hYmxlZCA9IEFDQ0VTU19PTkNFKHN5c2N0bF9zY2hlZF9hdXRvZ3JvdXBfZW5hYmxlZCk7CisKKwlpZiAoIWVuYWJsZWQgfHwgIXRnLT5hdXRvZ3JvdXApCisJCXJldHVybiAwOworCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJXMtJWxkIiwgIi9hdXRvZ3JvdXAiLCB0Zy0+YXV0b2dyb3VwLT5pZCk7CiB9CiAjZW5kaWYgLyogQ09ORklHX1NDSEVEX0RFQlVHICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfYXV0b2dyb3VwLmggYi9rZXJuZWwvc2NoZWRfYXV0b2dyb3VwLmgKaW5kZXggNTM1OGUyNC4uN2I4NTlmZiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2F1dG9ncm91cC5oCisrKyBiL2tlcm5lbC9zY2hlZF9hdXRvZ3JvdXAuaApAQCAtMTUsNiArMTUsMTAgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGF1dG9ncm91cF9pbml0KHN0cnVjdCB0YXNrX3N0cnVjdCAqaW5pdF90YXNrKSB7ICB9CiBzdGF0aWMgaW5saW5lIHZvaWQgYXV0b2dyb3VwX2ZyZWUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKSB7IH0KK3N0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2dyb3VwX2lzX2F1dG9ncm91cChzdHJ1Y3QgdGFza19ncm91cCAqdGcpCit7CisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfZ3JvdXAgKgogYXV0b2dyb3VwX3Rhc2tfZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgdGFza19ncm91cCAqdGcpCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZGVidWcuYyBiL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCmluZGV4IDFkZmFlM2QuLmViNmNiOGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCisrKyBiL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCkBAIC0xNiw2ICsxNiw4IEBACiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CiAKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2NoZWRfZGVidWdfbG9jayk7CisKIC8qCiAgKiBUaGlzIGFsbG93cyBwcmludGluZyBib3RoIHRvIC9wcm9jL3NjaGVkX2RlYnVnIGFuZAogICogdG8gdGhlIGNvbnNvbGUKQEAgLTg2LDYgKzg4LDI2IEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKK3N0YXRpYyBjaGFyIGdyb3VwX3BhdGhbUEFUSF9NQVhdOworCitzdGF0aWMgY2hhciAqdGFza19ncm91cF9wYXRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZykKK3sKKwlpZiAoYXV0b2dyb3VwX3BhdGgodGcsIGdyb3VwX3BhdGgsIFBBVEhfTUFYKSkKKwkJcmV0dXJuIGdyb3VwX3BhdGg7CisKKwkvKgorCSAqIE1heSBiZSBOVUxMIGlmIHRoZSB1bmRlcmx5aW5nIGNncm91cCBpc24ndCBmdWxseS1jcmVhdGVkIHlldAorCSAqLworCWlmICghdGctPmNzcy5jZ3JvdXApIHsKKwkJZ3JvdXBfcGF0aFswXSA9ICdcMCc7CisJCXJldHVybiBncm91cF9wYXRoOworCX0KKwljZ3JvdXBfcGF0aCh0Zy0+Y3NzLmNncm91cCwgZ3JvdXBfcGF0aCwgUEFUSF9NQVgpOworCXJldHVybiBncm91cF9wYXRoOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkCiBwcmludF90YXNrKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewpAQCAtMTA4LDYgKzEzMCw5IEBACiAJU0VRX3ByaW50ZihtLCAiJTE1TGQgJTE1TGQgJTE1TGQuJTA2bGQgJTE1TGQuJTA2bGQgJTE1TGQuJTA2bGQiLAogCQkwTEwsIDBMTCwgMExMLCAwTCwgMExMLCAwTCwgMExMLCAwTCk7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ0dST1VQX1NDSEVECisJU0VRX3ByaW50ZihtLCAiICVzIiwgdGFza19ncm91cF9wYXRoKHRhc2tfZ3JvdXAocCkpKTsKKyNlbmRpZgogCiAJU0VRX3ByaW50ZihtLCAiXG4iKTsKIH0KQEAgLTE0NCw3ICsxNjksMTEgQEAKIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpsYXN0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKyNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAorCVNFUV9wcmludGYobSwgIlxuY2ZzX3JxWyVkXTolc1xuIiwgY3B1LCB0YXNrX2dyb3VwX3BhdGgoY2ZzX3JxLT50ZykpOworI2Vsc2UKIAlTRVFfcHJpbnRmKG0sICJcbmNmc19ycVslZF06XG4iLCBjcHUpOworI2VuZGlmCiAJU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVMZC4lMDZsZFxuIiwgImV4ZWNfY2xvY2siLAogCQkJU1BMSVRfTlMoY2ZzX3JxLT5leGVjX2Nsb2NrKSk7CiAKQEAgLTE5MSw3ICsyMjAsMTEgQEAKIAogdm9pZCBwcmludF9ydF9ycShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGludCBjcHUsIHN0cnVjdCBydF9ycSAqcnRfcnEpCiB7CisjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECisJU0VRX3ByaW50ZihtLCAiXG5ydF9ycVslZF06JXNcbiIsIGNwdSwgdGFza19ncm91cF9wYXRoKHJ0X3JxLT50ZykpOworI2Vsc2UKIAlTRVFfcHJpbnRmKG0sICJcbnJ0X3JxWyVkXTpcbiIsIGNwdSk7CisjZW5kaWYKIAogI2RlZmluZSBQKHgpIFwKIAlTRVFfcHJpbnRmKG0sICIgIC4lLTMwczogJUxkXG4iLCAjeCwgKGxvbmcgbG9uZykocnRfcnEtPngpKQpAQCAtMjEyLDYgKzI0NSw3IEBACiBzdGF0aWMgdm9pZCBwcmludF9jcHUoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1KQogewogCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAjaWZkZWYgQ09ORklHX1g4NgogCXsKQEAgLTI2MiwxNCArMjk2LDIwIEBACiAJUCh0dHd1X2NvdW50KTsKIAlQKHR0d3VfbG9jYWwpOwogCi0JUChia2xfY291bnQpOworCVNFUV9wcmludGYobSwgIiAgLiUtMzBzOiAlZFxuIiwgImJrbF9jb3VudCIsCisJCQkJcnEtPnJxX3NjaGVkX2luZm8uYmtsX2NvdW50KTsKIAogI3VuZGVmIFAKKyN1bmRlZiBQNjQKICNlbmRpZgorCXNwaW5fbG9ja19pcnFzYXZlKCZzY2hlZF9kZWJ1Z19sb2NrLCBmbGFncyk7CiAJcHJpbnRfY2ZzX3N0YXRzKG0sIGNwdSk7CiAJcHJpbnRfcnRfc3RhdHMobSwgY3B1KTsKIAorCXJjdV9yZWFkX2xvY2soKTsKIAlwcmludF9ycShtLCBycSwgY3B1KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hlZF9kZWJ1Z19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzY2hlZF90dW5hYmxlX3NjYWxpbmdfbmFtZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IGM2MmViYWUuLjBjMjZlMmQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtNjk5LDcgKzY5OSw4IEBACiAJY2ZzX3JxLT5ucl9ydW5uaW5nLS07CiB9CiAKLSNpZiBkZWZpbmVkIENPTkZJR19TTVAgJiYgZGVmaW5lZCBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAorI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECisjIGlmZGVmIENPTkZJR19TTVAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9jZnNfcnFfbG9hZF9jb250cmlidXRpb24oc3RydWN0IGNmc19ycSAqY2ZzX3JxLAogCQkJCQkgICAgaW50IGdsb2JhbF91cGRhdGUpCiB7CkBAIC03MjEsMTAgKzcyMiwxMCBAQAogCXU2NCBub3csIGRlbHRhOwogCXVuc2lnbmVkIGxvbmcgbG9hZCA9IGNmc19ycS0+bG9hZC53ZWlnaHQ7CiAKLQlpZiAoIWNmc19ycSkKKwlpZiAoY2ZzX3JxLT50ZyA9PSAmcm9vdF90YXNrX2dyb3VwKQogCQlyZXR1cm47CiAKLQlub3cgPSBycV9vZihjZnNfcnEpLT5jbG9jazsKKwlub3cgPSBycV9vZihjZnNfcnEpLT5jbG9ja190YXNrOwogCWRlbHRhID0gbm93IC0gY2ZzX3JxLT5sb2FkX3N0YW1wOwogCiAJLyogdHJ1bmNhdGUgbG9hZCBoaXN0b3J5IGF0IDQgaWRsZSBwZXJpb2RzICovCkBAIC03NjIsNiArNzYzLDUxIEBACiAJCWxpc3RfZGVsX2xlYWZfY2ZzX3JxKGNmc19ycSk7CiB9CiAKK3N0YXRpYyBsb25nIGNhbGNfY2ZzX3NoYXJlcyhzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCB0YXNrX2dyb3VwICp0ZywKKwkJCQlsb25nIHdlaWdodF9kZWx0YSkKK3sKKwlsb25nIGxvYWRfd2VpZ2h0LCBsb2FkLCBzaGFyZXM7CisKKwlsb2FkID0gY2ZzX3JxLT5sb2FkLndlaWdodCArIHdlaWdodF9kZWx0YTsKKworCWxvYWRfd2VpZ2h0ID0gYXRvbWljX3JlYWQoJnRnLT5sb2FkX3dlaWdodCk7CisJbG9hZF93ZWlnaHQgLT0gY2ZzX3JxLT5sb2FkX2NvbnRyaWJ1dGlvbjsKKwlsb2FkX3dlaWdodCArPSBsb2FkOworCisJc2hhcmVzID0gKHRnLT5zaGFyZXMgKiBsb2FkKTsKKwlpZiAobG9hZF93ZWlnaHQpCisJCXNoYXJlcyAvPSBsb2FkX3dlaWdodDsKKworCWlmIChzaGFyZXMgPCBNSU5fU0hBUkVTKQorCQlzaGFyZXMgPSBNSU5fU0hBUkVTOworCWlmIChzaGFyZXMgPiB0Zy0+c2hhcmVzKQorCQlzaGFyZXMgPSB0Zy0+c2hhcmVzOworCisJcmV0dXJuIHNoYXJlczsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2VudGl0eV9zaGFyZXNfdGljayhzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCit7CisJaWYgKGNmc19ycS0+bG9hZF91bmFjY19leGVjX3RpbWUgPiBzeXNjdGxfc2NoZWRfc2hhcmVzX3dpbmRvdykgeworCQl1cGRhdGVfY2ZzX2xvYWQoY2ZzX3JxLCAwKTsKKwkJdXBkYXRlX2Nmc19zaGFyZXMoY2ZzX3JxLCAwKTsKKwl9Cit9CisjIGVsc2UgLyogQ09ORklHX1NNUCAqLworc3RhdGljIHZvaWQgdXBkYXRlX2Nmc19sb2FkKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgaW50IGdsb2JhbF91cGRhdGUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBjYWxjX2Nmc19zaGFyZXMoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3QgdGFza19ncm91cCAqdGcsCisJCQkJbG9uZyB3ZWlnaHRfZGVsdGEpCit7CisJcmV0dXJuIHRnLT5zaGFyZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfZW50aXR5X3NoYXJlc190aWNrKHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKK3sKK30KKyMgZW5kaWYgLyogQ09ORklHX1NNUCAqLwogc3RhdGljIHZvaWQgcmV3ZWlnaHRfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsCiAJCQkgICAgdW5zaWduZWQgbG9uZyB3ZWlnaHQpCiB7CkBAIC03ODIsNDEgKzgyOCwyMCBAQAogewogCXN0cnVjdCB0YXNrX2dyb3VwICp0ZzsKIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZTsKLQlsb25nIGxvYWRfd2VpZ2h0LCBsb2FkLCBzaGFyZXM7Ci0KLQlpZiAoIWNmc19ycSkKLQkJcmV0dXJuOworCWxvbmcgc2hhcmVzOwogCiAJdGcgPSBjZnNfcnEtPnRnOwogCXNlID0gdGctPnNlW2NwdV9vZihycV9vZihjZnNfcnEpKV07CiAJaWYgKCFzZSkKIAkJcmV0dXJuOwotCi0JbG9hZCA9IGNmc19ycS0+bG9hZC53ZWlnaHQgKyB3ZWlnaHRfZGVsdGE7Ci0KLQlsb2FkX3dlaWdodCA9IGF0b21pY19yZWFkKCZ0Zy0+bG9hZF93ZWlnaHQpOwotCWxvYWRfd2VpZ2h0IC09IGNmc19ycS0+bG9hZF9jb250cmlidXRpb247Ci0JbG9hZF93ZWlnaHQgKz0gbG9hZDsKLQotCXNoYXJlcyA9ICh0Zy0+c2hhcmVzICogbG9hZCk7Ci0JaWYgKGxvYWRfd2VpZ2h0KQotCQlzaGFyZXMgLz0gbG9hZF93ZWlnaHQ7Ci0KLQlpZiAoc2hhcmVzIDwgTUlOX1NIQVJFUykKLQkJc2hhcmVzID0gTUlOX1NIQVJFUzsKLQlpZiAoc2hhcmVzID4gdGctPnNoYXJlcykKLQkJc2hhcmVzID0gdGctPnNoYXJlczsKKyNpZm5kZWYgQ09ORklHX1NNUAorCWlmIChsaWtlbHkoc2UtPmxvYWQud2VpZ2h0ID09IHRnLT5zaGFyZXMpKQorCQlyZXR1cm47CisjZW5kaWYKKwlzaGFyZXMgPSBjYWxjX2Nmc19zaGFyZXMoY2ZzX3JxLCB0Zywgd2VpZ2h0X2RlbHRhKTsKIAogCXJld2VpZ2h0X2VudGl0eShjZnNfcnFfb2Yoc2UpLCBzZSwgc2hhcmVzKTsKIH0KLQotc3RhdGljIHZvaWQgdXBkYXRlX2VudGl0eV9zaGFyZXNfdGljayhzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCi17Ci0JaWYgKGNmc19ycS0+bG9hZF91bmFjY19leGVjX3RpbWUgPiBzeXNjdGxfc2NoZWRfc2hhcmVzX3dpbmRvdykgewotCQl1cGRhdGVfY2ZzX2xvYWQoY2ZzX3JxLCAwKTsKLQkJdXBkYXRlX2Nmc19zaGFyZXMoY2ZzX3JxLCAwKTsKLQl9Ci19CiAjZWxzZSAvKiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAqLwogc3RhdGljIHZvaWQgdXBkYXRlX2Nmc19sb2FkKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgaW50IGdsb2JhbF91cGRhdGUpCiB7CkBAIC0xMDYyLDYgKzEwODcsOSBAQAogCQlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9IF9fcGlja19uZXh0X2VudGl0eShjZnNfcnEpOwogCQlzNjQgZGVsdGEgPSBjdXJyLT52cnVudGltZSAtIHNlLT52cnVudGltZTsKIAorCQlpZiAoZGVsdGEgPCAwKQorCQkJcmV0dXJuOworCiAJCWlmIChkZWx0YSA+IGlkZWFsX3J1bnRpbWUpCiAJCQlyZXNjaGVkX3Rhc2socnFfb2YoY2ZzX3JxKS0+Y3Vycik7CiAJfQpAQCAtMTM2MiwyNyArMTM5MCwyNyBAQAogCQlyZXR1cm4gd2w7CiAKIAlmb3JfZWFjaF9zY2hlZF9lbnRpdHkoc2UpIHsKLQkJbG9uZyBTLCBydywgcywgYSwgYjsKKwkJbG9uZyBsdywgdzsKIAotCQlTID0gc2UtPm15X3EtPnRnLT5zaGFyZXM7Ci0JCXMgPSBzZS0+bG9hZC53ZWlnaHQ7Ci0JCXJ3ID0gc2UtPm15X3EtPmxvYWQud2VpZ2h0OworCQl0ZyA9IHNlLT5teV9xLT50ZzsKKwkJdyA9IHNlLT5teV9xLT5sb2FkLndlaWdodDsKIAotCQlhID0gUyoocncgKyB3bCk7Ci0JCWIgPSBTKnJ3ICsgcyp3ZzsKKwkJLyogdXNlIHRoaXMgY3B1J3MgaW5zdGFudGFuZW91cyBjb250cmlidXRpb24gKi8KKwkJbHcgPSBhdG9taWNfcmVhZCgmdGctPmxvYWRfd2VpZ2h0KTsKKwkJbHcgLT0gc2UtPm15X3EtPmxvYWRfY29udHJpYnV0aW9uOworCQlsdyArPSB3ICsgd2c7CiAKLQkJd2wgPSBzKihhLWIpOworCQl3bCArPSB3OwogCi0JCWlmIChsaWtlbHkoYikpCi0JCQl3bCAvPSBiOworCQlpZiAobHcgPiAwICYmIHdsIDwgbHcpCisJCQl3bCA9ICh3bCAqIHRnLT5zaGFyZXMpIC8gbHc7CisJCWVsc2UKKwkJCXdsID0gdGctPnNoYXJlczsKIAotCQkvKgotCQkgKiBBc3N1bWUgdGhlIGdyb3VwIGlzIGFscmVhZHkgcnVubmluZyBhbmQgd2lsbAotCQkgKiB0aHVzIGFscmVhZHkgYmUgYWNjb3VudGVkIGZvciBpbiB0aGUgd2VpZ2h0LgotCQkgKgotCQkgKiBUaGF0IGlzLCBtb3Zpbmcgc2hhcmVzIGJldHdlZW4gQ1BVcywgZG9lcyBub3QKLQkJICogYWx0ZXIgdGhlIGdyb3VwIHdlaWdodC4KLQkJICovCisJCS8qIHplcm8gcG9pbnQgaXMgTUlOX1NIQVJFUyAqLworCQlpZiAod2wgPCBNSU5fU0hBUkVTKQorCQkJd2wgPSBNSU5fU0hBUkVTOworCQl3bCAtPSBzZS0+bG9hZC53ZWlnaHQ7CiAJCXdnID0gMDsKIAl9CiAKQEAgLTE0MDEsNyArMTQyOSw3IEBACiAKIHN0YXRpYyBpbnQgd2FrZV9hZmZpbmUoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHN5bmMpCiB7Ci0JdW5zaWduZWQgbG9uZyB0aGlzX2xvYWQsIGxvYWQ7CisJczY0IHRoaXNfbG9hZCwgbG9hZDsKIAlpbnQgaWR4LCB0aGlzX2NwdSwgcHJldl9jcHU7CiAJdW5zaWduZWQgbG9uZyB0bF9wZXJfdGFzazsKIAlzdHJ1Y3QgdGFza19ncm91cCAqdGc7CkBAIC0xNDQwLDggKzE0NjgsOCBAQAogCSAqIE90aGVyd2lzZSBjaGVjayBpZiBlaXRoZXIgY3B1cyBhcmUgbmVhciBlbm91Z2ggaW4gbG9hZCB0byBhbGxvdyB0aGlzCiAJICogdGFzayB0byBiZSB3b2tlbiBvbiB0aGlzX2NwdS4KIAkgKi8KLQlpZiAodGhpc19sb2FkKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdGhpc19lZmZfbG9hZCwgcHJldl9lZmZfbG9hZDsKKwlpZiAodGhpc19sb2FkID4gMCkgeworCQlzNjQgdGhpc19lZmZfbG9hZCwgcHJldl9lZmZfbG9hZDsKIAogCQl0aGlzX2VmZl9sb2FkID0gMTAwOwogCQl0aGlzX2VmZl9sb2FkICo9IHBvd2VyX29mKHByZXZfY3B1KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9ydC5jIGIva2VybmVsL3NjaGVkX3J0LmMKaW5kZXggYzkxNGVjNy4uYWQ2MjY3NyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3J0LmMKKysrIGIva2VybmVsL3NjaGVkX3J0LmMKQEAgLTYyNSw3ICs2MjUsNyBAQAogCXN0cnVjdCBydF9ycSAqcnRfcnEgPSBydF9ycV9vZl9zZShydF9zZSk7CiAJdTY0IGRlbHRhX2V4ZWM7CiAKLQlpZiAoIXRhc2tfaGFzX3J0X3BvbGljeShjdXJyKSkKKwlpZiAoY3Vyci0+c2NoZWRfY2xhc3MgIT0gJnJ0X3NjaGVkX2NsYXNzKQogCQlyZXR1cm47CiAKIAlkZWx0YV9leGVjID0gcnEtPmNsb2NrX3Rhc2sgLSBjdXJyLT5zZS5leGVjX3N0YXJ0OwpkaWZmIC0tZ2l0IGEva2VybmVsL3NtcC5jIGIva2VybmVsL3NtcC5jCmluZGV4IDRlYzMwZTAuLjk5MTA3NDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zbXAuYworKysgYi9rZXJuZWwvc21wLmMKQEAgLTE5NCwyMyArMTk0LDUyIEBACiAJICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGF0YSwgJmNhbGxfZnVuY3Rpb24ucXVldWUsIGNzZC5saXN0KSB7CiAJCWludCByZWZzOworCQl2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pOwogCi0JCWlmICghY3B1bWFza190ZXN0X2FuZF9jbGVhcl9jcHUoY3B1LCBkYXRhLT5jcHVtYXNrKSkKKwkJLyoKKwkJICogU2luY2Ugd2Ugd2FsayB0aGUgbGlzdCB3aXRob3V0IGFueSBsb2Nrcywgd2UgbWlnaHQKKwkJICogc2VlIGFuIGVudHJ5IHRoYXQgd2FzIGNvbXBsZXRlZCwgcmVtb3ZlZCBmcm9tIHRoZQorCQkgKiBsaXN0IGFuZCBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyByZXVzZWQuCisJCSAqCisJCSAqIFdlIG11c3QgY2hlY2sgdGhhdCB0aGUgY3B1IGlzIGluIHRoZSBjcHVtYXNrIGJlZm9yZQorCQkgKiBjaGVja2luZyB0aGUgcmVmcywgYW5kIGJvdGggbXVzdCBiZSBzZXQgYmVmb3JlCisJCSAqIGV4ZWN1dGluZyB0aGUgY2FsbGJhY2sgb24gdGhpcyBjcHUuCisJCSAqLworCisJCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIGRhdGEtPmNwdW1hc2spKQogCQkJY29udGludWU7CiAKKwkJc21wX3JtYigpOworCisJCWlmIChhdG9taWNfcmVhZCgmZGF0YS0+cmVmcykgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWZ1bmMgPSBkYXRhLT5jc2QuZnVuYzsJCQkvKiBmb3IgbGF0ZXIgd2FybiAqLwogCQlkYXRhLT5jc2QuZnVuYyhkYXRhLT5jc2QuaW5mbyk7CiAKKwkJLyoKKwkJICogSWYgdGhlIGNwdSBtYXNrIGlzIG5vdCBzdGlsbCBzZXQgdGhlbiBpdCBlbmFibGVkIGludGVycnVwdHMsCisJCSAqIHdlIHRvb2sgYW5vdGhlciBzbXAgaW50ZXJydXB0LCBhbmQgZXhlY3V0ZWQgdGhlIGZ1bmN0aW9uCisJCSAqIHR3aWNlIG9uIHRoaXMgY3B1LiAgSW4gdGhlb3J5IHRoYXQgY29weSBkZWNyZW1lbnRlZCByZWZzLgorCQkgKi8KKwkJaWYgKCFjcHVtYXNrX3Rlc3RfYW5kX2NsZWFyX2NwdShjcHUsIGRhdGEtPmNwdW1hc2spKSB7CisJCQlXQVJOKDEsICIlcFMgZW5hYmxlZCBpbnRlcnJ1cHRzIGFuZCBkb3VibGUgZXhlY3V0ZWRcbiIsCisJCQkgICAgIGZ1bmMpOworCQkJY29udGludWU7CisJCX0KKwogCQlyZWZzID0gYXRvbWljX2RlY19yZXR1cm4oJmRhdGEtPnJlZnMpOwogCQlXQVJOX09OKHJlZnMgPCAwKTsKLQkJaWYgKCFyZWZzKSB7Ci0JCQlyYXdfc3Bpbl9sb2NrKCZjYWxsX2Z1bmN0aW9uLmxvY2spOwotCQkJbGlzdF9kZWxfcmN1KCZkYXRhLT5jc2QubGlzdCk7Ci0JCQlyYXdfc3Bpbl91bmxvY2soJmNhbGxfZnVuY3Rpb24ubG9jayk7Ci0JCX0KIAogCQlpZiAocmVmcykKIAkJCWNvbnRpbnVlOwogCisJCVdBUk5fT04oIWNwdW1hc2tfZW1wdHkoZGF0YS0+Y3B1bWFzaykpOworCisJCXJhd19zcGluX2xvY2soJmNhbGxfZnVuY3Rpb24ubG9jayk7CisJCWxpc3RfZGVsX3JjdSgmZGF0YS0+Y3NkLmxpc3QpOworCQlyYXdfc3Bpbl91bmxvY2soJmNhbGxfZnVuY3Rpb24ubG9jayk7CisKIAkJY3NkX3VubG9jaygmZGF0YS0+Y3NkKTsKIAl9CiAKQEAgLTQzMCw3ICs0NTksNyBAQAogCSAqIGNhbid0IGhhcHBlbi4KIAkgKi8KIAlXQVJOX09OX09OQ0UoY3B1X29ubGluZSh0aGlzX2NwdSkgJiYgaXJxc19kaXNhYmxlZCgpCi0JCSAgICAgJiYgIW9vcHNfaW5fcHJvZ3Jlc3MpOworCQkgICAgICYmICFvb3BzX2luX3Byb2dyZXNzICYmICFlYXJseV9ib290X2lycXNfZGlzYWJsZWQpOwogCiAJLyogU28sIHdoYXQncyBhIENQVSB0aGV5IHdhbnQ/IElnbm9yaW5nIHRoaXMgb25lLiAqLwogCWNwdSA9IGNwdW1hc2tfZmlyc3RfYW5kKG1hc2ssIGNwdV9vbmxpbmVfbWFzayk7CkBAIC00NTQsMTEgKzQ4MywyMSBAQAogCiAJZGF0YSA9ICZfX2dldF9jcHVfdmFyKGNmZF9kYXRhKTsKIAljc2RfbG9jaygmZGF0YS0+Y3NkKTsKKwlCVUdfT04oYXRvbWljX3JlYWQoJmRhdGEtPnJlZnMpIHx8ICFjcHVtYXNrX2VtcHR5KGRhdGEtPmNwdW1hc2spKTsKIAogCWRhdGEtPmNzZC5mdW5jID0gZnVuYzsKIAlkYXRhLT5jc2QuaW5mbyA9IGluZm87CiAJY3B1bWFza19hbmQoZGF0YS0+Y3B1bWFzaywgbWFzaywgY3B1X29ubGluZV9tYXNrKTsKIAljcHVtYXNrX2NsZWFyX2NwdSh0aGlzX2NwdSwgZGF0YS0+Y3B1bWFzayk7CisKKwkvKgorCSAqIFRvIGVuc3VyZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZ2V0cyBhbiBjb21wbGV0ZSB2aWV3CisJICogd2Ugb3JkZXIgdGhlIGNwdW1hc2sgYW5kIHJlZnMgd3JpdGVzIGFuZCBvcmRlciB0aGUgcmVhZAorCSAqIG9mIHRoZW0gaW4gdGhlIGludGVycnVwdCBoYW5kbGVyLiAgSW4gYWRkaXRpb24gd2UgbWF5CisJICogb25seSBjbGVhciBvdXIgb3duIGNwdSBiaXQgZnJvbSB0aGUgbWFzay4KKwkgKi8KKwlzbXBfd21iKCk7CisKIAlhdG9taWNfc2V0KCZkYXRhLT5yZWZzLCBjcHVtYXNrX3dlaWdodChkYXRhLT5jcHVtYXNrKSk7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmNhbGxfZnVuY3Rpb24ubG9jaywgZmxhZ3MpOwpAQCAtNTMzLDE3ICs1NzIsMjAgQEAKICNlbmRpZiAvKiBVU0VfR0VORVJJQ19TTVBfSEVMUEVSUyAqLwogCiAvKgotICogQ2FsbCBhIGZ1bmN0aW9uIG9uIGFsbCBwcm9jZXNzb3JzCisgKiBDYWxsIGEgZnVuY3Rpb24gb24gYWxsIHByb2Nlc3NvcnMuICBNYXkgYmUgdXNlZCBkdXJpbmcgZWFybHkgYm9vdCB3aGlsZQorICogZWFybHlfYm9vdF9pcnFzX2Rpc2FibGVkIGlzIHNldC4gIFVzZSBsb2NhbF9pcnFfc2F2ZS9yZXN0b3JlKCkgaW5zdGVhZAorICogb2YgbG9jYWxfaXJxX2Rpc2FibGUvZW5hYmxlKCkuCiAgKi8KIGludCBvbl9lYWNoX2NwdSh2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLCBpbnQgd2FpdCkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJcmV0ID0gc21wX2NhbGxfZnVuY3Rpb24oZnVuYywgaW5mbywgd2FpdCk7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJZnVuYyhpbmZvKTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXByZWVtcHRfZW5hYmxlKCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCAzMWI3MWEyLi4xOGRhNzAyIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC0xMzg1LDcgKzEzODUsOCBAQAogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCksICp0Y3JlZDsKIAogCXRjcmVkID0gX190YXNrX2NyZWQodGFzayk7Ci0JaWYgKChjcmVkLT51aWQgIT0gdGNyZWQtPmV1aWQgfHwKKwlpZiAoY3VycmVudCAhPSB0YXNrICYmCisJICAgIChjcmVkLT51aWQgIT0gdGNyZWQtPmV1aWQgfHwKIAkgICAgIGNyZWQtPnVpZCAhPSB0Y3JlZC0+c3VpZCB8fAogCSAgICAgY3JlZC0+dWlkICE9IHRjcmVkLT51aWQgIHx8CiAJICAgICBjcmVkLT5naWQgIT0gdGNyZWQtPmVnaWQgfHwKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGwuYyBiL2tlcm5lbC9zeXNjdGwuYwppbmRleCBiYzg2YmIzLi4wZjFiZDgzIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC0xNzAsNyArMTcwLDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCi1zdGF0aWMgaW50IF9fc3lzcnFfZW5hYmxlZDsgLyogTm90ZTogc3lzcnEgY29kZSBpc2VzIGl0J3Mgb3duIHByaXZhdGUgY29weSAqLworLyogTm90ZTogc3lzcnEgY29kZSB1c2VzIGl0J3Mgb3duIHByaXZhdGUgY29weSAqLworc3RhdGljIGludCBfX3N5c3JxX2VuYWJsZWQgPSBTWVNSUV9ERUZBVUxUX0VOQUJMRTsKIAogc3RhdGljIGludCBzeXNycV9zeXNjdGxfaGFuZGxlcihjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiAJCQkJdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jIGIva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCmluZGV4IDNlMjE2ZTAuLmM1NWVhMjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYworKysgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKQEAgLTY0Miw4ICs2NDIsNyBAQAogCX0KIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBOT0h6IG1vZGUgb24gQ1BVICMlZFxuIiwKLQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBOT0h6IG1vZGUgb24gQ1BVICMlZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KIAogLyoKQEAgLTc5NSw4ICs3OTQsMTAgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfTk9fSFoKLQlpZiAodGlja19ub2h6X2VuYWJsZWQpCisJaWYgKHRpY2tfbm9oel9lbmFibGVkKSB7CiAJCXRzLT5ub2h6X21vZGUgPSBOT0haX01PREVfSElHSFJFUzsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU3dpdGNoZWQgdG8gTk9IeiBtb2RlIG9uIENQVSAjJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJfQogI2VuZGlmCiB9CiAjZW5kaWYgLyogSElHSF9SRVNfVElNRVJTICovCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMgYi9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKaW5kZXggMzJhMTlmOS4uMzI1ODQ1NSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYwpAQCAtNDEsNyArNDEsNyBAQAogCWNoYXIgc3ltbmFtZVtLU1lNX05BTUVfTEVOXTsKIAogCWlmIChsb29rdXBfc3ltYm9sX25hbWUoKHVuc2lnbmVkIGxvbmcpc3ltLCBzeW1uYW1lKSA8IDApCi0JCVNFUV9wcmludGYobSwgIjwlcD4iLCBzeW0pOworCQlTRVFfcHJpbnRmKG0sICI8JXBLPiIsIHN5bSk7CiAJZWxzZQogCQlTRVFfcHJpbnRmKG0sICIlcyIsIHN5bW5hbWUpOwogfQpAQCAtMTEyLDcgKzExMiw3IEBACiBzdGF0aWMgdm9pZAogcHJpbnRfYmFzZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UsIHU2NCBub3cpCiB7Ci0JU0VRX3ByaW50ZihtLCAiICAuYmFzZTogICAgICAgJXBcbiIsIGJhc2UpOworCVNFUV9wcmludGYobSwgIiAgLmJhc2U6ICAgICAgICVwS1xuIiwgYmFzZSk7CiAJU0VRX3ByaW50ZihtLCAiICAuaW5kZXg6ICAgICAgJWRcbiIsCiAJCQliYXNlLT5pbmRleCk7CiAJU0VRX3ByaW50ZihtLCAiICAucmVzb2x1dGlvbjogJUx1IG5zZWNzXG4iLApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWVyLmMgYi9rZXJuZWwvdGltZXIuYwppbmRleCA0M2NhOTkzLi5kNjQ1OTkyIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtOTU5LDcgKzk1OSw3IEBACiAgKgogICogU3luY2hyb25pemF0aW9uIHJ1bGVzOiBDYWxsZXJzIG11c3QgcHJldmVudCByZXN0YXJ0aW5nIG9mIHRoZSB0aW1lciwKICAqIG90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIGlzIG1lYW5pbmdsZXNzLiBJdCBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbQotICogaGFyZGlycSBjb250ZXh0cy4gVGhlIGNhbGxlciBtdXN0IG5vdCBob2xkIGxvY2tzIHdoaWNoIHdvdWxkIHByZXZlbnQKKyAqIGludGVycnVwdCBjb250ZXh0cy4gVGhlIGNhbGxlciBtdXN0IG5vdCBob2xkIGxvY2tzIHdoaWNoIHdvdWxkIHByZXZlbnQKICAqIGNvbXBsZXRpb24gb2YgdGhlIHRpbWVyJ3MgaGFuZGxlci4gVGhlIHRpbWVyJ3MgaGFuZGxlciBtdXN0IG5vdCBjYWxsCiAgKiBhZGRfdGltZXJfb24oKS4gVXBvbiBleGl0IHRoZSB0aW1lciBpcyBub3QgcXVldWVkIGFuZCB0aGUgaGFuZGxlciBpcwogICogbm90IHJ1bm5pbmcgb24gYW55IENQVS4KQEAgLTk2OSwxMCArOTY5LDEyIEBACiBpbnQgZGVsX3RpbWVyX3N5bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQogewogI2lmZGVmIENPTkZJR19MT0NLREVQCi0JbG9jYWxfYmhfZGlzYWJsZSgpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJbG9ja19tYXBfYWNxdWlyZSgmdGltZXItPmxvY2tkZXBfbWFwKTsKIAlsb2NrX21hcF9yZWxlYXNlKCZ0aW1lci0+bG9ja2RlcF9tYXApOwotCWxvY2FsX2JoX2VuYWJsZSgpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKICNlbmRpZgogCS8qCiAJICogZG9uJ3QgdXNlIGl0IGluIGhhcmRpcnEgY29udGV4dCwgYmVjYXVzZSBpdApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwppbmRleCAxNTM1NjJkLi5kOTU3MjFmIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwpAQCAtMTM4LDYgKzEzOCwxMyBAQAogCQkgICAgICFibGtfdHJhY2VyX2VuYWJsZWQpKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIElmIHRoZSBCTEtfVENfTk9USUZZIGFjdGlvbiBtYXNrIGlzbid0IHNldCwgZG9uJ3Qgc2VuZCBhbnkgbm90ZQorCSAqIG1lc3NhZ2UgdG8gdGhlIHRyYWNlLgorCSAqLworCWlmICghKGJ0LT5hY3RfbWFzayAmIEJMS19UQ19OT1RJRlkpKQorCQlyZXR1cm47CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJYnVmID0gcGVyX2NwdV9wdHIoYnQtPm1zZ19kYXRhLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKaW5kZXggMzVmZGUwOS4uNWY0OTllMDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKQEAgLTEyODQsNyArMTI4NCw3IEBACiBzdGF0aWMgdm9pZCB0cmFjZV9tb2R1bGVfYWRkX2V2ZW50cyhzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CiAJc3RydWN0IGZ0cmFjZV9tb2R1bGVfZmlsZV9vcHMgKmZpbGVfb3BzID0gTlVMTDsKLQlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsICpzdGFydCwgKmVuZDsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKipjYWxsLCAqKnN0YXJ0LCAqKmVuZDsKIAogCXN0YXJ0ID0gbW9kLT50cmFjZV9ldmVudHM7CiAJZW5kID0gbW9kLT50cmFjZV9ldmVudHMgKyBtb2QtPm51bV90cmFjZV9ldmVudHM7CkBAIC0xMjk3LDcgKzEyOTcsNyBAQAogCQlyZXR1cm47CiAKIAlmb3JfZWFjaF9ldmVudChjYWxsLCBzdGFydCwgZW5kKSB7Ci0JCV9fdHJhY2VfYWRkX2V2ZW50X2NhbGwoY2FsbCwgbW9kLAorCQlfX3RyYWNlX2FkZF9ldmVudF9jYWxsKCpjYWxsLCBtb2QsCiAJCQkJICAgICAgICZmaWxlX29wcy0+aWQsICZmaWxlX29wcy0+ZW5hYmxlLAogCQkJCSAgICAgICAmZmlsZV9vcHMtPmZpbHRlciwgJmZpbGVfb3BzLT5mb3JtYXQpOwogCX0KQEAgLTEzNjcsOCArMTM2Nyw4IEBACiAJLnByaW9yaXR5ID0gMCwKIH07CiAKLWV4dGVybiBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX19zdGFydF9mdHJhY2VfZXZlbnRzW107Ci1leHRlcm4gc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fc3RvcF9mdHJhY2VfZXZlbnRzW107CitleHRlcm4gc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpfX3N0YXJ0X2Z0cmFjZV9ldmVudHNbXTsKK2V4dGVybiBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKl9fc3RvcF9mdHJhY2VfZXZlbnRzW107CiAKIHN0YXRpYyBjaGFyIGJvb3R1cF9ldmVudF9idWZbQ09NTUFORF9MSU5FX1NJWkVdIF9faW5pdGRhdGE7CiAKQEAgLTEzODQsNyArMTM4NCw3IEBACiAKIHN0YXRpYyBfX2luaXQgaW50IGV2ZW50X3RyYWNlX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGw7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICoqY2FsbDsKIAlzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcjsKIAlzdHJ1Y3QgZGVudHJ5ICplbnRyeTsKIAlzdHJ1Y3QgZGVudHJ5ICpkX2V2ZW50czsKQEAgLTE0MzAsNyArMTQzMCw3IEBACiAJCXByX3dhcm5pbmcoInRyYWNpbmc6IEZhaWxlZCB0byBhbGxvY2F0ZSBjb21tb24gZmllbGRzIik7CiAKIAlmb3JfZWFjaF9ldmVudChjYWxsLCBfX3N0YXJ0X2Z0cmFjZV9ldmVudHMsIF9fc3RvcF9mdHJhY2VfZXZlbnRzKSB7Ci0JCV9fdHJhY2VfYWRkX2V2ZW50X2NhbGwoY2FsbCwgTlVMTCwgJmZ0cmFjZV9ldmVudF9pZF9mb3BzLAorCQlfX3RyYWNlX2FkZF9ldmVudF9jYWxsKCpjYWxsLCBOVUxMLCAmZnRyYWNlX2V2ZW50X2lkX2ZvcHMsCiAJCQkJICAgICAgICZmdHJhY2VfZW5hYmxlX2ZvcHMsCiAJCQkJICAgICAgICZmdHJhY2VfZXZlbnRfZmlsdGVyX2ZvcHMsCiAJCQkJICAgICAgICZmdHJhY2VfZXZlbnRfZm9ybWF0X2ZvcHMpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCmluZGV4IDRiNzRkNzEuLmJiZWVjMzEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKQEAgLTE2MSwxMyArMTYxLDEzIEBACiAJLmZpZWxkcwkJCT0gTElTVF9IRUFEX0lOSVQoZXZlbnRfY2xhc3NfZnRyYWNlXyMjY2FsbC5maWVsZHMpLFwKIH07CQkJCQkJCQkJXAogCQkJCQkJCQkJXAotc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQkJCVwKLV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkJCQkJCQlcCi1fX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgZXZlbnRfIyNjYWxsID0gewkJXAorc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZCBldmVudF8jI2NhbGwgPSB7CQkJXAogCS5uYW1lCQkJPSAjY2FsbCwJCQkJXAogCS5ldmVudC50eXBlCQk9IGV0eXBlLAkJCQlcCiAJLmNsYXNzCQkJPSAmZXZlbnRfY2xhc3NfZnRyYWNlXyMjY2FsbCwJCVwKIAkucHJpbnRfZm10CQk9IHByaW50LAkJCQlcCiB9OwkJCQkJCQkJCVwKK3N0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJCQlcCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgKl9fZXZlbnRfIyNjYWxsID0gJmV2ZW50XyMjY2FsbDsKIAogI2luY2x1ZGUgInRyYWNlX2VudHJpZXMuaCIKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jCmluZGV4IDVjZjhjNjAuLjkyYjZlMWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYwpAQCAtNDUzLDE0ICs0NTMsNiBAQAogICogU3R1YnM6CiAgKi8KIAotdm9pZCBlYXJseV9ib290X2lycXNfb2ZmKHZvaWQpCi17Ci19Ci0KLXZvaWQgZWFybHlfYm9vdF9pcnFzX29uKHZvaWQpCi17Ci19Ci0KIHZvaWQgdHJhY2Vfc29mdGlycXNfb24odW5zaWduZWQgbG9uZyBpcCkKIHsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMKaW5kZXggYjcwNjUyOS4uNWM5ZmUwOCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMKQEAgLTU1LDIwICs1NSwyMSBAQAogCS5yYXdfaW5pdAk9IGluaXRfc3lzY2FsbF90cmFjZSwKIH07CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGFbXTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fc3RvcF9zeXNjYWxsc19tZXRhZGF0YVtdOworZXh0ZXJuIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpfX3N0YXJ0X3N5c2NhbGxzX21ldGFkYXRhW107CitleHRlcm4gc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKl9fc3RvcF9zeXNjYWxsc19tZXRhZGF0YVtdOwogCiBzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKipzeXNjYWxsc19tZXRhZGF0YTsKIAotc3RhdGljIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpmaW5kX3N5c2NhbGxfbWV0YSh1bnNpZ25lZCBsb25nIHN5c2NhbGwpCitzdGF0aWMgX19pbml0IHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICoKK2ZpbmRfc3lzY2FsbF9tZXRhKHVuc2lnbmVkIGxvbmcgc3lzY2FsbCkKIHsKLQlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqc3RhcnQ7Ci0Jc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN0b3A7CisJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKipzdGFydDsKKwlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKnN0b3A7CiAJY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKIAogCi0Jc3RhcnQgPSAoc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKilfX3N0YXJ0X3N5c2NhbGxzX21ldGFkYXRhOwotCXN0b3AgPSAoc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKilfX3N0b3Bfc3lzY2FsbHNfbWV0YWRhdGE7CisJc3RhcnQgPSBfX3N0YXJ0X3N5c2NhbGxzX21ldGFkYXRhOworCXN0b3AgPSBfX3N0b3Bfc3lzY2FsbHNfbWV0YWRhdGE7CiAJa2FsbHN5bXNfbG9va3VwKHN5c2NhbGwsIE5VTEwsIE5VTEwsIE5VTEwsIHN0cik7CiAKIAlmb3IgKCA7IHN0YXJ0IDwgc3RvcDsgc3RhcnQrKykgewpAQCAtNzgsOCArNzksOCBAQAogCQkgKiB3aXRoICJTeVMiIGluc3RlYWQgb2YgInN5cyIsIGxlYWRpbmcgdG8gYW4gdW53YW50ZWQKIAkJICogbWlzbWF0Y2guCiAJCSAqLwotCQlpZiAoc3RhcnQtPm5hbWUgJiYgIXN0cmNtcChzdGFydC0+bmFtZSArIDMsIHN0ciArIDMpKQotCQkJcmV0dXJuIHN0YXJ0OworCQlpZiAoKCpzdGFydCktPm5hbWUgJiYgIXN0cmNtcCgoKnN0YXJ0KS0+bmFtZSArIDMsIHN0ciArIDMpKQorCQkJcmV0dXJuICpzdGFydDsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2Vwb2ludC5jIGIva2VybmVsL3RyYWNlcG9pbnQuYwppbmRleCBlOTVlZTdmLi42ODE4N2FmIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2Vwb2ludC5jCisrKyBiL2tlcm5lbC90cmFjZXBvaW50LmMKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2p1bXBfbGFiZWwuaD4KIAotZXh0ZXJuIHN0cnVjdCB0cmFjZXBvaW50IF9fc3RhcnRfX190cmFjZXBvaW50c1tdOwotZXh0ZXJuIHN0cnVjdCB0cmFjZXBvaW50IF9fc3RvcF9fX3RyYWNlcG9pbnRzW107CitleHRlcm4gc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCBfX3N0YXJ0X19fdHJhY2Vwb2ludHNfcHRyc1tdOworZXh0ZXJuIHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgX19zdG9wX19fdHJhY2Vwb2ludHNfcHRyc1tdOwogCiAvKiBTZXQgdG8gMSB0byBlbmFibGUgdHJhY2Vwb2ludCBkZWJ1ZyBvdXRwdXQgKi8KIHN0YXRpYyBjb25zdCBpbnQgdHJhY2Vwb2ludF9kZWJ1ZzsKQEAgLTI5OCwxMCArMjk4LDEwIEBACiAgKgogICogVXBkYXRlcyB0aGUgcHJvYmUgY2FsbGJhY2sgY29ycmVzcG9uZGluZyB0byBhIHJhbmdlIG9mIHRyYWNlcG9pbnRzLgogICovCi12b2lkCi10cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqYmVnaW4sIHN0cnVjdCB0cmFjZXBvaW50ICplbmQpCit2b2lkIHRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKmJlZ2luLAorCQkJCSAgIHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKmVuZCkKIHsKLQlzdHJ1Y3QgdHJhY2Vwb2ludCAqaXRlcjsKKwlzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICppdGVyOwogCXN0cnVjdCB0cmFjZXBvaW50X2VudHJ5ICptYXJrX2VudHJ5OwogCiAJaWYgKCFiZWdpbikKQEAgLTMwOSwxMiArMzA5LDEyIEBACiAKIAltdXRleF9sb2NrKCZ0cmFjZXBvaW50c19tdXRleCk7CiAJZm9yIChpdGVyID0gYmVnaW47IGl0ZXIgPCBlbmQ7IGl0ZXIrKykgewotCQltYXJrX2VudHJ5ID0gZ2V0X3RyYWNlcG9pbnQoaXRlci0+bmFtZSk7CisJCW1hcmtfZW50cnkgPSBnZXRfdHJhY2Vwb2ludCgoKml0ZXIpLT5uYW1lKTsKIAkJaWYgKG1hcmtfZW50cnkpIHsKLQkJCXNldF90cmFjZXBvaW50KCZtYXJrX2VudHJ5LCBpdGVyLAorCQkJc2V0X3RyYWNlcG9pbnQoJm1hcmtfZW50cnksICppdGVyLAogCQkJCQkhIW1hcmtfZW50cnktPnJlZmNvdW50KTsKIAkJfSBlbHNlIHsKLQkJCWRpc2FibGVfdHJhY2Vwb2ludChpdGVyKTsKKwkJCWRpc2FibGVfdHJhY2Vwb2ludCgqaXRlcik7CiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZ0cmFjZXBvaW50c19tdXRleCk7CkBAIC0zMjYsOCArMzI2LDggQEAKIHN0YXRpYyB2b2lkIHRyYWNlcG9pbnRfdXBkYXRlX3Byb2Jlcyh2b2lkKQogewogCS8qIENvcmUga2VybmVsIHRyYWNlcG9pbnRzICovCi0JdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2UoX19zdGFydF9fX3RyYWNlcG9pbnRzLAotCQlfX3N0b3BfX190cmFjZXBvaW50cyk7CisJdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2UoX19zdGFydF9fX3RyYWNlcG9pbnRzX3B0cnMsCisJCV9fc3RvcF9fX3RyYWNlcG9pbnRzX3B0cnMpOwogCS8qIHRyYWNlcG9pbnRzIGluIG1vZHVsZXMuICovCiAJbW9kdWxlX3VwZGF0ZV90cmFjZXBvaW50cygpOwogfQpAQCAtNTE0LDggKzUxNCw4IEBACiAgKiBXaWxsIHJldHVybiB0aGUgZmlyc3QgdHJhY2Vwb2ludCBpbiB0aGUgcmFuZ2UgaWYgdGhlIGlucHV0IHRyYWNlcG9pbnQgaXMKICAqIE5VTEwuCiAgKi8KLWludCB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICoqdHJhY2Vwb2ludCwKLQlzdHJ1Y3QgdHJhY2Vwb2ludCAqYmVnaW4sIHN0cnVjdCB0cmFjZXBvaW50ICplbmQpCitpbnQgdHJhY2Vwb2ludF9nZXRfaXRlcl9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICoqdHJhY2Vwb2ludCwKKwlzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICpiZWdpbiwgc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqZW5kKQogewogCWlmICghKnRyYWNlcG9pbnQgJiYgYmVnaW4gIT0gZW5kKSB7CiAJCSp0cmFjZXBvaW50ID0gYmVnaW47CkBAIC01MzQsNyArNTM0LDggQEAKIAkvKiBDb3JlIGtlcm5lbCB0cmFjZXBvaW50cyAqLwogCWlmICghaXRlci0+bW9kdWxlKSB7CiAJCWZvdW5kID0gdHJhY2Vwb2ludF9nZXRfaXRlcl9yYW5nZSgmaXRlci0+dHJhY2Vwb2ludCwKLQkJCQlfX3N0YXJ0X19fdHJhY2Vwb2ludHMsIF9fc3RvcF9fX3RyYWNlcG9pbnRzKTsKKwkJCQlfX3N0YXJ0X19fdHJhY2Vwb2ludHNfcHRycywKKwkJCQlfX3N0b3BfX190cmFjZXBvaW50c19wdHJzKTsKIAkJaWYgKGZvdW5kKQogCQkJZ290byBlbmQ7CiAJfQpAQCAtNTg1LDggKzU4Niw4IEBACiAJc3dpdGNoICh2YWwpIHsKIAljYXNlIE1PRFVMRV9TVEFURV9DT01JTkc6CiAJY2FzZSBNT0RVTEVfU1RBVEVfR09JTkc6Ci0JCXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKG1vZC0+dHJhY2Vwb2ludHMsCi0JCQltb2QtPnRyYWNlcG9pbnRzICsgbW9kLT5udW1fdHJhY2Vwb2ludHMpOworCQl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShtb2QtPnRyYWNlcG9pbnRzX3B0cnMsCisJCQltb2QtPnRyYWNlcG9pbnRzX3B0cnMgKyBtb2QtPm51bV90cmFjZXBvaW50cyk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC93YXRjaGRvZy5jIGIva2VybmVsL3dhdGNoZG9nLmMKaW5kZXggZDdlYmRmNC4uMThiYjE1NyAxMDA2NDQKLS0tIGEva2VybmVsL3dhdGNoZG9nLmMKKysrIGIva2VybmVsL3dhdGNoZG9nLmMKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAKLWludCB3YXRjaGRvZ19lbmFibGVkOworaW50IHdhdGNoZG9nX2VuYWJsZWQgPSAxOwogaW50IF9fcmVhZF9tb3N0bHkgc29mdGxvY2t1cF90aHJlc2ggPSA2MDsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHdhdGNoZG9nX3RvdWNoX3RzKTsKQEAgLTQzLDkgKzQzLDYgQEAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyZl9ldmVudCAqLCB3YXRjaGRvZ19ldik7CiAjZW5kaWYKIAotc3RhdGljIGludCBub193YXRjaGRvZzsKLQotCiAvKiBib290IGNvbW1hbmRzICovCiAvKgogICogU2hvdWxkIHdlIHBhbmljIHdoZW4gYSBzb2Z0LWxvY2t1cCBvciBoYXJkLWxvY2t1cCBvY2N1cnM6CkBAIC01OCw3ICs1NSw3IEBACiAJaWYgKCFzdHJuY21wKHN0ciwgInBhbmljIiwgNSkpCiAJCWhhcmRsb2NrdXBfcGFuaWMgPSAxOwogCWVsc2UgaWYgKCFzdHJuY21wKHN0ciwgIjAiLCAxKSkKLQkJbm9fd2F0Y2hkb2cgPSAxOworCQl3YXRjaGRvZ19lbmFibGVkID0gMDsKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoIm5taV93YXRjaGRvZz0iLCBoYXJkbG9ja3VwX3BhbmljX3NldHVwKTsKQEAgLTc3LDcgKzc0LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgbm93YXRjaGRvZ19zZXR1cChjaGFyICpzdHIpCiB7Ci0Jbm9fd2F0Y2hkb2cgPSAxOworCXdhdGNoZG9nX2VuYWJsZWQgPSAwOwogCXJldHVybiAxOwogfQogX19zZXR1cCgibm93YXRjaGRvZyIsIG5vd2F0Y2hkb2dfc2V0dXApOwpAQCAtODUsNyArODIsNyBAQAogLyogZGVwcmVjYXRlZCAqLwogc3RhdGljIGludCBfX2luaXQgbm9zb2Z0bG9ja3VwX3NldHVwKGNoYXIgKnN0cikKIHsKLQlub193YXRjaGRvZyA9IDE7CisJd2F0Y2hkb2dfZW5hYmxlZCA9IDA7CiAJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJub3NvZnRsb2NrdXAiLCBub3NvZnRsb2NrdXBfc2V0dXApOwpAQCAtMzY2LDggKzM2MywxNCBAQAogCQlnb3RvIG91dF9zYXZlOwogCX0KIAotCXByaW50ayhLRVJOX0VSUiAiTk1JIHdhdGNoZG9nIGRpc2FibGVkIGZvciBjcHUlaTogdW5hYmxlIHRvIGNyZWF0ZSBwZXJmIGV2ZW50OiAlbGRcbiIsCi0JICAgICAgIGNwdSwgUFRSX0VSUihldmVudCkpOworCisJLyogdmFyeSB0aGUgS0VSTiBsZXZlbCBiYXNlZCBvbiB0aGUgcmV0dXJuZWQgZXJybm8gKi8KKwlpZiAoUFRSX0VSUihldmVudCkgPT0gLUVPUE5PVFNVUFApCisJCXByaW50ayhLRVJOX0lORk8gIk5NSSB3YXRjaGRvZyBkaXNhYmxlZCAoY3B1JWkpOiBub3Qgc3VwcG9ydGVkIChubyBMQVBJQz8pXG4iLCBjcHUpOworCWVsc2UgaWYgKFBUUl9FUlIoZXZlbnQpID09IC1FTk9FTlQpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5NSSB3YXRjaGRvZyBkaXNhYmxlZCAoY3B1JWkpOiBoYXJkd2FyZSBldmVudHMgbm90IGVuYWJsZWRcbiIsIGNwdSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgIk5NSSB3YXRjaGRvZyBkaXNhYmxlZCAoY3B1JWkpOiB1bmFibGUgdG8gY3JlYXRlIHBlcmYgZXZlbnQ6ICVsZFxuIiwgY3B1LCBQVFJfRVJSKGV2ZW50KSk7CiAJcmV0dXJuIFBUUl9FUlIoZXZlbnQpOwogCiAJLyogc3VjY2VzcyBwYXRoICovCkBAIC00MzIsOSArNDM1LDYgQEAKIAkJd2FrZV91cF9wcm9jZXNzKHApOwogCX0KIAotCS8qIGlmIGFueSBjcHUgc3VjY2VlZHMsIHdhdGNoZG9nIGlzIGNvbnNpZGVyZWQgZW5hYmxlZCBmb3IgdGhlIHN5c3RlbSAqLwotCXdhdGNoZG9nX2VuYWJsZWQgPSAxOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ2MiwxMiArNDYyLDE2IEBACiBzdGF0aWMgdm9pZCB3YXRjaGRvZ19lbmFibGVfYWxsX2NwdXModm9pZCkKIHsKIAlpbnQgY3B1OwotCWludCByZXN1bHQgPSAwOworCisJd2F0Y2hkb2dfZW5hYmxlZCA9IDA7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJcmVzdWx0ICs9IHdhdGNoZG9nX2VuYWJsZShjcHUpOworCQlpZiAoIXdhdGNoZG9nX2VuYWJsZShjcHUpKQorCQkJLyogaWYgYW55IGNwdSBzdWNjZWVkcywgd2F0Y2hkb2cgaXMgY29uc2lkZXJlZAorCQkJICAgZW5hYmxlZCBmb3IgdGhlIHN5c3RlbSAqLworCQkJd2F0Y2hkb2dfZW5hYmxlZCA9IDE7CiAKLQlpZiAocmVzdWx0KQorCWlmICghd2F0Y2hkb2dfZW5hYmxlZCkKIAkJcHJpbnRrKEtFUk5fRVJSICJ3YXRjaGRvZzogZmFpbGVkIHRvIGJlIGVuYWJsZWQgb24gc29tZSBjcHVzXG4iKTsKIAogfQpAQCAtNDc2LDkgKzQ4MCw2IEBACiB7CiAJaW50IGNwdTsKIAotCWlmIChub193YXRjaGRvZykKLQkJcmV0dXJuOwotCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCiAJCXdhdGNoZG9nX2Rpc2FibGUoY3B1KTsKIApAQCAtNDk4LDEwICs0OTksMTIgQEAKIHsKIAlwcm9jX2RvaW50dmVjKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5ndGgsIHBwb3MpOwogCi0JaWYgKHdhdGNoZG9nX2VuYWJsZWQpCi0JCXdhdGNoZG9nX2VuYWJsZV9hbGxfY3B1cygpOwotCWVsc2UKLQkJd2F0Y2hkb2dfZGlzYWJsZV9hbGxfY3B1cygpOworCWlmICh3cml0ZSkgeworCQlpZiAod2F0Y2hkb2dfZW5hYmxlZCkKKwkJCXdhdGNoZG9nX2VuYWJsZV9hbGxfY3B1cygpOworCQllbHNlCisJCQl3YXRjaGRvZ19kaXNhYmxlX2FsbF9jcHVzKCk7CisJfQogCXJldHVybiAwOwogfQogCkBAIC01MzAsNyArNTMzLDggQEAKIAkJYnJlYWs7CiAJY2FzZSBDUFVfT05MSU5FOgogCWNhc2UgQ1BVX09OTElORV9GUk9aRU46Ci0JCWVyciA9IHdhdGNoZG9nX2VuYWJsZShob3RjcHUpOworCQlpZiAod2F0Y2hkb2dfZW5hYmxlZCkKKwkJCWVyciA9IHdhdGNoZG9nX2VuYWJsZShob3RjcHUpOwogCQlicmVhazsKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAljYXNlIENQVV9VUF9DQU5DRUxFRDoKQEAgLTU1NSw5ICs1NTksNiBAQAogCXZvaWQgKmNwdSA9ICh2b2lkICopKGxvbmcpc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWludCBlcnI7CiAKLQlpZiAobm9fd2F0Y2hkb2cpCi0JCXJldHVybjsKLQogCWVyciA9IGNwdV9jYWxsYmFjaygmY3B1X25mYiwgQ1BVX1VQX1BSRVBBUkUsIGNwdSk7CiAJV0FSTl9PTihub3RpZmllcl90b19lcnJubyhlcnIpKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jCmluZGV4IDhlZTZlYzguLmVlNjU3OGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93b3JrcXVldWUuYworKysgYi9rZXJuZWwvd29ya3F1ZXVlLmMKQEAgLTc5LDcgKzc5LDkgQEAKIAlNQVhfSURMRV9XT1JLRVJTX1JBVElPCT0gNCwJCS8qIDEvNCBvZiBidXN5IGNhbiBiZSBpZGxlICovCiAJSURMRV9XT1JLRVJfVElNRU9VVAk9IDMwMCAqIEhaLAkvKiBrZWVwIGlkbGUgb25lcyBmb3IgNSBtaW5zICovCiAKLQlNQVlEQVlfSU5JVElBTF9USU1FT1VUCT0gSFogLyAxMDAsCS8qIGNhbGwgZm9yIGhlbHAgYWZ0ZXIgMTBtcyAqLworCU1BWURBWV9JTklUSUFMX1RJTUVPVVQgID0gSFogLyAxMDAgPj0gMiA/IEhaIC8gMTAwIDogMiwKKwkJCQkJCS8qIGNhbGwgZm9yIGhlbHAgYWZ0ZXIgMTBtcworCQkJCQkJICAgKG1pbiB0d28gdGlja3MpICovCiAJTUFZREFZX0lOVEVSVkFMCQk9IEhaIC8gMTAsCS8qIGFuZCB0aGVuIGV2ZXJ5IDEwMG1zICovCiAJQ1JFQVRFX0NPT0xET1dOCQk9IEhaLAkJLyogdGltZSB0byBicmVhdGggYWZ0ZXIgZmFpbCAqLwogCVRSVVNURUVfQ09PTERPV04JPSBIWiAvIDEwLAkvKiBmb3IgdHJ1c3RlZSBkcmFpbmluZyAqLwpAQCAtNzY4LDcgKzc3MCwxMSBAQAogCiAJd29ya2VyLT5mbGFncyAmPSB+ZmxhZ3M7CiAKLQkvKiBpZiB0cmFuc2l0aW9uaW5nIG91dCBvZiBOT1RfUlVOTklORywgaW5jcmVtZW50IG5yX3J1bm5pbmcgKi8KKwkvKgorCSAqIElmIHRyYW5zaXRpb25pbmcgb3V0IG9mIE5PVF9SVU5OSU5HLCBpbmNyZW1lbnQgbnJfcnVubmluZy4gIE5vdGUKKwkgKiB0aGF0IHRoZSBuZXN0ZWQgTk9UX1JVTk5JTkcgaXMgbm90IGEgbm9vcC4gIE5PVF9SVU5OSU5HIGlzIG1hc2sKKwkgKiBvZiBtdWx0aXBsZSBmbGFncywgbm90IGEgc2luZ2xlIGZsYWcuCisJICovCiAJaWYgKChmbGFncyAmIFdPUktFUl9OT1RfUlVOTklORykgJiYgKG9mbGFncyAmIFdPUktFUl9OT1RfUlVOTklORykpCiAJCWlmICghKHdvcmtlci0+ZmxhZ3MgJiBXT1JLRVJfTk9UX1JVTk5JTkcpKQogCQkJYXRvbWljX2luYyhnZXRfZ2N3cV9ucl9ydW5uaW5nKGdjd3EtPmNwdSkpOwpAQCAtMTg0MCw3ICsxODQ2LDcgQEAKIAlzcGluX3VubG9ja19pcnEoJmdjd3EtPmxvY2spOwogCiAJd29ya19jbGVhcl9wZW5kaW5nKHdvcmspOwotCWxvY2tfbWFwX2FjcXVpcmUoJmN3cS0+d3EtPmxvY2tkZXBfbWFwKTsKKwlsb2NrX21hcF9hY3F1aXJlX3JlYWQoJmN3cS0+d3EtPmxvY2tkZXBfbWFwKTsKIAlsb2NrX21hcF9hY3F1aXJlKCZsb2NrZGVwX21hcCk7CiAJdHJhY2Vfd29ya3F1ZXVlX2V4ZWN1dGVfc3RhcnQod29yayk7CiAJZih3b3JrKTsKQEAgLTIwNDMsNiArMjA0OSwxNSBAQAogCQkJCW1vdmVfbGlua2VkX3dvcmtzKHdvcmssIHNjaGVkdWxlZCwgJm4pOwogCiAJCXByb2Nlc3Nfc2NoZWR1bGVkX3dvcmtzKHJlc2N1ZXIpOworCisJCS8qCisJCSAqIExlYXZlIHRoaXMgZ2N3cS4gIElmIGtlZXBfd29ya2luZygpIGlzICV0cnVlLCBub3RpZnkgYQorCQkgKiByZWd1bGFyIHdvcmtlcjsgb3RoZXJ3aXNlLCB3ZSBlbmQgdXAgd2l0aCAwIGNvbmN1cnJlbmN5CisJCSAqIGFuZCBzdGFsbGluZyB0aGUgZXhlY3V0aW9uLgorCQkgKi8KKwkJaWYgKGtlZXBfd29ya2luZyhnY3dxKSkKKwkJCXdha2VfdXBfd29ya2VyKGdjd3EpOworCiAJCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7CiAJfQogCkBAIC0yMzg0LDggKzIzOTksMTggQEAKIAlpbnNlcnRfd3FfYmFycmllcihjd3EsIGJhcnIsIHdvcmssIHdvcmtlcik7CiAJc3Bpbl91bmxvY2tfaXJxKCZnY3dxLT5sb2NrKTsKIAotCWxvY2tfbWFwX2FjcXVpcmUoJmN3cS0+d3EtPmxvY2tkZXBfbWFwKTsKKwkvKgorCSAqIElmIEBtYXhfYWN0aXZlIGlzIDEgb3IgcmVzY3VlciBpcyBpbiB1c2UsIGZsdXNoaW5nIGFub3RoZXIgd29yaworCSAqIGl0ZW0gb24gdGhlIHNhbWUgd29ya3F1ZXVlIG1heSBsZWFkIHRvIGRlYWRsb2NrLiAgTWFrZSBzdXJlIHRoZQorCSAqIGZsdXNoZXIgaXMgbm90IHJ1bm5pbmcgb24gdGhlIHNhbWUgd29ya3F1ZXVlIGJ5IHZlcmlmeWluZyB3cml0ZQorCSAqIGFjY2Vzcy4KKwkgKi8KKwlpZiAoY3dxLT53cS0+c2F2ZWRfbWF4X2FjdGl2ZSA9PSAxIHx8IGN3cS0+d3EtPmZsYWdzICYgV1FfUkVTQ1VFUikKKwkJbG9ja19tYXBfYWNxdWlyZSgmY3dxLT53cS0+bG9ja2RlcF9tYXApOworCWVsc2UKKwkJbG9ja19tYXBfYWNxdWlyZV9yZWFkKCZjd3EtPndxLT5sb2NrZGVwX21hcCk7CiAJbG9ja19tYXBfcmVsZWFzZSgmY3dxLT53cS0+bG9ja2RlcF9tYXApOworCiAJcmV0dXJuIHRydWU7CiBhbHJlYWR5X2dvbmU6CiAJc3Bpbl91bmxvY2tfaXJxKCZnY3dxLT5sb2NrKTsKQEAgLTI5NDIsNyArMjk2Nyw3IEBACiAJICovCiAJc3Bpbl9sb2NrKCZ3b3JrcXVldWVfbG9jayk7CiAKLQlpZiAod29ya3F1ZXVlX2ZyZWV6aW5nICYmIHdxLT5mbGFncyAmIFdRX0ZSRUVaRUFCTEUpCisJaWYgKHdvcmtxdWV1ZV9mcmVlemluZyAmJiB3cS0+ZmxhZ3MgJiBXUV9GUkVFWkFCTEUpCiAJCWZvcl9lYWNoX2N3cV9jcHUoY3B1LCB3cSkKIAkJCWdldF9jd3EoY3B1LCB3cSktPm1heF9hY3RpdmUgPSAwOwogCkBAIC0zMDU0LDcgKzMwNzksNyBAQAogCiAJCXNwaW5fbG9ja19pcnEoJmdjd3EtPmxvY2spOwogCi0JCWlmICghKHdxLT5mbGFncyAmIFdRX0ZSRUVaRUFCTEUpIHx8CisJCWlmICghKHdxLT5mbGFncyAmIFdRX0ZSRUVaQUJMRSkgfHwKIAkJICAgICEoZ2N3cS0+ZmxhZ3MgJiBHQ1dRX0ZSRUVaSU5HKSkKIAkJCWdldF9jd3EoZ2N3cS0+Y3B1LCB3cSktPm1heF9hY3RpdmUgPSBtYXhfYWN0aXZlOwogCkBAIC0zMzA0LDcgKzMzMjksNyBAQAogCSAqIHdhbnQgdG8gZ2V0IGl0IG92ZXIgd2l0aCBBU0FQIC0gc3BhbSByZXNjdWVycywgd2FrZSB1cCBhcwogCSAqIG1hbnkgaWRsZXJzIGFzIG5lY2Vzc2FyeSBhbmQgY3JlYXRlIG5ldyBvbmVzIHRpbGwgdGhlCiAJICogd29ya2xpc3QgaXMgZW1wdHkuICBOb3RlIHRoYXQgaWYgdGhlIGdjd3EgaXMgZnJvemVuLCB0aGVyZQotCSAqIG1heSBiZSBmcm96ZW4gd29ya3MgaW4gZnJlZXplYWJsZSBjd3FzLiAgRG9uJ3QgZGVjbGFyZQorCSAqIG1heSBiZSBmcm96ZW4gd29ya3MgaW4gZnJlZXphYmxlIGN3cXMuICBEb24ndCBkZWNsYXJlCiAJICogY29tcGxldGlvbiB3aGlsZSBmcm96ZW4uCiAJICovCiAJd2hpbGUgKGdjd3EtPm5yX3dvcmtlcnMgIT0gZ2N3cS0+bnJfaWRsZSB8fApAQCAtMzU2Miw5ICszNTg3LDkgQEAKIC8qKgogICogZnJlZXplX3dvcmtxdWV1ZXNfYmVnaW4gLSBiZWdpbiBmcmVlemluZyB3b3JrcXVldWVzCiAgKgotICogU3RhcnQgZnJlZXppbmcgd29ya3F1ZXVlcy4gIEFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgYWxsCi0gKiBmcmVlemVhYmxlIHdvcmtxdWV1ZXMgd2lsbCBxdWV1ZSBuZXcgd29ya3MgdG8gdGhlaXIgZnJvemVuX3dvcmtzCi0gKiBsaXN0IGluc3RlYWQgb2YgZ2N3cS0+d29ya2xpc3QuCisgKiBTdGFydCBmcmVlemluZyB3b3JrcXVldWVzLiAgQWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBhbGwgZnJlZXphYmxlCisgKiB3b3JrcXVldWVzIHdpbGwgcXVldWUgbmV3IHdvcmtzIHRvIHRoZWlyIGZyb3plbl93b3JrcyBsaXN0IGluc3RlYWQgb2YKKyAqIGdjd3EtPndvcmtsaXN0LgogICoKICAqIENPTlRFWFQ6CiAgKiBHcmFicyBhbmQgcmVsZWFzZXMgd29ya3F1ZXVlX2xvY2sgYW5kIGdjd3EtPmxvY2sncy4KQEAgLTM1OTAsNyArMzYxNSw3IEBACiAJCWxpc3RfZm9yX2VhY2hfZW50cnkod3EsICZ3b3JrcXVldWVzLCBsaXN0KSB7CiAJCQlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSA9IGdldF9jd3EoY3B1LCB3cSk7CiAKLQkJCWlmIChjd3EgJiYgd3EtPmZsYWdzICYgV1FfRlJFRVpFQUJMRSkKKwkJCWlmIChjd3EgJiYgd3EtPmZsYWdzICYgV1FfRlJFRVpBQkxFKQogCQkJCWN3cS0+bWF4X2FjdGl2ZSA9IDA7CiAJCX0KIApAQCAtMzYwMSw3ICszNjI2LDcgQEAKIH0KIAogLyoqCi0gKiBmcmVlemVfd29ya3F1ZXVlc19idXN5IC0gYXJlIGZyZWV6ZWFibGUgd29ya3F1ZXVlcyBzdGlsbCBidXN5PworICogZnJlZXplX3dvcmtxdWV1ZXNfYnVzeSAtIGFyZSBmcmVlemFibGUgd29ya3F1ZXVlcyBzdGlsbCBidXN5PwogICoKICAqIENoZWNrIHdoZXRoZXIgZnJlZXppbmcgaXMgY29tcGxldGUuICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkCiAgKiBiZXR3ZWVuIGZyZWV6ZV93b3JrcXVldWVzX2JlZ2luKCkgYW5kIHRoYXdfd29ya3F1ZXVlcygpLgpAQCAtMzYxMCw4ICszNjM1LDggQEAKICAqIEdyYWJzIGFuZCByZWxlYXNlcyB3b3JrcXVldWVfbG9jay4KICAqCiAgKiBSRVRVUk5TOgotICogJXRydWUgaWYgc29tZSBmcmVlemVhYmxlIHdvcmtxdWV1ZXMgYXJlIHN0aWxsIGJ1c3kuICAlZmFsc2UgaWYKLSAqIGZyZWV6aW5nIGlzIGNvbXBsZXRlLgorICogJXRydWUgaWYgc29tZSBmcmVlemFibGUgd29ya3F1ZXVlcyBhcmUgc3RpbGwgYnVzeS4gICVmYWxzZSBpZiBmcmVlemluZworICogaXMgY29tcGxldGUuCiAgKi8KIGJvb2wgZnJlZXplX3dvcmtxdWV1ZXNfYnVzeSh2b2lkKQogewpAQCAtMzYzMSw3ICszNjU2LDcgQEAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3cSwgJndvcmtxdWV1ZXMsIGxpc3QpIHsKIAkJCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxID0gZ2V0X2N3cShjcHUsIHdxKTsKIAotCQkJaWYgKCFjd3EgfHwgISh3cS0+ZmxhZ3MgJiBXUV9GUkVFWkVBQkxFKSkKKwkJCWlmICghY3dxIHx8ICEod3EtPmZsYWdzICYgV1FfRlJFRVpBQkxFKSkKIAkJCQljb250aW51ZTsKIAogCQkJQlVHX09OKGN3cS0+bnJfYWN0aXZlIDwgMCk7CkBAIC0zNjc2LDcgKzM3MDEsNyBAQAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdxLCAmd29ya3F1ZXVlcywgbGlzdCkgewogCQkJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EgPSBnZXRfY3dxKGNwdSwgd3EpOwogCi0JCQlpZiAoIWN3cSB8fCAhKHdxLT5mbGFncyAmIFdRX0ZSRUVaRUFCTEUpKQorCQkJaWYgKCFjd3EgfHwgISh3cS0+ZmxhZ3MgJiBXUV9GUkVFWkFCTEUpKQogCQkJCWNvbnRpbnVlOwogCiAJCQkvKiByZXN0b3JlIG1heF9hY3RpdmUgYW5kIHJlcG9wdWxhdGUgd29ya2xpc3QgKi8KZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggMmQwNWFkYi4uMmI5NzQxOCAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTY1Nyw3ICs2NTcsNyBAQAogCSAgRGlzYWJsZSBmb3IgcHJvZHVjdGlvbiBzeXN0ZW1zLgogCiBjb25maWcgREVCVUdfQlVHVkVSQk9TRQotCWJvb2wgIlZlcmJvc2UgQlVHKCkgcmVwb3J0aW5nIChhZGRzIDcwSykiIGlmIERFQlVHX0tFUk5FTCAmJiBFTUJFRERFRAorCWJvb2wgIlZlcmJvc2UgQlVHKCkgcmVwb3J0aW5nIChhZGRzIDcwSykiIGlmIERFQlVHX0tFUk5FTCAmJiBFWFBFUlQKIAlkZXBlbmRzIG9uIEJVRwogCWRlcGVuZHMgb24gQVJNIHx8IEFWUjMyIHx8IE0zMlIgfHwgTTY4SyB8fCBTUEFSQzMyIHx8IFNQQVJDNjQgfHwgXAogCQkgICBGUlYgfHwgU1VQRVJIIHx8IEdFTkVSSUNfQlVHIHx8IEJMQUNLRklOIHx8IE1OMTAzMDAKQEAgLTcyOSw4ICs3MjksOCBAQAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIERFQlVHX01FTU9SWV9JTklUCi0JYm9vbCAiRGVidWcgbWVtb3J5IGluaXRpYWxpc2F0aW9uIiBpZiBFTUJFRERFRAotCWRlZmF1bHQgIUVNQkVEREVECisJYm9vbCAiRGVidWcgbWVtb3J5IGluaXRpYWxpc2F0aW9uIiBpZiBFWFBFUlQKKwlkZWZhdWx0ICFFWFBFUlQKIAloZWxwCiAJICBFbmFibGUgdGhpcyBmb3IgYWRkaXRpb25hbCBjaGVja3MgZHVyaW5nIG1lbW9yeSBpbml0aWFsaXNhdGlvbi4KIAkgIFRoZSBzYW5pdHkgY2hlY2tzIHZlcmlmeSBhc3BlY3RzIG9mIHRoZSBWTSBzdWNoIGFzIHRoZSBtZW1vcnkgbW9kZWwKQEAgLTgwNSw3ICs4MDUsNyBAQAogY29uZmlnIEZSQU1FX1BPSU5URVIKIAlib29sICJDb21waWxlIHRoZSBrZXJuZWwgd2l0aCBmcmFtZSBwb2ludGVycyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBcCi0JCShDUklTIHx8IE02OEsgfHwgTTY4S05PTU1VIHx8IEZSViB8fCBVTUwgfHwgXAorCQkoQ1JJUyB8fCBNNjhLIHx8IEZSViB8fCBVTUwgfHwgXAogCQkgQVZSMzIgfHwgU1VQRVJIIHx8IEJMQUNLRklOIHx8IE1OMTAzMDApIHx8IFwKIAkJQVJDSF9XQU5UX0ZSQU1FX1BPSU5URVJTCiAJZGVmYXVsdCB5IGlmIChERUJVR19JTkZPICYmIFVNTCkgfHwgQVJDSF9XQU5UX0ZSQU1FX1BPSU5URVJTCmRpZmYgLS1naXQgYS9saWIvbGlzdF9kZWJ1Zy5jIGIvbGliL2xpc3RfZGVidWcuYwppbmRleCAzNDRjNzEwLi5iODAyOWE1IDEwMDY0NAotLS0gYS9saWIvbGlzdF9kZWJ1Zy5jCisrKyBiL2xpYi9saXN0X2RlYnVnLmMKQEAgLTM1LDYgKzM1LDMxIEBACiB9CiBFWFBPUlRfU1lNQk9MKF9fbGlzdF9hZGQpOwogCit2b2lkIF9fbGlzdF9kZWxfZW50cnkoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcHJldiwgKm5leHQ7CisKKwlwcmV2ID0gZW50cnktPnByZXY7CisJbmV4dCA9IGVudHJ5LT5uZXh0OworCisJaWYgKFdBUk4obmV4dCA9PSBMSVNUX1BPSVNPTjEsCisJCSJsaXN0X2RlbCBjb3JydXB0aW9uLCAlcC0+bmV4dCBpcyBMSVNUX1BPSVNPTjEgKCVwKVxuIiwKKwkJZW50cnksIExJU1RfUE9JU09OMSkgfHwKKwkgICAgV0FSTihwcmV2ID09IExJU1RfUE9JU09OMiwKKwkJImxpc3RfZGVsIGNvcnJ1cHRpb24sICVwLT5wcmV2IGlzIExJU1RfUE9JU09OMiAoJXApXG4iLAorCQllbnRyeSwgTElTVF9QT0lTT04yKSB8fAorCSAgICBXQVJOKHByZXYtPm5leHQgIT0gZW50cnksCisJCSJsaXN0X2RlbCBjb3JydXB0aW9uLiBwcmV2LT5uZXh0IHNob3VsZCBiZSAlcCwgIgorCQkiYnV0IHdhcyAlcFxuIiwgZW50cnksIHByZXYtPm5leHQpIHx8CisJICAgIFdBUk4obmV4dC0+cHJldiAhPSBlbnRyeSwKKwkJImxpc3RfZGVsIGNvcnJ1cHRpb24uIG5leHQtPnByZXYgc2hvdWxkIGJlICVwLCAiCisJCSJidXQgd2FzICVwXG4iLCBlbnRyeSwgbmV4dC0+cHJldikpCisJCXJldHVybjsKKworCV9fbGlzdF9kZWwocHJldiwgbmV4dCk7Cit9CitFWFBPUlRfU1lNQk9MKF9fbGlzdF9kZWxfZW50cnkpOworCiAvKioKICAqIGxpc3RfZGVsIC0gZGVsZXRlcyBlbnRyeSBmcm9tIGxpc3QuCiAgKiBAZW50cnk6IHRoZSBlbGVtZW50IHRvIGRlbGV0ZSBmcm9tIHRoZSBsaXN0LgpAQCAtNDMsMTkgKzY4LDcgQEAKICAqLwogdm9pZCBsaXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkKIHsKLQlXQVJOKGVudHJ5LT5uZXh0ID09IExJU1RfUE9JU09OMSwKLQkJImxpc3RfZGVsIGNvcnJ1cHRpb24sIG5leHQgaXMgTElTVF9QT0lTT04xICglcClcbiIsCi0JCUxJU1RfUE9JU09OMSk7Ci0JV0FSTihlbnRyeS0+bmV4dCAhPSBMSVNUX1BPSVNPTjEgJiYgZW50cnktPnByZXYgPT0gTElTVF9QT0lTT04yLAotCQkibGlzdF9kZWwgY29ycnVwdGlvbiwgcHJldiBpcyBMSVNUX1BPSVNPTjIgKCVwKVxuIiwKLQkJTElTVF9QT0lTT04yKTsKLQlXQVJOKGVudHJ5LT5wcmV2LT5uZXh0ICE9IGVudHJ5LAotCQkibGlzdF9kZWwgY29ycnVwdGlvbi4gcHJldi0+bmV4dCBzaG91bGQgYmUgJXAsICIKLQkJImJ1dCB3YXMgJXBcbiIsIGVudHJ5LCBlbnRyeS0+cHJldi0+bmV4dCk7Ci0JV0FSTihlbnRyeS0+bmV4dC0+cHJldiAhPSBlbnRyeSwKLQkJImxpc3RfZGVsIGNvcnJ1cHRpb24uIG5leHQtPnByZXYgc2hvdWxkIGJlICVwLCAiCi0JCSJidXQgd2FzICVwXG4iLCBlbnRyeSwgZW50cnktPm5leHQtPnByZXYpOwotCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKKwlfX2xpc3RfZGVsX2VudHJ5KGVudHJ5KTsKIAllbnRyeS0+bmV4dCA9IExJU1RfUE9JU09OMTsKIAllbnRyeS0+cHJldiA9IExJU1RfUE9JU09OMjsKIH0KZGlmZiAtLWdpdCBhL2xpYi9yYWRpeC10cmVlLmMgYi9saWIvcmFkaXgtdHJlZS5jCmluZGV4IDUwODZiYjkuLjdlYTJlMDMgMTAwNjQ0Ci0tLSBhL2xpYi9yYWRpeC10cmVlLmMKKysrIGIvbGliL3JhZGl4LXRyZWUuYwpAQCAtNzM2LDEwICs3MzYsMTEgQEAKIAkJfQogCX0KIAkvKgotCSAqIFRoZSBpZnRhZyBtdXN0IGhhdmUgYmVlbiBzZXQgc29tZXdoZXJlIGJlY2F1c2Ugb3RoZXJ3aXNlCi0JICogd2Ugd291bGQgcmV0dXJuIGltbWVkaWF0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24KKwkgKiBXZSBuZWVkIG5vdCB0byB0YWcgdGhlIHJvb3QgdGFnIGlmIHRoZXJlIGlzIG5vIHRhZyB3aGljaCBpcyBzZXQgd2l0aAorCSAqIHNldHRhZyB3aXRoaW4gdGhlIHJhbmdlIGZyb20gKmZpcnN0X2luZGV4cCB0byBsYXN0X2luZGV4LgogCSAqLwotCXJvb3RfdGFnX3NldChyb290LCBzZXR0YWcpOworCWlmICh0YWdnZWQgPiAwKQorCQlyb290X3RhZ19zZXQocm9vdCwgc2V0dGFnKTsKIAkqZmlyc3RfaW5kZXhwID0gaW5kZXg7CiAKIAlyZXR1cm4gdGFnZ2VkOwpkaWZmIC0tZ2l0IGEvbGliL3JidHJlZS5jIGIvbGliL3JidHJlZS5jCmluZGV4IDQ2OTNmNzkuLmExNmJlMTkgMTAwNjQ0Ci0tLSBhL2xpYi9yYnRyZWUuYworKysgYi9saWIvcmJ0cmVlLmMKQEAgLTMxNSw2ICszMTUsNyBAQAogCiAJcmJfYXVnbWVudF9wYXRoKG5vZGUsIGZ1bmMsIGRhdGEpOwogfQorRVhQT1JUX1NZTUJPTChyYl9hdWdtZW50X2luc2VydCk7CiAKIC8qCiAgKiBiZWZvcmUgcmVtb3ZpbmcgdGhlIG5vZGUsIGZpbmQgdGhlIGRlZXBlc3Qgbm9kZSBvbiB0aGUgcmViYWxhbmNlIHBhdGgKQEAgLTM0MCw2ICszNDEsNyBAQAogCiAJcmV0dXJuIGRlZXBlc3Q7CiB9CitFWFBPUlRfU1lNQk9MKHJiX2F1Z21lbnRfZXJhc2VfYmVnaW4pOwogCiAvKgogICogYWZ0ZXIgcmVtb3ZhbCwgdXBkYXRlIHRoZSB0cmVlIHRvIGFjY291bnQgZm9yIHRoZSByZW1vdmVkIGVudHJ5CkBAIC0zNTAsNiArMzUyLDcgQEAKIAlpZiAobm9kZSkKIAkJcmJfYXVnbWVudF9wYXRoKG5vZGUsIGZ1bmMsIGRhdGEpOwogfQorRVhQT1JUX1NZTUJPTChyYl9hdWdtZW50X2VyYXNlX2VuZCk7CiAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZpcnN0IG5vZGUgKGluIHNvcnQgb3JkZXIpIG9mIHRoZSB0cmVlLgpkaWZmIC0tZ2l0IGEvbGliL3N3aW90bGIuYyBiL2xpYi9zd2lvdGxiLmMKaW5kZXggYzQ3YmJlMS4uOTNjYTA4YiAxMDA2NDQKLS0tIGEvbGliL3N3aW90bGIuYworKysgYi9saWIvc3dpb3RsYi5jCkBAIC02ODYsOCArNjg2LDEwIEBACiAJLyoKIAkgKiBFbnN1cmUgdGhhdCB0aGUgYWRkcmVzcyByZXR1cm5lZCBpcyBETUEnYmxlCiAJICovCi0JaWYgKCFkbWFfY2FwYWJsZShkZXYsIGRldl9hZGRyLCBzaXplKSkKLQkJcGFuaWMoIm1hcF9zaW5nbGU6IGJvdW5jZSBidWZmZXIgaXMgbm90IERNQSdibGUiKTsKKwlpZiAoIWRtYV9jYXBhYmxlKGRldiwgZGV2X2FkZHIsIHNpemUpKSB7CisJCXN3aW90bGJfdGJsX3VubWFwX3NpbmdsZShkZXYsIG1hcCwgc2l6ZSwgZGlyKTsKKwkJZGV2X2FkZHIgPSBzd2lvdGxiX3ZpcnRfdG9fYnVzKGRldiwgaW9fdGxiX292ZXJmbG93X2J1ZmZlcik7CisJfQogCiAJcmV0dXJuIGRldl9hZGRyOwogfQpkaWZmIC0tZ2l0IGEvbGliL3RleHRzZWFyY2guYyBiL2xpYi90ZXh0c2VhcmNoLmMKaW5kZXggZDYwODMzMS4uZTBjYzAxNCAxMDA2NDQKLS0tIGEvbGliL3RleHRzZWFyY2guYworKysgYi9saWIvdGV4dHNlYXJjaC5jCkBAIC0xMyw3ICsxMyw3IEBACiAgKgogICogSU5UUk9EVUNUSU9OCiAgKgotICogICBUaGUgdGV4dHNlYXJjaCBpbmZyYXN0cnVjdHVyZSBwcm92aWRlcyB0ZXh0IHNlYXJjaGluZyBmYWNpdGlsaWVzIGZvcgorICogICBUaGUgdGV4dHNlYXJjaCBpbmZyYXN0cnVjdHVyZSBwcm92aWRlcyB0ZXh0IHNlYXJjaGluZyBmYWNpbGl0aWVzIGZvcgogICogICBib3RoIGxpbmVhciBhbmQgbm9uLWxpbmVhciBkYXRhLiBJbmRpdmlkdWFsIHNlYXJjaCBhbGdvcml0aG1zIGFyZQogICogICBpbXBsZW1lbnRlZCBpbiBtb2R1bGVzIGFuZCBjaG9zZW4gYnkgdGhlIHVzZXIuCiAgKgpAQCAtNDMsNyArNDMsNyBAQAogICogICAgICAgdG8gdGhlIGFsZ29yaXRobSB0byBzdG9yZSBwZXJzaXN0ZW50IHZhcmlhYmxlcy4KICAqICAgKDQpIENvcmUgZXZlbnR1YWxseSByZXNldHMgdGhlIHNlYXJjaCBvZmZzZXQgYW5kIGZvcndhcmRzIHRoZSBmaW5kKCkKICAqICAgICAgIHJlcXVlc3QgdG8gdGhlIGFsZ29yaXRobS4KLSAqICAgKDUpIEFsZ29yaXRobSBjYWxscyBnZXRfbmV4dF9ibG9jaygpIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIGNvbnRpbm91c2x5CisgKiAgICg1KSBBbGdvcml0aG0gY2FsbHMgZ2V0X25leHRfYmxvY2soKSBwcm92aWRlZCBieSB0aGUgdXNlciBjb250aW51b3VzbHkKICAqICAgICAgIHRvIGZldGNoIHRoZSBkYXRhIHRvIGJlIHNlYXJjaGVkIGluIGJsb2NrIGJ5IGJsb2NrLgogICogICAoNikgQWxnb3JpdGhtIGludm9rZXMgZmluaXNoKCkgYWZ0ZXIgdGhlIGxhc3QgY2FsbCB0byBnZXRfbmV4dF9ibG9jawogICogICAgICAgdG8gY2xlYW4gdXAgYW55IGxlZnRvdmVycyBmcm9tIGdldF9uZXh0X2Jsb2NrLiAoT3B0aW9uYWwpCkBAIC01OCwxNSArNTgsMTUgQEAKICAqICAgdGhlIHBhdHRlcm4gdG8gbG9vayBmb3IgYW5kIGZsYWdzLiBBcyBhIGZsYWcsIHlvdSBjYW4gc2V0IFRTX0lHTk9SRUNBU0UKICAqICAgdG8gcGVyZm9ybSBjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nLiBCdXQgaXQgbWlnaHQgc2xvdyBkb3duCiAgKiAgIHBlcmZvcm1hbmNlIG9mIGFsZ29yaXRobSwgc28geW91IHNob3VsZCB1c2UgaXQgYXQgb3duIHlvdXIgcmlzay4KLSAqICAgVGhlIHJldHVybmVkIGNvbmZpZ3VyYXRpb24gbWF5IHRoZW4gYmUgdXNlZCBmb3IgYW4gYXJiaXRhcnkKKyAqICAgVGhlIHJldHVybmVkIGNvbmZpZ3VyYXRpb24gbWF5IHRoZW4gYmUgdXNlZCBmb3IgYW4gYXJiaXRyYXJ5CiAgKiAgIGFtb3VudCBvZiB0aW1lcyBhbmQgZXZlbiBpbiBwYXJhbGxlbCBhcyBsb25nIGFzIGEgc2VwYXJhdGUgc3RydWN0CiAgKiAgIHRzX3N0YXRlIHZhcmlhYmxlIGlzIHByb3ZpZGVkIHRvIGV2ZXJ5IGluc3RhbmNlLgogICoKICAqICAgVGhlIGFjdHVhbCBzZWFyY2ggaXMgcGVyZm9ybWVkIGJ5IGVpdGhlciBjYWxsaW5nIHRleHRzZWFyY2hfZmluZF8tCiAgKiAgIGNvbnRpbnVvdXMoKSBmb3IgbGluZWFyIGRhdGEgb3IgYnkgcHJvdmlkaW5nIGFuIG93biBnZXRfbmV4dF9ibG9jaygpCiAgKiAgIGltcGxlbWVudGF0aW9uIGFuZCBjYWxsaW5nIHRleHRzZWFyY2hfZmluZCgpLiBCb3RoIGZ1bmN0aW9ucyByZXR1cm4KLSAqICAgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBwYXRlcm4gb3IgVUlOVF9NQVggaWYKLSAqICAgbm8gbWF0Y2ggd2FzIGZvdW5kLiBTdWJzZXF1ZW50IG9jY3VyZW5jZXMgY2FuIGJlIGZvdW5kIGJ5IGNhbGxpbmcKKyAqICAgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBwYXR0ZXJuIG9yIFVJTlRfTUFYIGlmCisgKiAgIG5vIG1hdGNoIHdhcyBmb3VuZC4gU3Vic2VxdWVudCBvY2N1cnJlbmNlcyBjYW4gYmUgZm91bmQgYnkgY2FsbGluZwogICogICB0ZXh0c2VhcmNoX25leHQoKSByZWdhcmRsZXNzIG9mIHRoZSBsaW5lYXJpdHkgb2YgdGhlIGRhdGEuCiAgKgogICogICBPbmNlIHlvdSdyZSBkb25lIHVzaW5nIGEgY29uZmlndXJhdGlvbiBpdCBtdXN0IGJlIGdpdmVuIGJhY2sgdmlhCmRpZmYgLS1naXQgYS9saWIveHovS2NvbmZpZyBiL2xpYi94ei9LY29uZmlnCmluZGV4IGUzYjZlMTguLjYwYTYwODggMTAwNjQ0Ci0tLSBhL2xpYi94ei9LY29uZmlnCisrKyBiL2xpYi94ei9LY29uZmlnCkBAIC03LDM3ICs3LDM3IEBACiAJICBDUkMzMiBpcyBzdXBwb3J0ZWQuIFNlZSBEb2N1bWVudGF0aW9uL3h6LnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogY29uZmlnIFhaX0RFQ19YODYKLQlib29sICJ4ODYgQkNKIGZpbHRlciBkZWNvZGVyIiBpZiBFTUJFRERFRAorCWJvb2wgIng4NiBCQ0ogZmlsdGVyIGRlY29kZXIiIGlmIEVYUEVSVAogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gWFpfREVDCiAJc2VsZWN0IFhaX0RFQ19CQ0oKIAogY29uZmlnIFhaX0RFQ19QT1dFUlBDCi0JYm9vbCAiUG93ZXJQQyBCQ0ogZmlsdGVyIGRlY29kZXIiIGlmIEVNQkVEREVECisJYm9vbCAiUG93ZXJQQyBCQ0ogZmlsdGVyIGRlY29kZXIiIGlmIEVYUEVSVAogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gWFpfREVDCiAJc2VsZWN0IFhaX0RFQ19CQ0oKIAogY29uZmlnIFhaX0RFQ19JQTY0Ci0JYm9vbCAiSUEtNjQgQkNKIGZpbHRlciBkZWNvZGVyIiBpZiBFTUJFRERFRAorCWJvb2wgIklBLTY0IEJDSiBmaWx0ZXIgZGVjb2RlciIgaWYgRVhQRVJUCiAJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiBYWl9ERUMKIAlzZWxlY3QgWFpfREVDX0JDSgogCiBjb25maWcgWFpfREVDX0FSTQotCWJvb2wgIkFSTSBCQ0ogZmlsdGVyIGRlY29kZXIiIGlmIEVNQkVEREVECisJYm9vbCAiQVJNIEJDSiBmaWx0ZXIgZGVjb2RlciIgaWYgRVhQRVJUCiAJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiBYWl9ERUMKIAlzZWxlY3QgWFpfREVDX0JDSgogCiBjb25maWcgWFpfREVDX0FSTVRIVU1CCi0JYm9vbCAiQVJNLVRodW1iIEJDSiBmaWx0ZXIgZGVjb2RlciIgaWYgRU1CRURERUQKKwlib29sICJBUk0tVGh1bWIgQkNKIGZpbHRlciBkZWNvZGVyIiBpZiBFWFBFUlQKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uIFhaX0RFQwogCXNlbGVjdCBYWl9ERUNfQkNKCiAKIGNvbmZpZyBYWl9ERUNfU1BBUkMKLQlib29sICJTUEFSQyBCQ0ogZmlsdGVyIGRlY29kZXIiIGlmIEVNQkVEREVECisJYm9vbCAiU1BBUkMgQkNKIGZpbHRlciBkZWNvZGVyIiBpZiBFWFBFUlQKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uIFhaX0RFQwogCXNlbGVjdCBYWl9ERUNfQkNKCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCAzYWQ0ODNiLi5lOWMwYzYxIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTE3OSw3ICsxNzksNyBAQAogY29uZmlnIENPTVBBQ1RJT04KIAlib29sICJBbGxvdyBmb3IgbWVtb3J5IGNvbXBhY3Rpb24iCiAJc2VsZWN0IE1JR1JBVElPTgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIEhVR0VUTEJfUEFHRSAmJiBNTVUKKwlkZXBlbmRzIG9uIE1NVQogCWhlbHAKIAkgIEFsbG93cyB0aGUgY29tcGFjdGlvbiBvZiBtZW1vcnkgZm9yIHRoZSBhbGxvY2F0aW9uIG9mIGh1Z2UgcGFnZXMuCiAKZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uYwppbmRleCA2ZDU5MmEwLi44YmU0MzBiIDEwMDY0NAotLS0gYS9tbS9jb21wYWN0aW9uLmMKKysrIGIvbW0vY29tcGFjdGlvbi5jCkBAIC00MDYsNiArNDA2LDEwIEBACiAJaWYgKCF6b25lX3dhdGVybWFya19vayh6b25lLCBjYy0+b3JkZXIsIHdhdGVybWFyaywgMCwgMCkpCiAJCXJldHVybiBDT01QQUNUX0NPTlRJTlVFOwogCisJLyoKKwkgKiBvcmRlciA9PSAtMSBpcyBleHBlY3RlZCB3aGVuIGNvbXBhY3RpbmcgdmlhCisJICogL3Byb2Mvc3lzL3ZtL2NvbXBhY3RfbWVtb3J5CisJICovCiAJaWYgKGNjLT5vcmRlciA9PSAtMSkKIAkJcmV0dXJuIENPTVBBQ1RfQ09OVElOVUU7CiAKQEAgLTQ1NCw2ICs0NTgsMTMgQEAKIAkJcmV0dXJuIENPTVBBQ1RfU0tJUFBFRDsKIAogCS8qCisJICogb3JkZXIgPT0gLTEgaXMgZXhwZWN0ZWQgd2hlbiBjb21wYWN0aW5nIHZpYQorCSAqIC9wcm9jL3N5cy92bS9jb21wYWN0X21lbW9yeQorCSAqLworCWlmIChvcmRlciA9PSAtMSkKKwkJcmV0dXJuIENPTVBBQ1RfQ09OVElOVUU7CisKKwkvKgogCSAqIGZyYWdtZW50YXRpb24gaW5kZXggZGV0ZXJtaW5lcyBpZiBhbGxvY2F0aW9uIGZhaWx1cmVzIGFyZSBkdWUgdG8KIAkgKiBsb3cgbWVtb3J5IG9yIGV4dGVybmFsIGZyYWdtZW50YXRpb24KIAkgKgpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggMDA0YzljMi4uM2UyOTc4MSAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYworKysgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0xMTYyLDcgKzExNjIsMTIgQEAKIAkJLyogYWZ0ZXIgY2xlYXJpbmcgUGFnZVRhaWwgdGhlIGd1cCByZWZjb3VudCBjYW4gYmUgcmVsZWFzZWQgKi8KIAkJc21wX21iKCk7CiAKLQkJcGFnZV90YWlsLT5mbGFncyAmPSB+UEFHRV9GTEFHU19DSEVDS19BVF9QUkVQOworCQkvKgorCQkgKiByZXRhaW4gaHdwb2lzb24gZmxhZyBvZiB0aGUgcG9pc29uZWQgdGFpbCBwYWdlOgorCQkgKiAgIGZpeCBmb3IgdGhlIHVuc3VpdGFibGUgcHJvY2VzcyBraWxsZWQgb24gR3Vlc3QgTWFjaGluZShLVk0pCisJCSAqICAgYnkgdGhlIG1lbW9yeS1mYWlsdXJlLgorCQkgKi8KKwkJcGFnZV90YWlsLT5mbGFncyAmPSB+UEFHRV9GTEFHU19DSEVDS19BVF9QUkVQIHwgX19QR19IV1BPSVNPTjsKIAkJcGFnZV90YWlsLT5mbGFncyB8PSAocGFnZS0+ZmxhZ3MgJgogCQkJCSAgICAgKCgxTCA8PCBQR19yZWZlcmVuY2VkKSB8CiAJCQkJICAgICAgKDFMIDw8IFBHX3N3YXBiYWNrZWQpIHwKQEAgLTEyMDMsNiArMTIwOCw4IEBACiAJCUJVR19PTighUGFnZURpcnR5KHBhZ2VfdGFpbCkpOwogCQlCVUdfT04oIVBhZ2VTd2FwQmFja2VkKHBhZ2VfdGFpbCkpOwogCisJCW1lbV9jZ3JvdXBfc3BsaXRfaHVnZV9maXh1cChwYWdlLCBwYWdlX3RhaWwpOworCiAJCWxydV9hZGRfcGFnZV90YWlsKHpvbmUsIHBhZ2UsIHBhZ2VfdGFpbCk7CiAJfQogCkBAIC0xODA0LDYgKzE4MTEsOCBAQAogCS8qIFZNX1BGTk1BUCB2bWFzIG1heSBoYXZlIHZtX29wcyBudWxsIGJ1dCB2bV9maWxlIHNldCAqLwogCWlmICghdm1hLT5hbm9uX3ZtYSB8fCB2bWEtPnZtX29wcyB8fCB2bWEtPnZtX2ZpbGUpCiAJCWdvdG8gb3V0OworCWlmIChpc192bWFfdGVtcG9yYXJ5X3N0YWNrKHZtYSkpCisJCWdvdG8gb3V0OwogCVZNX0JVR19PTihpc19saW5lYXJfcGZuX21hcHBpbmcodm1hKSB8fCBpc19wZm5fbWFwcGluZyh2bWEpKTsKIAogCXBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpOwpAQCAtMTgzNywxNSArMTg0NiwxNCBAQAogCXNwaW5fbG9jayhwdGwpOwogCWlzb2xhdGVkID0gX19jb2xsYXBzZV9odWdlX3BhZ2VfaXNvbGF0ZSh2bWEsIGFkZHJlc3MsIHB0ZSk7CiAJc3Bpbl91bmxvY2socHRsKTsKLQlwdGVfdW5tYXAocHRlKTsKIAogCWlmICh1bmxpa2VseSghaXNvbGF0ZWQpKSB7CisJCXB0ZV91bm1hcChwdGUpOwogCQlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCQlCVUdfT04oIXBtZF9ub25lKCpwbWQpKTsKIAkJc2V0X3BtZF9hdChtbSwgYWRkcmVzcywgcG1kLCBfcG1kKTsKIAkJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCQlhbm9uX3ZtYV91bmxvY2sodm1hLT5hbm9uX3ZtYSk7Ci0JCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShuZXdfcGFnZSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTg1Niw2ICsxODY0LDcgQEAKIAlhbm9uX3ZtYV91bmxvY2sodm1hLT5hbm9uX3ZtYSk7CiAKIAlfX2NvbGxhcHNlX2h1Z2VfcGFnZV9jb3B5KHB0ZSwgbmV3X3BhZ2UsIHZtYSwgYWRkcmVzcywgcHRsKTsKKwlwdGVfdW5tYXAocHRlKTsKIAlfX1NldFBhZ2VVcHRvZGF0ZShuZXdfcGFnZSk7CiAJcGd0YWJsZSA9IHBtZF9wZ3RhYmxlKF9wbWQpOwogCVZNX0JVR19PTihwYWdlX2NvdW50KHBndGFibGUpICE9IDEpOwpAQCAtMTg5MCw2ICsxODk5LDcgQEAKIAlyZXR1cm47CiAKIG91dDoKKwltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UobmV3X3BhZ2UpOwogI2lmZGVmIENPTkZJR19OVU1BCiAJcHV0X3BhZ2UobmV3X3BhZ2UpOwogI2VuZGlmCkBAIC0yMDI0LDMyICsyMDM0LDI3IEBACiAJCWlmICgoISh2bWEtPnZtX2ZsYWdzICYgVk1fSFVHRVBBR0UpICYmCiAJCSAgICAgIWtodWdlcGFnZWRfYWx3YXlzKCkpIHx8CiAJCSAgICAodm1hLT52bV9mbGFncyAmIFZNX05PSFVHRVBBR0UpKSB7CisJCXNraXA6CiAJCQlwcm9ncmVzcysrOwogCQkJY29udGludWU7CiAJCX0KLQogCQkvKiBWTV9QRk5NQVAgdm1hcyBtYXkgaGF2ZSB2bV9vcHMgbnVsbCBidXQgdm1fZmlsZSBzZXQgKi8KLQkJaWYgKCF2bWEtPmFub25fdm1hIHx8IHZtYS0+dm1fb3BzIHx8IHZtYS0+dm1fZmlsZSkgewotCQkJa2h1Z2VwYWdlZF9zY2FuLmFkZHJlc3MgPSB2bWEtPnZtX2VuZDsKLQkJCXByb2dyZXNzKys7Ci0JCQljb250aW51ZTsKLQkJfQorCQlpZiAoIXZtYS0+YW5vbl92bWEgfHwgdm1hLT52bV9vcHMgfHwgdm1hLT52bV9maWxlKQorCQkJZ290byBza2lwOworCQlpZiAoaXNfdm1hX3RlbXBvcmFyeV9zdGFjayh2bWEpKQorCQkJZ290byBza2lwOworCiAJCVZNX0JVR19PTihpc19saW5lYXJfcGZuX21hcHBpbmcodm1hKSB8fCBpc19wZm5fbWFwcGluZyh2bWEpKTsKIAogCQloc3RhcnQgPSAodm1hLT52bV9zdGFydCArIH5IUEFHRV9QTURfTUFTSykgJiBIUEFHRV9QTURfTUFTSzsKIAkJaGVuZCA9IHZtYS0+dm1fZW5kICYgSFBBR0VfUE1EX01BU0s7Ci0JCWlmIChoc3RhcnQgPj0gaGVuZCkgewotCQkJcHJvZ3Jlc3MrKzsKLQkJCWNvbnRpbnVlOwotCQl9CisJCWlmIChoc3RhcnQgPj0gaGVuZCkKKwkJCWdvdG8gc2tpcDsKKwkJaWYgKGtodWdlcGFnZWRfc2Nhbi5hZGRyZXNzID4gaGVuZCkKKwkJCWdvdG8gc2tpcDsKIAkJaWYgKGtodWdlcGFnZWRfc2Nhbi5hZGRyZXNzIDwgaHN0YXJ0KQogCQkJa2h1Z2VwYWdlZF9zY2FuLmFkZHJlc3MgPSBoc3RhcnQ7Ci0JCWlmIChraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyA+IGhlbmQpIHsKLQkJCWtodWdlcGFnZWRfc2Nhbi5hZGRyZXNzID0gaGVuZCArIEhQQUdFX1BNRF9TSVpFOwotCQkJcHJvZ3Jlc3MrKzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCUJVR19PTihraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyAmIH5IUEFHRV9QTURfTUFTSyk7CisJCVZNX0JVR19PTihraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyAmIH5IUEFHRV9QTURfTUFTSyk7CiAKIAkJd2hpbGUgKGtodWdlcGFnZWRfc2Nhbi5hZGRyZXNzIDwgaGVuZCkgewogCQkJaW50IHJldDsKQEAgLTIwNzgsNyArMjA4Myw3IEBACiBicmVha291dGVybG9vcF9tbWFwX3NlbToKIAogCXNwaW5fbG9jaygma2h1Z2VwYWdlZF9tbV9sb2NrKTsKLQlCVUdfT04oa2h1Z2VwYWdlZF9zY2FuLm1tX3Nsb3QgIT0gbW1fc2xvdCk7CisJVk1fQlVHX09OKGtodWdlcGFnZWRfc2Nhbi5tbV9zbG90ICE9IG1tX3Nsb3QpOwogCS8qCiAJICogUmVsZWFzZSB0aGUgY3VycmVudCBtbV9zbG90IGlmIHRoaXMgbW0gaXMgYWJvdXQgdG8gZGllLCBvcgogCSAqIGlmIHdlIHNjYW5uZWQgYWxsIHZtYXMgb2YgdGhpcyBtbS4KQEAgLTIyMzMsOSArMjIzOCw5IEBACiAKIAlmb3IgKDs7KSB7CiAJCW11dGV4X3VubG9jaygma2h1Z2VwYWdlZF9tdXRleCk7Ci0JCUJVR19PTihraHVnZXBhZ2VkX3RocmVhZCAhPSBjdXJyZW50KTsKKwkJVk1fQlVHX09OKGtodWdlcGFnZWRfdGhyZWFkICE9IGN1cnJlbnQpOwogCQlraHVnZXBhZ2VkX2xvb3AoKTsKLQkJQlVHX09OKGtodWdlcGFnZWRfdGhyZWFkICE9IGN1cnJlbnQpOworCQlWTV9CVUdfT04oa2h1Z2VwYWdlZF90aHJlYWQgIT0gY3VycmVudCk7CiAKIAkJbXV0ZXhfbG9jaygma2h1Z2VwYWdlZF9tdXRleCk7CiAJCWlmICgha2h1Z2VwYWdlZF9lbmFibGVkKCkpCmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay10ZXN0LmMgYi9tbS9rbWVtbGVhay10ZXN0LmMKaW5kZXggMTc3YTUxNi4uZmYwZDk3NyAxMDA2NDQKLS0tIGEvbW0va21lbWxlYWstdGVzdC5jCisrKyBiL21tL2ttZW1sZWFrLXRlc3QuYwpAQCAtNzUsMTMgKzc1LDExIEBACiAJICogYWZ0ZXIgdGhlIG1vZHVsZSBpcyByZW1vdmVkLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCWVsZW0gPSBrbWFsbG9jKHNpemVvZigqZWxlbSksIEdGUF9LRVJORUwpOwotCQlwcl9pbmZvKCJrbWVtbGVhazoga21hbGxvYyhzaXplb2YoKmVsZW0pKSA9ICVwXG4iLCBlbGVtKTsKKwkJZWxlbSA9IGt6YWxsb2Moc2l6ZW9mKCplbGVtKSwgR0ZQX0tFUk5FTCk7CisJCXByX2luZm8oImttZW1sZWFrOiBremFsbG9jKHNpemVvZigqZWxlbSkpID0gJXBcbiIsIGVsZW0pOwogCQlpZiAoIWVsZW0pCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJbWVtc2V0KGVsZW0sIDAsIHNpemVvZigqZWxlbSkpOwogCQlJTklUX0xJU1RfSEVBRCgmZWxlbS0+bGlzdCk7Ci0KIAkJbGlzdF9hZGRfdGFpbCgmZWxlbS0+bGlzdCwgJnRlc3RfbGlzdCk7CiAJfQogCmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuYwppbmRleCBiZDliYzIxLi44NDIyNWYzIDEwMDY0NAotLS0gYS9tbS9rbWVtbGVhay5jCisrKyBiL21tL2ttZW1sZWFrLmMKQEAgLTExMyw3ICsxMTMsOSBAQAogI2RlZmluZSBCWVRFU19QRVJfUE9JTlRFUglzaXplb2Yodm9pZCAqKQogCiAvKiBHRlAgYml0bWFzayBmb3Iga21lbWxlYWsgaW50ZXJuYWwgYWxsb2NhdGlvbnMgKi8KLSNkZWZpbmUgR0ZQX0tNRU1MRUFLX01BU0sJKEdGUF9LRVJORUwgfCBHRlBfQVRPTUlDKQorI2RlZmluZSBnZnBfa21lbWxlYWtfbWFzayhnZnApCSgoKGdmcCkgJiAoR0ZQX0tFUk5FTCB8IEdGUF9BVE9NSUMpKSB8IFwKKwkJCQkgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0MgfCBcCisJCQkJIF9fR0ZQX05PV0FSTikKIAogLyogc2Nhbm5pbmcgYXJlYSBpbnNpZGUgYSBtZW1vcnkgYmxvY2sgKi8KIHN0cnVjdCBrbWVtbGVha19zY2FuX2FyZWEgewpAQCAtNTExLDkgKzUxMywxMCBAQAogCXN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdDsKIAlzdHJ1Y3QgcHJpb190cmVlX25vZGUgKm5vZGU7CiAKLQlvYmplY3QgPSBrbWVtX2NhY2hlX2FsbG9jKG9iamVjdF9jYWNoZSwgZ2ZwICYgR0ZQX0tNRU1MRUFLX01BU0spOworCW9iamVjdCA9IGttZW1fY2FjaGVfYWxsb2Mob2JqZWN0X2NhY2hlLCBnZnBfa21lbWxlYWtfbWFzayhnZnApKTsKIAlpZiAoIW9iamVjdCkgewotCQlrbWVtbGVha19zdG9wKCJDYW5ub3QgYWxsb2NhdGUgYSBrbWVtbGVha19vYmplY3Qgc3RydWN0dXJlXG4iKTsKKwkJcHJfd2FybmluZygiQ2Fubm90IGFsbG9jYXRlIGEga21lbWxlYWtfb2JqZWN0IHN0cnVjdHVyZVxuIik7CisJCWttZW1sZWFrX2Rpc2FibGUoKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC03MzQsOSArNzM3LDkgQEAKIAkJcmV0dXJuOwogCX0KIAotCWFyZWEgPSBrbWVtX2NhY2hlX2FsbG9jKHNjYW5fYXJlYV9jYWNoZSwgZ2ZwICYgR0ZQX0tNRU1MRUFLX01BU0spOworCWFyZWEgPSBrbWVtX2NhY2hlX2FsbG9jKHNjYW5fYXJlYV9jYWNoZSwgZ2ZwX2ttZW1sZWFrX21hc2soZ2ZwKSk7CiAJaWYgKCFhcmVhKSB7Ci0JCWttZW1sZWFrX3dhcm4oIkNhbm5vdCBhbGxvY2F0ZSBhIHNjYW4gYXJlYVxuIik7CisJCXByX3dhcm5pbmcoIkNhbm5vdCBhbGxvY2F0ZSBhIHNjYW4gYXJlYVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmMKaW5kZXggNDAwZGM2Mi4uNDYxOGZkYSAxMDA2NDQKLS0tIGEvbW0vbWVtYmxvY2suYworKysgYi9tbS9tZW1ibG9jay5jCkBAIC0xMzcsOCArMTM3LDYgQEAKIAogCUJVR19PTigwID09IHNpemUpOwogCi0Jc2l6ZSA9IG1lbWJsb2NrX2FsaWduX3VwKHNpemUsIGFsaWduKTsKLQogCS8qIFB1bXAgdXAgbWF4X2FkZHIgKi8KIAlpZiAoZW5kID09IE1FTUJMT0NLX0FMTE9DX0FDQ0VTU0lCTEUpCiAJCWVuZCA9IG1lbWJsb2NrLmN1cnJlbnRfbGltaXQ7CkBAIC02ODMsMTMgKzY4MSwxMyBAQAogCiBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2lzX3JlZ2lvbl9tZW1vcnkocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSkKIHsKLQlpbnQgaWR4ID0gbWVtYmxvY2tfc2VhcmNoKCZtZW1ibG9jay5yZXNlcnZlZCwgYmFzZSk7CisJaW50IGlkeCA9IG1lbWJsb2NrX3NlYXJjaCgmbWVtYmxvY2subWVtb3J5LCBiYXNlKTsKIAogCWlmIChpZHggPT0gLTEpCiAJCXJldHVybiAwOwotCXJldHVybiBtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zW2lkeF0uYmFzZSA8PSBiYXNlICYmCi0JCShtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zW2lkeF0uYmFzZSArCi0JCSBtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zW2lkeF0uc2l6ZSkgPj0gKGJhc2UgKyBzaXplKTsKKwlyZXR1cm4gbWVtYmxvY2subWVtb3J5LnJlZ2lvbnNbaWR4XS5iYXNlIDw9IGJhc2UgJiYKKwkJKG1lbWJsb2NrLm1lbW9yeS5yZWdpb25zW2lkeF0uYmFzZSArCisJCSBtZW1ibG9jay5tZW1vcnkucmVnaW9uc1tpZHhdLnNpemUpID49IChiYXNlICsgc2l6ZSk7CiB9CiAKIGludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggOGFiODQxMC4uZGE1M2EyNSAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCisrKyBiL21tL21lbWNvbnRyb2wuYwpAQCAtNjAwLDIzICs2MDAsMjQgQEAKIH0KIAogc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jaGFyZ2Vfc3RhdGlzdGljcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAotCQkJCQkgc3RydWN0IHBhZ2VfY2dyb3VwICpwYywKLQkJCQkJIGJvb2wgY2hhcmdlKQorCQkJCQkgYm9vbCBmaWxlLCBpbnQgbnJfcGFnZXMpCiB7Ci0JaW50IHZhbCA9IChjaGFyZ2UpID8gMSA6IC0xOwotCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAKLQlpZiAoUGFnZUNncm91cENhY2hlKHBjKSkKLQkJX190aGlzX2NwdV9hZGQobWVtLT5zdGF0LT5jb3VudFtNRU1fQ0dST1VQX1NUQVRfQ0FDSEVdLCB2YWwpOworCWlmIChmaWxlKQorCQlfX3RoaXNfY3B1X2FkZChtZW0tPnN0YXQtPmNvdW50W01FTV9DR1JPVVBfU1RBVF9DQUNIRV0sIG5yX3BhZ2VzKTsKIAllbHNlCi0JCV9fdGhpc19jcHVfYWRkKG1lbS0+c3RhdC0+Y291bnRbTUVNX0NHUk9VUF9TVEFUX1JTU10sIHZhbCk7CisJCV9fdGhpc19jcHVfYWRkKG1lbS0+c3RhdC0+Y291bnRbTUVNX0NHUk9VUF9TVEFUX1JTU10sIG5yX3BhZ2VzKTsKIAotCWlmIChjaGFyZ2UpCisJLyogcGFnZWluIG9mIGEgYmlnIHBhZ2UgaXMgYW4gZXZlbnQuIFNvLCBpZ25vcmUgcGFnZSBzaXplICovCisJaWYgKG5yX3BhZ2VzID4gMCkKIAkJX190aGlzX2NwdV9pbmMobWVtLT5zdGF0LT5jb3VudFtNRU1fQ0dST1VQX1NUQVRfUEdQR0lOX0NPVU5UXSk7Ci0JZWxzZQorCWVsc2UgewogCQlfX3RoaXNfY3B1X2luYyhtZW0tPnN0YXQtPmNvdW50W01FTV9DR1JPVVBfU1RBVF9QR1BHT1VUX0NPVU5UXSk7Ci0JX190aGlzX2NwdV9pbmMobWVtLT5zdGF0LT5jb3VudFtNRU1fQ0dST1VQX0VWRU5UU10pOworCQlucl9wYWdlcyA9IC1ucl9wYWdlczsgLyogZm9yIGV2ZW50ICovCisJfQorCisJX190aGlzX2NwdV9hZGQobWVtLT5zdGF0LT5jb3VudFtNRU1fQ0dST1VQX0VWRU5UU10sIG5yX3BhZ2VzKTsKIAogCXByZWVtcHRfZW5hYmxlKCk7CiB9CkBAIC04MTUsNyArODE2LDggQEAKIAkgKiByZW1vdmVkIGZyb20gZ2xvYmFsIExSVS4KIAkgKi8KIAlteiA9IHBhZ2VfY2dyb3VwX3pvbmVpbmZvKHBjKTsKLQlNRU1fQ0dST1VQX1pTVEFUKG16LCBscnUpIC09IDE7CisJLyogaHVnZSBwYWdlIHNwbGl0IGlzIGRvbmUgdW5kZXIgbHJ1X2xvY2suIHNvLCB3ZSBoYXZlIG5vIHJhY2VzLiAqLworCU1FTV9DR1JPVVBfWlNUQVQobXosIGxydSkgLT0gMSA8PCBjb21wb3VuZF9vcmRlcihwYWdlKTsKIAlpZiAobWVtX2Nncm91cF9pc19yb290KHBjLT5tZW1fY2dyb3VwKSkKIAkJcmV0dXJuOwogCVZNX0JVR19PTihsaXN0X2VtcHR5KCZwYy0+bHJ1KSk7CkBAIC04MzYsMTMgKzgzOCwxMiBAQAogCQlyZXR1cm47CiAKIAlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKLQkvKgotCSAqIFVzZWQgYml0IGlzIHNldCB3aXRob3V0IGF0b21pYyBvcHMgYnV0IGFmdGVyIHNtcF93bWIoKS4KLQkgKiBGb3IgbWFraW5nIHBjLT5tZW1fY2dyb3VwIHZpc2libGUsIGluc2VydCBzbXBfcm1iKCkgaGVyZS4KLQkgKi8KLQlzbXBfcm1iKCk7CiAJLyogdW51c2VkIG9yIHJvb3QgcGFnZSBpcyBub3Qgcm90YXRlZC4gKi8KLQlpZiAoIVBhZ2VDZ3JvdXBVc2VkKHBjKSB8fCBtZW1fY2dyb3VwX2lzX3Jvb3QocGMtPm1lbV9jZ3JvdXApKQorCWlmICghUGFnZUNncm91cFVzZWQocGMpKQorCQlyZXR1cm47CisJLyogRW5zdXJlIHBjLT5tZW1fY2dyb3VwIGlzIHZpc2libGUgYWZ0ZXIgcmVhZGluZyBQQ0dfVVNFRC4gKi8KKwlzbXBfcm1iKCk7CisJaWYgKG1lbV9jZ3JvdXBfaXNfcm9vdChwYy0+bWVtX2Nncm91cCkpCiAJCXJldHVybjsKIAlteiA9IHBhZ2VfY2dyb3VwX3pvbmVpbmZvKHBjKTsKIAlsaXN0X21vdmUoJnBjLT5scnUsICZtei0+bGlzdHNbbHJ1XSk7CkBAIC04NTcsMTYgKzg1OCwxMyBAQAogCQlyZXR1cm47CiAJcGMgPSBsb29rdXBfcGFnZV9jZ3JvdXAocGFnZSk7CiAJVk1fQlVHX09OKFBhZ2VDZ3JvdXBBY2N0TFJVKHBjKSk7Ci0JLyoKLQkgKiBVc2VkIGJpdCBpcyBzZXQgd2l0aG91dCBhdG9taWMgb3BzIGJ1dCBhZnRlciBzbXBfd21iKCkuCi0JICogRm9yIG1ha2luZyBwYy0+bWVtX2Nncm91cCB2aXNpYmxlLCBpbnNlcnQgc21wX3JtYigpIGhlcmUuCi0JICovCi0Jc21wX3JtYigpOwogCWlmICghUGFnZUNncm91cFVzZWQocGMpKQogCQlyZXR1cm47Ci0KKwkvKiBFbnN1cmUgcGMtPm1lbV9jZ3JvdXAgaXMgdmlzaWJsZSBhZnRlciByZWFkaW5nIFBDR19VU0VELiAqLworCXNtcF9ybWIoKTsKIAlteiA9IHBhZ2VfY2dyb3VwX3pvbmVpbmZvKHBjKTsKLQlNRU1fQ0dST1VQX1pTVEFUKG16LCBscnUpICs9IDE7CisJLyogaHVnZSBwYWdlIHNwbGl0IGlzIGRvbmUgdW5kZXIgbHJ1X2xvY2suIHNvLCB3ZSBoYXZlIG5vIHJhY2VzLiAqLworCU1FTV9DR1JPVVBfWlNUQVQobXosIGxydSkgKz0gMSA8PCBjb21wb3VuZF9vcmRlcihwYWdlKTsKIAlTZXRQYWdlQ2dyb3VwQWNjdExSVShwYyk7CiAJaWYgKG1lbV9jZ3JvdXBfaXNfcm9vdChwYy0+bWVtX2Nncm91cCkpCiAJCXJldHVybjsKQEAgLTEwMzAsMTQgKzEwMjgsMTAgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKLQkvKgotCSAqIFVzZWQgYml0IGlzIHNldCB3aXRob3V0IGF0b21pYyBvcHMgYnV0IGFmdGVyIHNtcF93bWIoKS4KLQkgKiBGb3IgbWFraW5nIHBjLT5tZW1fY2dyb3VwIHZpc2libGUsIGluc2VydCBzbXBfcm1iKCkgaGVyZS4KLQkgKi8KLQlzbXBfcm1iKCk7CiAJaWYgKCFQYWdlQ2dyb3VwVXNlZChwYykpCiAJCXJldHVybiBOVUxMOwotCisJLyogRW5zdXJlIHBjLT5tZW1fY2dyb3VwIGlzIHZpc2libGUgYWZ0ZXIgcmVhZGluZyBQQ0dfVVNFRC4gKi8KKwlzbXBfcm1iKCk7CiAJbXogPSBwYWdlX2Nncm91cF96b25laW5mbyhwYyk7CiAJaWYgKCFteikKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMTE5LDYgKzExMTMsMjMgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qKgorICogbWVtX2Nncm91cF9jaGVja19tYXJnaW4gLSBjaGVjayBpZiB0aGUgbWVtb3J5IGNncm91cCBhbGxvd3MgY2hhcmdpbmcKKyAqIEBtZW06IG1lbW9yeSBjZ3JvdXAgdG8gY2hlY2sKKyAqIEBieXRlczogdGhlIG51bWJlciBvZiBieXRlcyB0aGUgY2FsbGVyIGludGVuZHMgdG8gY2hhcmdlCisgKgorICogUmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgb24gd2hldGhlciBAbWVtIGNhbiBiZSBjaGFyZ2VkIEBieXRlcyBvcgorICogd2hldGhlciB0aGlzIHdvdWxkIGV4Y2VlZCB0aGUgbGltaXQuCisgKi8KK3N0YXRpYyBib29sIG1lbV9jZ3JvdXBfY2hlY2tfbWFyZ2luKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIHVuc2lnbmVkIGxvbmcgYnl0ZXMpCit7CisJaWYgKCFyZXNfY291bnRlcl9jaGVja19tYXJnaW4oJm1lbS0+cmVzLCBieXRlcykpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoZG9fc3dhcF9hY2NvdW50ICYmICFyZXNfY291bnRlcl9jaGVja19tYXJnaW4oJm1lbS0+bWVtc3csIGJ5dGVzKSkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gbWVtY2ctPmNzcy5jZ3JvdXA7CkBAIC0xNjE1LDcgKzE2MjYsNyBAQAogCWlmICh1bmxpa2VseSghbWVtIHx8ICFQYWdlQ2dyb3VwVXNlZChwYykpKQogCQlnb3RvIG91dDsKIAkvKiBwYy0+bWVtX2Nncm91cCBpcyB1bnN0YWJsZSA/ICovCi0JaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfc3RlYWxlZChtZW0pKSkgeworCWlmICh1bmxpa2VseShtZW1fY2dyb3VwX3N0ZWFsZWQobWVtKSkgfHwgUGFnZVRyYW5zSHVnZShwYWdlKSkgewogCQkvKiB0YWtlIGEgbG9jayBhZ2FpbnN0IHRvIGFjY2VzcyBwYy0+bWVtX2Nncm91cCAqLwogCQltb3ZlX2xvY2tfcGFnZV9jZ3JvdXAocGMsICZmbGFncyk7CiAJCW5lZWRfdW5sb2NrID0gdHJ1ZTsKQEAgLTE4NDAsMjcgKzE4NTEsMzkgQEAKIAkJaWYgKGxpa2VseSghcmV0KSkKIAkJCXJldHVybiBDSEFSR0VfT0s7CiAKKwkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBjc2l6ZSk7CiAJCW1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX3Jlc19jb3VudGVyKGZhaWxfcmVzLCBtZW1zdyk7CiAJCWZsYWdzIHw9IE1FTV9DR1JPVVBfUkVDTEFJTV9OT1NXQVA7CiAJfSBlbHNlCiAJCW1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX3Jlc19jb3VudGVyKGZhaWxfcmVzLCByZXMpOwotCi0JaWYgKGNzaXplID4gUEFHRV9TSVpFKSAvKiBjaGFuZ2UgY3NpemUgYW5kIHJldHJ5ICovCisJLyoKKwkgKiBjc2l6ZSBjYW4gYmUgZWl0aGVyIGEgaHVnZSBwYWdlIChIUEFHRV9TSVpFKSwgYSBiYXRjaCBvZgorCSAqIHJlZ3VsYXIgcGFnZXMgKENIQVJHRV9TSVpFKSwgb3IgYSBzaW5nbGUgcmVndWxhciBwYWdlCisJICogKFBBR0VfU0laRSkuCisJICoKKwkgKiBOZXZlciByZWNsYWltIG9uIGJlaGFsZiBvZiBvcHRpb25hbCBiYXRjaGluZywgcmV0cnkgd2l0aCBhCisJICogc2luZ2xlIHBhZ2UgaW5zdGVhZC4KKwkgKi8KKwlpZiAoY3NpemUgPT0gQ0hBUkdFX1NJWkUpCiAJCXJldHVybiBDSEFSR0VfUkVUUlk7CiAKIAlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX1dBSVQpKQogCQlyZXR1cm4gQ0hBUkdFX1dPVUxEQkxPQ0s7CiAKIAlyZXQgPSBtZW1fY2dyb3VwX2hpZXJhcmNoaWNhbF9yZWNsYWltKG1lbV9vdmVyX2xpbWl0LCBOVUxMLAotCQkJCQlnZnBfbWFzaywgZmxhZ3MpOworCQkJCQkgICAgICBnZnBfbWFzaywgZmxhZ3MpOworCWlmIChtZW1fY2dyb3VwX2NoZWNrX21hcmdpbihtZW1fb3Zlcl9saW1pdCwgY3NpemUpKQorCQlyZXR1cm4gQ0hBUkdFX1JFVFJZOwogCS8qCi0JICogdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcygpIG1pZ2h0IG5vdCBnaXZlIHVzIGEgZnVsbAotCSAqIHBpY3R1cmUgb2YgcmVjbGFpbS4gU29tZSBwYWdlcyBhcmUgcmVjbGFpbWVkIGFuZCBtaWdodCBiZQotCSAqIG1vdmVkIHRvIHN3YXAgY2FjaGUgb3IganVzdCB1bm1hcHBlZCBmcm9tIHRoZSBjZ3JvdXAuCi0JICogQ2hlY2sgdGhlIGxpbWl0IGFnYWluIHRvIHNlZSBpZiB0aGUgcmVjbGFpbSByZWR1Y2VkIHRoZQotCSAqIGN1cnJlbnQgdXNhZ2Ugb2YgdGhlIGNncm91cCBiZWZvcmUgZ2l2aW5nIHVwCisJICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW0KKwkgKiBtYXkgaGF2ZSBiZWVuIGFibGUgdG8gZnJlZSBzb21lIHBhZ2VzLiAgUmV0cnkgdGhlIGNoYXJnZQorCSAqIGJlZm9yZSBraWxsaW5nIHRoZSB0YXNrLgorCSAqCisJICogT25seSBmb3IgcmVndWxhciBwYWdlcywgdGhvdWdoOiBodWdlIHBhZ2VzIGFyZSByYXRoZXIKKwkgKiB1bmxpa2VseSB0byBzdWNjZWVkIHNvIGNsb3NlIHRvIHRoZSBsaW1pdCwgYW5kIHdlIGZhbGwgYmFjaworCSAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS4KIAkgKi8KLQlpZiAocmV0IHx8IG1lbV9jZ3JvdXBfY2hlY2tfdW5kZXJfbGltaXQobWVtX292ZXJfbGltaXQpKQorCWlmIChjc2l6ZSA9PSBQQUdFX1NJWkUgJiYgcmV0KQogCQlyZXR1cm4gQ0hBUkdFX1JFVFJZOwogCiAJLyoKQEAgLTIwODQsMTQgKzIxMDcsMjcgQEAKIAlyZXR1cm4gbWVtOwogfQogCi0vKgotICogY29tbWl0IGEgY2hhcmdlIGdvdCBieSBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZSgpIGFuZCBtYWtlcyBwYWdlX2Nncm91cCB0byBiZQotICogVVNFRCBzdGF0ZS4gSWYgYWxyZWFkeSBVU0VELCB1bmNoYXJnZSBhbmQgcmV0dXJuLgotICovCi1zdGF0aWMgdm9pZCBfX19fbWVtX2Nncm91cF9jb21taXRfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCQkJCSBzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjLAotCQkJCQkgZW51bSBjaGFyZ2VfdHlwZSBjdHlwZSkKK3N0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9jb21taXRfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCisJCQkJICAgICAgIHN0cnVjdCBwYWdlX2Nncm91cCAqcGMsCisJCQkJICAgICAgIGVudW0gY2hhcmdlX3R5cGUgY3R5cGUsCisJCQkJICAgICAgIGludCBwYWdlX3NpemUpCiB7CisJaW50IG5yX3BhZ2VzID0gcGFnZV9zaXplID4+IFBBR0VfU0hJRlQ7CisKKwkvKiB0cnlfY2hhcmdlKCkgY2FuIHJldHVybiBOVUxMIHRvICptZW1jZywgdGFraW5nIGNhcmUgb2YgaXQuICovCisJaWYgKCFtZW0pCisJCXJldHVybjsKKworCWxvY2tfcGFnZV9jZ3JvdXAocGMpOworCWlmICh1bmxpa2VseShQYWdlQ2dyb3VwVXNlZChwYykpKSB7CisJCXVubG9ja19wYWdlX2Nncm91cChwYyk7CisJCW1lbV9jZ3JvdXBfY2FuY2VsX2NoYXJnZShtZW0sIHBhZ2Vfc2l6ZSk7CisJCXJldHVybjsKKwl9CisJLyoKKwkgKiB3ZSBkb24ndCBuZWVkIHBhZ2VfY2dyb3VwX2xvY2sgYWJvdXQgdGFpbCBwYWdlcywgYmVjYXNlIHRoZXkgYXJlIG5vdAorCSAqIGFjY2Vzc2VkIGJ5IGFueSBvdGhlciBjb250ZXh0IGF0IHRoaXMgcG9pbnQuCisJICovCiAJcGMtPm1lbV9jZ3JvdXAgPSBtZW07CiAJLyoKIAkgKiBXZSBhY2Nlc3MgYSBwYWdlX2Nncm91cCBhc3luY2hyb25vdXNseSB3aXRob3V0IGxvY2tfcGFnZV9jZ3JvdXAoKS4KQEAgLTIxMTUsMzUgKzIxNTEsNyBAQAogCQlicmVhazsKIAl9CiAKLQltZW1fY2dyb3VwX2NoYXJnZV9zdGF0aXN0aWNzKG1lbSwgcGMsIHRydWUpOwotfQotCi1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfY29tbWl0X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAotCQkJCSAgICAgICBzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjLAotCQkJCSAgICAgICBlbnVtIGNoYXJnZV90eXBlIGN0eXBlLAotCQkJCSAgICAgICBpbnQgcGFnZV9zaXplKQotewotCWludCBpOwotCWludCBjb3VudCA9IHBhZ2Vfc2l6ZSA+PiBQQUdFX1NISUZUOwotCi0JLyogdHJ5X2NoYXJnZSgpIGNhbiByZXR1cm4gTlVMTCB0byAqbWVtY2csIHRha2luZyBjYXJlIG9mIGl0LiAqLwotCWlmICghbWVtKQotCQlyZXR1cm47Ci0KLQlsb2NrX3BhZ2VfY2dyb3VwKHBjKTsKLQlpZiAodW5saWtlbHkoUGFnZUNncm91cFVzZWQocGMpKSkgewotCQl1bmxvY2tfcGFnZV9jZ3JvdXAocGMpOwotCQltZW1fY2dyb3VwX2NhbmNlbF9jaGFyZ2UobWVtLCBwYWdlX3NpemUpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiB3ZSBkb24ndCBuZWVkIHBhZ2VfY2dyb3VwX2xvY2sgYWJvdXQgdGFpbCBwYWdlcywgYmVjYXNlIHRoZXkgYXJlIG5vdAotCSAqIGFjY2Vzc2VkIGJ5IGFueSBvdGhlciBjb250ZXh0IGF0IHRoaXMgcG9pbnQuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0JCV9fX19tZW1fY2dyb3VwX2NvbW1pdF9jaGFyZ2UobWVtLCBwYyArIGksIGN0eXBlKTsKLQorCW1lbV9jZ3JvdXBfY2hhcmdlX3N0YXRpc3RpY3MobWVtLCBQYWdlQ2dyb3VwQ2FjaGUocGMpLCBucl9wYWdlcyk7CiAJdW5sb2NrX3BhZ2VfY2dyb3VwKHBjKTsKIAkvKgogCSAqICJjaGFyZ2Vfc3RhdGlzdGljcyIgdXBkYXRlZCBldmVudCBjb3VudGVyLiBUaGVuLCBjaGVjayBpdC4KQEAgLTIxNTMsNiArMjE2MSw0OCBAQAogCW1lbWNnX2NoZWNrX2V2ZW50cyhtZW0sIHBjLT5wYWdlKTsKIH0KIAorI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQorCisjZGVmaW5lIFBDR0ZfTk9DT1BZX0FUX1NQTElUICgoMSA8PCBQQ0dfTE9DSykgfCAoMSA8PCBQQ0dfTU9WRV9MT0NLKSB8XAorCQkJKDEgPDwgUENHX0FDQ1RfTFJVKSB8ICgxIDw8IFBDR19NSUdSQVRJT04pKQorLyoKKyAqIEJlY2F1c2UgdGFpbCBwYWdlcyBhcmUgbm90IG1hcmtlZCBhcyAidXNlZCIsIHNldCBpdC4gV2UncmUgdW5kZXIKKyAqIHpvbmUtPmxydV9sb2NrLCAnc3BsaXR0aW5nIG9uIHBtZCcgYW5kIGNvbXB1bmRfbG9jay4KKyAqLwordm9pZCBtZW1fY2dyb3VwX3NwbGl0X2h1Z2VfZml4dXAoc3RydWN0IHBhZ2UgKmhlYWQsIHN0cnVjdCBwYWdlICp0YWlsKQoreworCXN0cnVjdCBwYWdlX2Nncm91cCAqaGVhZF9wYyA9IGxvb2t1cF9wYWdlX2Nncm91cChoZWFkKTsKKwlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnRhaWxfcGMgPSBsb29rdXBfcGFnZV9jZ3JvdXAodGFpbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCisJCXJldHVybjsKKwkvKgorCSAqIFdlIGhhdmUgbm8gcmFjZXMgd2l0aCBjaGFyZ2UvdW5jaGFyZ2UgYnV0IHdpbGwgaGF2ZSByYWNlcyB3aXRoCisJICogcGFnZSBzdGF0ZSBhY2NvdW50aW5nLgorCSAqLworCW1vdmVfbG9ja19wYWdlX2Nncm91cChoZWFkX3BjLCAmZmxhZ3MpOworCisJdGFpbF9wYy0+bWVtX2Nncm91cCA9IGhlYWRfcGMtPm1lbV9jZ3JvdXA7CisJc21wX3dtYigpOyAvKiBzZWUgX19jb21taXRfY2hhcmdlKCkgKi8KKwlpZiAoUGFnZUNncm91cEFjY3RMUlUoaGVhZF9wYykpIHsKKwkJZW51bSBscnVfbGlzdCBscnU7CisJCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICptejsKKworCQkvKgorCQkgKiBMUlUgZmxhZ3MgY2Fubm90IGJlIGNvcGllZCBiZWNhdXNlIHdlIG5lZWQgdG8gYWRkIHRhaWwKKwkJICoucGFnZSB0byBMUlUgYnkgZ2VuZXJpYyBjYWxsIGFuZCBvdXIgaG9vayB3aWxsIGJlIGNhbGxlZC4KKwkJICogV2UgaG9sZCBscnVfbG9jaywgdGhlbiwgcmVkdWNlIGNvdW50ZXIgZGlyZWN0bHkuCisJCSAqLworCQlscnUgPSBwYWdlX2xydShoZWFkKTsKKwkJbXogPSBwYWdlX2Nncm91cF96b25laW5mbyhoZWFkX3BjKTsKKwkJTUVNX0NHUk9VUF9aU1RBVChteiwgbHJ1KSAtPSAxOworCX0KKwl0YWlsX3BjLT5mbGFncyA9IGhlYWRfcGMtPmZsYWdzICYgflBDR0ZfTk9DT1BZX0FUX1NQTElUOworCW1vdmVfdW5sb2NrX3BhZ2VfY2dyb3VwKGhlYWRfcGMsICZmbGFncyk7Cit9CisjZW5kaWYKKwogLyoqCiAgKiBfX21lbV9jZ3JvdXBfbW92ZV9hY2NvdW50IC0gbW92ZSBhY2NvdW50IG9mIHRoZSBwYWdlCiAgKiBAcGM6CXBhZ2VfY2dyb3VwIG9mIHRoZSBwYWdlLgpAQCAtMjE3MSw4ICsyMjIxLDExIEBACiAgKi8KIAogc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX21vdmVfYWNjb3VudChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjLAotCXN0cnVjdCBtZW1fY2dyb3VwICpmcm9tLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdG8sIGJvb2wgdW5jaGFyZ2UpCisJc3RydWN0IG1lbV9jZ3JvdXAgKmZyb20sIHN0cnVjdCBtZW1fY2dyb3VwICp0bywgYm9vbCB1bmNoYXJnZSwKKwlpbnQgY2hhcmdlX3NpemUpCiB7CisJaW50IG5yX3BhZ2VzID0gY2hhcmdlX3NpemUgPj4gUEFHRV9TSElGVDsKKwogCVZNX0JVR19PTihmcm9tID09IHRvKTsKIAlWTV9CVUdfT04oUGFnZUxSVShwYy0+cGFnZSkpOwogCVZNX0JVR19PTighcGFnZV9pc19jZ3JvdXBfbG9ja2VkKHBjKSk7CkBAIC0yMTg2LDE0ICsyMjM5LDE0IEBACiAJCV9fdGhpc19jcHVfaW5jKHRvLT5zdGF0LT5jb3VudFtNRU1fQ0dST1VQX1NUQVRfRklMRV9NQVBQRURdKTsKIAkJcHJlZW1wdF9lbmFibGUoKTsKIAl9Ci0JbWVtX2Nncm91cF9jaGFyZ2Vfc3RhdGlzdGljcyhmcm9tLCBwYywgZmFsc2UpOworCW1lbV9jZ3JvdXBfY2hhcmdlX3N0YXRpc3RpY3MoZnJvbSwgUGFnZUNncm91cENhY2hlKHBjKSwgLW5yX3BhZ2VzKTsKIAlpZiAodW5jaGFyZ2UpCiAJCS8qIFRoaXMgaXMgbm90ICJjYW5jZWwiLCBidXQgY2FuY2VsX2NoYXJnZSBkb2VzIGFsbCB3ZSBuZWVkLiAqLwotCQltZW1fY2dyb3VwX2NhbmNlbF9jaGFyZ2UoZnJvbSwgUEFHRV9TSVpFKTsKKwkJbWVtX2Nncm91cF9jYW5jZWxfY2hhcmdlKGZyb20sIGNoYXJnZV9zaXplKTsKIAogCS8qIGNhbGxlciBzaG91bGQgaGF2ZSBkb25lIGNzc19nZXQgKi8KIAlwYy0+bWVtX2Nncm91cCA9IHRvOwotCW1lbV9jZ3JvdXBfY2hhcmdlX3N0YXRpc3RpY3ModG8sIHBjLCB0cnVlKTsKKwltZW1fY2dyb3VwX2NoYXJnZV9zdGF0aXN0aWNzKHRvLCBQYWdlQ2dyb3VwQ2FjaGUocGMpLCBucl9wYWdlcyk7CiAJLyoKIAkgKiBXZSBjaGFyZ2VzIGFnYWluc3QgInRvIiB3aGljaCBtYXkgbm90IGhhdmUgYW55IHRhc2tzLiBUaGVuLCAidG8iCiAJICogY2FuIGJlIHVuZGVyIHJtZGlyKCkuIEJ1dCBpbiBjdXJyZW50IGltcGxlbWVudGF0aW9uLCBjYWxsZXIgb2YKQEAgLTIyMDgsMTUgKzIyNjEsMjQgQEAKICAqIF9fbWVtX2Nncm91cF9tb3ZlX2FjY291bnQoKQogICovCiBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KHN0cnVjdCBwYWdlX2Nncm91cCAqcGMsCi0JCXN0cnVjdCBtZW1fY2dyb3VwICpmcm9tLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdG8sIGJvb2wgdW5jaGFyZ2UpCisJCXN0cnVjdCBtZW1fY2dyb3VwICpmcm9tLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdG8sCisJCWJvb2wgdW5jaGFyZ2UsIGludCBjaGFyZ2Vfc2l6ZSkKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCS8qCisJICogVGhlIHBhZ2UgaXMgaXNvbGF0ZWQgZnJvbSBMUlUuIFNvLCBjb2xsYXBzZSBmdW5jdGlvbgorCSAqIHdpbGwgbm90IGhhbmRsZSB0aGlzIHBhZ2UuIEJ1dCBwYWdlIHNwbGl0dGluZyBjYW4gaGFwcGVuLgorCSAqIERvIHRoaXMgY2hlY2sgdW5kZXIgY29tcG91bmRfcGFnZV9sb2NrKCkuIFRoZSBjYWxsZXIgc2hvdWxkCisJICogaG9sZCBpdC4KKwkgKi8KKwlpZiAoKGNoYXJnZV9zaXplID4gUEFHRV9TSVpFKSAmJiAhUGFnZVRyYW5zSHVnZShwYy0+cGFnZSkpCisJCXJldHVybiAtRUJVU1k7CiAKIAlsb2NrX3BhZ2VfY2dyb3VwKHBjKTsKIAlpZiAoUGFnZUNncm91cFVzZWQocGMpICYmIHBjLT5tZW1fY2dyb3VwID09IGZyb20pIHsKIAkJbW92ZV9sb2NrX3BhZ2VfY2dyb3VwKHBjLCAmZmxhZ3MpOwotCQlfX21lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KHBjLCBmcm9tLCB0bywgdW5jaGFyZ2UpOworCQlfX21lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KHBjLCBmcm9tLCB0bywgdW5jaGFyZ2UsIGNoYXJnZV9zaXplKTsKIAkJbW92ZV91bmxvY2tfcGFnZV9jZ3JvdXAocGMsICZmbGFncyk7CiAJCXJldCA9IDA7CiAJfQpAQCAtMjI0MSw2ICsyMzAzLDggQEAKIAlzdHJ1Y3QgY2dyb3VwICpjZyA9IGNoaWxkLT5jc3MuY2dyb3VwOwogCXN0cnVjdCBjZ3JvdXAgKnBjZyA9IGNnLT5wYXJlbnQ7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudDsKKwlpbnQgcGFnZV9zaXplID0gUEFHRV9TSVpFOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAogCS8qIElzIFJPT1QgPyAqLwpAQCAtMjI1MywxNSArMjMxNywyNCBAQAogCWlmIChpc29sYXRlX2xydV9wYWdlKHBhZ2UpKQogCQlnb3RvIHB1dDsKIAorCWlmIChQYWdlVHJhbnNIdWdlKHBhZ2UpKQorCQlwYWdlX3NpemUgPSBIUEFHRV9TSVpFOworCiAJcGFyZW50ID0gbWVtX2Nncm91cF9mcm9tX2NvbnQocGNnKTsKLQlyZXQgPSBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZShOVUxMLCBnZnBfbWFzaywgJnBhcmVudCwgZmFsc2UsCi0JCQkJICAgICAgUEFHRV9TSVpFKTsKKwlyZXQgPSBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZShOVUxMLCBnZnBfbWFzaywKKwkJCQkmcGFyZW50LCBmYWxzZSwgcGFnZV9zaXplKTsKIAlpZiAocmV0IHx8ICFwYXJlbnQpCiAJCWdvdG8gcHV0X2JhY2s7CiAKLQlyZXQgPSBtZW1fY2dyb3VwX21vdmVfYWNjb3VudChwYywgY2hpbGQsIHBhcmVudCwgdHJ1ZSk7CisJaWYgKHBhZ2Vfc2l6ZSA+IFBBR0VfU0laRSkKKwkJZmxhZ3MgPSBjb21wb3VuZF9sb2NrX2lycXNhdmUocGFnZSk7CisKKwlyZXQgPSBtZW1fY2dyb3VwX21vdmVfYWNjb3VudChwYywgY2hpbGQsIHBhcmVudCwgdHJ1ZSwgcGFnZV9zaXplKTsKIAlpZiAocmV0KQotCQltZW1fY2dyb3VwX2NhbmNlbF9jaGFyZ2UocGFyZW50LCBQQUdFX1NJWkUpOworCQltZW1fY2dyb3VwX2NhbmNlbF9jaGFyZ2UocGFyZW50LCBwYWdlX3NpemUpOworCisJaWYgKHBhZ2Vfc2l6ZSA+IFBBR0VfU0laRSkKKwkJY29tcG91bmRfdW5sb2NrX2lycXJlc3RvcmUocGFnZSwgZmxhZ3MpOwogcHV0X2JhY2s6CiAJcHV0YmFja19scnVfcGFnZShwYWdlKTsKIHB1dDoKQEAgLTIyODAsMTMgKzIzNTMsMTkgQEAKIAkJCQlnZnBfdCBnZnBfbWFzaywgZW51bSBjaGFyZ2VfdHlwZSBjdHlwZSkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtID0gTlVMTDsKLQlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwotCWludCByZXQ7CiAJaW50IHBhZ2Vfc2l6ZSA9IFBBR0VfU0laRTsKKwlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOworCWJvb2wgb29tID0gdHJ1ZTsKKwlpbnQgcmV0OwogCiAJaWYgKFBhZ2VUcmFuc0h1Z2UocGFnZSkpIHsKIAkJcGFnZV9zaXplIDw8PSBjb21wb3VuZF9vcmRlcihwYWdlKTsKIAkJVk1fQlVHX09OKCFQYWdlVHJhbnNIdWdlKHBhZ2UpKTsKKwkJLyoKKwkJICogTmV2ZXIgT09NLWtpbGwgYSBwcm9jZXNzIGZvciBhIGh1Z2UgcGFnZS4gIFRoZQorCQkgKiBmYXVsdCBoYW5kbGVyIHdpbGwgZmFsbCBiYWNrIHRvIHJlZ3VsYXIgcGFnZXMuCisJCSAqLworCQlvb20gPSBmYWxzZTsKIAl9CiAKIAlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKQEAgLTIyOTUsNyArMjM3NCw3IEBACiAJCXJldHVybiAwOwogCXByZWZldGNodyhwYyk7CiAKLQlyZXQgPSBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZShtbSwgZ2ZwX21hc2ssICZtZW0sIHRydWUsIHBhZ2Vfc2l6ZSk7CisJcmV0ID0gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UobW0sIGdmcF9tYXNrLCAmbWVtLCBvb20sIHBhZ2Vfc2l6ZSk7CiAJaWYgKHJldCB8fCAhbWVtKQogCQlyZXR1cm4gcmV0OwogCkBAIC0yNTQ2LDcgKzI2MjUsNiBAQAogc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICoKIF9fbWVtX2Nncm91cF91bmNoYXJnZV9jb21tb24oc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gY2hhcmdlX3R5cGUgY3R5cGUpCiB7Ci0JaW50IGk7CiAJaW50IGNvdW50OwogCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IE5VTEw7CkBAIC0yNTk2LDggKzI2NzQsNyBAQAogCQlicmVhazsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLQkJbWVtX2Nncm91cF9jaGFyZ2Vfc3RhdGlzdGljcyhtZW0sIHBjICsgaSwgZmFsc2UpOworCW1lbV9jZ3JvdXBfY2hhcmdlX3N0YXRpc3RpY3MobWVtLCBQYWdlQ2dyb3VwQ2FjaGUocGMpLCAtY291bnQpOwogCiAJQ2xlYXJQYWdlQ2dyb3VwVXNlZChwYyk7CiAJLyoKQEAgLTQ4NDQsNyArNDkyMSw3IEBACiAJCQkJZ290byBwdXQ7CiAJCQlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKIAkJCWlmICghbWVtX2Nncm91cF9tb3ZlX2FjY291bnQocGMsCi0JCQkJCQltYy5mcm9tLCBtYy50bywgZmFsc2UpKSB7CisJCQkJCW1jLmZyb20sIG1jLnRvLCBmYWxzZSwgUEFHRV9TSVpFKSkgewogCQkJCW1jLnByZWNoYXJnZS0tOwogCQkJCS8qIHdlIHVuY2hhcmdlIGZyb20gbWMuZnJvbSBsYXRlci4gKi8KIAkJCQltYy5tb3ZlZF9jaGFyZ2UrKzsKQEAgLTQ5ODMsOSArNTA2MCw5IEBACiBzdGF0aWMgaW50IF9faW5pdCBlbmFibGVfc3dhcF9hY2NvdW50KGNoYXIgKnMpCiB7CiAJLyogY29uc2lkZXIgZW5hYmxlZCBpZiBubyBwYXJhbWV0ZXIgb3IgMSBpcyBnaXZlbiAqLwotCWlmICghcyB8fCAhc3RyY21wKHMsICIxIikpCisJaWYgKCEoKnMpIHx8ICFzdHJjbXAocywgIj0xIikpCiAJCXJlYWxseV9kb19zd2FwX2FjY291bnQgPSAxOwotCWVsc2UgaWYgKCFzdHJjbXAocywgIjAiKSkKKwllbHNlIGlmICghc3RyY21wKHMsICI9MCIpKQogCQlyZWFsbHlfZG9fc3dhcF9hY2NvdW50ID0gMDsKIAlyZXR1cm4gMTsKIH0KQEAgLTQ5OTMsNyArNTA3MCw4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGRpc2FibGVfc3dhcF9hY2NvdW50KGNoYXIgKnMpCiB7Ci0JZW5hYmxlX3N3YXBfYWNjb3VudCgiMCIpOworCXByaW50a19vbmNlKCJub3N3YXBhY2NvdW50IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAyLjYuNDAuIFVzZSBzd2FwYWNjb3VudD0wIGluc3RlYWRcbiIpOworCWVuYWJsZV9zd2FwX2FjY291bnQoIj0wIik7CiAJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJub3N3YXBhY2NvdW50IiwgZGlzYWJsZV9zd2FwX2FjY291bnQpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggNTQ4ZmJkNy4uMDIwN2MyZiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYworKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC0yMzMsOCArMjMzLDggQEAKIAl9CiAKIAkvKgotCSAqIE9ubHkgYWxsIHNocmlua19zbGFiIGhlcmUgKHdoaWNoIHdvdWxkIGFsc28KLQkgKiBzaHJpbmsgb3RoZXIgY2FjaGVzKSBpZiBhY2Nlc3MgaXMgbm90IHBvdGVudGlhbGx5IGZhdGFsLgorCSAqIE9ubHkgY2FsbCBzaHJpbmtfc2xhYiBoZXJlICh3aGljaCB3b3VsZCBhbHNvIHNocmluayBvdGhlciBjYWNoZXMpIGlmCisJICogYWNjZXNzIGlzIG5vdCBwb3RlbnRpYWxseSBmYXRhbC4KIAkgKi8KIAlpZiAoYWNjZXNzKSB7CiAJCWludCBucjsKQEAgLTM4Niw4ICszODYsNiBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCXN0cnVjdCBhbm9uX3ZtYSAqYXY7CiAKLQlpZiAoIVBhZ2VIdWdlKHBhZ2UpICYmIHVubGlrZWx5KHNwbGl0X2h1Z2VfcGFnZShwYWdlKSkpCi0JCXJldHVybjsKIAlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCWF2ID0gcGFnZV9sb2NrX2Fub25fdm1hKHBhZ2UpOwogCWlmIChhdiA9PSBOVUxMKQkvKiBOb3QgYWN0dWFsbHkgbWFwcGVkIGFueW1vcmUgKi8KQEAgLTg1Niw2ICs4NTQsNyBAQAogCWludCByZXQ7CiAJaW50IGtpbGwgPSAxOwogCXN0cnVjdCBwYWdlICpocGFnZSA9IGNvbXBvdW5kX2hlYWQocCk7CisJc3RydWN0IHBhZ2UgKnBwYWdlOwogCiAJaWYgKFBhZ2VSZXNlcnZlZChwKSB8fCBQYWdlU2xhYihwKSkKIAkJcmV0dXJuIFNXQVBfU1VDQ0VTUzsKQEAgLTg5Nyw2ICs4OTYsNDQgQEAKIAl9CiAKIAkvKgorCSAqIHBwYWdlOiBwb2lzb25lZCBwYWdlCisJICogICBpZiBwIGlzIHJlZ3VsYXIgcGFnZSg0ayBwYWdlKQorCSAqICAgICAgICBwcGFnZSA9PSByZWFsIHBvaXNvbmVkIHBhZ2U7CisJICogICBlbHNlIHAgaXMgaHVnZXRsYiBvciBUSFAsIHBwYWdlID09IGhlYWQgcGFnZS4KKwkgKi8KKwlwcGFnZSA9IGhwYWdlOworCisJaWYgKFBhZ2VUcmFuc0h1Z2UoaHBhZ2UpKSB7CisJCS8qCisJCSAqIFZlcmlmeSB0aGF0IHRoaXMgaXNuJ3QgYSBodWdldGxiZnMgaGVhZCBwYWdlLCB0aGUgY2hlY2sgZm9yCisJCSAqIFBhZ2VBbm9uIGlzIGp1c3QgZm9yIGF2b2lkIHRyaXBwaW5nIGEgc3BsaXRfaHVnZV9wYWdlCisJCSAqIGludGVybmFsIGRlYnVnIGNoZWNrLCBhcyBzcGxpdF9odWdlX3BhZ2UgcmVmdXNlcyB0byBkZWFsIHdpdGgKKwkJICogYW55dGhpbmcgdGhhdCBpc24ndCBhbiBhbm9uIHBhZ2UuIFBhZ2VBbm9uIGNhbid0IGdvIGF3YXkgZnJvCisJCSAqIHVuZGVyIHVzIGJlY2F1c2Ugd2UgaG9sZCBhIHJlZmNvdW50IG9uIHRoZSBocGFnZSwgd2l0aG91dCBhCisJCSAqIHJlZmNvdW50IG9uIHRoZSBocGFnZS4gc3BsaXRfaHVnZV9wYWdlIGNhbid0IGJlIHNhZmVseSBjYWxsZWQKKwkJICogaW4gdGhlIGZpcnN0IHBsYWNlLCBoYXZpbmcgYSByZWZjb3VudCBvbiB0aGUgdGFpbCBpc24ndAorCQkgKiBlbm91Z2ggKiB0byBiZSBzYWZlLgorCQkgKi8KKwkJaWYgKCFQYWdlSHVnZShocGFnZSkgJiYgUGFnZUFub24oaHBhZ2UpKSB7CisJCQlpZiAodW5saWtlbHkoc3BsaXRfaHVnZV9wYWdlKGhwYWdlKSkpIHsKKwkJCQkvKgorCQkJCSAqIEZJWE1FOiBpZiBzcGxpdHRpbmcgVEhQIGlzIGZhaWxlZCwgaXQgaXMKKwkJCQkgKiBiZXR0ZXIgdG8gc3RvcCB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbiByYXRoZXIKKwkJCQkgKiB0aGFuIGNhdXNpbmcgcGFuaWMgYnkgdW5tYXBwaW5nLiBTeXN0ZW0gbWlnaHQKKwkJCQkgKiBzdXJ2aXZlIGlmIHRoZSBwYWdlIGlzIGZyZWVkIGxhdGVyLgorCQkJCSAqLworCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkJIk1DRSAlI2x4OiBmYWlsZWQgdG8gc3BsaXQgVEhQXG4iLCBwZm4pOworCisJCQkJQlVHX09OKCFQYWdlSFdQb2lzb24ocCkpOworCQkJCXJldHVybiBTV0FQX0ZBSUw7CisJCQl9CisJCQkvKiBUSFAgaXMgc3BsaXQsIHNvIHBwYWdlIHNob3VsZCBiZSB0aGUgcmVhbCBwb2lzb25lZCBwYWdlLiAqLworCQkJcHBhZ2UgPSBwOworCQl9CisJfQorCisJLyoKIAkgKiBGaXJzdCBjb2xsZWN0IGFsbCB0aGUgcHJvY2Vzc2VzIHRoYXQgaGF2ZSB0aGUgcGFnZQogCSAqIG1hcHBlZCBpbiBkaXJ0eSBmb3JtLiAgVGhpcyBoYXMgdG8gYmUgZG9uZSBiZWZvcmUgdHJ5X3RvX3VubWFwLAogCSAqIGJlY2F1c2UgdHR1IHRha2VzIHRoZSBybWFwIGRhdGEgc3RydWN0dXJlcyBkb3duLgpAQCAtOTA1LDEyICs5NDIsMTggQEAKIAkgKiB0aGVyZSdzIG5vdGhpbmcgdGhhdCBjYW4gYmUgZG9uZS4KIAkgKi8KIAlpZiAoa2lsbCkKLQkJY29sbGVjdF9wcm9jcyhocGFnZSwgJnRva2lsbCk7CisJCWNvbGxlY3RfcHJvY3MocHBhZ2UsICZ0b2tpbGwpOwogCi0JcmV0ID0gdHJ5X3RvX3VubWFwKGhwYWdlLCB0dHUpOworCWlmIChocGFnZSAhPSBwcGFnZSkKKwkJbG9ja19wYWdlX25vc3luYyhwcGFnZSk7CisKKwlyZXQgPSB0cnlfdG9fdW5tYXAocHBhZ2UsIHR0dSk7CiAJaWYgKHJldCAhPSBTV0FQX1NVQ0NFU1MpCiAJCXByaW50ayhLRVJOX0VSUiAiTUNFICUjbHg6IGZhaWxlZCB0byB1bm1hcCBwYWdlIChtYXBjb3VudD0lZClcbiIsCi0JCQkJcGZuLCBwYWdlX21hcGNvdW50KGhwYWdlKSk7CisJCQkJcGZuLCBwYWdlX21hcGNvdW50KHBwYWdlKSk7CisKKwlpZiAoaHBhZ2UgIT0gcHBhZ2UpCisJCXVubG9ja19wYWdlKHBwYWdlKTsKIAogCS8qCiAJICogTm93IHRoYXQgdGhlIGRpcnR5IGJpdCBoYXMgYmVlbiBwcm9wYWdhdGVkIHRvIHRoZQpAQCAtOTIxLDcgKzk2NCw3IEBACiAJICogdXNlIGEgbW9yZSBmb3JjZS1mdWxsIHVuY2F0Y2hhYmxlIGtpbGwgdG8gcHJldmVudAogCSAqIGFueSBhY2Nlc3NlcyB0byB0aGUgcG9pc29uZWQgbWVtb3J5LgogCSAqLwotCWtpbGxfcHJvY3NfYW8oJnRva2lsbCwgISFQYWdlRGlydHkoaHBhZ2UpLCB0cmFwbm8sCisJa2lsbF9wcm9jc19hbygmdG9raWxsLCAhIVBhZ2VEaXJ0eShwcGFnZSksIHRyYXBubywKIAkJICAgICAgcmV0ICE9IFNXQVBfU1VDQ0VTUywgcCwgcGZuKTsKIAogCXJldHVybiByZXQ7CkBAIC0xMDIyLDE5ICsxMDY1LDIyIEBACiAJICogVGhlIGNoZWNrICh1bm5lY2Vzc2FyaWx5KSBpZ25vcmVzIExSVSBwYWdlcyBiZWluZyBpc29sYXRlZCBhbmQKIAkgKiB3YWxrZWQgYnkgdGhlIHBhZ2UgcmVjbGFpbSBjb2RlLCBob3dldmVyIHRoYXQncyBub3QgYSBiaWcgbG9zcy4KIAkgKi8KLQlpZiAoIVBhZ2VMUlUocCkgJiYgIVBhZ2VIdWdlKHApKQotCQlzaGFrZV9wYWdlKHAsIDApOwotCWlmICghUGFnZUxSVShwKSAmJiAhUGFnZUh1Z2UocCkpIHsKLQkJLyoKLQkJICogc2hha2VfcGFnZSBjb3VsZCBoYXZlIHR1cm5lZCBpdCBmcmVlLgotCQkgKi8KLQkJaWYgKGlzX2ZyZWVfYnVkZHlfcGFnZShwKSkgewotCQkJYWN0aW9uX3Jlc3VsdChwZm4sICJmcmVlIGJ1ZGR5LCAybmQgdHJ5IiwgREVMQVlFRCk7Ci0JCQlyZXR1cm4gMDsKKwlpZiAoIVBhZ2VIdWdlKHApICYmICFQYWdlVHJhbnNDb21wb3VuZChwKSkgeworCQlpZiAoIVBhZ2VMUlUocCkpCisJCQlzaGFrZV9wYWdlKHAsIDApOworCQlpZiAoIVBhZ2VMUlUocCkpIHsKKwkJCS8qCisJCQkgKiBzaGFrZV9wYWdlIGNvdWxkIGhhdmUgdHVybmVkIGl0IGZyZWUuCisJCQkgKi8KKwkJCWlmIChpc19mcmVlX2J1ZGR5X3BhZ2UocCkpIHsKKwkJCQlhY3Rpb25fcmVzdWx0KHBmbiwgImZyZWUgYnVkZHksIDJuZCB0cnkiLAorCQkJCQkJREVMQVlFRCk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlhY3Rpb25fcmVzdWx0KHBmbiwgIm5vbiBMUlUiLCBJR05PUkVEKTsKKwkJCXB1dF9wYWdlKHApOworCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQotCQlhY3Rpb25fcmVzdWx0KHBmbiwgIm5vbiBMUlUiLCBJR05PUkVEKTsKLQkJcHV0X3BhZ2UocCk7Ci0JCXJldHVybiAtRUJVU1k7CiAJfQogCiAJLyoKQEAgLTEwNjQsNyArMTExMCw3IEBACiAJICogRm9yIGVycm9yIG9uIHRoZSB0YWlsIHBhZ2UsIHdlIHNob3VsZCBzZXQgUEdfaHdwb2lzb24KIAkgKiBvbiB0aGUgaGVhZCBwYWdlIHRvIHNob3cgdGhhdCB0aGUgaHVnZXBhZ2UgaXMgaHdwb2lzb25lZAogCSAqLwotCWlmIChQYWdlVGFpbChwKSAmJiBUZXN0U2V0UGFnZUhXUG9pc29uKGhwYWdlKSkgeworCWlmIChQYWdlSHVnZShwKSAmJiBQYWdlVGFpbChwKSAmJiBUZXN0U2V0UGFnZUhXUG9pc29uKGhwYWdlKSkgewogCQlhY3Rpb25fcmVzdWx0KHBmbiwgImh1Z2VwYWdlIGFscmVhZHkgaGFyZHdhcmUgcG9pc29uZWQiLAogCQkJCUlHTk9SRUQpOwogCQl1bmxvY2tfcGFnZShocGFnZSk7CkBAIC0xMjk1LDcgKzEzNDEsMTAgQEAKIAlyZXQgPSBtaWdyYXRlX2h1Z2VfcGFnZXMoJnBhZ2VsaXN0LCBuZXdfcGFnZSwgTVBPTF9NRl9NT1ZFX0FMTCwgMCwKIAkJCQl0cnVlKTsKIAlpZiAocmV0KSB7Ci0JCXB1dGJhY2tfbHJ1X3BhZ2VzKCZwYWdlbGlzdCk7CisJCXN0cnVjdCBwYWdlICpwYWdlMSwgKnBhZ2UyOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZTEsIHBhZ2UyLCAmcGFnZWxpc3QsIGxydSkKKwkJCXB1dF9wYWdlKHBhZ2UxKTsKKwogCQlwcl9kZWJ1Zygic29mdCBvZmZsaW5lOiAlI2x4OiBtaWdyYXRpb24gZmFpbGVkICVkLCB0eXBlICVseFxuIiwKIAkJCSBwZm4sIHJldCwgcGFnZS0+ZmxhZ3MpOwogCQlpZiAocmV0ID4gMCkKQEAgLTE0MTksNiArMTQ2OCw3IEBACiAJCXJldCA9IG1pZ3JhdGVfcGFnZXMoJnBhZ2VsaXN0LCBuZXdfcGFnZSwgTVBPTF9NRl9NT1ZFX0FMTCwKIAkJCQkJCQkJMCwgdHJ1ZSk7CiAJCWlmIChyZXQpIHsKKwkJCXB1dGJhY2tfbHJ1X3BhZ2VzKCZwYWdlbGlzdCk7CiAJCQlwcl9pbmZvKCJzb2Z0IG9mZmxpbmU6ICUjbHg6IG1pZ3JhdGlvbiBmYWlsZWQgJWQsIHR5cGUgJWx4XG4iLAogCQkJCXBmbiwgcmV0LCBwYWdlLT5mbGFncyk7CiAJCQlpZiAocmV0ID4gMCkKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggMzEyNTBmYS4uNTgyMzY5OCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTIyMTksNyArMjIxOSw2IEBACiAJCQkJCQkJICZwdGwpOwogCQkJaWYgKCFwdGVfc2FtZSgqcGFnZV90YWJsZSwgb3JpZ19wdGUpKSB7CiAJCQkJdW5sb2NrX3BhZ2Uob2xkX3BhZ2UpOwotCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShvbGRfcGFnZSk7CiAJCQkJZ290byB1bmxvY2s7CiAJCQl9CiAJCQlwYWdlX2NhY2hlX3JlbGVhc2Uob2xkX3BhZ2UpOwpAQCAtMjI4OSw3ICsyMjg4LDYgQEAKIAkJCQkJCQkgJnB0bCk7CiAJCQlpZiAoIXB0ZV9zYW1lKCpwYWdlX3RhYmxlLCBvcmlnX3B0ZSkpIHsKIAkJCQl1bmxvY2tfcGFnZShvbGRfcGFnZSk7Ci0JCQkJcGFnZV9jYWNoZV9yZWxlYXNlKG9sZF9wYWdlKTsKIAkJCQlnb3RvIHVubG9jazsKIAkJCX0KIApAQCAtMjM2NywxNiArMjM2NSw2IEBACiAJfQogCV9fU2V0UGFnZVVwdG9kYXRlKG5ld19wYWdlKTsKIAotCS8qCi0JICogRG9uJ3QgbGV0IGFub3RoZXIgdGFzaywgd2l0aCBwb3NzaWJseSB1bmxvY2tlZCB2bWEsCi0JICoga2VlcCB0aGUgbWxvY2tlZCBwYWdlLgotCSAqLwotCWlmICgodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgJiYgb2xkX3BhZ2UpIHsKLQkJbG9ja19wYWdlKG9sZF9wYWdlKTsJLyogZm9yIExSVSBtYW5pcHVsYXRpb24gKi8KLQkJY2xlYXJfcGFnZV9tbG9jayhvbGRfcGFnZSk7Ci0JCXVubG9ja19wYWdlKG9sZF9wYWdlKTsKLQl9Ci0KIAlpZiAobWVtX2Nncm91cF9uZXdwYWdlX2NoYXJnZShuZXdfcGFnZSwgbW0sIEdGUF9LRVJORUwpKQogCQlnb3RvIG9vbV9mcmVlX25ldzsKIApAQCAtMjQ0NCwxMCArMjQzMiwyMCBAQAogCiAJaWYgKG5ld19wYWdlKQogCQlwYWdlX2NhY2hlX3JlbGVhc2UobmV3X3BhZ2UpOwotCWlmIChvbGRfcGFnZSkKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKG9sZF9wYWdlKTsKIHVubG9jazoKIAlwdGVfdW5tYXBfdW5sb2NrKHBhZ2VfdGFibGUsIHB0bCk7CisJaWYgKG9sZF9wYWdlKSB7CisJCS8qCisJCSAqIERvbid0IGxldCBhbm90aGVyIHRhc2ssIHdpdGggcG9zc2libHkgdW5sb2NrZWQgdm1hLAorCQkgKiBrZWVwIHRoZSBtbG9ja2VkIHBhZ2UuCisJCSAqLworCQlpZiAoKHJldCAmIFZNX0ZBVUxUX1dSSVRFKSAmJiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkpIHsKKwkJCWxvY2tfcGFnZShvbGRfcGFnZSk7CS8qIExSVSBtYW5pcHVsYXRpb24gKi8KKwkJCW11bmxvY2tfdm1hX3BhZ2Uob2xkX3BhZ2UpOworCQkJdW5sb2NrX3BhZ2Uob2xkX3BhZ2UpOworCQl9CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShvbGRfcGFnZSk7CisJfQogCXJldHVybiByZXQ7CiBvb21fZnJlZV9uZXc6CiAJcGFnZV9jYWNoZV9yZWxlYXNlKG5ld19wYWdlKTsKQEAgLTI2NTAsNiArMjY0OCw3IEBACiAJCWRldGFpbHMubGFzdF9pbmRleCA9IFVMT05HX01BWDsKIAlkZXRhaWxzLmlfbW1hcF9sb2NrID0gJm1hcHBpbmctPmlfbW1hcF9sb2NrOwogCisJbXV0ZXhfbG9jaygmbWFwcGluZy0+dW5tYXBfbXV0ZXgpOwogCXNwaW5fbG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOwogCiAJLyogUHJvdGVjdCBhZ2FpbnN0IGVuZGxlc3MgdW5tYXBwaW5nIGxvb3BzICovCkBAIC0yNjY2LDYgKzI2NjUsNyBAQAogCWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhcikpKQogCQl1bm1hcF9tYXBwaW5nX3JhbmdlX2xpc3QoJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIsICZkZXRhaWxzKTsKIAlzcGluX3VubG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOworCW11dGV4X3VubG9jaygmbWFwcGluZy0+dW5tYXBfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTCh1bm1hcF9tYXBwaW5nX3JhbmdlKTsKIApAQCAtMzA1MywxMiArMzA1Myw2IEBACiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCQljaGFyZ2VkID0gMTsKLQkJCS8qCi0JCQkgKiBEb24ndCBsZXQgYW5vdGhlciB0YXNrLCB3aXRoIHBvc3NpYmx5IHVubG9ja2VkIHZtYSwKLQkJCSAqIGtlZXAgdGhlIG1sb2NrZWQgcGFnZS4KLQkJCSAqLwotCQkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpCi0JCQkJY2xlYXJfcGFnZV9tbG9jayh2bWYucGFnZSk7CiAJCQljb3B5X3VzZXJfaGlnaHBhZ2UocGFnZSwgdm1mLnBhZ2UsIGFkZHJlc3MsIHZtYSk7CiAJCQlfX1NldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmMKaW5kZXggMzY4ZmM5ZC4uNDkzNTVhOSAxMDA2NDQKLS0tIGEvbW0vbWVtcG9saWN5LmMKKysrIGIvbW0vbWVtcG9saWN5LmMKQEAgLTE4MzAsNyArMTgzMCw3IEBACiAJaWYgKHVubGlrZWx5KHBvbC0+bW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUpKSB7CiAJCXVuc2lnbmVkIG5pZDsKIAotCQluaWQgPSBpbnRlcmxlYXZlX25pZChwb2wsIHZtYSwgYWRkciwgUEFHRV9TSElGVCk7CisJCW5pZCA9IGludGVybGVhdmVfbmlkKHBvbCwgdm1hLCBhZGRyLCBQQUdFX1NISUZUICsgb3JkZXIpOwogCQltcG9sX2NvbmRfcHV0KHBvbCk7CiAJCXBhZ2UgPSBhbGxvY19wYWdlX2ludGVybGVhdmUoZ2ZwLCBvcmRlciwgbmlkKTsKIAkJcHV0X21lbXNfYWxsb3dlZCgpOwpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDQ2ZmU4Y2MuLjM1MmRlNTU1IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKKysrIGIvbW0vbWlncmF0ZS5jCkBAIC03NzIsNiArNzcyLDcgQEAKIHVubG9jazoKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAorbW92ZV9uZXdwYWdlOgogCWlmIChyYyAhPSAtRUFHQUlOKSB7CiAgCQkvKgogIAkJICogQSBwYWdlIHRoYXQgaGFzIGJlZW4gbWlncmF0ZWQgaGFzIGFsbCByZWZlcmVuY2VzCkBAIC03ODUsOCArNzg2LDYgQEAKIAkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKIAl9CiAKLW1vdmVfbmV3cGFnZToKLQogCS8qCiAJICogTW92ZSB0aGUgbmV3IHBhZ2UgdG8gdGhlIExSVS4gSWYgbWlncmF0aW9uIHdhcyBub3Qgc3VjY2Vzc2Z1bAogCSAqIHRoZW4gdGhpcyB3aWxsIGZyZWUgdGhlIHBhZ2UuCkBAIC04ODgsNyArODg3LDcgQEAKICAqIGFyZSBtb3ZhYmxlIGFueW1vcmUgYmVjYXVzZSB0byBoYXMgYmVjb21lIGVtcHR5CiAgKiBvciBubyByZXRyeWFibGUgcGFnZXMgZXhpc3QgYW55bW9yZS4KICAqIENhbGxlciBzaG91bGQgY2FsbCBwdXRiYWNrX2xydV9wYWdlcyB0byByZXR1cm4gcGFnZXMgdG8gdGhlIExSVQotICogb3IgZnJlZSBsaXN0LgorICogb3IgZnJlZSBsaXN0IG9ubHkgaWYgcmV0ICE9IDAuCiAgKgogICogUmV0dXJuOiBOdW1iZXIgb2YgcGFnZXMgbm90IG1pZ3JhdGVkIG9yIGVycm9yIGNvZGUuCiAgKi8KQEAgLTk4MSwxMCArOTgwLDYgQEAKIAl9CiAJcmMgPSAwOwogb3V0OgotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhZ2UsIHBhZ2UyLCBmcm9tLCBscnUpCi0JCXB1dF9wYWdlKHBhZ2UpOwotCiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTEyOTIsMTQgKzEyODcsMTQgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCS8qIEZpbmQgdGhlIG1tX3N0cnVjdCAqLwotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOwogCXRhc2sgPSBwaWQgPyBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpIDogY3VycmVudDsKIAlpZiAoIXRhc2spIHsKLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuIC1FU1JDSDsKIAl9CiAJbW0gPSBnZXRfdGFza19tbSh0YXNrKTsKLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoIW1tKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL21tL21sb2NrLmMgYi9tbS9tbG9jay5jCmluZGV4IDEzZTgxZWUuLmMzOTI0YzdmIDEwMDY0NAotLS0gYS9tbS9tbG9jay5jCisrKyBiL21tL21sb2NrLmMKQEAgLTE3OCw2ICsxNzgsMTMgQEAKIAlpZiAoKHZtYS0+dm1fZmxhZ3MgJiAoVk1fV1JJVEUgfCBWTV9TSEFSRUQpKSA9PSBWTV9XUklURSkKIAkJZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7CiAKKwkvKgorCSAqIFdlIHdhbnQgbWxvY2sgdG8gc3VjY2VlZCBmb3IgcmVnaW9ucyB0aGF0IGhhdmUgYW55IHBlcm1pc3Npb25zCisJICogb3RoZXIgdGhhbiBQUk9UX05PTkUuCisJICovCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQykpCisJCWd1cF9mbGFncyB8PSBGT0xMX0ZPUkNFOworCiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpCiAJCWd1cF9mbGFncyB8PSBGT0xMX01MT0NLOwogCmRpZmYgLS1naXQgYS9tbS9tcmVtYXAuYyBiL21tL21yZW1hcC5jCmluZGV4IDk5MjViNjMuLjFkZTk4ZDQgMTAwNjQ0Ci0tLSBhL21tL21yZW1hcC5jCisrKyBiL21tL21yZW1hcC5jCkBAIC05NCw5ICs5NCw3IEBACiAJCSAqLwogCQltYXBwaW5nID0gdm1hLT52bV9maWxlLT5mX21hcHBpbmc7CiAJCXNwaW5fbG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOwotCQlpZiAobmV3X3ZtYS0+dm1fdHJ1bmNhdGVfY291bnQgJiYKLQkJICAgIG5ld192bWEtPnZtX3RydW5jYXRlX2NvdW50ICE9IHZtYS0+dm1fdHJ1bmNhdGVfY291bnQpCi0JCQluZXdfdm1hLT52bV90cnVuY2F0ZV9jb3VudCA9IDA7CisJCW5ld192bWEtPnZtX3RydW5jYXRlX2NvdW50ID0gMDsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDkwYzE0MzkuLmNkZWYxZDQgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTEwODgsOCArMTA4OCwxMCBAQAogCQlwc2V0ID0gcGVyX2NwdV9wdHIoem9uZS0+cGFnZXNldCwgY3B1KTsKIAogCQlwY3AgPSAmcHNldC0+cGNwOwotCQlmcmVlX3BjcHBhZ2VzX2J1bGsoem9uZSwgcGNwLT5jb3VudCwgcGNwKTsKLQkJcGNwLT5jb3VudCA9IDA7CisJCWlmIChwY3AtPmNvdW50KSB7CisJCQlmcmVlX3BjcHBhZ2VzX2J1bGsoem9uZSwgcGNwLT5jb3VudCwgcGNwKTsKKwkJCXBjcC0+Y291bnQgPSAwOworCQl9CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9CiB9CkBAIC0yMDM0LDYgKzIwMzYsMTQgQEAKIAkgKi8KIAlhbGxvY19mbGFncyA9IGdmcF90b19hbGxvY19mbGFncyhnZnBfbWFzayk7CiAKKwkvKgorCSAqIEZpbmQgdGhlIHRydWUgcHJlZmVycmVkIHpvbmUgaWYgdGhlIGFsbG9jYXRpb24gaXMgdW5jb25zdHJhaW5lZCBieQorCSAqIGNwdXNldHMuCisJICovCisJaWYgKCEoYWxsb2NfZmxhZ3MgJiBBTExPQ19DUFVTRVQpICYmICFub2RlbWFzaykKKwkJZmlyc3Rfem9uZXNfem9uZWxpc3Qoem9uZWxpc3QsIGhpZ2hfem9uZWlkeCwgTlVMTCwKKwkJCQkJJnByZWZlcnJlZF96b25lKTsKKwogCS8qIFRoaXMgaXMgdGhlIGxhc3QgY2hhbmNlLCBpbiBnZW5lcmFsLCBiZWZvcmUgdGhlIGdvdG8gbm9wYWdlLiAqLwogCXBhZ2UgPSBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KGdmcF9tYXNrLCBub2RlbWFzaywgb3JkZXIsIHpvbmVsaXN0LAogCQkJaGlnaF96b25laWR4LCBhbGxvY19mbGFncyAmIH5BTExPQ19OT19XQVRFUk1BUktTLApAQCAtMjE5Miw3ICsyMjAyLDkgQEAKIAogCWdldF9tZW1zX2FsbG93ZWQoKTsKIAkvKiBUaGUgcHJlZmVycmVkIHpvbmUgaXMgdXNlZCBmb3Igc3RhdGlzdGljcyBsYXRlciAqLwotCWZpcnN0X3pvbmVzX3pvbmVsaXN0KHpvbmVsaXN0LCBoaWdoX3pvbmVpZHgsIG5vZGVtYXNrLCAmcHJlZmVycmVkX3pvbmUpOworCWZpcnN0X3pvbmVzX3pvbmVsaXN0KHpvbmVsaXN0LCBoaWdoX3pvbmVpZHgsCisJCQkJbm9kZW1hc2sgPyA6ICZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQsCisJCQkJJnByZWZlcnJlZF96b25lKTsKIAlpZiAoIXByZWZlcnJlZF96b25lKSB7CiAJCXB1dF9tZW1zX2FsbG93ZWQoKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC01MzY0LDEwICs1Mzc2LDkgQEAKIAlmb3IgKGZvdW5kID0gMCwgaXRlciA9IDA7IGl0ZXIgPCBwYWdlYmxvY2tfbnJfcGFnZXM7IGl0ZXIrKykgewogCQl1bnNpZ25lZCBsb25nIGNoZWNrID0gcGZuICsgaXRlcjsKIAotCQlpZiAoIXBmbl92YWxpZF93aXRoaW4oY2hlY2spKSB7Ci0JCQlpdGVyKys7CisJCWlmICghcGZuX3ZhbGlkX3dpdGhpbihjaGVjaykpCiAJCQljb250aW51ZTsKLQkJfQorCiAJCXBhZ2UgPSBwZm5fdG9fcGFnZShjaGVjayk7CiAJCWlmICghcGFnZV9jb3VudChwYWdlKSkgewogCQkJaWYgKFBhZ2VCdWRkeShwYWdlKSkKZGlmZiAtLWdpdCBhL21tL3BndGFibGUtZ2VuZXJpYy5jIGIvbW0vcGd0YWJsZS1nZW5lcmljLmMKaW5kZXggMDM2OWY1Yi4uZWI2NjNmYiAxMDA2NDQKLS0tIGEvbW0vcGd0YWJsZS1nZW5lcmljLmMKKysrIGIvbW0vcGd0YWJsZS1nZW5lcmljLmMKQEAgLTYsNiArNiw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDEwICBMaW51cyBUb3J2YWxkcwogICovCiAKKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUuaD4KIApkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggMDdhNDU4ZC4uMDM0MWM1NyAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYworKysgYi9tbS9zd2FwZmlsZS5jCkBAIC0xOTQwLDcgKzE5NDAsNyBAQAogCiAJZXJyb3IgPSAtRUlOVkFMOwogCWlmIChTX0lTQkxLKGlub2RlLT5pX21vZGUpKSB7Ci0JCWJkZXYgPSBJX0JERVYoaW5vZGUpOworCQliZGV2ID0gYmRncmFiKElfQkRFVihpbm9kZSkpOwogCQllcnJvciA9IGJsa2Rldl9nZXQoYmRldiwgRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFIHwgRk1PREVfRVhDTCwKIAkJCQkgICBzeXNfc3dhcG9uKTsKIAkJaWYgKGVycm9yIDwgMCkgewpkaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmMKaW5kZXggM2MyZDVkZC4uZDY0Mjk2YiAxMDA2NDQKLS0tIGEvbW0vdHJ1bmNhdGUuYworKysgYi9tbS90cnVuY2F0ZS5jCkBAIC0yMjUsNiArMjI1LDcgQEAKIAluZXh0ID0gc3RhcnQ7CiAJd2hpbGUgKG5leHQgPD0gZW5kICYmCiAJICAgICAgIHBhZ2V2ZWNfbG9va3VwKCZwdmVjLCBtYXBwaW5nLCBuZXh0LCBQQUdFVkVDX1NJWkUpKSB7CisJCW1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3RhcnQoKTsKIAkJZm9yIChpID0gMDsgaSA8IHBhZ2V2ZWNfY291bnQoJnB2ZWMpOyBpKyspIHsKIAkJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy5wYWdlc1tpXTsKIAkJCXBnb2ZmX3QgcGFnZV9pbmRleCA9IHBhZ2UtPmluZGV4OwpAQCAtMjQ3LDYgKzI0OCw3IEBACiAJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJfQogCQlwYWdldmVjX3JlbGVhc2UoJnB2ZWMpOworCQltZW1fY2dyb3VwX3VuY2hhcmdlX2VuZCgpOwogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKQEAgLTU0OSwxMyArNTUxLDEyIEBACiAgKiBAaW5vZGU6IGlub2RlCiAgKiBAbmV3c2l6ZTogbmV3IGZpbGUgc2l6ZQogICoKLSAqIHRydW5jYXRlX3NldHNpemUgdXBkYXN0ZXMgaV9zaXplIHVwZGF0ZSBhbmQgcGVyZm9ybXMgcGFnZWNhY2hlCi0gKiB0cnVuY2F0aW9uIChpZiBuZWNlc3NhcnkpIGZvciBhIGZpbGUgc2l6ZSB1cGRhdGVzLiBJdCB3aWxsIGJlCi0gKiB0eXBpY2FsbHkgYmUgY2FsbGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0ncyBzZXRhdHRyIGZ1bmN0aW9uIHdoZW4KLSAqIEFUVFJfU0laRSBpcyBwYXNzZWQgaW4uCisgKiB0cnVuY2F0ZV9zZXRzaXplIHVwZGF0ZXMgaV9zaXplIGFuZCBwZXJmb3JtcyBwYWdlY2FjaGUgdHJ1bmNhdGlvbiAoaWYKKyAqIG5lY2Vzc2FyeSkgdG8gQG5ld3NpemUuIEl0IHdpbGwgYmUgdHlwaWNhbGx5IGJlIGNhbGxlZCBmcm9tIHRoZSBmaWxlc3lzdGVtJ3MKKyAqIHNldGF0dHIgZnVuY3Rpb24gd2hlbiBBVFRSX1NJWkUgaXMgcGFzc2VkIGluLgogICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggaW5vZGVfbXV0ZXggaGVsZCBhbmQgYWZ0ZXIgYWxsIGZpbGVzeXN0ZW0KLSAqIHNwZWNpZmljIGJsb2NrIHRydW5jYXRpb24gaGFzIGJlZW4gcGVyZm9ybWVkLgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBpbm9kZV9tdXRleCBoZWxkIGFuZCBiZWZvcmUgYWxsIGZpbGVzeXN0ZW0gc3BlY2lmaWMKKyAqIGJsb2NrIHRydW5jYXRpb24gaGFzIGJlZW4gcGVyZm9ybWVkLgogICovCiB2b2lkIHRydW5jYXRlX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpCiB7CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDQ3YTUwOTYuLjY3NzFlYTcgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8bGludXgvbWVtY29udHJvbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5YWNjdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBhY3Rpb24uaD4KIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgpAQCAtMTg0MiwxNiArMTg0MSwyOCBAQAogCWlmICghKHNjLT5yZWNsYWltX21vZGUgJiBSRUNMQUlNX01PREVfQ09NUEFDVElPTikpCiAJCXJldHVybiBmYWxzZTsKIAotCS8qCi0JICogSWYgd2UgZmFpbGVkIHRvIHJlY2xhaW0gYW5kIGhhdmUgc2Nhbm5lZCB0aGUgZnVsbCBsaXN0LCBzdG9wLgotCSAqIE5PVEU6IENoZWNraW5nIGp1c3QgbnJfcmVjbGFpbWVkIHdvdWxkIGV4aXQgcmVjbGFpbS9jb21wYWN0aW9uIGZhcgotCSAqICAgICAgIGZhc3RlciBidXQgb2J2aW91c2x5IHdvdWxkIGJlIGxlc3MgbGlrZWx5IHRvIHN1Y2NlZWQKLQkgKiAgICAgICBhbGxvY2F0aW9uLiBJZiB0aGlzIGlzIGRlc2lyYWJsZSwgdXNlIEdGUF9SRVBFQVQgdG8gZGVjaWRlCi0JICogICAgICAgaWYgYm90aCByZWNsYWltZWQgYW5kIHNjYW5uZWQgc2hvdWxkIGJlIGNoZWNrZWQgb3IganVzdAotCSAqICAgICAgIHJlY2xhaW1lZAotCSAqLwotCWlmICghbnJfcmVjbGFpbWVkICYmICFucl9zY2FubmVkKQotCQlyZXR1cm4gZmFsc2U7CisJLyogQ29uc2lkZXIgc3RvcHBpbmcgZGVwZW5kaW5nIG9uIHNjYW4gYW5kIHJlY2xhaW0gYWN0aXZpdHkgKi8KKwlpZiAoc2MtPmdmcF9tYXNrICYgX19HRlBfUkVQRUFUKSB7CisJCS8qCisJCSAqIEZvciBfX0dGUF9SRVBFQVQgYWxsb2NhdGlvbnMsIHN0b3AgcmVjbGFpbWluZyBpZiB0aGUKKwkJICogZnVsbCBMUlUgbGlzdCBoYXMgYmVlbiBzY2FubmVkIGFuZCB3ZSBhcmUgc3RpbGwgZmFpbGluZworCQkgKiB0byByZWNsYWltIHBhZ2VzLiBUaGlzIGZ1bGwgTFJVIHNjYW4gaXMgcG90ZW50aWFsbHkKKwkJICogZXhwZW5zaXZlIGJ1dCBhIF9fR0ZQX1JFUEVBVCBjYWxsZXIgcmVhbGx5IHdhbnRzIHRvIHN1Y2NlZWQKKwkJICovCisJCWlmICghbnJfcmVjbGFpbWVkICYmICFucl9zY2FubmVkKQorCQkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEZvciBub24tX19HRlBfUkVQRUFUIGFsbG9jYXRpb25zIHdoaWNoIGNhbiBwcmVzdW1hYmx5CisJCSAqIGZhaWwgd2l0aG91dCBjb25zZXF1ZW5jZSwgc3RvcCBpZiB3ZSBmYWlsZWQgdG8gcmVjbGFpbQorCQkgKiBhbnkgcGFnZXMgZnJvbSB0aGUgbGFzdCBTV0FQX0NMVVNURVJfTUFYIG51bWJlciBvZgorCQkgKiBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZC4gVGhpcyB3aWxsIHJldHVybiB0byB0aGUKKwkJICogY2FsbGVyIGZhc3RlciBhdCB0aGUgcmlzayByZWNsYWltL2NvbXBhY3Rpb24gYW5kCisJCSAqIHRoZSByZXN1bHRpbmcgYWxsb2NhdGlvbiBhdHRlbXB0IGZhaWxzCisJCSAqLworCQlpZiAoIW5yX3JlY2xhaW1lZCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CiAKIAkvKgogCSAqIElmIHdlIGhhdmUgbm90IHJlY2xhaW1lZCBlbm91Z2ggcGFnZXMgZm9yIGNvbXBhY3Rpb24gYW5kIHRoZQpAQCAtMTg4MywxMiArMTg5NCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgbnJbTlJfTFJVX0xJU1RTXTsKIAl1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW47CiAJZW51bSBscnVfbGlzdCBsOwotCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkOworCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkLCBucl9zY2FubmVkOwogCXVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSA9IHNjLT5ucl90b19yZWNsYWltOwotCXVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZCA9IHNjLT5ucl9zY2FubmVkOwogCiByZXN0YXJ0OgogCW5yX3JlY2xhaW1lZCA9IDA7CisJbnJfc2Nhbm5lZCA9IHNjLT5ucl9zY2FubmVkOwogCWdldF9zY2FuX2NvdW50KHpvbmUsIHNjLCBuciwgcHJpb3JpdHkpOwogCiAJd2hpbGUgKG5yW0xSVV9JTkFDVElWRV9BTk9OXSB8fCBucltMUlVfQUNUSVZFX0ZJTEVdIHx8CkBAIC0yMDg0LDcgKzIwOTUsOCBAQAogCQkJc3RydWN0IHpvbmUgKnByZWZlcnJlZF96b25lOwogCiAJCQlmaXJzdF96b25lc196b25lbGlzdCh6b25lbGlzdCwgZ2ZwX3pvbmUoc2MtPmdmcF9tYXNrKSwKLQkJCQkJCQlOVUxMLCAmcHJlZmVycmVkX3pvbmUpOworCQkJCQkJJmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCwKKwkJCQkJCSZwcmVmZXJyZWRfem9uZSk7CiAJCQl3YWl0X2lmZl9jb25nZXN0ZWQocHJlZmVycmVkX3pvbmUsIEJMS19SV19BU1lOQywgSFovMTApOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWFpbi5oIGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5oCmluZGV4IGQ0ZDk5MjYuLjY1MTA2ZmIgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L21haW4uaAorKysgYi9uZXQvYmF0bWFuLWFkdi9tYWluLmgKQEAgLTE1MSw5ICsxNTEsOSBAQAogCX0JCQkJCQkJXAogCXdoaWxlICgwKQogI2Vsc2UgLyogIUNPTkZJR19CQVRNQU5fQURWX0RFQlVHICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYmF0X2RiZyhjaGFyIHR5cGUgX19hdHRyaWJ1dGVfXygodW51c2VkKSksCi0JCQkgICBzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2IF9fYXR0cmlidXRlX18oKHVudXNlZCkpLAotCQkJICAgY2hhciAqZm10IF9fYXR0cmlidXRlX18oKHVudXNlZCkpLCAuLi4pCitzdGF0aWMgaW5saW5lIHZvaWQgYmF0X2RiZyhjaGFyIHR5cGUgX19hbHdheXNfdW51c2VkLAorCQkJICAgc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiBfX2Fsd2F5c191bnVzZWQsCisJCQkgICBjaGFyICpmbXQgX19hbHdheXNfdW51c2VkLCAuLi4pCiB7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3BhY2tldC5oIGIvbmV0L2JhdG1hbi1hZHYvcGFja2V0LmgKaW5kZXggYjQ5ZmRmNy4uMjI4NGU4MSAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvcGFja2V0LmgKKysrIGIvbmV0L2JhdG1hbi1hZHYvcGFja2V0LmgKQEAgLTYzLDcgKzYzLDcgQEAKIAl1aW50OF90ICBudW1faG5hOwogCXVpbnQ4X3QgIGd3X2ZsYWdzOyAgLyogZmxhZ3MgcmVsYXRlZCB0byBnYXRld2F5IGNsYXNzICovCiAJdWludDhfdCAgYWxpZ247Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBCQVRfUEFDS0VUX0xFTiBzaXplb2Yoc3RydWN0IGJhdG1hbl9wYWNrZXQpCiAKQEAgLTc2LDcgKzc2LDcgQEAKIAl1aW50OF90ICBvcmlnWzZdOwogCXVpbnQxNl90IHNlcW5vOwogCXVpbnQ4X3QgIHVpZDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAjZGVmaW5lIEJBVF9SUl9MRU4gMTYKIApAQCAtOTMsMTQgKzkzLDE0IEBACiAJdWludDhfdCAgdWlkOwogCXVpbnQ4X3QgIHJyX2N1cjsKIAl1aW50OF90ICBycltCQVRfUlJfTEVOXVtFVEhfQUxFTl07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHVuaWNhc3RfcGFja2V0IHsKIAl1aW50OF90ICBwYWNrZXRfdHlwZTsKIAl1aW50OF90ICB2ZXJzaW9uOyAgLyogYmF0bWFuIHZlcnNpb24gZmllbGQgKi8KIAl1aW50OF90ICBkZXN0WzZdOwogCXVpbnQ4X3QgIHR0bDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgdW5pY2FzdF9mcmFnX3BhY2tldCB7CiAJdWludDhfdCAgcGFja2V0X3R5cGU7CkBAIC0xMTAsNyArMTEwLDcgQEAKIAl1aW50OF90ICBmbGFnczsKIAl1aW50OF90ICBvcmlnWzZdOwogCXVpbnQxNl90IHNlcW5vOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBiY2FzdF9wYWNrZXQgewogCXVpbnQ4X3QgIHBhY2tldF90eXBlOwpAQCAtMTE4LDcgKzExOCw3IEBACiAJdWludDhfdCAgb3JpZ1s2XTsKIAl1aW50OF90ICB0dGw7CiAJdWludDMyX3Qgc2Vxbm87Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHZpc19wYWNrZXQgewogCXVpbnQ4X3QgIHBhY2tldF90eXBlOwpAQCAtMTMxLDYgKzEzMSw2IEBACiAJCQkJICAqIG5laWdoYm9ycyAqLwogCXVpbnQ4X3QgIHRhcmdldF9vcmlnWzZdOyAvKiB3aG8gc2hvdWxkIHJlY2VpdmUgdGhpcyBwYWNrZXQgKi8KIAl1aW50OF90ICBzZW5kZXJfb3JpZ1s2XTsgLyogd2hvIHNlbnQgb3IgcmVicm9hZGNhc3RlZCB0aGlzIHBhY2tldCAqLwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKICNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfUEFDS0VUX0hfICovCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi90eXBlcy5oIGIvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaAppbmRleCA5N2NiMjNkLi5iZjNmNmY1IDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi90eXBlcy5oCisrKyBiL25ldC9iYXRtYW4tYWR2L3R5cGVzLmgKQEAgLTI0NiwxMyArMjQ2LDEzIEBACiAJLyogdGhpcyBwYWNrZXQgbWlnaHQgYmUgcGFydCBvZiB0aGUgdmlzIHNlbmQgcXVldWUuICovCiAJc3RydWN0IHNrX2J1ZmYgKnNrYl9wYWNrZXQ7CiAJLyogdmlzX2luZm8gbWF5IGZvbGxvdyBoZXJlKi8KLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgdmlzX2luZm9fZW50cnkgewogCXVpbnQ4X3QgIHNyY1tFVEhfQUxFTl07CiAJdWludDhfdCAgZGVzdFtFVEhfQUxFTl07CiAJdWludDhfdCAgcXVhbGl0eTsJLyogcXVhbGl0eSA9IDAgbWVhbnMgSE5BICovCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IHJlY3ZsaXN0X25vZGUgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3VuaWNhc3QuYyBiL25ldC9iYXRtYW4tYWR2L3VuaWNhc3QuYwppbmRleCBkYzJlMjhiLi5kMWE2MTEzIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi91bmljYXN0LmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvdW5pY2FzdC5jCkBAIC01MCwxMiArNTAsMTIgQEAKIAkJc2tiID0gdGZwLT5za2I7CiAJfQogCisJaWYgKHNrYl9saW5lYXJpemUoc2tiKSA8IDAgfHwgc2tiX2xpbmVhcml6ZSh0bXBfc2tiKSA8IDApCisJCWdvdG8gZXJyOworCiAJc2tiX3B1bGwodG1wX3NrYiwgc2l6ZW9mKHN0cnVjdCB1bmljYXN0X2ZyYWdfcGFja2V0KSk7Ci0JaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCB0bXBfc2tiLT5sZW4sIEdGUF9BVE9NSUMpIDwgMCkgewotCQkvKiBmcmVlIGJ1ZmZlcmVkIHNrYiwgc2tiIHdpbGwgYmUgZnJlZWQgbGF0ZXIgKi8KLQkJa2ZyZWVfc2tiKHRmcC0+c2tiKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgdG1wX3NrYi0+bGVuLCBHRlBfQVRPTUlDKSA8IDApCisJCWdvdG8gZXJyOwogCiAJLyogbW92ZSBmcmVlIGVudHJ5IHRvIGVuZCAqLwogCXRmcC0+c2tiID0gTlVMTDsKQEAgLTcwLDYgKzcwLDExIEBACiAJdW5pY2FzdF9wYWNrZXQtPnBhY2tldF90eXBlID0gQkFUX1VOSUNBU1Q7CiAKIAlyZXR1cm4gc2tiOworCitlcnI6CisJLyogZnJlZSBidWZmZXJlZCBza2IsIHNrYiB3aWxsIGJlIGZyZWVkIGxhdGVyICovCisJa2ZyZWVfc2tiKHRmcC0+c2tiKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgZnJhZ19jcmVhdGVfZW50cnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTIyOSwxMCArMjM0LDEyIEBACiAJaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikKIAkJZ290byBkcm9wcGVkOwogCi0JdW5pY2FzdF9wYWNrZXQgPSAoc3RydWN0IHVuaWNhc3RfcGFja2V0ICopIHNrYi0+ZGF0YTsKLQotCW1lbWNweSgmdG1wX3VjLCB1bmljYXN0X3BhY2tldCwgdWNfaGRyX2xlbik7CiAJZnJhZ19za2IgPSBkZXZfYWxsb2Nfc2tiKGRhdGFfbGVuIC0gKGRhdGFfbGVuIC8gMikgKyB1Y2ZfaGRyX2xlbik7CisJaWYgKCFmcmFnX3NrYikKKwkJZ290byBkcm9wcGVkOworCisJdW5pY2FzdF9wYWNrZXQgPSAoc3RydWN0IHVuaWNhc3RfcGFja2V0ICopIHNrYi0+ZGF0YTsKKwltZW1jcHkoJnRtcF91YywgdW5pY2FzdF9wYWNrZXQsIHVjX2hkcl9sZW4pOwogCXNrYl9zcGxpdChza2IsIGZyYWdfc2tiLCBkYXRhX2xlbiAvIDIpOwogCiAJaWYgKG15X3NrYl9oZWFkX3B1c2goc2tiLCB1Y2ZfaGRyX2xlbiAtIHVjX2hkcl9sZW4pIDwgMCB8fApkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdmlzLmMgYi9uZXQvYmF0bWFuLWFkdi92aXMuYwppbmRleCBjZDRjNDIzLi5kZTEwMjJjIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi92aXMuYworKysgYi9uZXQvYmF0bWFuLWFkdi92aXMuYwpAQCAtNjQsNiArNjQsNyBAQAogCiAJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT52aXNfbGlzdF9sb2NrKTsKIAlrZnJlZV9za2IoaW5mby0+c2tiX3BhY2tldCk7CisJa2ZyZWUoaW5mbyk7CiB9CiAKIC8qIENvbXBhcmUgdHdvIHZpcyBwYWNrZXRzLCB1c2VkIGJ5IHRoZSBoYXNoaW5nIGFsZ29yaXRobSAqLwpAQCAtMjY4LDEwICsyNjksMTAgQEAKIAkJCQlidWZmX3BvcyArPSBzcHJpbnRmKGJ1ZmYgKyBidWZmX3BvcywgIiVwTSwiLAogCQkJCQkJZW50cnktPmFkZHIpOwogCi0JCQkJZm9yIChpID0gMDsgaSA8IHBhY2tldC0+ZW50cmllczsgaSsrKQorCQkJCWZvciAoaiA9IDA7IGogPCBwYWNrZXQtPmVudHJpZXM7IGorKykKIAkJCQkJYnVmZl9wb3MgKz0gdmlzX2RhdGFfcmVhZF9lbnRyeSgKIAkJCQkJCQlidWZmICsgYnVmZl9wb3MsCi0JCQkJCQkJJmVudHJpZXNbaV0sCisJCQkJCQkJJmVudHJpZXNbal0sCiAJCQkJCQkJZW50cnktPmFkZHIsCiAJCQkJCQkJZW50cnktPnByaW1hcnkpOwogCkBAIC00NDQsNyArNDQ1LDcgQEAKIAkJCSAgICAgIGluZm8pOwogCWlmIChoYXNoX2FkZGVkIDwgMCkgewogCQkvKiBkaWQgbm90IHdvcmsgKGZvciBzb21lIHJlYXNvbikgKi8KLQkJa3JlZl9wdXQoJm9sZF9pbmZvLT5yZWZjb3VudCwgZnJlZV9pbmZvKTsKKwkJa3JlZl9wdXQoJmluZm8tPnJlZmNvdW50LCBmcmVlX2luZm8pOwogCQlpbmZvID0gTlVMTDsKIAl9CiAKQEAgLTgxNSw3ICs4MTYsNyBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9CiAJCWNvbnRhaW5lcl9vZihkZWxheWVkX3dvcmssIHN0cnVjdCBiYXRfcHJpdiwgdmlzX3dvcmspOwotCXN0cnVjdCB2aXNfaW5mbyAqaW5mbywgKnRlbXA7CisJc3RydWN0IHZpc19pbmZvICppbmZvOwogCiAJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+dmlzX2hhc2hfbG9jayk7CiAJcHVyZ2VfdmlzX3BhY2tldHMoYmF0X3ByaXYpOwpAQCAtODI1LDggKzgyNiw5IEBACiAJCXNlbmRfbGlzdF9hZGQoYmF0X3ByaXYsIGJhdF9wcml2LT5teV92aXNfaW5mbyk7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGluZm8sIHRlbXAsICZiYXRfcHJpdi0+dmlzX3NlbmRfbGlzdCwKLQkJCQkgc2VuZF9saXN0KSB7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZiYXRfcHJpdi0+dmlzX3NlbmRfbGlzdCkpIHsKKwkJaW5mbyA9IGxpc3RfZmlyc3RfZW50cnkoJmJhdF9wcml2LT52aXNfc2VuZF9saXN0LAorCQkJCQl0eXBlb2YoKmluZm8pLCBzZW5kX2xpc3QpOwogCiAJCWtyZWZfZ2V0KCZpbmZvLT5yZWZjb3VudCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dmlzX2hhc2hfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKaW5kZXggNmI5MGE0MS4uOTljZDhkOSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwpAQCAtMzc5LDE0ICszNzksMTAgQEAKIAloY2lfY29ubl9ob2xkKGFjbCk7CiAKIAlpZiAoYWNsLT5zdGF0ZSA9PSBCVF9PUEVOIHx8IGFjbC0+c3RhdGUgPT0gQlRfQ0xPU0VEKSB7Ci0JCWFjbC0+c2VjX2xldmVsID0gc2VjX2xldmVsOworCQlhY2wtPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKKwkJYWNsLT5wZW5kaW5nX3NlY19sZXZlbCA9IHNlY19sZXZlbDsKIAkJYWNsLT5hdXRoX3R5cGUgPSBhdXRoX3R5cGU7CiAJCWhjaV9hY2xfY29ubmVjdChhY2wpOwotCX0gZWxzZSB7Ci0JCWlmIChhY2wtPnNlY19sZXZlbCA8IHNlY19sZXZlbCkKLQkJCWFjbC0+c2VjX2xldmVsID0gc2VjX2xldmVsOwotCQlpZiAoYWNsLT5hdXRoX3R5cGUgPCBhdXRoX3R5cGUpCi0JCQlhY2wtPmF1dGhfdHlwZSA9IGF1dGhfdHlwZTsKIAl9CiAKIAlpZiAodHlwZSA9PSBBQ0xfTElOSykKQEAgLTQ0MiwxMSArNDM4LDE3IEBACiB7CiAJQlRfREJHKCJjb25uICVwIiwgY29ubik7CiAKKwlpZiAoY29ubi0+cGVuZGluZ19zZWNfbGV2ZWwgPiBzZWNfbGV2ZWwpCisJCXNlY19sZXZlbCA9IGNvbm4tPnBlbmRpbmdfc2VjX2xldmVsOworCiAJaWYgKHNlY19sZXZlbCA+IGNvbm4tPnNlY19sZXZlbCkKLQkJY29ubi0+c2VjX2xldmVsID0gc2VjX2xldmVsOworCQljb25uLT5wZW5kaW5nX3NlY19sZXZlbCA9IHNlY19sZXZlbDsKIAllbHNlIGlmIChjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fQVVUSCkKIAkJcmV0dXJuIDE7CiAKKwkvKiBNYWtlIHN1cmUgd2UgcHJlc2VydmUgYW4gZXhpc3RpbmcgTUlUTSByZXF1aXJlbWVudCovCisJYXV0aF90eXBlIHw9IChjb25uLT5hdXRoX3R5cGUgJiAweDAxKTsKKwogCWNvbm4tPmF1dGhfdHlwZSA9IGF1dGhfdHlwZTsKIAogCWlmICghdGVzdF9hbmRfc2V0X2JpdChIQ0lfQ09OTl9BVVRIX1BFTkQsICZjb25uLT5wZW5kKSkgewpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCmluZGV4IDhiNjAyZDguLjljNDU0MWIgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKQEAgLTEwMTEsNiArMTAxMSwxMCBAQAogCiAJZGVzdHJveV93b3JrcXVldWUoaGRldi0+d29ya3F1ZXVlKTsKIAorCWhjaV9kZXZfbG9ja19iaChoZGV2KTsKKwloY2lfYmxhY2tsaXN0X2NsZWFyKGhkZXYpOworCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCiAJX19oY2lfZGV2X3B1dChoZGV2KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKaW5kZXggMzgxMDAxNy4uYTI5MDg1NCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCkBAIC02OTIsMTMgKzY5MiwxMyBAQAogCWlmIChjb25uLT5zdGF0ZSAhPSBCVF9DT05GSUcgfHwgIWNvbm4tPm91dCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoY29ubi0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX1NEUCkKKwlpZiAoY29ubi0+cGVuZGluZ19zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfU0RQKQogCQlyZXR1cm4gMDsKIAogCS8qIE9ubHkgcmVxdWVzdCBhdXRoZW50aWNhdGlvbiBmb3IgU1NQIGNvbm5lY3Rpb25zIG9yIG5vbi1TU1AKIAkgKiBkZXZpY2VzIHdpdGggc2VjX2xldmVsIEhJR0ggKi8KIAlpZiAoIShoZGV2LT5zc3BfbW9kZSA+IDAgJiYgY29ubi0+c3NwX21vZGUgPiAwKSAmJgotCQkJCQljb25uLT5zZWNfbGV2ZWwgIT0gQlRfU0VDVVJJVFlfSElHSCkKKwkJCQljb25uLT5wZW5kaW5nX3NlY19sZXZlbCAhPSBCVF9TRUNVUklUWV9ISUdIKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAxOwpAQCAtMTA5NSw5ICsxMDk1LDEwIEBACiAKIAljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfaGFuZGxlKGhkZXYsIF9fbGUxNl90b19jcHUoZXYtPmhhbmRsZSkpOwogCWlmIChjb25uKSB7Ci0JCWlmICghZXYtPnN0YXR1cykKKwkJaWYgKCFldi0+c3RhdHVzKSB7CiAJCQljb25uLT5saW5rX21vZGUgfD0gSENJX0xNX0FVVEg7Ci0JCWVsc2UKKwkJCWNvbm4tPnNlY19sZXZlbCA9IGNvbm4tPnBlbmRpbmdfc2VjX2xldmVsOworCQl9IGVsc2UKIAkJCWNvbm4tPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKIAogCQljbGVhcl9iaXQoSENJX0NPTk5fQVVUSF9QRU5ELCAmY29ubi0+cGVuZCk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKaW5kZXggYzc5MWZjZC4uNjc1NjE0ZSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcC5jCisrKyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwpAQCAtMzA1LDMzICszMDUsNDQgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTggbDJjYXBfZ2V0X2F1dGhfdHlwZShzdHJ1Y3Qgc29jayAqc2spCit7CisJaWYgKHNrLT5za190eXBlID09IFNPQ0tfUkFXKSB7CisJCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKKwkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgorCQkJcmV0dXJuIEhDSV9BVF9ERURJQ0FURURfQk9ORElOR19NSVRNOworCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKKwkJCXJldHVybiBIQ0lfQVRfREVESUNBVEVEX0JPTkRJTkc7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gSENJX0FUX05PX0JPTkRJTkc7CisJCX0KKwl9IGVsc2UgaWYgKGwyY2FwX3BpKHNrKS0+cHNtID09IGNwdV90b19sZTE2KDB4MDAwMSkpIHsKKwkJaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0xPVykKKwkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfU0RQOworCisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKQorCQkJcmV0dXJuIEhDSV9BVF9OT19CT05ESU5HX01JVE07CisJCWVsc2UKKwkJCXJldHVybiBIQ0lfQVRfTk9fQk9ORElORzsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7CisJCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKKwkJCXJldHVybiBIQ0lfQVRfR0VORVJBTF9CT05ESU5HX01JVE07CisJCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgorCQkJcmV0dXJuIEhDSV9BVF9HRU5FUkFMX0JPTkRJTkc7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gSENJX0FUX05PX0JPTkRJTkc7CisJCX0KKwl9Cit9CisKIC8qIFNlcnZpY2UgbGV2ZWwgc2VjdXJpdHkgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGwyY2FwX2NoZWNrX3NlY3VyaXR5KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKIAlfX3U4IGF1dGhfdHlwZTsKIAotCWlmIChsMmNhcF9waShzayktPnBzbSA9PSBjcHVfdG9fbGUxNigweDAwMDEpKSB7Ci0JCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKQotCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkdfTUlUTTsKLQkJZWxzZQotCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7Ci0KLQkJaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0xPVykKLQkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfU0RQOwotCX0gZWxzZSB7Ci0JCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKLQkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgotCQkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElOR19NSVRNOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgotCQkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElORzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7Ci0JCQlicmVhazsKLQkJfQotCX0KKwlhdXRoX3R5cGUgPSBsMmNhcF9nZXRfYXV0aF90eXBlKHNrKTsKIAogCXJldHVybiBoY2lfY29ubl9zZWN1cml0eShjb25uLT5oY29uLCBsMmNhcF9waShzayktPnNlY19sZXZlbCwKIAkJCQkJCQkJYXV0aF90eXBlKTsKQEAgLTg0OCw2ICs4NTksNyBAQAogCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1NFQ19CTE9DSzsKIAkJCWVsc2UKIAkJCQlyZXN1bHQgPSBMMkNBUF9DUl9CQURfUFNNOworCQkJc2stPnNrX3N0YXRlID0gQlRfRElTQ09OTjsKIAogCQkJcnNwLnNjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7CiAJCQlyc3AuZGNpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKQEAgLTEwNjgsMzkgKzEwODAsNyBAQAogCiAJZXJyID0gLUVOT01FTTsKIAotCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1JBVykgewotCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7Ci0JCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9ERURJQ0FURURfQk9ORElOR19NSVRNOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgotCQkJYXV0aF90eXBlID0gSENJX0FUX0RFRElDQVRFRF9CT05ESU5HOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlhdXRoX3R5cGUgPSBIQ0lfQVRfTk9fQk9ORElORzsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIGlmIChsMmNhcF9waShzayktPnBzbSA9PSBjcHVfdG9fbGUxNigweDAwMDEpKSB7Ci0JCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKQotCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkdfTUlUTTsKLQkJZWxzZQotCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7Ci0KLQkJaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0xPVykKLQkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfU0RQOwotCX0gZWxzZSB7Ci0JCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKLQkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgotCQkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElOR19NSVRNOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgotCQkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElORzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7Ci0JCQlicmVhazsKLQkJfQotCX0KKwlhdXRoX3R5cGUgPSBsMmNhcF9nZXRfYXV0aF90eXBlKHNrKTsKIAogCWhjb24gPSBoY2lfY29ubmVjdChoZGV2LCBBQ0xfTElOSywgZHN0LAogCQkJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCwgYXV0aF90eXBlKTsKQEAgLTExMjcsNyArMTEwNyw4IEBACiAJCWlmIChzay0+c2tfdHlwZSAhPSBTT0NLX1NFUVBBQ0tFVCAmJgogCQkJCXNrLT5za190eXBlICE9IFNPQ0tfU1RSRUFNKSB7CiAJCQlsMmNhcF9zb2NrX2NsZWFyX3RpbWVyKHNrKTsKLQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1RFRDsKKwkJCWlmIChsMmNhcF9jaGVja19zZWN1cml0eShzaykpCisJCQkJc2stPnNrX3N0YXRlID0gQlRfQ09OTkVDVEVEOwogCQl9IGVsc2UKIAkJCWwyY2FwX2RvX3N0YXJ0KHNrKTsKIAl9CkBAIC0xODkzLDggKzE4NzQsOCBAQAogCQlpZiAocGktPm1vZGUgPT0gTDJDQVBfTU9ERV9TVFJFQU1JTkcpIHsKIAkJCWwyY2FwX3N0cmVhbWluZ19zZW5kKHNrKTsKIAkJfSBlbHNlIHsKLQkJCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fUkVNT1RFX0JVU1kgJiYKLQkJCQkJcGktPmNvbm5fc3RhdGUgJiYgTDJDQVBfQ09OTl9XQUlUX0YpIHsKKwkJCWlmICgocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZKSAmJgorCQkJCQkocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1dBSVRfRikpIHsKIAkJCQllcnIgPSBsZW47CiAJCQkJYnJlYWs7CiAJCQl9CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKaW5kZXggZmY4YWFhNy4uNmI4Mzc3NiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwpAQCAtMTE2NCw3ICsxMTY0LDggQEAKIAkJCSAqIGluaXRpYXRvciByZmNvbW1fcHJvY2Vzc19yeCBhbHJlYWR5IGNhbGxzCiAJCQkgKiByZmNvbW1fc2Vzc2lvbl9wdXQoKSAqLwogCQkJaWYgKHMtPnNvY2stPnNrLT5za19zdGF0ZSAhPSBCVF9DTE9TRUQpCi0JCQkJcmZjb21tX3Nlc3Npb25fcHV0KHMpOworCQkJCWlmIChsaXN0X2VtcHR5KCZzLT5kbGNzKSkKKwkJCQkJcmZjb21tX3Nlc3Npb25fcHV0KHMpOwogCQkJYnJlYWs7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCmluZGV4IDI1NzVjMmQuLmQ3YjlhZjQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCkBAIC03MjcsNyArNzI3LDkgQEAKIAkJCWJyZWFrOwogCQl9CiAKKwkJdHR5X3VubG9jaygpOwogCQlzY2hlZHVsZSgpOworCQl0dHlfbG9jaygpOwogCX0KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZkZXYtPndhaXQsICZ3YWl0KTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfZmRiLmMgYi9uZXQvYnJpZGdlL2JyX2ZkYi5jCmluZGV4IDI4NzIzOTMuLjg4NDg1Y2MgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZmRiLmMKKysrIGIvbmV0L2JyaWRnZS9icl9mZGIuYwpAQCAtMzI4LDEyICszMjgsMTIgQEAKIAlmZGIgPSBrbWVtX2NhY2hlX2FsbG9jKGJyX2ZkYl9jYWNoZSwgR0ZQX0FUT01JQyk7CiAJaWYgKGZkYikgewogCQltZW1jcHkoZmRiLT5hZGRyLmFkZHIsIGFkZHIsIEVUSF9BTEVOKTsKLQkJaGxpc3RfYWRkX2hlYWRfcmN1KCZmZGItPmhsaXN0LCBoZWFkKTsKLQogCQlmZGItPmRzdCA9IHNvdXJjZTsKIAkJZmRiLT5pc19sb2NhbCA9IGlzX2xvY2FsOwogCQlmZGItPmlzX3N0YXRpYyA9IGlzX2xvY2FsOwogCQlmZGItPmFnZWluZ190aW1lciA9IGppZmZpZXM7CisKKwkJaGxpc3RfYWRkX2hlYWRfcmN1KCZmZGItPmhsaXN0LCBoZWFkKTsKIAl9CiAJcmV0dXJuIGZkYjsKIH0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwppbmRleCA2ZjZkOGUxLi44OGU0YWE5IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMKKysrIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCkBAIC04MCw3ICs4MCw3IEBACiAJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGRlc3QpKSB7CiAJCW1kc3QgPSBicl9tZGJfZ2V0KGJyLCBza2IpOwogCQlpZiAobWRzdCB8fCBCUl9JTlBVVF9TS0JfQ0JfTVJPVVRFUlNfT05MWShza2IpKSB7Ci0JCQlpZiAoKG1kc3QgJiYgIWhsaXN0X3VuaGFzaGVkKCZtZHN0LT5tZ2xpc3QpKSB8fAorCQkJaWYgKChtZHN0ICYmIG1kc3QtPm1nbGlzdCkgfHwKIAkJCSAgICBicl9tdWx0aWNhc3RfaXNfcm91dGVyKGJyKSkKIAkJCQlza2IyID0gc2tiOwogCQkJYnJfbXVsdGljYXN0X2ZvcndhcmQobWRzdCwgc2tiLCBza2IyKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCmluZGV4IGY3MDFhMjEuLjAzMGEwMDIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKKysrIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwpAQCAtMzcsMTAgKzM3LDkgQEAKIAlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKFgsIGxvY2tkZXBfaXNfaGVsZCgmYnItPm11bHRpY2FzdF9sb2NrKSkKIAogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotc3RhdGljIGlubGluZSBpbnQgaXB2Nl9pc19sb2NhbF9tdWx0aWNhc3QoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQorc3RhdGljIGlubGluZSBpbnQgaXB2Nl9pc190cmFuc2llbnRfbXVsdGljYXN0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKLQlpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdChhZGRyKSAmJgotCSAgICBJUFY2X0FERFJfTUNfU0NPUEUoYWRkcikgPD0gSVBWNl9BRERSX1NDT1BFX0xJTktMT0NBTCkKKwlpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdChhZGRyKSAmJiBJUFY2X0FERFJfTUNfRkxBR19UUkFOU0lFTlQoYWRkcikpCiAJCXJldHVybiAxOwogCXJldHVybiAwOwogfQpAQCAtMjMyLDggKzIzMSw3IEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGJyLT5kZXYpIHx8IHRpbWVyX3BlbmRpbmcoJm1wLT50aW1lcikpCiAJCWdvdG8gb3V0OwogCi0JaWYgKCFobGlzdF91bmhhc2hlZCgmbXAtPm1nbGlzdCkpCi0JCWhsaXN0X2RlbF9pbml0KCZtcC0+bWdsaXN0KTsKKwltcC0+bWdsaXN0ID0gZmFsc2U7CiAKIAlpZiAobXAtPnBvcnRzKQogCQlnb3RvIG91dDsKQEAgLTI3Niw3ICsyNzQsNyBAQAogCQlkZWxfdGltZXIoJnAtPnF1ZXJ5X3RpbWVyKTsKIAkJY2FsbF9yY3VfYmgoJnAtPnJjdSwgYnJfbXVsdGljYXN0X2ZyZWVfcGcpOwogCi0JCWlmICghbXAtPnBvcnRzICYmIGhsaXN0X3VuaGFzaGVkKCZtcC0+bWdsaXN0KSAmJgorCQlpZiAoIW1wLT5wb3J0cyAmJiAhbXAtPm1nbGlzdCAmJgogCQkgICAgbmV0aWZfcnVubmluZyhici0+ZGV2KSkKIAkJCW1vZF90aW1lcigmbXAtPnRpbWVyLCBqaWZmaWVzKTsKIApAQCAtNDM2LDcgKzQzNCw2IEBACiAJZXRoID0gZXRoX2hkcihza2IpOwogCiAJbWVtY3B5KGV0aC0+aF9zb3VyY2UsIGJyLT5kZXYtPmRldl9hZGRyLCA2KTsKLQlpcHY2X2V0aF9tY19tYXAoZ3JvdXAsIGV0aC0+aF9kZXN0KTsKIAlldGgtPmhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTsKIAlza2JfcHV0KHNrYiwgc2l6ZW9mKCpldGgpKTsKIApAQCAtNDQ4LDggKzQ0NSwxMCBAQAogCWlwNmgtPnBheWxvYWRfbGVuID0gaHRvbnMoOCArIHNpemVvZigqbWxkcSkpOwogCWlwNmgtPm5leHRoZHIgPSBJUFBST1RPX0hPUE9QVFM7CiAJaXA2aC0+aG9wX2xpbWl0ID0gMTsKLQlpcHY2X2FkZHJfc2V0KCZpcDZoLT5zYWRkciwgMCwgMCwgMCwgMCk7CisJaXB2Nl9kZXZfZ2V0X3NhZGRyKGRldl9uZXQoYnItPmRldiksIGJyLT5kZXYsICZpcDZoLT5kYWRkciwgMCwKKwkJCSAgICZpcDZoLT5zYWRkcik7CiAJaXB2Nl9hZGRyX3NldCgmaXA2aC0+ZGFkZHIsIGh0b25sKDB4ZmYwMjAwMDApLCAwLCAwLCBodG9ubCgxKSk7CisJaXB2Nl9ldGhfbWNfbWFwKCZpcDZoLT5kYWRkciwgZXRoLT5oX2Rlc3QpOwogCiAJaG9wb3B0ID0gKHU4ICopKGlwNmggKyAxKTsKIAlob3BvcHRbMF0gPSBJUFBST1RPX0lDTVBWNjsJCS8qIG5leHQgaGRyICovCkBAIC01MjgsNyArNTI3LDcgQEAKIAlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBtcC0+YnI7CiAKIAlzcGluX2xvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7Ci0JaWYgKCFuZXRpZl9ydW5uaW5nKGJyLT5kZXYpIHx8IGhsaXN0X3VuaGFzaGVkKCZtcC0+bWdsaXN0KSB8fAorCWlmICghbmV0aWZfcnVubmluZyhici0+ZGV2KSB8fCAhbXAtPm1nbGlzdCB8fAogCSAgICBtcC0+cXVlcmllc19zZW50ID49IGJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfY291bnQpCiAJCWdvdG8gb3V0OwogCkBAIC03MTksNyArNzE4LDcgQEAKIAkJZ290byBlcnI7CiAKIAlpZiAoIXBvcnQpIHsKLQkJaGxpc3RfYWRkX2hlYWQoJm1wLT5tZ2xpc3QsICZici0+bWdsaXN0KTsKKwkJbXAtPm1nbGlzdCA9IHRydWU7CiAJCW1vZF90aW1lcigmbXAtPnRpbWVyLCBub3cgKyBici0+bXVsdGljYXN0X21lbWJlcnNoaXBfaW50ZXJ2YWwpOwogCQlnb3RvIG91dDsKIAl9CkBAIC03ODEsMTEgKzc4MCwxMSBAQAogewogCXN0cnVjdCBicl9pcCBicl9ncm91cDsKIAotCWlmIChpcHY2X2lzX2xvY2FsX211bHRpY2FzdChncm91cCkpCisJaWYgKCFpcHY2X2lzX3RyYW5zaWVudF9tdWx0aWNhc3QoZ3JvdXApKQogCQlyZXR1cm4gMDsKIAogCWlwdjZfYWRkcl9jb3B5KCZicl9ncm91cC51LmlwNiwgZ3JvdXApOwotCWJyX2dyb3VwLnByb3RvID0gaHRvbnMoRVRIX1BfSVApOworCWJyX2dyb3VwLnByb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7CiAKIAlyZXR1cm4gYnJfbXVsdGljYXN0X2FkZF9ncm91cChiciwgcG9ydCwgJmJyX2dyb3VwKTsKIH0KQEAgLTEwMTQsMTggKzEwMTMsMTkgQEAKIAogCQluc3JjcyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsCiAJCQkJCSAgIGxlbiArIG9mZnNldG9mKHN0cnVjdCBtbGQyX2dyZWMsCi0JCQkJCQkJICBncmVjX21jYSksCisJCQkJCQkJICBncmVjX25zcmNzKSwKIAkJCQkJICAgc2l6ZW9mKF9uc3JjcyksICZfbnNyY3MpOwogCQlpZiAoIW5zcmNzKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwKIAkJCQkgICBsZW4gKyBzaXplb2YoKmdyZWMpICsKLQkJCQkgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSAqICgqbnNyY3MpKSkKKwkJCQkgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSAqIG50b2hzKCpuc3JjcykpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJZ3JlYyA9IChzdHJ1Y3QgbWxkMl9ncmVjICopKHNrYi0+ZGF0YSArIGxlbik7Ci0JCWxlbiArPSBzaXplb2YoKmdyZWMpICsgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikgKiAoKm5zcmNzKTsKKwkJbGVuICs9IHNpemVvZigqZ3JlYykgKworCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikgKiBudG9ocygqbnNyY3MpOwogCiAJCS8qIFdlIHRyZWF0IHRoZXNlIGFzIE1MRHYxIHJlcG9ydHMgZm9yIG5vdy4gKi8KIAkJc3dpdGNoIChncmVjLT5ncmVjX3R5cGUpIHsKQEAgLTExNjUsNyArMTE2NSw3IEBACiAKIAltYXhfZGVsYXkgKj0gYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9jb3VudDsKIAotCWlmICghaGxpc3RfdW5oYXNoZWQoJm1wLT5tZ2xpc3QpICYmCisJaWYgKG1wLT5tZ2xpc3QgJiYKIAkgICAgKHRpbWVyX3BlbmRpbmcoJm1wLT50aW1lcikgPwogCSAgICAgdGltZV9hZnRlcihtcC0+dGltZXIuZXhwaXJlcywgbm93ICsgbWF4X2RlbGF5KSA6CiAJICAgICB0cnlfdG9fZGVsX3RpbWVyX3N5bmMoJm1wLT50aW1lcikgPj0gMCkpCkBAIC0xMTc3LDcgKzExNzcsNyBAQAogCQlpZiAodGltZXJfcGVuZGluZygmcC0+dGltZXIpID8KIAkJICAgIHRpbWVfYWZ0ZXIocC0+dGltZXIuZXhwaXJlcywgbm93ICsgbWF4X2RlbGF5KSA6CiAJCSAgICB0cnlfdG9fZGVsX3RpbWVyX3N5bmMoJnAtPnRpbWVyKSA+PSAwKQotCQkJbW9kX3RpbWVyKCZtcC0+dGltZXIsIG5vdyArIG1heF9kZWxheSk7CisJCQltb2RfdGltZXIoJnAtPnRpbWVyLCBub3cgKyBtYXhfZGVsYXkpOwogCX0KIAogb3V0OgpAQCAtMTIzNiw3ICsxMjM2LDcgQEAKIAkJZ290byBvdXQ7CiAKIAltYXhfZGVsYXkgKj0gYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9jb3VudDsKLQlpZiAoIWhsaXN0X3VuaGFzaGVkKCZtcC0+bWdsaXN0KSAmJgorCWlmIChtcC0+bWdsaXN0ICYmCiAJICAgICh0aW1lcl9wZW5kaW5nKCZtcC0+dGltZXIpID8KIAkgICAgIHRpbWVfYWZ0ZXIobXAtPnRpbWVyLmV4cGlyZXMsIG5vdyArIG1heF9kZWxheSkgOgogCSAgICAgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKCZtcC0+dGltZXIpID49IDApKQpAQCAtMTI0OCw3ICsxMjQ4LDcgQEAKIAkJaWYgKHRpbWVyX3BlbmRpbmcoJnAtPnRpbWVyKSA/CiAJCSAgICB0aW1lX2FmdGVyKHAtPnRpbWVyLmV4cGlyZXMsIG5vdyArIG1heF9kZWxheSkgOgogCQkgICAgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKCZwLT50aW1lcikgPj0gMCkKLQkJCW1vZF90aW1lcigmbXAtPnRpbWVyLCBub3cgKyBtYXhfZGVsYXkpOworCQkJbW9kX3RpbWVyKCZwLT50aW1lciwgbm93ICsgbWF4X2RlbGF5KTsKIAl9CiAKIG91dDoKQEAgLTEyODMsNyArMTI4Myw3IEBACiAJCSAgICAgYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9pbnRlcnZhbDsKIAogCWlmICghcG9ydCkgewotCQlpZiAoIWhsaXN0X3VuaGFzaGVkKCZtcC0+bWdsaXN0KSAmJgorCQlpZiAobXAtPm1nbGlzdCAmJgogCQkgICAgKHRpbWVyX3BlbmRpbmcoJm1wLT50aW1lcikgPwogCQkgICAgIHRpbWVfYWZ0ZXIobXAtPnRpbWVyLmV4cGlyZXMsIHRpbWUpIDoKIAkJICAgICB0cnlfdG9fZGVsX3RpbWVyX3N5bmMoJm1wLT50aW1lcikgPj0gMCkpIHsKQEAgLTEzNDEsNyArMTM0MSw3IEBACiB7CiAJc3RydWN0IGJyX2lwIGJyX2dyb3VwOwogCi0JaWYgKGlwdjZfaXNfbG9jYWxfbXVsdGljYXN0KGdyb3VwKSkKKwlpZiAoIWlwdjZfaXNfdHJhbnNpZW50X211bHRpY2FzdChncm91cCkpCiAJCXJldHVybjsKIAogCWlwdjZfYWRkcl9jb3B5KCZicl9ncm91cC51LmlwNiwgZ3JvdXApOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAppbmRleCA4NGFhYzc3Li40ZTFiNjIwIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAorKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaApAQCAtODQsMTMgKzg0LDEzIEBACiBzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkKIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQkJaGxpc3RbMl07Ci0Jc3RydWN0IGhsaXN0X25vZGUJCW1nbGlzdDsKIAlzdHJ1Y3QgbmV0X2JyaWRnZQkJKmJyOwogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgX19yY3UgKnBvcnRzOwogCXN0cnVjdCByY3VfaGVhZAkJCXJjdTsKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJdGltZXI7CiAJc3RydWN0IHRpbWVyX2xpc3QJCXF1ZXJ5X3RpbWVyOwogCXN0cnVjdCBicl9pcAkJCWFkZHI7CisJYm9vbAkJCQltZ2xpc3Q7CiAJdTMyCQkJCXF1ZXJpZXNfc2VudDsKIH07CiAKQEAgLTIzOCw3ICsyMzgsNiBAQAogCXNwaW5sb2NrX3QJCQltdWx0aWNhc3RfbG9jazsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlIF9fcmN1ICptZGI7CiAJc3RydWN0IGhsaXN0X2hlYWQJCXJvdXRlcl9saXN0OwotCXN0cnVjdCBobGlzdF9oZWFkCQltZ2xpc3Q7CiAKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJbXVsdGljYXN0X3JvdXRlcl90aW1lcjsKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJbXVsdGljYXN0X3F1ZXJpZXJfdGltZXI7CmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jZmNuZmcuYyBiL25ldC9jYWlmL2NmY25mZy5jCmluZGV4IDIxZWRlMTQuLmM2NjVkZTcgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NmY25mZy5jCisrKyBiL25ldC9jYWlmL2NmY25mZy5jCkBAIC0xOTEsNiArMTkxLDcgQEAKIAlzdHJ1Y3QgY2ZsYXllciAqc2VydmwgPSBOVUxMOwogCXN0cnVjdCBjZmNuZmdfcGh5aW5mbyAqcGh5aW5mbyA9IE5VTEw7CiAJdTggcGh5aWQgPSAwOworCiAJY2FpZl9hc3NlcnQoYWRhcF9sYXllciAhPSBOVUxMKTsKIAljaGFubmVsX2lkID0gYWRhcF9sYXllci0+aWQ7CiAJaWYgKGFkYXBfbGF5ZXItPmRuID09IE5VTEwgfHwgY2hhbm5lbF9pZCA9PSAwKSB7CkBAIC0xOTksMTYgKzIwMCwxNiBAQAogCQlnb3RvIGVuZDsKIAl9CiAJc2VydmwgPSBjZm11eGxfcmVtb3ZlX3VwbGF5ZXIoY25mZy0+bXV4LCBjaGFubmVsX2lkKTsKLQlpZiAoc2VydmwgPT0gTlVMTCkKLQkJZ290byBlbmQ7Ci0JbGF5ZXJfc2V0X3VwKHNlcnZsLCBOVUxMKTsKLQlyZXQgPSBjZmN0cmxfbGlua2Rvd25fcmVxKGNuZmctPmN0cmwsIGNoYW5uZWxfaWQsIGFkYXBfbGF5ZXIpOwogCWlmIChzZXJ2bCA9PSBOVUxMKSB7CiAJCXByX2VycigiUFJPVE9DT0wgRVJST1IgLSBFcnJvciByZW1vdmluZyBzZXJ2aWNlX2xheWVyIENoYW5uZWxfSWQoJWQpIiwKIAkJICAgICAgIGNoYW5uZWxfaWQpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVuZDsKIAl9CisJbGF5ZXJfc2V0X3VwKHNlcnZsLCBOVUxMKTsKKwlyZXQgPSBjZmN0cmxfbGlua2Rvd25fcmVxKGNuZmctPmN0cmwsIGNoYW5uZWxfaWQsIGFkYXBfbGF5ZXIpOworCWlmIChyZXQpCisJCWdvdG8gZW5kOwogCWNhaWZfYXNzZXJ0KGNoYW5uZWxfaWQgPT0gc2VydmwtPmlkKTsKIAlpZiAoYWRhcF9sYXllci0+ZG4gIT0gTlVMTCkgewogCQlwaHlpZCA9IGNmc3J2bF9nZXRwaHlpZChhZGFwX2xheWVyLT5kbik7CmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jaG5sX25ldC5jIGIvbmV0L2NhaWYvY2hubF9uZXQuYwppbmRleCBmYTlkYWIzLi42MDA4ZDZkIDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jaG5sX25ldC5jCisrKyBiL25ldC9jYWlmL2NobmxfbmV0LmMKQEAgLTM5NCw5ICszOTQsNyBAQAogCXByaXYtPmNvbm5fcmVxLnNvY2thZGRyLnUuZGdtLmNvbm5lY3Rpb25faWQgPSAtMTsKIAlwcml2LT5mbG93ZW5hYmxlZCA9IGZhbHNlOwogCi0JQVNTRVJUX1JUTkwoKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5uZXRtZ210X3dxKTsKLQlsaXN0X2FkZCgmcHJpdi0+bGlzdF9maWVsZCwgJmNobmxfbmV0X2xpc3QpOwogfQogCiAKQEAgLTQ1Myw2ICs0NTEsOCBAQAogCXJldCA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpOwogCWlmIChyZXQpCiAJCXByX3dhcm4oImRldmljZSBydG1sIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCWVsc2UKKwkJbGlzdF9hZGQoJmNhaWZkZXYtPmxpc3RfZmllbGQsICZjaG5sX25ldF9saXN0KTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvY2FuL2JjbS5jIGIvbmV0L2Nhbi9iY20uYwppbmRleCA5ZDVlOGFjLi4wOTJkYzg4IDEwMDY0NAotLS0gYS9uZXQvY2FuL2JjbS5jCisrKyBiL25ldC9jYW4vYmNtLmMKQEAgLTEyNTYsNiArMTI1Niw5IEBACiAJCXN0cnVjdCBzb2NrYWRkcl9jYW4gKmFkZHIgPQogCQkJKHN0cnVjdCBzb2NrYWRkcl9jYW4gKiltc2ctPm1zZ19uYW1lOwogCisJCWlmIChtc2ctPm1zZ19uYW1lbGVuIDwgc2l6ZW9mKCphZGRyKSkKKwkJCXJldHVybiAtRUlOVkFMOworCiAJCWlmIChhZGRyLT5jYW5fZmFtaWx5ICE9IEFGX0NBTikKIAkJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9uZXQvY2FuL3Jhdy5jIGIvbmV0L2Nhbi9yYXcuYwppbmRleCBlODhmNjEwLi44ODNlOWQ3IDEwMDY0NAotLS0gYS9uZXQvY2FuL3Jhdy5jCisrKyBiL25ldC9jYW4vcmF3LmMKQEAgLTY0OSw2ICs2NDksOSBAQAogCQlzdHJ1Y3Qgc29ja2FkZHJfY2FuICphZGRyID0KIAkJCShzdHJ1Y3Qgc29ja2FkZHJfY2FuICopbXNnLT5tc2dfbmFtZTsKIAorCQlpZiAobXNnLT5tc2dfbmFtZWxlbiA8IHNpemVvZigqYWRkcikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwogCQlpZiAoYWRkci0+Y2FuX2ZhbWlseSAhPSBBRl9DQU4pCiAJCQlyZXR1cm4gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXIuYwppbmRleCBkZmY2MzNkLi4zNWIzNmI4IDEwMDY0NAotLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXIuYworKysgYi9uZXQvY2VwaC9tZXNzZW5nZXIuYwpAQCAtMjUyLDggKzI1MiwxMiBAQAogewogCXN0cnVjdCBrdmVjIGlvdiA9IHtidWYsIGxlbn07CiAJc3RydWN0IG1zZ2hkciBtc2cgPSB7IC5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQgfCBNU0dfTk9TSUdOQUwgfTsKKwlpbnQgcjsKIAotCXJldHVybiBrZXJuZWxfcmVjdm1zZyhzb2NrLCAmbXNnLCAmaW92LCAxLCBsZW4sIG1zZy5tc2dfZmxhZ3MpOworCXIgPSBrZXJuZWxfcmVjdm1zZyhzb2NrLCAmbXNnLCAmaW92LCAxLCBsZW4sIG1zZy5tc2dfZmxhZ3MpOworCWlmIChyID09IC1FQUdBSU4pCisJCXIgPSAwOworCXJldHVybiByOwogfQogCiAvKgpAQCAtMjY0LDEzICsyNjgsMTcgQEAKIAkJICAgICBzaXplX3Qga3ZsZW4sIHNpemVfdCBsZW4sIGludCBtb3JlKQogewogCXN0cnVjdCBtc2doZHIgbXNnID0geyAubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlUIHwgTVNHX05PU0lHTkFMIH07CisJaW50IHI7CiAKIAlpZiAobW9yZSkKIAkJbXNnLm1zZ19mbGFncyB8PSBNU0dfTU9SRTsKIAllbHNlCiAJCW1zZy5tc2dfZmxhZ3MgfD0gTVNHX0VPUjsgIC8qIHN1cGVyZmx1b3VzLCBidXQgd2hhdCB0aGUgaGVsbCAqLwogCi0JcmV0dXJuIGtlcm5lbF9zZW5kbXNnKHNvY2ssICZtc2csIGlvdiwga3ZsZW4sIGxlbik7CisJciA9IGtlcm5lbF9zZW5kbXNnKHNvY2ssICZtc2csIGlvdiwga3ZsZW4sIGxlbik7CisJaWYgKHIgPT0gLUVBR0FJTikKKwkJciA9IDA7CisJcmV0dXJuIHI7CiB9CiAKIApAQCAtODQ3LDYgKzg1NSw4IEBACiAJCSAgICAobXNnLT5wYWdlcyB8fCBtc2ctPnBhZ2VsaXN0IHx8IG1zZy0+YmlvIHx8IGluX3RyYWlsKSkKIAkJCWt1bm1hcChwYWdlKTsKIAorCQlpZiAocmV0ID09IC1FQUdBSU4pCisJCQlyZXQgPSAwOwogCQlpZiAocmV0IDw9IDApCiAJCQlnb3RvIG91dDsKIApAQCAtMTczNywxNiArMTc0NywxMiBAQAogCWlmIChjb24tPm91dF9za2lwKSB7CiAJCXJldCA9IHdyaXRlX3BhcnRpYWxfc2tpcChjb24pOwogCQlpZiAocmV0IDw9IDApCi0JCQlnb3RvIGRvbmU7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkb3V0KCJ0cnlfd3JpdGUgd3JpdGVfcGFydGlhbF9za2lwIGVyciAlZFxuIiwgcmV0KTsKLQkJCWdvdG8gZG9uZTsKLQkJfQorCQkJZ290byBvdXQ7CiAJfQogCWlmIChjb24tPm91dF9rdmVjX2xlZnQpIHsKIAkJcmV0ID0gd3JpdGVfcGFydGlhbF9rdmVjKGNvbik7CiAJCWlmIChyZXQgPD0gMCkKLQkJCWdvdG8gZG9uZTsKKwkJCWdvdG8gb3V0OwogCX0KIAogCS8qIG1zZyBwYWdlcz8gKi8KQEAgLTE3NjEsMTEgKzE3NjcsMTEgQEAKIAkJaWYgKHJldCA9PSAxKQogCQkJZ290byBtb3JlX2t2ZWM7ICAvKiB3ZSBuZWVkIHRvIHNlbmQgdGhlIGZvb3RlciwgdG9vISAqLwogCQlpZiAocmV0ID09IDApCi0JCQlnb3RvIGRvbmU7CisJCQlnb3RvIG91dDsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWRvdXQoInRyeV93cml0ZSB3cml0ZV9wYXJ0aWFsX21zZ19wYWdlcyBlcnIgJWRcbiIsCiAJCQkgICAgIHJldCk7Ci0JCQlnb3RvIGRvbmU7CisJCQlnb3RvIG91dDsKIAkJfQogCX0KIApAQCAtMTc4OSwxMCArMTc5NSw5IEBACiAJLyogTm90aGluZyB0byBkbyEgKi8KIAljbGVhcl9iaXQoV1JJVEVfUEVORElORywgJmNvbi0+c3RhdGUpOwogCWRvdXQoInRyeV93cml0ZSBub3RoaW5nIGVsc2UgdG8gd3JpdGUuXG4iKTsKLWRvbmU6CiAJcmV0ID0gMDsKIG91dDoKLQlkb3V0KCJ0cnlfd3JpdGUgZG9uZSBvbiAlcFxuIiwgY29uKTsKKwlkb3V0KCJ0cnlfd3JpdGUgZG9uZSBvbiAlcCByZXQgJWRcbiIsIGNvbiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xODIxLDE5ICsxODI2LDE3IEBACiAJCQlkb3V0KCJ0cnlfcmVhZCBjb25uZWN0aW5nXG4iKTsKIAkJCXJldCA9IHJlYWRfcGFydGlhbF9iYW5uZXIoY29uKTsKIAkJCWlmIChyZXQgPD0gMCkKLQkJCQlnb3RvIGRvbmU7Ci0JCQlpZiAocHJvY2Vzc19iYW5uZXIoY29uKSA8IDApIHsKLQkJCQlyZXQgPSAtMTsKIAkJCQlnb3RvIG91dDsKLQkJCX0KKwkJCXJldCA9IHByb2Nlc3NfYmFubmVyKGNvbik7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dDsKIAkJfQogCQlyZXQgPSByZWFkX3BhcnRpYWxfY29ubmVjdChjb24pOwogCQlpZiAocmV0IDw9IDApCi0JCQlnb3RvIGRvbmU7Ci0JCWlmIChwcm9jZXNzX2Nvbm5lY3QoY29uKSA8IDApIHsKLQkJCXJldCA9IC0xOwogCQkJZ290byBvdXQ7Ci0JCX0KKwkJcmV0ID0gcHJvY2Vzc19jb25uZWN0KGNvbik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CiAJCWdvdG8gbW9yZTsKIAl9CiAKQEAgLTE4NDgsNyArMTg1MSw3IEBACiAJCWRvdXQoInNraXBwaW5nICVkIC8gJWQgYnl0ZXNcbiIsIHNraXAsIC1jb24tPmluX2Jhc2VfcG9zKTsKIAkJcmV0ID0gY2VwaF90Y3BfcmVjdm1zZyhjb24tPnNvY2ssIGJ1Ziwgc2tpcCk7CiAJCWlmIChyZXQgPD0gMCkKLQkJCWdvdG8gZG9uZTsKKwkJCWdvdG8gb3V0OwogCQljb24tPmluX2Jhc2VfcG9zICs9IHJldDsKIAkJaWYgKGNvbi0+aW5fYmFzZV9wb3MpCiAJCQlnb3RvIG1vcmU7CkBAIC0xODU5LDcgKzE4NjIsNyBAQAogCQkgKi8KIAkJcmV0ID0gY2VwaF90Y3BfcmVjdm1zZyhjb24tPnNvY2ssICZjb24tPmluX3RhZywgMSk7CiAJCWlmIChyZXQgPD0gMCkKLQkJCWdvdG8gZG9uZTsKKwkJCWdvdG8gb3V0OwogCQlkb3V0KCJ0cnlfcmVhZCBnb3QgdGFnICVkXG4iLCAoaW50KWNvbi0+aW5fdGFnKTsKIAkJc3dpdGNoIChjb24tPmluX3RhZykgewogCQljYXNlIENFUEhfTVNHUl9UQUdfTVNHOgpAQCAtMTg3MCw3ICsxODczLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIENFUEhfTVNHUl9UQUdfQ0xPU0U6CiAJCQlzZXRfYml0KENMT1NFRCwgJmNvbi0+c3RhdGUpOyAgIC8qIGZpeG1lICovCi0JCQlnb3RvIGRvbmU7CisJCQlnb3RvIG91dDsKIAkJZGVmYXVsdDoKIAkJCWdvdG8gYmFkX3RhZzsKIAkJfQpAQCAtMTg4MiwxMyArMTg4NSwxMiBAQAogCQkJY2FzZSAtRUJBRE1TRzoKIAkJCQljb24tPmVycm9yX21zZyA9ICJiYWQgY3JjIjsKIAkJCQlyZXQgPSAtRUlPOwotCQkJCWdvdG8gb3V0OworCQkJCWJyZWFrOwogCQkJY2FzZSAtRUlPOgogCQkJCWNvbi0+ZXJyb3JfbXNnID0gImlvIGVycm9yIjsKLQkJCQlnb3RvIG91dDsKLQkJCWRlZmF1bHQ6Ci0JCQkJZ290byBkb25lOworCQkJCWJyZWFrOwogCQkJfQorCQkJZ290byBvdXQ7CiAJCX0KIAkJaWYgKGNvbi0+aW5fdGFnID09IENFUEhfTVNHUl9UQUdfUkVBRFkpCiAJCQlnb3RvIG1vcmU7CkBAIC0xODk4LDE1ICsxOTAwLDEzIEBACiAJaWYgKGNvbi0+aW5fdGFnID09IENFUEhfTVNHUl9UQUdfQUNLKSB7CiAJCXJldCA9IHJlYWRfcGFydGlhbF9hY2soY29uKTsKIAkJaWYgKHJldCA8PSAwKQotCQkJZ290byBkb25lOworCQkJZ290byBvdXQ7CiAJCXByb2Nlc3NfYWNrKGNvbik7CiAJCWdvdG8gbW9yZTsKIAl9CiAKLWRvbmU6Ci0JcmV0ID0gMDsKIG91dDoKLQlkb3V0KCJ0cnlfcmVhZCBkb25lIG9uICVwXG4iLCBjb24pOworCWRvdXQoInRyeV9yZWFkIGRvbmUgb24gJXAgcmV0ICVkXG4iLCBjb24sIHJldCk7CiAJcmV0dXJuIHJldDsKIAogYmFkX3RhZzoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggNTQyNzdkZi4uOGFlNjYzMSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTc0OSw3ICs3NDksOCBAQAogICoJQGhhOiBoYXJkd2FyZSBhZGRyZXNzCiAgKgogICoJU2VhcmNoIGZvciBhbiBpbnRlcmZhY2UgYnkgTUFDIGFkZHJlc3MuIFJldHVybnMgTlVMTCBpZiB0aGUgZGV2aWNlCi0gKglpcyBub3QgZm91bmQgb3IgYSBwb2ludGVyIHRvIHRoZSBkZXZpY2UuIFRoZSBjYWxsZXIgbXVzdCBob2xkIFJDVQorICoJaXMgbm90IGZvdW5kIG9yIGEgcG9pbnRlciB0byB0aGUgZGV2aWNlLgorICoJVGhlIGNhbGxlciBtdXN0IGhvbGQgUkNVIG9yIFJUTkwuCiAgKglUaGUgcmV0dXJuZWQgZGV2aWNlIGhhcyBub3QgaGFkIGl0cyByZWYgY291bnQgaW5jcmVhc2VkCiAgKglhbmQgdGhlIGNhbGxlciBtdXN0IHRoZXJlZm9yZSBiZSBjYXJlZnVsIGFib3V0IGxvY2tpbmcKICAqCkBAIC0xMjc5LDEwICsxMjgwLDEzIEBACiAKIHN0YXRpYyBpbnQgX19kZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlpbnQgcmV0dmFsOwogCUxJU1RfSEVBRChzaW5nbGUpOwogCiAJbGlzdF9hZGQoJmRldi0+dW5yZWdfbGlzdCwgJnNpbmdsZSk7Ci0JcmV0dXJuIF9fZGV2X2Nsb3NlX21hbnkoJnNpbmdsZSk7CisJcmV0dmFsID0gX19kZXZfY2xvc2VfbWFueSgmc2luZ2xlKTsKKwlsaXN0X2RlbCgmc2luZ2xlKTsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiBpbnQgZGV2X2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKQEAgLTEzMjQsNyArMTMyOCw3IEBACiAKIAlsaXN0X2FkZCgmZGV2LT51bnJlZ19saXN0LCAmc2luZ2xlKTsKIAlkZXZfY2xvc2VfbWFueSgmc2luZ2xlKTsKLQorCWxpc3RfZGVsKCZzaW5nbGUpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChkZXZfY2xvc2UpOwpAQCAtMjAwMSw3ICsyMDA1LDcgQEAKIAogc3RhdGljIGludCBoYXJtb25pemVfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IHByb3RvY29sLCBpbnQgZmVhdHVyZXMpCiB7Ci0JaWYgKCFjYW5fY2hlY2tzdW1fcHJvdG9jb2wocHJvdG9jb2wsIGZlYXR1cmVzKSkgeworCWlmICghY2FuX2NoZWNrc3VtX3Byb3RvY29sKGZlYXR1cmVzLCBwcm90b2NvbCkpIHsKIAkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfQUxMX0NTVU07CiAJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1NHOwogCX0gZWxzZSBpZiAoaWxsZWdhbF9oaWdoZG1hKHNrYi0+ZGV2LCBza2IpKSB7CkBAIC0yMDIzLDEzICsyMDI3LDEzIEBACiAJCXJldHVybiBoYXJtb25pemVfZmVhdHVyZXMoc2tiLCBwcm90b2NvbCwgZmVhdHVyZXMpOwogCX0KIAotCWZlYXR1cmVzICY9IHNrYi0+ZGV2LT52bGFuX2ZlYXR1cmVzOworCWZlYXR1cmVzICY9IChza2ItPmRldi0+dmxhbl9mZWF0dXJlcyB8IE5FVElGX0ZfSFdfVkxBTl9UWCk7CiAKIAlpZiAocHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfODAyMVEpKSB7CiAJCXJldHVybiBoYXJtb25pemVfZmVhdHVyZXMoc2tiLCBwcm90b2NvbCwgZmVhdHVyZXMpOwogCX0gZWxzZSB7CiAJCWZlYXR1cmVzICY9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hJR0hETUEgfCBORVRJRl9GX0ZSQUdMSVNUIHwKLQkJCQlORVRJRl9GX0dFTl9DU1VNOworCQkJCU5FVElGX0ZfR0VOX0NTVU0gfCBORVRJRl9GX0hXX1ZMQU5fVFg7CiAJCXJldHVybiBoYXJtb25pemVfZmVhdHVyZXMoc2tiLCBwcm90b2NvbCwgZmVhdHVyZXMpOwogCX0KIH0KQEAgLTI1NjIsNyArMjU2Niw4IEBACiAKIAltYXAgPSByY3VfZGVyZWZlcmVuY2UocnhxdWV1ZS0+cnBzX21hcCk7CiAJaWYgKG1hcCkgewotCQlpZiAobWFwLT5sZW4gPT0gMSkgeworCQlpZiAobWFwLT5sZW4gPT0gMSAmJgorCQkgICAgIXJjdV9kZXJlZmVyZW5jZV9yYXcocnhxdWV1ZS0+cnBzX2Zsb3dfdGFibGUpKSB7CiAJCQl0Y3B1ID0gbWFwLT5jcHVzWzBdOwogCQkJaWYgKGNwdV9vbmxpbmUodGNwdSkpCiAJCQkJY3B1ID0gdGNwdTsKQEAgLTM0MjMsNiArMzQyOCw4IEBACiAJX19za2JfcHVsbChza2IsIHNrYl9oZWFkbGVuKHNrYikpOwogCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOIC0gc2tiX2hlYWRyb29tKHNrYikpOwogCXNrYi0+dmxhbl90Y2kgPSAwOworCXNrYi0+ZGV2ID0gbmFwaS0+ZGV2OworCXNrYi0+c2tiX2lpZiA9IDA7CiAKIAluYXBpLT5za2IgPSBza2I7CiB9CkBAIC01MDU5LDYgKzUwNjYsNyBAQAogCiAJbGlzdF9hZGQoJmRldi0+dW5yZWdfbGlzdCwgJnNpbmdsZSk7CiAJcm9sbGJhY2tfcmVnaXN0ZXJlZF9tYW55KCZzaW5nbGUpOworCWxpc3RfZGVsKCZzaW5nbGUpOwogfQogCiB1bnNpZ25lZCBsb25nIG5ldGRldl9maXhfZmVhdHVyZXModW5zaWduZWQgbG9uZyBmZWF0dXJlcywgY29uc3QgY2hhciAqbmFtZSkKQEAgLTU2NTYsMTggKzU2NjQsNiBAQAogCiAJZGV2X25ldF9zZXQoZGV2LCAmaW5pdF9uZXQpOwogCi0JZGV2LT5udW1fdHhfcXVldWVzID0gdHhxczsKLQlkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyA9IHR4cXM7Ci0JaWYgKG5ldGlmX2FsbG9jX25ldGRldl9xdWV1ZXMoZGV2KSkKLQkJZ290byBmcmVlX3BjcHU7Ci0KLSNpZmRlZiBDT05GSUdfUlBTCi0JZGV2LT5udW1fcnhfcXVldWVzID0gcnhxczsKLQlkZXYtPnJlYWxfbnVtX3J4X3F1ZXVlcyA9IHJ4cXM7Ci0JaWYgKG5ldGlmX2FsbG9jX3J4X3F1ZXVlcyhkZXYpKQotCQlnb3RvIGZyZWVfcGNwdTsKLSNlbmRpZgotCiAJZGV2LT5nc29fbWF4X3NpemUgPSBHU09fTUFYX1NJWkU7CiAKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5ldGh0b29sX250dXBsZV9saXN0Lmxpc3QpOwpAQCAtNTY3Nyw5ICs1NjczLDI2IEBACiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+bGlua193YXRjaF9saXN0KTsKIAlkZXYtPnByaXZfZmxhZ3MgPSBJRkZfWE1JVF9EU1RfUkVMRUFTRTsKIAlzZXR1cChkZXYpOworCisJZGV2LT5udW1fdHhfcXVldWVzID0gdHhxczsKKwlkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyA9IHR4cXM7CisJaWYgKG5ldGlmX2FsbG9jX25ldGRldl9xdWV1ZXMoZGV2KSkKKwkJZ290byBmcmVlX2FsbDsKKworI2lmZGVmIENPTkZJR19SUFMKKwlkZXYtPm51bV9yeF9xdWV1ZXMgPSByeHFzOworCWRldi0+cmVhbF9udW1fcnhfcXVldWVzID0gcnhxczsKKwlpZiAobmV0aWZfYWxsb2NfcnhfcXVldWVzKGRldikpCisJCWdvdG8gZnJlZV9hbGw7CisjZW5kaWYKKwogCXN0cmNweShkZXYtPm5hbWUsIG5hbWUpOwogCXJldHVybiBkZXY7CiAKK2ZyZWVfYWxsOgorCWZyZWVfbmV0ZGV2KGRldik7CisJcmV0dXJuIE5VTEw7CisKIGZyZWVfcGNwdToKIAlmcmVlX3BlcmNwdShkZXYtPnBjcHVfcmVmY250KTsKIAlrZnJlZShkZXYtPl90eCk7CkBAIC02MjA3LDYgKzYyMjAsNyBAQAogCQl9CiAJfQogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoJmRldl9raWxsX2xpc3QpOworCWxpc3RfZGVsKCZkZXZfa2lsbF9saXN0KTsKIAlydG5sX3VubG9jaygpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9ldGh0b29sLmMgYi9uZXQvY29yZS9ldGh0b29sLmMKaW5kZXggMTc3NDE3OC4uZmYyMzAyOSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZXRodG9vbC5jCisrKyBiL25ldC9jb3JlL2V0aHRvb2wuYwpAQCAtODE3LDcgKzgxNyw3IEBACiAJaWYgKHJlZ3MubGVuID4gcmVnbGVuKQogCQlyZWdzLmxlbiA9IHJlZ2xlbjsKIAotCXJlZ2J1ZiA9IHZtYWxsb2MocmVnbGVuKTsKKwlyZWdidWYgPSB2emFsbG9jKHJlZ2xlbik7CiAJaWYgKCFyZWdidWYpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IGE1Zjc1MzUuLjJkNjVjNmIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0xMTIxLDggKzExMjEsNyBAQAogCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCQkJaWYgKGFmX29wcy0+dmFsaWRhdGVfbGlua19hZikgewotCQkJCWVyciA9IGFmX29wcy0+dmFsaWRhdGVfbGlua19hZihkZXYsCi0JCQkJCQkJdGJbSUZMQV9BRl9TUEVDXSk7CisJCQkJZXJyID0gYWZfb3BzLT52YWxpZGF0ZV9saW5rX2FmKGRldiwgYWYpOwogCQkJCWlmIChlcnIgPCAwKQogCQkJCQlyZXR1cm4gZXJyOwogCQkJfQpAQCAtMTY3Miw2ICsxNjcxLDkgQEAKIAkJCXNucHJpbnRmKGlmbmFtZSwgSUZOQU1TSVosICIlcyUlZCIsIG9wcy0+a2luZCk7CiAKIAkJZGVzdF9uZXQgPSBydG5sX2xpbmtfZ2V0X25ldChuZXQsIHRiKTsKKwkJaWYgKElTX0VSUihkZXN0X25ldCkpCisJCQlyZXR1cm4gUFRSX0VSUihkZXN0X25ldCk7CisKIAkJZGV2ID0gcnRubF9jcmVhdGVfbGluayhuZXQsIGRlc3RfbmV0LCBpZm5hbWUsIG9wcywgdGIpOwogCiAJCWlmIChJU19FUlIoZGV2KSkKQEAgLTE4MjAsNyArMTgyMiw3IEBACiAJaWYgKGtpbmQgIT0gMiAmJiBzZWN1cml0eV9uZXRsaW5rX3JlY3Yoc2tiLCBDQVBfTkVUX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWlmIChraW5kID09IDIgJiYgKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9EVU1QKSA9PSBOTE1fRl9EVU1QKSB7CisJaWYgKGtpbmQgPT0gMiAmJiBubGgtPm5sbXNnX2ZsYWdzJk5MTV9GX0RVTVApIHsKIAkJc3RydWN0IHNvY2sgKnJ0bmw7CiAJCXJ0bmxfZHVtcGl0X2Z1bmMgZHVtcGl0OwogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IGQzMWJiMzYuLmQ4ODNkY2MgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC0yMTAsNiArMjEwLDcgQEAKIAlzaGluZm8gPSBza2Jfc2hpbmZvKHNrYik7CiAJbWVtc2V0KHNoaW5mbywgMCwgb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbywgZGF0YXJlZikpOwogCWF0b21pY19zZXQoJnNoaW5mby0+ZGF0YXJlZiwgMSk7CisJa21lbWNoZWNrX2Fubm90YXRlX3ZhcmlhYmxlKHNoaW5mby0+ZGVzdHJ1Y3Rvcl9hcmcpOwogCiAJaWYgKGZjbG9uZSkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqY2hpbGQgPSBza2IgKyAxOwpAQCAtMjc0NCw4ICsyNzQ1LDEyIEBACiAKIG1lcmdlOgogCWlmIChvZmZzZXQgPiBoZWFkbGVuKSB7Ci0JCXNrYmluZm8tPmZyYWdzWzBdLnBhZ2Vfb2Zmc2V0ICs9IG9mZnNldCAtIGhlYWRsZW47Ci0JCXNrYmluZm8tPmZyYWdzWzBdLnNpemUgLT0gb2Zmc2V0IC0gaGVhZGxlbjsKKwkJdW5zaWduZWQgaW50IGVhdCA9IG9mZnNldCAtIGhlYWRsZW47CisKKwkJc2tiaW5mby0+ZnJhZ3NbMF0ucGFnZV9vZmZzZXQgKz0gZWF0OworCQlza2JpbmZvLT5mcmFnc1swXS5zaXplIC09IGVhdDsKKwkJc2tiLT5kYXRhX2xlbiAtPSBlYXQ7CisJCXNrYi0+bGVuIC09IGVhdDsKIAkJb2Zmc2V0ID0gaGVhZGxlbjsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9kY2IvZGNibmwuYyBiL25ldC9kY2IvZGNibmwuYwppbmRleCBkOTAwYWI5Li5kNTA3NGE1IDEwMDY0NAotLS0gYS9uZXQvZGNiL2RjYm5sLmMKKysrIGIvbmV0L2RjYi9kY2JubC5jCkBAIC01ODMsNyArNTgzLDcgQEAKIAl1OCB1cCwgaWR0eXBlOwogCWludCByZXQgPSAtRUlOVkFMOwogCi0JaWYgKCF0YltEQ0JfQVRUUl9BUFBdIHx8ICFuZXRkZXYtPmRjYm5sX29wcy0+Z2V0YXBwKQorCWlmICghdGJbRENCX0FUVFJfQVBQXSkKIAkJZ290byBvdXQ7CiAKIAlyZXQgPSBubGFfcGFyc2VfbmVzdGVkKGFwcF90YiwgRENCX0FQUF9BVFRSX01BWCwgdGJbRENCX0FUVFJfQVBQXSwKQEAgLTYwNCw3ICs2MDQsMTYgQEAKIAkJZ290byBvdXQ7CiAKIAlpZCA9IG5sYV9nZXRfdTE2KGFwcF90YltEQ0JfQVBQX0FUVFJfSURdKTsKLQl1cCA9IG5ldGRldi0+ZGNibmxfb3BzLT5nZXRhcHAobmV0ZGV2LCBpZHR5cGUsIGlkKTsKKworCWlmIChuZXRkZXYtPmRjYm5sX29wcy0+Z2V0YXBwKSB7CisJCXVwID0gbmV0ZGV2LT5kY2JubF9vcHMtPmdldGFwcChuZXRkZXYsIGlkdHlwZSwgaWQpOworCX0gZWxzZSB7CisJCXN0cnVjdCBkY2JfYXBwIGFwcCA9IHsKKwkJCQkJLnNlbGVjdG9yID0gaWR0eXBlLAorCQkJCQkucHJvdG9jb2wgPSBpZCwKKwkJCQkgICAgIH07CisJCXVwID0gZGNiX2dldGFwcChuZXRkZXYsICZhcHApOworCX0KIAogCS8qIHNlbmQgdGhpcyBiYWNrICovCiAJZGNibmxfc2tiID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7CkBAIC02MTcsNiArNjI2LDkgQEAKIAlkY2ItPmNtZCA9IERDQl9DTURfR0FQUDsKIAogCWFwcF9uZXN0ID0gbmxhX25lc3Rfc3RhcnQoZGNibmxfc2tiLCBEQ0JfQVRUUl9BUFApOworCWlmICghYXBwX25lc3QpCisJCWdvdG8gb3V0X2NhbmNlbDsKKwogCXJldCA9IG5sYV9wdXRfdTgoZGNibmxfc2tiLCBEQ0JfQVBQX0FUVFJfSURUWVBFLCBpZHR5cGUpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2NhbmNlbDsKQEAgLTE2MDQsNiArMTYxNiwxMCBAQAogdTggZGNiX3NldGFwcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZGNiX2FwcCAqbmV3KQogewogCXN0cnVjdCBkY2JfYXBwX3R5cGUgKml0cjsKKwlzdHJ1Y3QgZGNiX2FwcF90eXBlIGV2ZW50OworCisJbWVtY3B5KCZldmVudC5uYW1lLCBkZXYtPm5hbWUsIHNpemVvZihldmVudC5uYW1lKSk7CisJbWVtY3B5KCZldmVudC5hcHAsIG5ldywgc2l6ZW9mKGV2ZW50LmFwcCkpOwogCiAJc3Bpbl9sb2NrKCZkY2JfbG9jayk7CiAJLyogU2VhcmNoIGZvciBleGlzdGluZyBtYXRjaCBhbmQgcmVwbGFjZSAqLwpAQCAtMTYzNSw3ICsxNjUxLDcgQEAKIAl9CiBvdXQ6CiAJc3Bpbl91bmxvY2soJmRjYl9sb2NrKTsKLQljYWxsX2RjYmV2ZW50X25vdGlmaWVycyhEQ0JfQVBQX0VWRU5ULCBuZXcpOworCWNhbGxfZGNiZXZlbnRfbm90aWZpZXJzKERDQl9BUFBfRVZFTlQsICZldmVudCk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGRjYl9zZXRhcHApOwpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9kc2EuYyBiL25ldC9kc2EvZHNhLmMKaW5kZXggMGM4NzdhNy4uM2ZiMTRiNyAxMDA2NDQKLS0tIGEvbmV0L2RzYS9kc2EuYworKysgYi9uZXQvZHNhL2RzYS5jCkBAIC00MjgsNyArNDI4LDcgQEAKIH0KIG1vZHVsZV9leGl0KGRzYV9jbGVhbnVwX21vZHVsZSk7CiAKLU1PRFVMRV9BVVRIT1IoIkxlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPiIpCitNT0RVTEVfQVVUSE9SKCJMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlIHN3aXRjaCBjaGlwcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpkc2EiKTsKZGlmZiAtLWdpdCBhL25ldC9lY29uZXQvYWZfZWNvbmV0LmMgYi9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCmluZGV4IDE1ZGNjMWEuLjBjMjgyNjMgMTAwNjQ0Ci0tLSBhL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKKysrIGIvbmV0L2Vjb25ldC9hZl9lY29uZXQuYwpAQCAtMjY1LDEzICsyNjUsMTMgQEAKIHN0YXRpYyBpbnQgZWNvbmV0X3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkJICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHNvY2thZGRyX2VjICpzYWRkcj0oc3RydWN0IHNvY2thZGRyX2VjICopbXNnLT5tc2dfbmFtZTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBlY19hZGRyIGFkZHI7CiAJaW50IGVycjsKIAl1bnNpZ25lZCBjaGFyIHBvcnQsIGNiOwogI2lmIGRlZmluZWQoQ09ORklHX0VDT05FVF9BVU5VRFApIHx8IGRlZmluZWQoQ09ORklHX0VDT05FVF9OQVRJVkUpCisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgZWNfY2IgKmViOwogI2VuZGlmCkBAIC00ODgsMTAgKzQ4OCwxMCBAQAogCiBlcnJvcl9mcmVlX2J1ZjoKIAl2ZnJlZSh1c2VyYnVmKTsKK2Vycm9yOgogI2Vsc2UKIAllcnIgPSAtRVBST1RPVFlQRTsKICNlbmRpZgotCWVycm9yOgogCW11dGV4X3VubG9jaygmZWNvbmV0X211dGV4KTsKIAogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hZl9pbmV0LmMgYi9uZXQvaXB2NC9hZl9pbmV0LmMKaW5kZXggZjJiNjExMC4uNDViODlkNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYWZfaW5ldC5jCisrKyBiL25ldC9pcHY0L2FmX2luZXQuYwpAQCAtODgwLDYgKzg4MCwxOSBAQAogfQogRVhQT1JUX1NZTUJPTChpbmV0X2lvY3RsKTsKIAorI2lmZGVmIENPTkZJR19DT01QQVQKK2ludCBpbmV0X2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlpbnQgZXJyID0gLUVOT0lPQ1RMQ01EOworCisJaWYgKHNrLT5za19wcm90LT5jb21wYXRfaW9jdGwpCisJCWVyciA9IHNrLT5za19wcm90LT5jb21wYXRfaW9jdGwoc2ssIGNtZCwgYXJnKTsKKworCXJldHVybiBlcnI7Cit9CisjZW5kaWYKKwogY29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0X3N0cmVhbV9vcHMgPSB7CiAJLmZhbWlseQkJICAgPSBQRl9JTkVULAogCS5vd25lcgkJICAgPSBUSElTX01PRFVMRSwKQEAgLTkwMyw2ICs5MTYsNyBAQAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfc29ja19jb21tb25fc2V0c29ja29wdCwKIAkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfc29ja19jb21tb25fZ2V0c29ja29wdCwKKwkuY29tcGF0X2lvY3RsCSAgID0gaW5ldF9jb21wYXRfaW9jdGwsCiAjZW5kaWYKIH07CiBFWFBPUlRfU1lNQk9MKGluZXRfc3RyZWFtX29wcyk7CkBAIC05MjksNiArOTQzLDcgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX3NldHNvY2tvcHQsCiAJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX2dldHNvY2tvcHQsCisJLmNvbXBhdF9pb2N0bAkgICA9IGluZXRfY29tcGF0X2lvY3RsLAogI2VuZGlmCiB9OwogRVhQT1JUX1NZTUJPTChpbmV0X2RncmFtX29wcyk7CkBAIC05NTksNiArOTc0LDcgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX3NldHNvY2tvcHQsCiAJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX2dldHNvY2tvcHQsCisJLmNvbXBhdF9pb2N0bAkgICA9IGluZXRfY29tcGF0X2lvY3RsLAogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hcnAuYyBiL25ldC9pcHY0L2FycC5jCmluZGV4IDA0YzhiNjkuLjc5Mjc1ODkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FycC5jCisrKyBiL25ldC9pcHY0L2FycC5jCkBAIC0xMDE3LDE0ICsxMDE3LDEzIEBACiAJCUlQVjRfREVWQ09ORl9BTEwobmV0LCBQUk9YWV9BUlApID0gb247CiAJCXJldHVybiAwOwogCX0KLQlpZiAoX19pbl9kZXZfZ2V0X3JjdShkZXYpKSB7Ci0JCUlOX0RFVl9DT05GX1NFVChfX2luX2Rldl9nZXRfcmN1KGRldiksIFBST1hZX0FSUCwgb24pOworCWlmIChfX2luX2Rldl9nZXRfcnRubChkZXYpKSB7CisJCUlOX0RFVl9DT05GX1NFVChfX2luX2Rldl9nZXRfcnRubChkZXYpLCBQUk9YWV9BUlAsIG9uKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRU5YSU87CiB9CiAKLS8qIG11c3QgYmUgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpICovCiBzdGF0aWMgaW50IGFycF9yZXFfc2V0X3B1YmxpYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBhcnByZXEgKnIsCiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xMjMzLDEwICsxMjMyLDEwIEBACiAJaWYgKCEoci5hcnBfZmxhZ3MgJiBBVEZfTkVUTUFTSykpCiAJCSgoc3RydWN0IHNvY2thZGRyX2luICopJnIuYXJwX25ldG1hc2spLT5zaW5fYWRkci5zX2FkZHIgPQogCQkJCQkJCSAgIGh0b25sKDB4RkZGRkZGRkZVTCk7Ci0JcmN1X3JlYWRfbG9jaygpOworCXJ0bmxfbG9jaygpOwogCWlmIChyLmFycF9kZXZbMF0pIHsKIAkJZXJyID0gLUVOT0RFVjsKLQkJZGV2ID0gZGV2X2dldF9ieV9uYW1lX3JjdShuZXQsIHIuYXJwX2Rldik7CisJCWRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgci5hcnBfZGV2KTsKIAkJaWYgKGRldiA9PSBOVUxMKQogCQkJZ290byBvdXQ7CiAKQEAgLTEyNjMsNyArMTI2Miw3IEBACiAJCWJyZWFrOwogCX0KIG91dDoKLQlyY3VfcmVhZF91bmxvY2soKTsKKwlydG5sX3VubG9jaygpOwogCWlmIChjbWQgPT0gU0lPQ0dBUlAgJiYgIWVyciAmJiBjb3B5X3RvX3VzZXIoYXJnLCAmciwgc2l6ZW9mKHIpKSkKIAkJZXJyID0gLUVGQVVMVDsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZGV2aW5ldC5jIGIvbmV0L2lwdjQvZGV2aW5ldC5jCmluZGV4IDc0OGNiNWIuLmRmNDYxNmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2RldmluZXQuYworKysgYi9uZXQvaXB2NC9kZXZpbmV0LmMKQEAgLTEwMzAsNiArMTAzMCwyMSBAQAogCXJldHVybiBtdHUgPj0gNjg7CiB9CiAKK3N0YXRpYyB2b2lkIGluZXRkZXZfc2VuZF9ncmF0dWl0b3VzX2FycChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpCisKK3sKKwlzdHJ1Y3QgaW5faWZhZGRyICppZmEgPSBpbl9kZXYtPmlmYV9saXN0OworCisJaWYgKCFpZmEpCisJCXJldHVybjsKKworCWFycF9zZW5kKEFSUE9QX1JFUVVFU1QsIEVUSF9QX0FSUCwKKwkJIGlmYS0+aWZhX2FkZHJlc3MsIGRldiwKKwkJIGlmYS0+aWZhX2FkZHJlc3MsIE5VTEwsCisJCSBkZXYtPmRldl9hZGRyLCBOVUxMKTsKK30KKwogLyogQ2FsbGVkIG9ubHkgdW5kZXIgUlROTCBzZW1hcGhvcmUgKi8KIAogc3RhdGljIGludCBpbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwKQEAgLTEwODIsMTggKzEwOTcsMTMgQEAKIAkJfQogCQlpcF9tY191cChpbl9kZXYpOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIE5FVERFVl9OT1RJRllfUEVFUlM6CiAJY2FzZSBORVRERVZfQ0hBTkdFQUREUjoKKwkJaWYgKCFJTl9ERVZfQVJQX05PVElGWShpbl9kZXYpKQorCQkJYnJlYWs7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgTkVUREVWX05PVElGWV9QRUVSUzoKIAkJLyogU2VuZCBncmF0dWl0b3VzIEFSUCB0byBub3RpZnkgb2YgbGluayBjaGFuZ2UgKi8KLQkJaWYgKElOX0RFVl9BUlBfTk9USUZZKGluX2RldikpIHsKLQkJCXN0cnVjdCBpbl9pZmFkZHIgKmlmYSA9IGluX2Rldi0+aWZhX2xpc3Q7Ci0KLQkJCWlmIChpZmEpCi0JCQkJYXJwX3NlbmQoQVJQT1BfUkVRVUVTVCwgRVRIX1BfQVJQLAotCQkJCQkgaWZhLT5pZmFfYWRkcmVzcywgZGV2LAotCQkJCQkgaWZhLT5pZmFfYWRkcmVzcywgTlVMTCwKLQkJCQkJIGRldi0+ZGV2X2FkZHIsIE5VTEwpOwotCQl9CisJCWluZXRkZXZfc2VuZF9ncmF0dWl0b3VzX2FycChkZXYsIGluX2Rldik7CiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX0RPV046CiAJCWlwX21jX2Rvd24oaW5fZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfZGlhZy5jIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKaW5kZXggMjc0NmMxZi4uMmFkYTE3MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKQEAgLTg1OCw3ICs4NTgsNyBAQAogCSAgICBubG1zZ19sZW4obmxoKSA8IGhkcmxlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9EVU1QKSA9PSBOTE1fRl9EVU1QKSB7CisJaWYgKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9EVU1QKSB7CiAJCWlmIChubG1zZ19hdHRybGVuKG5saCwgaGRybGVuKSkgewogCQkJc3RydWN0IG5sYXR0ciAqYXR0cjsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYwppbmRleCBjNWFmOTA5Li4zYzhkZmExIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYwpAQCAtNTA1LDcgKzUwNSw5IEBACiAJCQl9CiAKIAkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJbG9jYWxfYmhfZGlzYWJsZSgpOwogCQkJaW5ldF90d3NrX2Rlc2NoZWR1bGUodHcsIHR3ZHIpOworCQkJbG9jYWxfYmhfZW5hYmxlKCk7CiAJCQlpbmV0X3R3c2tfcHV0KHR3KTsKIAkJCWdvdG8gcmVzdGFydF9yY3U7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRwZWVyLmMgYi9uZXQvaXB2NC9pbmV0cGVlci5jCmluZGV4IGQ5YmM4NTcuLmE5NmU2NTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRwZWVyLmMKKysrIGIvbmV0L2lwdjQvaW5ldHBlZXIuYwpAQCAtNDc1LDcgKzQ3NSw3IEBACiBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLCBpbnQgY3JlYXRlKQogewogCXN0cnVjdCBpbmV0X3BlZXIgX19yY3UgKipzdGFja1tQRUVSX01BWERFUFRIXSwgKioqc3RhY2twdHI7Ci0Jc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlID0gZmFtaWx5X3RvX2Jhc2UoQUZfSU5FVCk7CisJc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlID0gZmFtaWx5X3RvX2Jhc2UoZGFkZHItPmZhbWlseSk7CiAJc3RydWN0IGluZXRfcGVlciAqcDsKIAogCS8qIExvb2sgdXAgZm9yIHRoZSBhZGRyZXNzIHF1aWNrbHksIGxvY2tsZXNzLgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuYwppbmRleCBlYjY4YTBlLi42NjEzZWRmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9ncmUuYworKysgYi9uZXQvaXB2NC9pcF9ncmUuYwpAQCAtNzc1LDYgKzc3NSw3IEBACiAJCQkuZmw0X2RzdCA9IGRzdCwKIAkJCS5mbDRfc3JjID0gdGlwaC0+c2FkZHIsCiAJCQkuZmw0X3RvcyA9IFJUX1RPUyh0b3MpLAorCQkJLnByb3RvID0gSVBQUk9UT19HUkUsCiAJCQkuZmxfZ3JlX2tleSA9IHR1bm5lbC0+cGFybXMub19rZXkKIAkJfTsKIAkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoZGV2X25ldChkZXYpLCAmcnQsICZmbCkpIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuYwppbmRleCAzZjNhOWFmLi44YjY1YTEyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yLmMKKysrIGIvbmV0L2lwdjQvaXBtci5jCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPG5ldC9pcGlwLmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KQEAgLTE0MzQsNiArMTQzNSw4MSBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCBjb21wYXRfc2lvY19zZ19yZXEgeworCXN0cnVjdCBpbl9hZGRyIHNyYzsKKwlzdHJ1Y3QgaW5fYWRkciBncnA7CisJY29tcGF0X3Vsb25nX3QgcGt0Y250OworCWNvbXBhdF91bG9uZ190IGJ5dGVjbnQ7CisJY29tcGF0X3Vsb25nX3Qgd3JvbmdfaWY7Cit9OworCitzdHJ1Y3QgY29tcGF0X3Npb2NfdmlmX3JlcSB7CisJdmlmaV90CXZpZmk7CQkvKiBXaGljaCBpZmFjZSAqLworCWNvbXBhdF91bG9uZ190IGljb3VudDsKKwljb21wYXRfdWxvbmdfdCBvY291bnQ7CisJY29tcGF0X3Vsb25nX3QgaWJ5dGVzOworCWNvbXBhdF91bG9uZ190IG9ieXRlczsKK307CisKK2ludCBpcG1yX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IGNvbXBhdF9zaW9jX3NnX3JlcSBzcjsKKwlzdHJ1Y3QgY29tcGF0X3Npb2NfdmlmX3JlcSB2cjsKKwlzdHJ1Y3QgdmlmX2RldmljZSAqdmlmOworCXN0cnVjdCBtZmNfY2FjaGUgKmM7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOworCXN0cnVjdCBtcl90YWJsZSAqbXJ0OworCisJbXJ0ID0gaXBtcl9nZXRfdGFibGUobmV0LCByYXdfc2soc2spLT5pcG1yX3RhYmxlID8gOiBSVF9UQUJMRV9ERUZBVUxUKTsKKwlpZiAobXJ0ID09IE5VTEwpCisJCXJldHVybiAtRU5PRU5UOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NHRVRWSUZDTlQ6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdnIsIGFyZywgc2l6ZW9mKHZyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHZyLnZpZmkgPj0gbXJ0LT5tYXh2aWYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmVhZF9sb2NrKCZtcnRfbG9jayk7CisJCXZpZiA9ICZtcnQtPnZpZl90YWJsZVt2ci52aWZpXTsKKwkJaWYgKFZJRl9FWElTVFMobXJ0LCB2ci52aWZpKSkgeworCQkJdnIuaWNvdW50ID0gdmlmLT5wa3RfaW47CisJCQl2ci5vY291bnQgPSB2aWYtPnBrdF9vdXQ7CisJCQl2ci5pYnl0ZXMgPSB2aWYtPmJ5dGVzX2luOworCQkJdnIub2J5dGVzID0gdmlmLT5ieXRlc19vdXQ7CisJCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOworCisJCQlpZiAoY29weV90b191c2VyKGFyZywgJnZyLCBzaXplb2YodnIpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCQl9CisJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwljYXNlIFNJT0NHRVRTR0NOVDoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZzciwgYXJnLCBzaXplb2Yoc3IpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJjdV9yZWFkX2xvY2soKTsKKwkJYyA9IGlwbXJfY2FjaGVfZmluZChtcnQsIHNyLnNyYy5zX2FkZHIsIHNyLmdycC5zX2FkZHIpOworCQlpZiAoYykgeworCQkJc3IucGt0Y250ID0gYy0+bWZjX3VuLnJlcy5wa3Q7CisJCQlzci5ieXRlY250ID0gYy0+bWZjX3VuLnJlcy5ieXRlczsKKwkJCXNyLndyb25nX2lmID0gYy0+bWZjX3VuLnJlcy53cm9uZ19pZjsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCisJCQlpZiAoY29weV90b191c2VyKGFyZywgJnNyLCBzaXplb2Yoc3IpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9Cit9CisjZW5kaWYKKwogCiBzdGF0aWMgaW50IGlwbXJfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQogewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRfbWFuZ2xlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdF9tYW5nbGUuYwppbmRleCBiOGRkY2M0Li5hNWU1MmE5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdF9tYW5nbGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdF9tYW5nbGUuYwpAQCAtNjAsMTIgKzYwLDEyIEBACiAKIAlpZiAobWFuZ2xlLT5mbGFncyAmIH5BUlBUX01BTkdMRV9NQVNLIHx8CiAJICAgICEobWFuZ2xlLT5mbGFncyAmIEFSUFRfTUFOR0xFX01BU0spKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKG1hbmdsZS0+dGFyZ2V0ICE9IE5GX0RST1AgJiYgbWFuZ2xlLT50YXJnZXQgIT0gTkZfQUNDRVBUICYmCiAJICAgbWFuZ2xlLT50YXJnZXQgIT0gWFRfQ09OVElOVUUpCi0JCXJldHVybiBmYWxzZTsKLQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGFycHRfbWFuZ2xlX3JlZyBfX3JlYWRfbW9zdGx5ID0gewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcmF3LmMgYi9uZXQvaXB2NC9yYXcuYwppbmRleCBhM2Q1YWI3Li42MzkwYmEyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yYXcuYworKysgYi9uZXQvaXB2NC9yYXcuYwpAQCAtNzYsNiArNzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KIAogc3RhdGljIHN0cnVjdCByYXdfaGFzaGluZm8gcmF3X3Y0X2hhc2hpbmZvID0gewogCS5sb2NrID0gX19SV19MT0NLX1VOTE9DS0VEKHJhd192NF9oYXNoaW5mby5sb2NrKSwKQEAgLTgzOCw2ICs4MzksMjMgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgaW50IGNvbXBhdF9yYXdfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ09VVFE6CisJY2FzZSBTSU9DSU5ROgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCWRlZmF1bHQ6CisjaWZkZWYgQ09ORklHX0lQX01ST1VURQorCQlyZXR1cm4gaXBtcl9jb21wYXRfaW9jdGwoc2ssIGNtZCwgY29tcGF0X3B0cihhcmcpKTsKKyNlbHNlCisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisjZW5kaWYKKwl9Cit9CisjZW5kaWYKKwogc3RydWN0IHByb3RvIHJhd19wcm90ID0gewogCS5uYW1lCQkgICA9ICJSQVciLAogCS5vd25lcgkJICAgPSBUSElTX01PRFVMRSwKQEAgLTg2MCw2ICs4NzgsNyBAQAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfcmF3X3NldHNvY2tvcHQsCiAJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3Jhd19nZXRzb2Nrb3B0LAorCS5jb21wYXRfaW9jdGwJICAgPSBjb21wYXRfcmF3X2lvY3RsLAogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCAzNTFkYzRlLi42ZWQ2NjAzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTI3MDcsNiArMjcwNywxMSBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfYmxhY2tob2xlX2RlZmF1bHRfbXR1KGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgaXB2NF9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgbXR1KQogewogfQpAQCAtMjcxNiw2ICsyNzIxLDggQEAKIAkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5kZXN0cm95CQk9CWlwdjRfZHN0X2Rlc3Ryb3ksCiAJLmNoZWNrCQkJPQlpcHY0X2JsYWNraG9sZV9kc3RfY2hlY2ssCisJLmRlZmF1bHRfbXR1CQk9CWlwdjRfYmxhY2tob2xlX2RlZmF1bHRfbXR1LAorCS5kZWZhdWx0X2Fkdm1zcwkJPQlpcHY0X2RlZmF1bHRfYWR2bXNzLAogCS51cGRhdGVfcG10dQkJPQlpcHY0X3J0X2JsYWNraG9sZV91cGRhdGVfcG10dSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggMjU0OWIyOS4uNjVmNmMwNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTEyMjIsNyArMTIyMiw3IEBACiAJfQogCiAJLyogRC1TQUNLIGZvciBhbHJlYWR5IGZvcmdvdHRlbiBkYXRhLi4uIERvIGR1bWIgY291bnRpbmcuICovCi0JaWYgKGR1cF9zYWNrICYmCisJaWYgKGR1cF9zYWNrICYmIHRwLT51bmRvX21hcmtlciAmJiB0cC0+dW5kb19yZXRyYW5zICYmCiAJICAgICFhZnRlcihlbmRfc2VxXzAsIHByaW9yX3NuZF91bmEpICYmCiAJICAgIGFmdGVyKGVuZF9zZXFfMCwgdHAtPnVuZG9fbWFya2VyKSkKIAkJdHAtPnVuZG9fcmV0cmFucy0tOwpAQCAtMTI5OSw3ICsxMjk5LDggQEAKIAogCS8qIEFjY291bnQgRC1TQUNLIGZvciByZXRyYW5zbWl0dGVkIHBhY2tldC4gKi8KIAlpZiAoZHVwX3NhY2sgJiYgKHNhY2tlZCAmIFRDUENCX1JFVFJBTlMpKSB7Ci0JCWlmIChhZnRlcihUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEsIHRwLT51bmRvX21hcmtlcikpCisJCWlmICh0cC0+dW5kb19tYXJrZXIgJiYgdHAtPnVuZG9fcmV0cmFucyAmJgorCQkgICAgYWZ0ZXIoVENQX1NLQl9DQihza2IpLT5lbmRfc2VxLCB0cC0+dW5kb19tYXJrZXIpKQogCQkJdHAtPnVuZG9fcmV0cmFucy0tOwogCQlpZiAoc2Fja2VkICYgVENQQ0JfU0FDS0VEX0FDS0VEKQogCQkJc3RhdGUtPnJlb3JkID0gbWluKGZhY2tfY291bnQsIHN0YXRlLT5yZW9yZCk7CkBAIC00Mzk5LDcgKzQ0MDAsNyBAQAogCQkJaWYgKCFza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhza2IsIDAsIHRwLT51Y29weS5pb3YsIGNodW5rKSkgewogCQkJCXRwLT51Y29weS5sZW4gLT0gY2h1bms7CiAJCQkJdHAtPmNvcGllZF9zZXEgKz0gY2h1bms7Ci0JCQkJZWF0ZW4gPSAoY2h1bmsgPT0gc2tiLT5sZW4gJiYgIXRoLT5maW4pOworCQkJCWVhdGVuID0gKGNodW5rID09IHNrYi0+bGVuKTsKIAkJCQl0Y3BfcmN2X3NwYWNlX2FkanVzdChzayk7CiAJCQl9CiAJCQlsb2NhbF9iaF9kaXNhYmxlKCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCA4NTZmNjg0Li4wMmY1ODNiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTE5OTQsNyArMTk5NCw2IEBACiAJCQkJfQogCQkJCXJlcSA9IHJlcS0+ZGxfbmV4dDsKIAkJCX0KLQkJCXN0LT5vZmZzZXQgPSAwOwogCQkJaWYgKCsrc3QtPnNidWNrZXQgPj0gaWNzay0+aWNza19hY2NlcHRfcXVldWUubGlzdGVuX29wdC0+bnJfdGFibGVfZW50cmllcykKIAkJCQlicmVhazsKIGdldF9yZXE6CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggNDA2ZjMyMC4uZGZhNWJlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtMjE2Miw3ICsyMTYyLDcgQEAKIAkJaWYgKCF0cC0+cmV0cmFuc19zdGFtcCkKIAkJCXRwLT5yZXRyYW5zX3N0YW1wID0gVENQX1NLQl9DQihza2IpLT53aGVuOwogCi0JCXRwLT51bmRvX3JldHJhbnMrKzsKKwkJdHAtPnVuZG9fcmV0cmFucyArPSB0Y3Bfc2tiX3Bjb3VudChza2IpOwogCiAJCS8qIHNuZF9ueHQgaXMgc3RvcmVkIHRvIGRldGVjdCBsb3NzIG9mIHJldHJhbnNtaXR0ZWQgc2VnbWVudCwKIAkJICogc2VlIHRjcF9pbnB1dC5jIHRjcF9zYWNrdGFnX3dyaXRlX3F1ZXVlKCkuCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwppbmRleCA1YjE4OWM5Li5mZDY3ODJlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jCisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmMKQEAgLTQyMCw5ICs0MjAsNiBAQAogCSAgICBkZXYtPnR5cGUgPT0gQVJQSFJEX1RVTk5FTDYgfHwKIAkgICAgZGV2LT50eXBlID09IEFSUEhSRF9TSVQgfHwKIAkgICAgZGV2LT50eXBlID09IEFSUEhSRF9OT05FKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICIlczogRGlzYWJsZWQgUHJpdmFjeSBFeHRlbnNpb25zXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJbmRldi0+Y25mLnVzZV90ZW1wYWRkciA9IC0xOwogCX0gZWxzZSB7CiAJCWluNl9kZXZfaG9sZChuZGV2KTsKQEAgLTI2NjQsMTQgKzI2NjEsMTIgQEAKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZmE7Ci0JTElTVF9IRUFEKGtlZXBfbGlzdCk7Ci0JaW50IHN0YXRlOworCWludCBzdGF0ZSwgaTsKIAogCUFTU0VSVF9SVE5MKCk7CiAKLQkvKiBGbHVzaCByb3V0ZXMgaWYgZGV2aWNlIGlzIGJlaW5nIHJlbW92ZWQgb3IgaXQgaXMgbm90IGxvb3BiYWNrICovCi0JaWYgKGhvdyB8fCAhKGRldi0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spKQotCQlydDZfaWZkb3duKG5ldCwgZGV2KTsKKwlydDZfaWZkb3duKG5ldCwgZGV2KTsKKwluZWlnaF9pZmRvd24oJm5kX3RibCwgZGV2KTsKIAogCWlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7CiAJaWYgKGlkZXYgPT0gTlVMTCkKQEAgLTI2OTIsNiArMjY4NywyMyBAQAogCiAJfQogCisJLyogU3RlcCAyOiBjbGVhciBoYXNoIHRhYmxlICovCisJZm9yIChpID0gMDsgaSA8IElONl9BRERSX0hTSVpFOyBpKyspIHsKKwkJc3RydWN0IGhsaXN0X2hlYWQgKmggPSAmaW5ldDZfYWRkcl9sc3RbaV07CisJCXN0cnVjdCBobGlzdF9ub2RlICpuOworCisJCXNwaW5fbG9ja19iaCgmYWRkcmNvbmZfaGFzaF9sb2NrKTsKKwlyZXN0YXJ0OgorCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaWZhLCBuLCBoLCBhZGRyX2xzdCkgeworCQkJaWYgKGlmYS0+aWRldiA9PSBpZGV2KSB7CisJCQkJaGxpc3RfZGVsX2luaXRfcmN1KCZpZmEtPmFkZHJfbHN0KTsKKwkJCQlhZGRyY29uZl9kZWxfdGltZXIoaWZhKTsKKwkJCQlnb3RvIHJlc3RhcnQ7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2tfYmgoJmFkZHJjb25mX2hhc2hfbG9jayk7CisJfQorCiAJd3JpdGVfbG9ja19iaCgmaWRldi0+bG9jayk7CiAKIAkvKiBTdGVwIDI6IGNsZWFyIGZsYWdzIGZvciBzdGF0ZWxlc3MgYWRkcmNvbmYgKi8KQEAgLTI3MjUsNTIgKzI3MzcsMjMgQEAKIAkJCQkgICAgICAgc3RydWN0IGluZXQ2X2lmYWRkciwgaWZfbGlzdCk7CiAJCWFkZHJjb25mX2RlbF90aW1lcihpZmEpOwogCi0JCS8qIElmIGp1c3QgZG9pbmcgbGluayBkb3duLCBhbmQgYWRkcmVzcyBpcyBwZXJtYW5lbnQKLQkJICAgYW5kIG5vdCBsaW5rLWxvY2FsLCB0aGVuIHJldGFpbiBpdC4gKi8KLQkJaWYgKCFob3cgJiYKLQkJICAgIChpZmEtPmZsYWdzJklGQV9GX1BFUk1BTkVOVCkgJiYKLQkJICAgICEoaXB2Nl9hZGRyX3R5cGUoJmlmYS0+YWRkcikgJiBJUFY2X0FERFJfTElOS0xPQ0FMKSkgewotCQkJbGlzdF9tb3ZlX3RhaWwoJmlmYS0+aWZfbGlzdCwgJmtlZXBfbGlzdCk7CisJCWxpc3RfZGVsKCZpZmEtPmlmX2xpc3QpOwogCi0JCQkvKiBJZiBub3QgZG9pbmcgREFEIG9uIHRoaXMgYWRkcmVzcywganVzdCBrZWVwIGl0LiAqLwotCQkJaWYgKChkZXYtPmZsYWdzJihJRkZfTk9BUlB8SUZGX0xPT1BCQUNLKSkgfHwKLQkJCSAgICBpZGV2LT5jbmYuYWNjZXB0X2RhZCA8PSAwIHx8Ci0JCQkgICAgKGlmYS0+ZmxhZ3MgJiBJRkFfRl9OT0RBRCkpCi0JCQkJY29udGludWU7CisJCXdyaXRlX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAKLQkJCS8qIElmIGl0IHdhcyB0ZW50YXRpdmUgYWxyZWFkeSwgbm8gbmVlZCB0byBub3RpZnkgKi8KLQkJCWlmIChpZmEtPmZsYWdzICYgSUZBX0ZfVEVOVEFUSVZFKQotCQkJCWNvbnRpbnVlOworCQlzcGluX2xvY2tfYmgoJmlmYS0+c3RhdGVfbG9jayk7CisJCXN0YXRlID0gaWZhLT5zdGF0ZTsKKwkJaWZhLT5zdGF0ZSA9IElORVQ2X0lGQUREUl9TVEFURV9ERUFEOworCQlzcGluX3VubG9ja19iaCgmaWZhLT5zdGF0ZV9sb2NrKTsKIAotCQkJLyogRmxhZyBpdCBmb3IgbGF0ZXIgcmVzdG9yYXRpb24gd2hlbiBsaW5rIGNvbWVzIHVwICovCi0JCQlpZmEtPmZsYWdzIHw9IElGQV9GX1RFTlRBVElWRTsKLQkJCWlmYS0+c3RhdGUgPSBJTkVUNl9JRkFERFJfU1RBVEVfREFEOwotCQl9IGVsc2UgewotCQkJbGlzdF9kZWwoJmlmYS0+aWZfbGlzdCk7Ci0KLQkJCS8qIGNsZWFyIGhhc2ggdGFibGUgKi8KLQkJCXNwaW5fbG9ja19iaCgmYWRkcmNvbmZfaGFzaF9sb2NrKTsKLQkJCWhsaXN0X2RlbF9pbml0X3JjdSgmaWZhLT5hZGRyX2xzdCk7Ci0JCQlzcGluX3VubG9ja19iaCgmYWRkcmNvbmZfaGFzaF9sb2NrKTsKLQotCQkJd3JpdGVfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKLQkJCXNwaW5fbG9ja19iaCgmaWZhLT5zdGF0ZV9sb2NrKTsKLQkJCXN0YXRlID0gaWZhLT5zdGF0ZTsKLQkJCWlmYS0+c3RhdGUgPSBJTkVUNl9JRkFERFJfU1RBVEVfREVBRDsKLQkJCXNwaW5fdW5sb2NrX2JoKCZpZmEtPnN0YXRlX2xvY2spOwotCi0JCQlpZiAoc3RhdGUgIT0gSU5FVDZfSUZBRERSX1NUQVRFX0RFQUQpIHsKLQkJCQlfX2lwdjZfaWZhX25vdGlmeShSVE1fREVMQUREUiwgaWZhKTsKLQkJCQlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmaW5ldDZhZGRyX2NoYWluLAotCQkJCQkJCSAgIE5FVERFVl9ET1dOLCBpZmEpOwotCQkJfQotCi0JCQlpbjZfaWZhX3B1dChpZmEpOwotCQkJd3JpdGVfbG9ja19iaCgmaWRldi0+bG9jayk7CisJCWlmIChzdGF0ZSAhPSBJTkVUNl9JRkFERFJfU1RBVEVfREVBRCkgeworCQkJX19pcHY2X2lmYV9ub3RpZnkoUlRNX0RFTEFERFIsIGlmYSk7CisJCQlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmaW5ldDZhZGRyX2NoYWluLCBORVRERVZfRE9XTiwgaWZhKTsKIAkJfQotCX0KKwkJaW42X2lmYV9wdXQoaWZhKTsKIAotCWxpc3Rfc3BsaWNlKCZrZWVwX2xpc3QsICZpZGV2LT5hZGRyX2xpc3QpOworCQl3cml0ZV9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKKwl9CiAKIAl3cml0ZV91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwogCkBAIC00MTU5LDggKzQxNDIsNyBAQAogCQlhZGRyY29uZl9sZWF2ZV9zb2xpY3QoaWZwLT5pZGV2LCAmaWZwLT5hZGRyKTsKIAkJZHN0X2hvbGQoJmlmcC0+cnQtPmRzdCk7CiAKLQkJaWYgKGlmcC0+c3RhdGUgPT0gSU5FVDZfSUZBRERSX1NUQVRFX0RFQUQgJiYKLQkJICAgIGlwNl9kZWxfcnQoaWZwLT5ydCkpCisJCWlmIChpcDZfZGVsX3J0KGlmcC0+cnQpKQogCQkJZHN0X2ZyZWUoJmlmcC0+cnQtPmRzdCk7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jCmluZGV4IDlmYWIyNzQuLjBlMWQ1M2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNm1yLmMKKysrIGIvbmV0L2lwdjYvaXA2bXIuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgpAQCAtMTgwNCw2ICsxODA1LDgwIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RydWN0IGNvbXBhdF9zaW9jX3NnX3JlcTYgeworCXN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgZ3JwOworCWNvbXBhdF91bG9uZ190IHBrdGNudDsKKwljb21wYXRfdWxvbmdfdCBieXRlY250OworCWNvbXBhdF91bG9uZ190IHdyb25nX2lmOworfTsKKworc3RydWN0IGNvbXBhdF9zaW9jX21pZl9yZXE2IHsKKwltaWZpX3QJbWlmaTsKKwljb21wYXRfdWxvbmdfdCBpY291bnQ7CisJY29tcGF0X3Vsb25nX3Qgb2NvdW50OworCWNvbXBhdF91bG9uZ190IGlieXRlczsKKwljb21wYXRfdWxvbmdfdCBvYnl0ZXM7Cit9OworCitpbnQgaXA2bXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgY29tcGF0X3Npb2Nfc2dfcmVxNiBzcjsKKwlzdHJ1Y3QgY29tcGF0X3Npb2NfbWlmX3JlcTYgdnI7CisJc3RydWN0IG1pZl9kZXZpY2UgKnZpZjsKKwlzdHJ1Y3QgbWZjNl9jYWNoZSAqYzsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CisJc3RydWN0IG1yNl90YWJsZSAqbXJ0OworCisJbXJ0ID0gaXA2bXJfZ2V0X3RhYmxlKG5ldCwgcmF3Nl9zayhzayktPmlwNm1yX3RhYmxlID8gOiBSVDZfVEFCTEVfREZMVCk7CisJaWYgKG1ydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DR0VUTUlGQ05UX0lONjoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2ciwgYXJnLCBzaXplb2YodnIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAodnIubWlmaSA+PSBtcnQtPm1heHZpZikKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZWFkX2xvY2soJm1ydF9sb2NrKTsKKwkJdmlmID0gJm1ydC0+dmlmNl90YWJsZVt2ci5taWZpXTsKKwkJaWYgKE1JRl9FWElTVFMobXJ0LCB2ci5taWZpKSkgeworCQkJdnIuaWNvdW50ID0gdmlmLT5wa3RfaW47CisJCQl2ci5vY291bnQgPSB2aWYtPnBrdF9vdXQ7CisJCQl2ci5pYnl0ZXMgPSB2aWYtPmJ5dGVzX2luOworCQkJdnIub2J5dGVzID0gdmlmLT5ieXRlc19vdXQ7CisJCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOworCisJCQlpZiAoY29weV90b191c2VyKGFyZywgJnZyLCBzaXplb2YodnIpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCQl9CisJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwljYXNlIFNJT0NHRVRTR0NOVF9JTjY6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmc3IsIGFyZywgc2l6ZW9mKHNyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZWFkX2xvY2soJm1ydF9sb2NrKTsKKwkJYyA9IGlwNm1yX2NhY2hlX2ZpbmQobXJ0LCAmc3Iuc3JjLnNpbjZfYWRkciwgJnNyLmdycC5zaW42X2FkZHIpOworCQlpZiAoYykgeworCQkJc3IucGt0Y250ID0gYy0+bWZjX3VuLnJlcy5wa3Q7CisJCQlzci5ieXRlY250ID0gYy0+bWZjX3VuLnJlcy5ieXRlczsKKwkJCXNyLndyb25nX2lmID0gYy0+bWZjX3VuLnJlcy53cm9uZ19pZjsKKwkJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmc3IsIHNpemVvZihzcikpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorfQorI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgaW50IGlwNm1yX2ZvcndhcmQyX2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTE9HLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYwppbmRleCAwOWM4ODg5Li5kZTMzODAzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYwpAQCAtNDEwLDcgKzQxMCw3IEBACiAJCWlmIChwICE9IE5VTEwpIHsKIAkJCXNiX2FkZChtLCAiJTAyeCIsICpwKyspOwogCQkJZm9yIChpID0gMTsgaSA8IGxlbjsgaSsrKQotCQkJCXNiX2FkZChtLCAiOiUwMngiLCBwW2ldKTsKKwkJCQlzYl9hZGQobSwgIjolMDJ4IiwgKnArKyk7CiAJCX0KIAkJc2JfYWRkKG0sICIgIik7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmMKaW5kZXggODZjMzk1Mi4uYzViMDkxNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmF3LmMKKysrIGIvbmV0L2lwdjYvcmF3LmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgogCkBAIC0xMTU3LDYgKzExNTgsMjMgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgaW50IGNvbXBhdF9yYXd2Nl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DT1VUUToKKwljYXNlIFNJT0NJTlE6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJZGVmYXVsdDoKKyNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEUKKwkJcmV0dXJuIGlwNm1yX2NvbXBhdF9pb2N0bChzaywgY21kLCBjb21wYXRfcHRyKGFyZykpOworI2Vsc2UKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKyNlbmRpZgorCX0KK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCByYXd2Nl9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dCkKIHsKIAlpZiAoaW5ldF9zayhzayktPmluZXRfbnVtID09IElQUFJPVE9fUkFXKQpAQCAtMTIxNSw2ICsxMjMzLDcgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X3Jhd3Y2X3NldHNvY2tvcHQsCiAJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3Jhd3Y2X2dldHNvY2tvcHQsCisJLmNvbXBhdF9pb2N0bAkgICA9IGNvbXBhdF9yYXd2Nl9pb2N0bCwKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggMzczYmQwNC4uYTk5OGRiNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC03Miw4ICs3Miw2IEBACiAjZGVmaW5lIFJUNl9UUkFDRSh4Li4uKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNlbmRpZgogCi0jZGVmaW5lIENMT05FX09GRkxJTktfUk9VVEUgMAotCiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICogaXA2X3J0X2NvcHkoc3RydWN0IHJ0Nl9pbmZvICpvcnQpOwogc3RhdGljIHN0cnVjdCBkc3RfZW50cnkJKmlwNl9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgY29va2llKTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQJIGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpOwpAQCAtMTE1LDYgKzExMywxMSBAQAogCS5sb2NhbF9vdXQJCT0JX19pcDZfbG9jYWxfb3V0LAogfTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBpcDZfYmxhY2tob2xlX2RlZmF1bHRfbXR1KGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgaXA2X3J0X2JsYWNraG9sZV91cGRhdGVfcG10dShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBtdHUpCiB7CiB9CkBAIC0xMjQsNiArMTI3LDggQEAKIAkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVBWNiksCiAJLmRlc3Ryb3kJCT0JaXA2X2RzdF9kZXN0cm95LAogCS5jaGVjawkJCT0JaXA2X2RzdF9jaGVjaywKKwkuZGVmYXVsdF9tdHUJCT0JaXA2X2JsYWNraG9sZV9kZWZhdWx0X210dSwKKwkuZGVmYXVsdF9hZHZtc3MJCT0JaXA2X2RlZmF1bHRfYWR2bXNzLAogCS51cGRhdGVfcG10dQkJPQlpcDZfcnRfYmxhY2tob2xlX3VwZGF0ZV9wbXR1LAogfTsKIApAQCAtMTk2LDcgKzIwMSw2IEBACiAJCWluNl9kZXZfcHV0KGlkZXYpOwogCX0KIAlpZiAocGVlcikgewotCQlCVUdfT04oIShydC0+cnQ2aV9mbGFncyAmIFJURl9DQUNIRSkpOwogCQlydC0+cnQ2aV9wZWVyID0gTlVMTDsKIAkJaW5ldF9wdXRwZWVyKHBlZXIpOwogCX0KQEAgLTIwNiw5ICsyMTAsNiBAQAogewogCXN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7CiAKLQlpZiAoV0FSTl9PTighKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX0NBQ0hFKSkpCi0JCXJldHVybjsKLQogCXBlZXIgPSBpbmV0X2dldHBlZXJfdjYoJnJ0LT5ydDZpX2RzdC5hZGRyLCBjcmVhdGUpOwogCWlmIChwZWVyICYmIGNtcHhjaGcoJnJ0LT5ydDZpX3BlZXIsIE5VTEwsIHBlZXIpICE9IE5VTEwpCiAJCWluZXRfcHV0cGVlcihwZWVyKTsKQEAgLTczOCwxMyArNzM5LDggQEAKIAogCWlmICghcnQtPnJ0NmlfbmV4dGhvcCAmJiAhKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX05PTkVYVEhPUCkpCiAJCW5ydCA9IHJ0Nl9hbGxvY19jb3cocnQsICZmbC0+Zmw2X2RzdCwgJmZsLT5mbDZfc3JjKTsKLQllbHNlIHsKLSNpZiBDTE9ORV9PRkZMSU5LX1JPVVRFCisJZWxzZQogCQlucnQgPSBydDZfYWxsb2NfY2xvbmUocnQsICZmbC0+Zmw2X2RzdCk7Ci0jZWxzZQotCQlnb3RvIG91dDI7Ci0jZW5kaWYKLQl9CiAKIAlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CiAJcnQgPSBucnQgPyA6IG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKaW5kZXggZmExZDhmNC4uN2NiNjVlZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKQEAgLTE1LDYgKzE1LDggQEAKICNpbmNsdWRlIDxuZXQvYWRkcmNvbmYuaD4KICNpbmNsdWRlIDxuZXQvaW5ldF9mcmFnLmg+CiAKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGVtcHR5WzFdOworCiBzdGF0aWMgY3RsX3RhYmxlIGlwdjZfdGFibGVfdGVtcGxhdGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZQk9ICJyb3V0ZSIsCkBAIC0zNSw2ICszNywxMiBAQAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYwogCX0sCisJeworCQkucHJvY25hbWUJPSAibmVpZ2giLAorCQkubWF4bGVuCQk9IDAsCisJCS5tb2RlCQk9IDA1NTUsCisJCS5jaGlsZAkJPSBlbXB0eSwKKwl9LAogCXsgfQogfTsKIApAQCAtMTUyLDcgKzE2MCw2IEBACiAKIGludCBpcHY2X3N0YXRpY19zeXNjdGxfcmVnaXN0ZXIodm9pZCkKIHsKLQlzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBlbXB0eVsxXTsKIAlpcDZfYmFzZSA9IHJlZ2lzdGVyX3N5c2N0bF9wYXRocyhuZXRfaXB2Nl9jdGxfcGF0aCwgZW1wdHkpOwogCWlmIChpcDZfYmFzZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jIGIvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKaW5kZXggN2U3NDAyMy4uZGE4NzQyOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKKysrIGIvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKQEAgLTk4LDYgKzk4LDEwIEBACiAJaWYgKCF4ZHN0LT51LnJ0Ni5ydDZpX2lkZXYpCiAJCXJldHVybiAtRU5PREVWOwogCisJeGRzdC0+dS5ydDYucnQ2aV9wZWVyID0gcnQtPnJ0NmlfcGVlcjsKKwlpZiAocnQtPnJ0NmlfcGVlcikKKwkJYXRvbWljX2luYygmcnQtPnJ0NmlfcGVlci0+cmVmY250KTsKKwogCS8qIFNoZWl0Li4uIEkgcmVtZW1iZXIgSSBkaWQgdGhpcyByaWdodC4gQXBwYXJlbnRseSwKIAkgKiBpdCB3YXMgbWFnaWNhbGx5IGxvc3QsIHNvIHRoaXMgY29kZSBuZWVkcyBhdWRpdCAqLwogCXhkc3QtPnUucnQ2LnJ0NmlfZmxhZ3MgPSBydC0+cnQ2aV9mbGFncyAmIChSVEZfQU5ZQ0FTVCB8CkBAIC0yMTYsNiArMjIwLDggQEAKIAogCWlmIChsaWtlbHkoeGRzdC0+dS5ydDYucnQ2aV9pZGV2KSkKIAkJaW42X2Rldl9wdXQoeGRzdC0+dS5ydDYucnQ2aV9pZGV2KTsKKwlpZiAobGlrZWx5KHhkc3QtPnUucnQ2LnJ0NmlfcGVlcikpCisJCWluZXRfcHV0cGVlcih4ZHN0LT51LnJ0Ni5ydDZpX3BlZXIpOwogCXhmcm1fZHN0X2Rlc3Ryb3koeGRzdCk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9LY29uZmlnIGIvbmV0L21hYzgwMjExL0tjb25maWcKaW5kZXggOTEwOTI2Mi4uYzc2NjA1NiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL0tjb25maWcKKysrIGIvbmV0L21hYzgwMjExL0tjb25maWcKQEAgLTIwLDcgKzIwLDcgQEAKIAlkZWZfYm9vbCBuCiAKIGNvbmZpZyBNQUM4MDIxMV9SQ19QSUQKLQlib29sICJQSUQgY29udHJvbGxlciBiYXNlZCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtIiBpZiBFTUJFRERFRAorCWJvb2wgIlBJRCBjb250cm9sbGVyIGJhc2VkIHJhdGUgY29udHJvbCBhbGdvcml0aG0iIGlmIEVYUEVSVAogCXNlbGVjdCBNQUM4MDIxMV9IQVNfUkMKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIGEgVFggcmF0ZSBjb250cm9sIGFsZ29yaXRobSBmb3IKQEAgLTI4LDE0ICsyOCwxNCBAQAogCSAgcmF0ZS4KIAogY29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMCi0JYm9vbCAiTWluc3RyZWwiIGlmIEVNQkVEREVECisJYm9vbCAiTWluc3RyZWwiIGlmIEVYUEVSVAogCXNlbGVjdCBNQUM4MDIxMV9IQVNfUkMKIAlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSAnbWluc3RyZWwnIFRYIHJhdGUgY29udHJvbCBhbGdvcml0aG0KIAogY29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMX0hUCi0JYm9vbCAiTWluc3RyZWwgODAyLjExbiBzdXBwb3J0IiBpZiBFTUJFRERFRAorCWJvb2wgIk1pbnN0cmVsIDgwMi4xMW4gc3VwcG9ydCIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBNQUM4MDIxMV9SQ19NSU5TVFJFTAogCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZ2ctcnguYyBiL25ldC9tYWM4MDIxMS9hZ2ctcnguYwppbmRleCBmMTM4YjE5Li4yMjdjYTgyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvYWdnLXJ4LmMKKysrIGIvbmV0L21hYzgwMjExL2FnZy1yeC5jCkBAIC0xODUsOCArMTg1LDYgQEAKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgICAgIHNpemVfdCBsZW4pCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OwotCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKIAlzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfYWdnX3J4OwogCXUxNiBjYXBhYiwgdGlkLCB0aW1lb3V0LCBiYV9wb2xpY3ksIGJ1Zl9zaXplLCBzdGFydF9zZXFfbnVtLCBzdGF0dXM7CiAJdTggZGlhbG9nX3Rva2VuOwpAQCAtMjMxLDEzICsyMjksOCBAQAogCQlnb3RvIGVuZF9ub19sb2NrOwogCX0KIAkvKiBkZXRlcm1pbmUgZGVmYXVsdCBidWZmZXIgc2l6ZSAqLwotCWlmIChidWZfc2l6ZSA9PSAwKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCi0JCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tjb25mLT5jaGFubmVsLT5iYW5kXTsKLQkJYnVmX3NpemUgPSBJRUVFODAyMTFfTUlOX0FNUERVX0JVRjsKLQkJYnVmX3NpemUgPSBidWZfc2l6ZSA8PCBzYmFuZC0+aHRfY2FwLmFtcGR1X2ZhY3RvcjsKLQl9CisJaWYgKGJ1Zl9zaXplID09IDApCisJCWJ1Zl9zaXplID0gSUVFRTgwMjExX01BWF9BTVBEVV9CVUY7CiAKIAogCS8qIGV4YW1pbmUgc3RhdGUgbWFjaGluZSAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jCmluZGV4IDRiYzhhOTIuLjljZDczYjEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9jZmcuYworKysgYi9uZXQvbWFjODAyMTEvY2ZnLmMKQEAgLTE4MjIsNiArMTgyMiw3IEBACiAJCSpjb29raWUgXj0gMjsKIAkJSUVFRTgwMjExX1NLQl9DQihza2IpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1RYX09GRkNIQU47CiAJCWxvY2FsLT5od19yb2Nfc2tiID0gc2tiOworCQlsb2NhbC0+aHdfcm9jX3NrYl9mb3Jfc3RhdHVzID0gc2tiOwogCQltdXRleF91bmxvY2soJmxvY2FsLT5tdHgpOwogCiAJCXJldHVybiAwOwpAQCAtMTg3NSw2ICsxODc2LDcgQEAKIAkJaWYgKHJldCA9PSAwKSB7CiAJCQlrZnJlZV9za2IobG9jYWwtPmh3X3JvY19za2IpOwogCQkJbG9jYWwtPmh3X3JvY19za2IgPSBOVUxMOworCQkJbG9jYWwtPmh3X3JvY19za2JfZm9yX3N0YXR1cyA9IE5VTEw7CiAJCX0KIAogCQltdXRleF91bmxvY2soJmxvY2FsLT5tdHgpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCBjNDdkN2MwLi41MzNmZDMyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAorKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtOTUzLDcgKzk1Myw3IEBACiAKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmh3X3JvY19jaGFubmVsOwogCXN0cnVjdCBuZXRfZGV2aWNlICpod19yb2NfZGV2OwotCXN0cnVjdCBza19idWZmICpod19yb2Nfc2tiOworCXN0cnVjdCBza19idWZmICpod19yb2Nfc2tiLCAqaHdfcm9jX3NrYl9mb3Jfc3RhdHVzOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBod19yb2Nfc3RhcnQsIGh3X3JvY19kb25lOwogCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgaHdfcm9jX2NoYW5uZWxfdHlwZTsKIAl1bnNpZ25lZCBpbnQgaHdfcm9jX2R1cmF0aW9uOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwppbmRleCA4YWNiYTQ1Li43YTEwYThkIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuYworKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwpAQCAtMTIyOSw2ICsxMjI5LDcgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueSgmdW5yZWdfbGlzdCk7CisJbGlzdF9kZWwoJnVucmVnX2xpc3QpOwogfQogCiBzdGF0aWMgdTMyIGllZWU4MDIxMV9pZGxlX29mZihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tYWluLmMgYi9uZXQvbWFjODAyMTEvbWFpbi5jCmluZGV4IDQ4NWQzNmIuLmE0NmZmMDYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tYWluLmMKKysrIGIvbmV0L21hYzgwMjExL21haW4uYwpAQCAtMzksNiArMzksOCBAQAogTU9EVUxFX1BBUk1fREVTQyhpZWVlODAyMTFfZGlzYWJsZV80MG1oel8yNGdoeiwKIAkJICJEaXNhYmxlIDQwTUh6IHN1cHBvcnQgaW4gdGhlIDIuNEdIeiBiYW5kIik7CiAKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgaWVlZTgwMjExX3J4X3NrYl9xdWV1ZV9jbGFzczsKKwogdm9pZCBpZWVlODAyMTFfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKIAl1NjQgbWM7CkBAIC01NjksNyArNTcxLDE1IEBACiAJc3Bpbl9sb2NrX2luaXQoJmxvY2FsLT5maWx0ZXJfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrKTsKIAotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmxvY2FsLT5yeF9za2JfcXVldWUpOworCS8qCisJICogVGhlIHJ4X3NrYl9xdWV1ZSBpcyBvbmx5IGFjY2Vzc2VkIGZyb20gdGFza2xldHMsCisJICogYnV0IG90aGVyIFNLQiBxdWV1ZXMgYXJlIHVzZWQgZnJvbSB3aXRoaW4gSVJRCisJICogY29udGV4dC4gVGhlcmVmb3JlLCB0aGlzIG9uZSBuZWVkcyBhIGRpZmZlcmVudAorCSAqIGxvY2tpbmcgY2xhc3Mgc28gb3VyIGRpcmVjdCwgbm9uLWlycS1zYWZlIHVzZSBvZgorCSAqIHRoZSBxdWV1ZSdzIGxvY2sgZG9lc24ndCB0aHJvdyBsb2NrZGVwIHdhcm5pbmdzLgorCSAqLworCXNrYl9xdWV1ZV9oZWFkX2luaXRfY2xhc3MoJmxvY2FsLT5yeF9za2JfcXVldWUsCisJCQkJICAmaWVlZTgwMjExX3J4X3NrYl9xdWV1ZV9jbGFzcyk7CiAKIAlJTklUX0RFTEFZRURfV09SSygmbG9jYWwtPnNjYW5fd29yaywgaWVlZTgwMjExX3NjYW5fd29yayk7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IDQ1ZmJiOWUuLmM5Y2ViNGQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKKysrIGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtMTAzMyw2ICsxMDMzLDEyIEBACiAJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIEluIGNhc2Ugd2UgcmVjZWl2ZSBmcmFtZXMgYWZ0ZXIgZGlzYXNzb2NpYXRpb24uCisJICovCisJaWYgKCFzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZCkKKwkJcmV0dXJuOworCiAJaWVlZTgwMjExX3N0YV9yZXNldF9jb25uX21vbml0b3Ioc2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhdHVzLmMgYi9uZXQvbWFjODAyMTEvc3RhdHVzLmMKaW5kZXggMzhhNzk3Mi4uMDcxYWM5NSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YXR1cy5jCisrKyBiL25ldC9tYWM4MDIxMS9zdGF0dXMuYwpAQCAtMzIzLDYgKzMyMyw3IEBACiAKIAlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfSU5URkxfTkw4MDIxMV9GUkFNRV9UWCkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrOworCQl1NjQgY29va2llID0gKHVuc2lnbmVkIGxvbmcpc2tiOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uod2ssICZsb2NhbC0+d29ya19saXN0LCBsaXN0KSB7CkBAIC0zMzQsOCArMzM1LDEyIEBACiAJCQlicmVhazsKIAkJfQogCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJaWYgKGxvY2FsLT5od19yb2Nfc2tiX2Zvcl9zdGF0dXMgPT0gc2tiKSB7CisJCQljb29raWUgPSBsb2NhbC0+aHdfcm9jX2Nvb2tpZSBeIDI7CisJCQlsb2NhbC0+aHdfcm9jX3NrYl9mb3Jfc3RhdHVzID0gTlVMTDsKKwkJfQogCQljZmc4MDIxMV9tZ210X3R4X3N0YXR1cygKLQkJCXNrYi0+ZGV2LCAodW5zaWduZWQgbG9uZykgc2tiLCBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkJc2tiLT5kZXYsIGNvb2tpZSwgc2tiLT5kYXRhLCBza2ItPmxlbiwKIAkJCSEhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQUNLKSwgR0ZQX0FUT01JQyk7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IDU5NTBlM2EuLmIwYmVhYTUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCisrKyBiL25ldC9tYWM4MDIxMS90eC5jCkBAIC0xNTQ3LDcgKzE1NDcsNyBAQAogCQlza2Jfb3JwaGFuKHNrYik7CiAJfQogCi0JaWYgKHNrYl9oZWFkZXJfY2xvbmVkKHNrYikpCisJaWYgKHNrYl9jbG9uZWQoc2tiKSkKIAkJSTgwMl9ERUJVR19JTkMobG9jYWwtPnR4X2V4cGFuZF9za2JfaGVhZF9jbG9uZWQpOwogCWVsc2UgaWYgKGhlYWRfbmVlZCB8fCB0YWlsX25lZWQpCiAJCUk4MDJfREVCVUdfSU5DKGxvY2FsLT50eF9leHBhbmRfc2tiX2hlYWQpOwpAQCAtMjIzMCw2ICsyMjMwLDkgQEAKIAogCXNkYXRhID0gdmlmX3RvX3NkYXRhKHZpZik7CiAKKwlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKKwkJZ290byBvdXQ7CisKIAlpZiAodGltX29mZnNldCkKIAkJKnRpbV9vZmZzZXQgPSAwOwogCWlmICh0aW1fbGVuZ3RoKQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3V0aWwuYyBiL25ldC9tYWM4MDIxMS91dGlsLmMKaW5kZXggY2Y2ODcwMC4uZDAzNjU5NyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3V0aWwuYworKysgYi9uZXQvbWFjODAyMTEvdXRpbC5jCkBAIC0xMjEwLDcgKzEyMTAsOSBAQAogCQlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgewogCQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCQljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0FTU09DOworCQkJbXV0ZXhfbG9jaygmc2RhdGEtPnUubWdkLm10eCk7CiAJCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgY2hhbmdlZCk7CisJCQltdXRleF91bmxvY2soJnNkYXRhLT51Lm1nZC5tdHgpOwogCQkJYnJlYWs7CiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJCQljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0lCU1M7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCmluZGV4IDMyZmNiZTIuLjRhYTYxNGIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCkBAIC0xMzMsNiArMTMzLDcgQEAKIAogCQkvKiBPcHRpbWl6YXRpb246IHdlIGRvbid0IG5lZWQgdG8gaG9sZCBtb2R1bGUKIAkJICAgcmVmZXJlbmNlIGhlcmUsIHNpbmNlIGZ1bmN0aW9uIGNhbid0IHNsZWVwLiAtLVJSICovCityZXBlYXQ6CiAJCXZlcmRpY3QgPSBlbGVtLT5ob29rKGhvb2ssIHNrYiwgaW5kZXYsIG91dGRldiwgb2tmbik7CiAJCWlmICh2ZXJkaWN0ICE9IE5GX0FDQ0VQVCkgewogI2lmZGVmIENPTkZJR19ORVRGSUxURVJfREVCVUcKQEAgLTE0NSw3ICsxNDYsNyBAQAogI2VuZGlmCiAJCQlpZiAodmVyZGljdCAhPSBORl9SRVBFQVQpCiAJCQkJcmV0dXJuIHZlcmRpY3Q7Ci0JCQkqaSA9ICgqaSktPnByZXY7CisJCQlnb3RvIHJlcGVhdDsKIAkJfQogCX0KIAlyZXR1cm4gTkZfQUNDRVBUOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCmluZGV4IGU2MTUxMTkuLjg0ZjRmY2MgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTk0Miw4ICs5NDIsMTUgQEAKIAlpZiAoc2V0X3JlcGx5ICYmICF0ZXN0X2FuZF9zZXRfYml0KElQU19TRUVOX1JFUExZX0JJVCwgJmN0LT5zdGF0dXMpKQogCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9SRVBMWSwgY3QpOwogb3V0OgotCWlmICh0bXBsKQotCQluZl9jdF9wdXQodG1wbCk7CisJaWYgKHRtcGwpIHsKKwkJLyogU3BlY2lhbCBjYXNlOiB3ZSBoYXZlIHRvIHJlcGVhdCB0aGlzIGhvb2ssIGFzc2lnbiB0aGUKKwkJICogdGVtcGxhdGUgYWdhaW4gdG8gdGhpcyBwYWNrZXQuIFdlIGFzc3VtZSB0aGF0IHRoaXMgcGFja2V0CisJCSAqIGhhcyBubyBjb25udHJhY2sgYXNzaWduZWQuIFRoaXMgaXMgdXNlZCBieSBuZl9jdF90Y3AuICovCisJCWlmIChyZXQgPT0gTkZfUkVQRUFUKQorCQkJc2tiLT5uZmN0ID0gKHN0cnVjdCBuZl9jb25udHJhY2sgKil0bXBsOworCQllbHNlCisJCQluZl9jdF9wdXQodG1wbCk7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmMKaW5kZXggNTcwMmRlMy4uNjNhMWI5MSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmMKQEAgLTYzLDYgKzYzLDkgQEAKIAkJICogdGhpcyBkb2VzIG5vdCBoYXJtIGFuZCBpdCBoYXBwZW5zIHZlcnkgcmFyZWx5LiAqLwogCQl1bnNpZ25lZCBsb25nIG1pc3NlZCA9IGUtPm1pc3NlZDsKIAorCQlpZiAoISgoZXZlbnRzIHwgbWlzc2VkKSAmIGUtPmN0bWFzaykpCisJCQlnb3RvIG91dF91bmxvY2s7CisKIAkJcmV0ID0gbm90aWZ5LT5mY24oZXZlbnRzIHwgbWlzc2VkLCAmaXRlbSk7CiAJCWlmICh1bmxpa2VseShyZXQgPCAwIHx8IG1pc3NlZCkpIHsKIAkJCXNwaW5fbG9ja19iaCgmY3QtPmxvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDJiN2VlZjMuLmVlYWQ5ZGIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTY2Nyw2ICs2NjcsNyBAQAogCQkJaWYgKGN0bmV0bGlua19maWxsX2luZm8oc2tiLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKIAkJCQkJCWNiLT5ubGgtPm5sbXNnX3NlcSwKIAkJCQkJCUlQQ1ROTF9NU0dfQ1RfTkVXLCBjdCkgPCAwKSB7CisJCQkJbmZfY29ubnRyYWNrX2dldCgmY3QtPmN0X2dlbmVyYWwpOwogCQkJCWNiLT5hcmdzWzFdID0gKHVuc2lnbmVkIGxvbmcpY3Q7CiAJCQkJZ290byBvdXQ7CiAJCQl9CkBAIC05MjQsNyArOTI1LDcgQEAKIAl1MTYgem9uZTsKIAlpbnQgZXJyOwogCi0JaWYgKChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfRFVNUCkgPT0gTkxNX0ZfRFVNUCkKKwlpZiAobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX0RVTVApCiAJCXJldHVybiBuZXRsaW5rX2R1bXBfc3RhcnQoY3RubCwgc2tiLCBubGgsIGN0bmV0bGlua19kdW1wX3RhYmxlLAogCQkJCQkgIGN0bmV0bGlua19kb25lKTsKIApAQCAtMTc4Nyw3ICsxNzg4LDcgQEAKIAl1MTYgem9uZTsKIAlpbnQgZXJyOwogCi0JaWYgKChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfRFVNUCkgPT0gTkxNX0ZfRFVNUCkgeworCWlmIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfRFVNUCkgewogCQlyZXR1cm4gbmV0bGlua19kdW1wX3N0YXJ0KGN0bmwsIHNrYiwgbmxoLAogCQkJCQkgIGN0bmV0bGlua19leHBfZHVtcF90YWJsZSwKIAkJCQkJICBjdG5ldGxpbmtfZXhwX2RvbmUpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jCmluZGV4IDRkODdiZWYuLjQ3NGQ2MjEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdHByb3h5X2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmMKQEAgLTI4LDI2ICsyOCwyMyBAQAogCXNrYi0+ZGVzdHJ1Y3RvciA9IE5VTEw7CiAKIAlpZiAoc2spCi0JCW5mX3Rwcm94eV9wdXRfc29jayhzayk7CisJCXNvY2tfcHV0KHNrKTsKIH0KIAogLyogY29uc3VtZXMgc2sgKi8KLWludAordm9pZAogbmZfdHByb3h5X2Fzc2lnbl9zb2NrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKIHsKLQlib29sIHRyYW5zcGFyZW50ID0gKHNrLT5za19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKSA/Ci0JCQkJaW5ldF90d3NrKHNrKS0+dHdfdHJhbnNwYXJlbnQgOgotCQkJCWluZXRfc2soc2spLT50cmFuc3BhcmVudDsKKwkvKiBhc3NpZ25pbmcgdHcgc29ja2V0cyBjb21wbGljYXRlcyB0aGluZ3M7IG1vc3QKKwkgKiBza2ItPnNrLT5YIGNoZWNrcyB3b3VsZCBoYXZlIHRvIHRlc3Qgc2stPnNrX3N0YXRlIGZpcnN0ICovCisJaWYgKHNrLT5za19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKSB7CisJCWluZXRfdHdza19wdXQoaW5ldF90d3NrKHNrKSk7CisJCXJldHVybjsKKwl9CiAKLQlpZiAodHJhbnNwYXJlbnQpIHsKLQkJc2tiX29ycGhhbihza2IpOwotCQlza2ItPnNrID0gc2s7Ci0JCXNrYi0+ZGVzdHJ1Y3RvciA9IG5mX3Rwcm94eV9kZXN0cnVjdG9yOwotCQlyZXR1cm4gMTsKLQl9IGVsc2UKLQkJbmZfdHByb3h5X3B1dF9zb2NrKHNrKTsKLQotCXJldHVybiAwOworCXNrYl9vcnBoYW4oc2tiKTsKKwlza2ItPnNrID0gc2s7CisJc2tiLT5kZXN0cnVjdG9yID0gbmZfdHByb3h5X2Rlc3RydWN0b3I7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl90cHJveHlfYXNzaWduX3NvY2spOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jIGIvbmV0L25ldGZpbHRlci94dF9UUFJPWFkuYwppbmRleCA2NDA2NzhmLi5kY2ZkNTdlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfVFBST1hZLmMKQEAgLTMzLDYgKzMzLDIwIEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9UUFJPWFkuaD4KIAorc3RhdGljIGJvb2wgdHByb3h5X3NrX2lzX3RyYW5zcGFyZW50KHN0cnVjdCBzb2NrICpzaykKK3sKKwlpZiAoc2stPnNrX3N0YXRlICE9IFRDUF9USU1FX1dBSVQpIHsKKwkJaWYgKGluZXRfc2soc2spLT50cmFuc3BhcmVudCkKKwkJCXJldHVybiB0cnVlOworCQlzb2NrX3B1dChzayk7CisJfSBlbHNlIHsKKwkJaWYgKGluZXRfdHdzayhzayktPnR3X3RyYW5zcGFyZW50KQorCQkJcmV0dXJuIHRydWU7CisJCWluZXRfdHdza19wdXQoaW5ldF90d3NrKHNrKSk7CisJfQorCXJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIGlubGluZSBfX2JlMzIKIHRwcm94eV9sYWRkcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHVzZXJfbGFkZHIsIF9fYmUzMiBkYWRkcikKIHsKQEAgLTE0MSw3ICsxNTUsNyBAQAogCQkJCQkgICBza2ItPmRldiwgTkZUX0xPT0tVUF9MSVNURU5FUik7CiAKIAkvKiBOT1RFOiBhc3NpZ25fc29jayBjb25zdW1lcyBvdXIgc2sgcmVmZXJlbmNlICovCi0JaWYgKHNrICYmIG5mX3Rwcm94eV9hc3NpZ25fc29jayhza2IsIHNrKSkgeworCWlmIChzayAmJiB0cHJveHlfc2tfaXNfdHJhbnNwYXJlbnQoc2spKSB7CiAJCS8qIFRoaXMgc2hvdWxkIGJlIGluIGEgc2VwYXJhdGUgdGFyZ2V0LCBidXQgd2UgZG9uJ3QgZG8gbXVsdGlwbGUKIAkJICAgdGFyZ2V0cyBvbiB0aGUgc2FtZSBydWxlIHlldCAqLwogCQlza2ItPm1hcmsgPSAoc2tiLT5tYXJrICYgfm1hcmtfbWFzaykgXiBtYXJrX3ZhbHVlOwpAQCAtMTQ5LDYgKzE2Myw4IEBACiAJCXByX2RlYnVnKCJyZWRpcmVjdGluZzogcHJvdG8gJWhodSAlcEk0OiVodSAtPiAlcEk0OiVodSwgbWFyazogJXhcbiIsCiAJCQkgaXBoLT5wcm90b2NvbCwgJmlwaC0+ZGFkZHIsIG50b2hzKGhwLT5kZXN0KSwKIAkJCSAmbGFkZHIsIG50b2hzKGxwb3J0KSwgc2tiLT5tYXJrKTsKKworCQluZl90cHJveHlfYXNzaWduX3NvY2soc2tiLCBzayk7CiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQogCkBAIC0zMDYsNyArMzIyLDcgQEAKIAkJCQkJICAgcGFyLT5pbiwgTkZUX0xPT0tVUF9MSVNURU5FUik7CiAKIAkvKiBOT1RFOiBhc3NpZ25fc29jayBjb25zdW1lcyBvdXIgc2sgcmVmZXJlbmNlICovCi0JaWYgKHNrICYmIG5mX3Rwcm94eV9hc3NpZ25fc29jayhza2IsIHNrKSkgeworCWlmIChzayAmJiB0cHJveHlfc2tfaXNfdHJhbnNwYXJlbnQoc2spKSB7CiAJCS8qIFRoaXMgc2hvdWxkIGJlIGluIGEgc2VwYXJhdGUgdGFyZ2V0LCBidXQgd2UgZG9uJ3QgZG8gbXVsdGlwbGUKIAkJICAgdGFyZ2V0cyBvbiB0aGUgc2FtZSBydWxlIHlldCAqLwogCQlza2ItPm1hcmsgPSAoc2tiLT5tYXJrICYgfnRnaS0+bWFya19tYXNrKSBeIHRnaS0+bWFya192YWx1ZTsKQEAgLTMxNCw2ICszMzAsOCBAQAogCQlwcl9kZWJ1ZygicmVkaXJlY3Rpbmc6IHByb3RvICVoaHUgJXBJNjolaHUgLT4gJXBJNjolaHUsIG1hcms6ICV4XG4iLAogCQkJIHRwcm90bywgJmlwaC0+c2FkZHIsIG50b2hzKGhwLT5zb3VyY2UpLAogCQkJIGxhZGRyLCBudG9ocyhscG9ydCksIHNrYi0+bWFyayk7CisKKwkJbmZfdHByb3h5X2Fzc2lnbl9zb2NrKHNrYiwgc2spOwogCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYwppbmRleCA4OGY3YzM1Li43M2MzM2E0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYwpAQCAtNTMsMTUgKzUzLDEzIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1pcHJhbmdlX2lwdjZfc3ViKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpiKQoraXByYW5nZV9pcHY2X2x0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpiKQogewogCXVuc2lnbmVkIGludCBpOwotCWludCByOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgewotCQlyID0gbnRvaGwoYS0+czZfYWRkcjMyW2ldKSAtIG50b2hsKGItPnM2X2FkZHIzMltpXSk7Ci0JCWlmIChyICE9IDApCi0JCQlyZXR1cm4gcjsKKwkJaWYgKGEtPnM2X2FkZHIzMltpXSAhPSBiLT5zNl9hZGRyMzJbaV0pCisJCQlyZXR1cm4gbnRvaGwoYS0+czZfYWRkcjMyW2ldKSA8IG50b2hsKGItPnM2X2FkZHIzMltpXSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03NSwxNSArNzMsMTUgQEAKIAlib29sIG07CiAKIAlpZiAoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQykgewotCQltICA9IGlwcmFuZ2VfaXB2Nl9zdWIoJmlwaC0+c2FkZHIsICZpbmZvLT5zcmNfbWluLmluNikgPCAwOwotCQltIHw9IGlwcmFuZ2VfaXB2Nl9zdWIoJmlwaC0+c2FkZHIsICZpbmZvLT5zcmNfbWF4LmluNikgPiAwOworCQltICA9IGlwcmFuZ2VfaXB2Nl9sdCgmaXBoLT5zYWRkciwgJmluZm8tPnNyY19taW4uaW42KTsKKwkJbSB8PSBpcHJhbmdlX2lwdjZfbHQoJmluZm8tPnNyY19tYXguaW42LCAmaXBoLT5zYWRkcik7CiAJCW0gXj0gISEoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQ19JTlYpOwogCQlpZiAobSkKIAkJCXJldHVybiBmYWxzZTsKIAl9CiAJaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1QpIHsKLQkJbSAgPSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPmRhZGRyLCAmaW5mby0+ZHN0X21pbi5pbjYpIDwgMDsKLQkJbSB8PSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPmRhZGRyLCAmaW5mby0+ZHN0X21heC5pbjYpID4gMDsKKwkJbSAgPSBpcHJhbmdlX2lwdjZfbHQoJmlwaC0+ZGFkZHIsICZpbmZvLT5kc3RfbWluLmluNik7CisJCW0gfD0gaXByYW5nZV9pcHY2X2x0KCZpbmZvLT5kc3RfbWF4LmluNiwgJmlwaC0+ZGFkZHIpOwogCQltIF49ICEhKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1RfSU5WKTsKIAkJaWYgKG0pCiAJCQlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3NvY2tldC5jIGIvbmV0L25ldGZpbHRlci94dF9zb2NrZXQuYwppbmRleCAwMGQ2YWU4My4uOWNjNDYzNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9zb2NrZXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3NvY2tldC5jCkBAIC0zNSw2ICszNSwxNSBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CiAjZW5kaWYKIAorc3RhdGljIHZvaWQKK3h0X3NvY2tldF9wdXRfc2soc3RydWN0IHNvY2sgKnNrKQoreworCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkKKwkJaW5ldF90d3NrX3B1dChpbmV0X3R3c2soc2spKTsKKwllbHNlCisJCXNvY2tfcHV0KHNrKTsKK30KKwogc3RhdGljIGludAogZXh0cmFjdF9pY21wNF9maWVsZHMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgIHU4ICpwcm90b2NvbCwKQEAgLTE2NCw3ICsxNzMsNyBAQAogCQkJCSAgICAgICAoc2stPnNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQgJiYKIAkJCQkJaW5ldF90d3NrKHNrKS0+dHdfdHJhbnNwYXJlbnQpKTsKIAotCQluZl90cHJveHlfcHV0X3NvY2soc2spOworCQl4dF9zb2NrZXRfcHV0X3NrKHNrKTsKIAogCQlpZiAod2lsZGNhcmQgfHwgIXRyYW5zcGFyZW50KQogCQkJc2sgPSBOVUxMOwpAQCAtMjk4LDcgKzMwNyw3IEBACiAJCQkJICAgICAgIChzay0+c2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVCAmJgogCQkJCQlpbmV0X3R3c2soc2spLT50d190cmFuc3BhcmVudCkpOwogCi0JCW5mX3Rwcm94eV9wdXRfc29jayhzayk7CisJCXh0X3NvY2tldF9wdXRfc2soc2spOwogCiAJCWlmICh3aWxkY2FyZCB8fCAhdHJhbnNwYXJlbnQpCiAJCQlzayA9IE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jCmluZGV4IGY4M2NiMzcuLjE3ODFkOTkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2dlbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jCkBAIC01MTksNyArNTE5LDcgQEAKIAkgICAgc2VjdXJpdHlfbmV0bGlua19yZWN2KHNrYiwgQ0FQX05FVF9BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAKLQlpZiAoKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9EVU1QKSA9PSBOTE1fRl9EVU1QKSB7CisJaWYgKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9EVU1QKSB7CiAJCWlmIChvcHMtPmR1bXBpdCA9PSBOVUxMKQogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCmRpZmYgLS1naXQgYS9uZXQvcmZraWxsL0tjb25maWcgYi9uZXQvcmZraWxsL0tjb25maWcKaW5kZXggZWFmNzY1OC4uN2ZjZTZkZiAxMDA2NDQKLS0tIGEvbmV0L3Jma2lsbC9LY29uZmlnCisrKyBiL25ldC9yZmtpbGwvS2NvbmZpZwpAQCAtMTgsNyArMTgsNyBAQAogCWRlZmF1bHQgeQogCiBjb25maWcgUkZLSUxMX0lOUFVUCi0JYm9vbCAiUkYgc3dpdGNoIGlucHV0IHN1cHBvcnQiIGlmIEVNQkVEREVECisJYm9vbCAiUkYgc3dpdGNoIGlucHV0IHN1cHBvcnQiIGlmIEVYUEVSVAogCWRlcGVuZHMgb24gUkZLSUxMCiAJZGVwZW5kcyBvbiBJTlBVVCA9IHkgfHwgUkZLSUxMID0gSU5QVVQKLQlkZWZhdWx0IHkgaWYgIUVNQkVEREVECisJZGVmYXVsdCB5IGlmICFFWFBFUlQKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1rZXkuYyBiL25ldC9yeHJwYy9hci1rZXkuYwppbmRleCA1ZWUxNmYwLi5kNzYzNzkzIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXIta2V5LmMKKysrIGIvbmV0L3J4cnBjL2FyLWtleS5jCkBAIC04OSwxMSArODksMTEgQEAKIAkJcmV0dXJuIHJldDsKIAogCXBsZW4gLT0gc2l6ZW9mKCp0b2tlbik7Ci0JdG9rZW4gPSBrbWFsbG9jKHNpemVvZigqdG9rZW4pLCBHRlBfS0VSTkVMKTsKKwl0b2tlbiA9IGt6YWxsb2Moc2l6ZW9mKCp0b2tlbiksIEdGUF9LRVJORUwpOwogCWlmICghdG9rZW4pCiAJCXJldHVybiAtRU5PTUVNOwogCi0JdG9rZW4tPmthZCA9IGttYWxsb2MocGxlbiwgR0ZQX0tFUk5FTCk7CisJdG9rZW4tPmthZCA9IGt6YWxsb2MocGxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0b2tlbi0+a2FkKSB7CiAJCWtmcmVlKHRva2VuKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC03MzEsMTAgKzczMSwxMCBAQAogCQlnb3RvIGVycm9yOwogCiAJcmV0ID0gLUVOT01FTTsKLQl0b2tlbiA9IGttYWxsb2Moc2l6ZW9mKCp0b2tlbiksIEdGUF9LRVJORUwpOworCXRva2VuID0ga3phbGxvYyhzaXplb2YoKnRva2VuKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0b2tlbikKIAkJZ290byBlcnJvcjsKLQl0b2tlbi0+a2FkID0ga21hbGxvYyhwbGVuLCBHRlBfS0VSTkVMKTsKKwl0b2tlbi0+a2FkID0ga3phbGxvYyhwbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRva2VuLT5rYWQpCiAJCWdvdG8gZXJyb3JfZnJlZTsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYnEuYyBiL25ldC9zY2hlZC9zY2hfY2JxLmMKaW5kZXggYzgwZDFjMi4uNWY2M2VjNSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9jYnEuYworKysgYi9uZXQvc2NoZWQvc2NoX2NicS5jCkBAIC0zOTAsNyArMzkwLDYgQEAKIAlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgY2wtPnEpOwogCWlmIChyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykgewogCQlzY2gtPnEucWxlbisrOwotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJY2JxX21hcmtfdG9wbGV2ZWwocSwgY2wpOwogCQlpZiAoIWNsLT5uZXh0X2FsaXZlKQogCQkJY2JxX2FjdGl2YXRlX2NsYXNzKGNsKTsKQEAgLTY0OSw3ICs2NDgsNiBAQAogCQlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgY2wtPnEpOwogCQlpZiAocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpIHsKIAkJCXNjaC0+cS5xbGVuKys7Ci0JCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJCWlmICghY2wtPm5leHRfYWxpdmUpCiAJCQkJY2JxX2FjdGl2YXRlX2NsYXNzKGNsKTsKIAkJCXJldHVybiAwOwpAQCAtOTcxLDYgKzk2OSw3IEBACiAKIAkJc2tiID0gY2JxX2RlcXVldWVfMShzY2gpOwogCQlpZiAoc2tiKSB7CisJCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJCXNjaC0+cS5xbGVuLS07CiAJCQlzY2gtPmZsYWdzICY9IH5UQ1FfRl9USFJPVFRMRUQ7CiAJCQlyZXR1cm4gc2tiOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kcnIuYyBiL25ldC9zY2hlZC9zY2hfZHJyLmMKaW5kZXggZGU1NWU2NC4uNmI3ZmU0YSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9kcnIuYworKysgYi9uZXQvc2NoZWQvc2NoX2Ryci5jCkBAIC0zNzYsNyArMzc2LDYgQEAKIAl9CiAKIAlic3RhdHNfdXBkYXRlKCZjbC0+YnN0YXRzLCBza2IpOwotCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCiAJc2NoLT5xLnFsZW4rKzsKIAlyZXR1cm4gZXJyOwpAQCAtNDAzLDYgKzQwMiw3IEBACiAJCQlza2IgPSBxZGlzY19kZXF1ZXVlX3BlZWtlZChjbC0+cWRpc2MpOwogCQkJaWYgKGNsLT5xZGlzYy0+cS5xbGVuID09IDApCiAJCQkJbGlzdF9kZWwoJmNsLT5hbGlzdCk7CisJCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJCXNjaC0+cS5xbGVuLS07CiAJCQlyZXR1cm4gc2tiOwogCQl9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2RzbWFyay5jIGIvbmV0L3NjaGVkL3NjaF9kc21hcmsuYwppbmRleCA2MGY0YmRkLi4wZjdiZjNmIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2RzbWFyay5jCisrKyBiL25ldC9zY2hlZC9zY2hfZHNtYXJrLmMKQEAgLTI2MCw3ICsyNjAsNiBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCXNjaC0+cS5xbGVuKys7CiAKIAlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKQEAgLTI4Myw2ICsyODIsNyBAQAogCWlmIChza2IgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKKwlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlzY2gtPnEucWxlbi0tOwogCiAJaW5kZXggPSBza2ItPnRjX2luZGV4ICYgKHAtPmluZGljZXMgLSAxKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZmlmby5jIGIvbmV0L3NjaGVkL3NjaF9maWZvLmMKaW5kZXggYWE0ZDYzMy4uZDQ2OGI0NyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9maWZvLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9maWZvLmMKQEAgLTQ2LDE3ICs0NiwxNCBAQAogCiBzdGF0aWMgaW50IHBmaWZvX3RhaWxfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MqIHNjaCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2hlYWQ7CiAJc3RydWN0IGZpZm9fc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAogCWlmIChsaWtlbHkoc2tiX3F1ZXVlX2xlbigmc2NoLT5xKSA8IHEtPmxpbWl0KSkKIAkJcmV0dXJuIHFkaXNjX2VucXVldWVfdGFpbChza2IsIHNjaCk7CiAKIAkvKiBxdWV1ZSBmdWxsLCByZW1vdmUgb25lIHNrYiB0byBmdWxmaWxsIHRoZSBsaW1pdCAqLwotCXNrYl9oZWFkID0gcWRpc2NfZGVxdWV1ZV9oZWFkKHNjaCk7CisJX19xZGlzY19xdWV1ZV9kcm9wX2hlYWQoc2NoLCAmc2NoLT5xKTsKIAlzY2gtPnFzdGF0cy5kcm9wcysrOwotCWtmcmVlX3NrYihza2JfaGVhZCk7Ci0KIAlxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpOwogCiAJcmV0dXJuIE5FVF9YTUlUX0NOOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwppbmRleCAzNGRjNTk4Li4xYmM2OTgwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYworKysgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwpAQCAtODM5LDYgKzgzOSw3IEBACiAKIAlsaXN0X2FkZCgmZGV2LT51bnJlZ19saXN0LCAmc2luZ2xlKTsKIAlkZXZfZGVhY3RpdmF0ZV9tYW55KCZzaW5nbGUpOworCWxpc3RfZGVsKCZzaW5nbGUpOwogfQogCiBzdGF0aWMgdm9pZCBkZXZfaW5pdF9zY2hlZHVsZXJfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaGZzYy5jIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKaW5kZXggMmU0NTc5MS4uMTRhNzk5ZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKQEAgLTE2MDAsNyArMTYwMCw2IEBACiAJCXNldF9hY3RpdmUoY2wsIHFkaXNjX3BrdF9sZW4oc2tiKSk7CiAKIAlic3RhdHNfdXBkYXRlKCZjbC0+YnN0YXRzLCBza2IpOwotCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCXNjaC0+cS5xbGVuKys7CiAKIAlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKQEAgLTE2NjYsNiArMTY2NSw3IEBACiAJfQogCiAJc2NoLT5mbGFncyAmPSB+VENRX0ZfVEhST1RUTEVEOworCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCXNjaC0+cS5xbGVuLS07CiAKIAlyZXR1cm4gc2tiOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9odGIuYyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKaW5kZXggOTg0YzFiMC4uZmMxMmZlNiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9odGIuYworKysgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCkBAIC01NzQsNyArNTc0LDYgQEAKIAl9CiAKIAlzY2gtPnEucWxlbisrOwotCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwogfQogCkBAIC04NDIsNyArODQxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBza19idWZmICpodGJfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBodGJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAJaW50IGxldmVsOwogCXBzY2hlZF90aW1lX3QgbmV4dF9ldmVudDsKQEAgLTg1MSw2ICs4NTAsOCBAQAogCS8qIHRyeSB0byBkZXF1ZXVlIGRpcmVjdCBwYWNrZXRzIGFzIGhpZ2ggcHJpbyAoISkgdG8gbWluaW1pemUgY3B1IHdvcmsgKi8KIAlza2IgPSBfX3NrYl9kZXF1ZXVlKCZxLT5kaXJlY3RfcXVldWUpOwogCWlmIChza2IgIT0gTlVMTCkgeworb2s6CisJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQlzY2gtPmZsYWdzICY9IH5UQ1FfRl9USFJPVFRMRUQ7CiAJCXNjaC0+cS5xbGVuLS07CiAJCXJldHVybiBza2I7CkBAIC04ODQsMTEgKzg4NSw4IEBACiAJCQlpbnQgcHJpbyA9IGZmeihtKTsKIAkJCW0gfD0gMSA8PCBwcmlvOwogCQkJc2tiID0gaHRiX2RlcXVldWVfdHJlZShxLCBwcmlvLCBsZXZlbCk7Ci0JCQlpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkgewotCQkJCXNjaC0+cS5xbGVuLS07Ci0JCQkJc2NoLT5mbGFncyAmPSB+VENRX0ZfVEhST1RUTEVEOwotCQkJCWdvdG8gZmluOwotCQkJfQorCQkJaWYgKGxpa2VseShza2IgIT0gTlVMTCkpCisJCQkJZ290byBvazsKIAkJfQogCX0KIAlzY2gtPnFzdGF0cy5vdmVybGltaXRzKys7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX211bHRpcS5jIGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYwppbmRleCAyMWYxM2RhLi40MzZhMmU3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX211bHRpcS5jCisrKyBiL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMKQEAgLTgzLDcgKzgzLDYgQEAKIAogCXJldCA9IHFkaXNjX2VucXVldWUoc2tiLCBxZGlzYyk7CiAJaWYgKHJldCA9PSBORVRfWE1JVF9TVUNDRVNTKSB7Ci0JCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQlzY2gtPnEucWxlbisrOwogCQlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIAl9CkBAIC0xMTIsNiArMTExLDcgQEAKIAkJCXFkaXNjID0gcS0+cXVldWVzW3EtPmN1cmJhbmRdOwogCQkJc2tiID0gcWRpc2MtPmRlcXVldWUocWRpc2MpOwogCQkJaWYgKHNrYikgeworCQkJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQkJCXNjaC0+cS5xbGVuLS07CiAJCQkJcmV0dXJuIHNrYjsKIAkJCX0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfbmV0ZW0uYyBiL25ldC9zY2hlZC9zY2hfbmV0ZW0uYwppbmRleCAxYzRiY2U4Li42YTMwMDZiIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX25ldGVtLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9uZXRlbS5jCkBAIC0yNDAsNyArMjQwLDYgQEAKIAogCWlmIChsaWtlbHkocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpKSB7CiAJCXNjaC0+cS5xbGVuKys7Ci0JCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCX0gZWxzZSBpZiAobmV0X3htaXRfZHJvcF9jb3VudChyZXQpKSB7CiAJCXNjaC0+cXN0YXRzLmRyb3BzKys7CiAJfQpAQCAtMjg5LDYgKzI4OCw3IEBACiAJCQkJc2tiLT50c3RhbXAudHY2NCA9IDA7CiAjZW5kaWYKIAkJCXByX2RlYnVnKCJuZXRlbV9kZXF1ZXVlOiByZXR1cm4gc2tiPSVwXG4iLCBza2IpOworCQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCQlzY2gtPnEucWxlbi0tOwogCQkJcmV0dXJuIHNrYjsKIAkJfQpAQCAtNDc2LDcgKzQ3Niw2IEBACiAJCV9fc2tiX3F1ZXVlX2FmdGVyKGxpc3QsIHNrYiwgbnNrYik7CiAKIAkJc2NoLT5xc3RhdHMuYmFja2xvZyArPSBxZGlzY19wa3RfbGVuKG5za2IpOwotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgbnNrYik7CiAKIAkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9wcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3ByaW8uYwppbmRleCA5NjYxNThkLi5mYmQ3MTBkIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3ByaW8uYworKysgYi9uZXQvc2NoZWQvc2NoX3ByaW8uYwpAQCAtODQsNyArODQsNiBAQAogCiAJcmV0ID0gcWRpc2NfZW5xdWV1ZShza2IsIHFkaXNjKTsKIAlpZiAocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpIHsKLQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCXNjaC0+cS5xbGVuKys7CiAJCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwogCX0KQEAgLTExNiw2ICsxMTUsNyBAQAogCQlzdHJ1Y3QgUWRpc2MgKnFkaXNjID0gcS0+cXVldWVzW3ByaW9dOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcWRpc2MtPmRlcXVldWUocWRpc2MpOwogCQlpZiAoc2tiKSB7CisJCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJCXNjaC0+cS5xbGVuLS07CiAJCQlyZXR1cm4gc2tiOwogCQl9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3JlZC5jIGIvbmV0L3NjaGVkL3NjaF9yZWQuYwppbmRleCBhNjAwOWM1Li45Zjk4ZGJkIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3JlZC5jCisrKyBiL25ldC9zY2hlZC9zY2hfcmVkLmMKQEAgLTk0LDcgKzk0LDYgQEAKIAogCXJldCA9IHFkaXNjX2VucXVldWUoc2tiLCBjaGlsZCk7CiAJaWYgKGxpa2VseShyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykpIHsKLQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCXNjaC0+cS5xbGVuKys7CiAJfSBlbHNlIGlmIChuZXRfeG1pdF9kcm9wX2NvdW50KHJldCkpIHsKIAkJcS0+c3RhdHMucGRyb3ArKzsKQEAgLTExNCwxMSArMTEzLDEzIEBACiAJc3RydWN0IFFkaXNjICpjaGlsZCA9IHEtPnFkaXNjOwogCiAJc2tiID0gY2hpbGQtPmRlcXVldWUoY2hpbGQpOwotCWlmIChza2IpCisJaWYgKHNrYikgeworCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJc2NoLT5xLnFsZW4tLTsKLQllbHNlIGlmICghcmVkX2lzX2lkbGluZygmcS0+cGFybXMpKQotCQlyZWRfc3RhcnRfb2ZfaWRsZV9wZXJpb2QoJnEtPnBhcm1zKTsKLQorCX0gZWxzZSB7CisJCWlmICghcmVkX2lzX2lkbGluZygmcS0+cGFybXMpKQorCQkJcmVkX3N0YXJ0X29mX2lkbGVfcGVyaW9kKCZxLT5wYXJtcyk7CisJfQogCXJldHVybiBza2I7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfc2ZxLmMgYi9uZXQvc2NoZWQvc2NoX3NmcS5jCmluZGV4IDIzOWVjNTMuLmVkZWE4Y2UgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfc2ZxLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9zZnEuYwpAQCAtNDAyLDEwICs0MDIsOCBAQAogCQlxLT50YWlsID0gc2xvdDsKIAkJc2xvdC0+YWxsb3QgPSBxLT5zY2FsZWRfcXVhbnR1bTsKIAl9Ci0JaWYgKCsrc2NoLT5xLnFsZW4gPD0gcS0+bGltaXQpIHsKLQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CisJaWYgKCsrc2NoLT5xLnFsZW4gPD0gcS0+bGltaXQpCiAJCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwotCX0KIAogCXNmcV9kcm9wKHNjaCk7CiAJcmV0dXJuIE5FVF9YTUlUX0NOOwpAQCAtNDQ1LDYgKzQ0Myw3IEBACiAJfQogCXNrYiA9IHNsb3RfZGVxdWV1ZV9oZWFkKHNsb3QpOwogCXNmcV9kZWMocSwgYSk7CisJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJc2NoLT5xLnFsZW4tLTsKIAlzY2gtPnFzdGF0cy5iYWNrbG9nIC09IHFkaXNjX3BrdF9sZW4oc2tiKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YmYuYyBiL25ldC9zY2hlZC9zY2hfdGJmLmMKaW5kZXggNzc1NjVlNy4uZTkzMTY1OCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF90YmYuYworKysgYi9uZXQvc2NoZWQvc2NoX3RiZi5jCkBAIC0xMzQsNyArMTM0LDYgQEAKIAl9CiAKIAlzY2gtPnEucWxlbisrOwotCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwogfQogCkBAIC0xODcsNiArMTg2LDcgQEAKIAkJCXEtPnB0b2tlbnMgPSBwdG9rczsKIAkJCXNjaC0+cS5xbGVuLS07CiAJCQlzY2gtPmZsYWdzICY9IH5UQ1FfRl9USFJPVFRMRUQ7CisJCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJCXJldHVybiBza2I7CiAJCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90ZXFsLmMgYi9uZXQvc2NoZWQvc2NoX3RlcWwuYwppbmRleCA4NGNlNDhlLi5kODRlNzMyIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3RlcWwuYworKysgYi9uZXQvc2NoZWQvc2NoX3RlcWwuYwpAQCAtODcsNyArODcsNiBAQAogCiAJaWYgKHEtPnEucWxlbiA8IGRldi0+dHhfcXVldWVfbGVuKSB7CiAJCV9fc2tiX3F1ZXVlX3RhaWwoJnEtPnEsIHNrYik7Ci0JCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIAl9CiAKQEAgLTExMSw2ICsxMTAsOCBAQAogCQkJZGF0LT5tLT5zbGF2ZXMgPSBzY2g7CiAJCQluZXRpZl93YWtlX3F1ZXVlKG0pOwogCQl9CisJfSBlbHNlIHsKKwkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJfQogCXNjaC0+cS5xbGVuID0gZGF0LT5xLnFsZW4gKyBkYXRfcXVldWUtPnFkaXNjLT5xLnFsZW47CiAJcmV0dXJuIHNrYjsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwppbmRleCAyY2M0NmYwLi5iMjM0MjhmIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKKysrIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCkBAIC0yMDI5LDExICsyMDI5LDExIEBACiAJCQkqZXJycCA9IHNjdHBfbWFrZV9vcF9lcnJvcl9maXhlZChhc29jLCBjaHVuayk7CiAKIAkJaWYgKCplcnJwKSB7Ci0JCQlzY3RwX2luaXRfY2F1c2VfZml4ZWQoKmVycnAsIFNDVFBfRVJST1JfVU5LTk9XTl9QQVJBTSwKLQkJCQkJV09SRF9ST1VORChudG9ocyhwYXJhbS5wLT5sZW5ndGgpKSk7Ci0JCQlzY3RwX2FkZHRvX2NodW5rX2ZpeGVkKCplcnJwLAotCQkJCQlXT1JEX1JPVU5EKG50b2hzKHBhcmFtLnAtPmxlbmd0aCkpLAotCQkJCQlwYXJhbS52KTsKKwkJCWlmICghc2N0cF9pbml0X2NhdXNlX2ZpeGVkKCplcnJwLCBTQ1RQX0VSUk9SX1VOS05PV05fUEFSQU0sCisJCQkJCVdPUkRfUk9VTkQobnRvaHMocGFyYW0ucC0+bGVuZ3RoKSkpKQorCQkJCXNjdHBfYWRkdG9fY2h1bmtfZml4ZWQoKmVycnAsCisJCQkJCQlXT1JEX1JPVU5EKG50b2hzKHBhcmFtLnAtPmxlbmd0aCkpLAorCQkJCQkJcGFyYW0udik7CiAJCX0gZWxzZSB7CiAJCQkvKiBJZiB0aGVyZSBpcyBubyBtZW1vcnkgZm9yIGdlbmVyYXRpbmcgdGhlIEVSUk9SCiAJCQkgKiByZXBvcnQgYXMgc3BlY2lmaWVkLCBhbiBBQk9SVCB3aWxsIGJlIHRyaWdnZXJlZApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuYwppbmRleCBhMDliMGRkLi44ZTAyNTUwIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zb2NrZXQuYworKysgYi9uZXQvc2N0cC9zb2NrZXQuYwpAQCAtMzQyOCw3ICszNDI4LDcgQEAKIAkJcmV0dmFsID0gc2N0cF9zZXRzb2Nrb3B0X3BlZXJfYWRkcl9wYXJhbXMoc2ssIG9wdHZhbCwgb3B0bGVuKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNDVFBfREVMQVlFRF9BQ0s6CisJY2FzZSBTQ1RQX0RFTEFZRURfU0FDSzoKIAkJcmV0dmFsID0gc2N0cF9zZXRzb2Nrb3B0X2RlbGF5ZWRfYWNrKHNrLCBvcHR2YWwsIG9wdGxlbik7CiAJCWJyZWFrOwogCWNhc2UgU0NUUF9QQVJUSUFMX0RFTElWRVJZX1BPSU5UOgpAQCAtNTMzMyw3ICs1MzMzLDcgQEAKIAkJcmV0dmFsID0gc2N0cF9nZXRzb2Nrb3B0X3BlZXJfYWRkcl9wYXJhbXMoc2ssIGxlbiwgb3B0dmFsLAogCQkJCQkJCSAgb3B0bGVuKTsKIAkJYnJlYWs7Ci0JY2FzZSBTQ1RQX0RFTEFZRURfQUNLOgorCWNhc2UgU0NUUF9ERUxBWUVEX1NBQ0s6CiAJCXJldHZhbCA9IHNjdHBfZ2V0c29ja29wdF9kZWxheWVkX2FjayhzaywgbGVuLCBvcHR2YWwsCiAJCQkJCQkJICBvcHRsZW4pOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKaW5kZXggN2JkM2JiYi4uZDgwMmU5NCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMKKysrIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKQEAgLTE2MDksOSArMTYwOSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHN2Y19iY19zb2NrX2ZyZWUoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KQogewotCWlmICh4cHJ0KSB7Ci0JCWtmcmVlKHhwcnQtPnhwdF9iY19zaWQpOworCWlmICh4cHJ0KQogCQlrZnJlZShjb250YWluZXJfb2YoeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KSk7Ci0JfQogfQogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9uZXQvd2lyZWxlc3MvS2NvbmZpZwppbmRleCBkMGVlMjkwLi4xZjFlZjcwIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvS2NvbmZpZworKysgYi9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtOTUsNyArOTUsNyBAQAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIENGRzgwMjExX0lOVEVSTkFMX1JFR0RCCi0JYm9vbCAidXNlIHN0YXRpY2FsbHkgY29tcGlsZWQgcmVndWxhdG9yeSBydWxlcyBkYXRhYmFzZSIgaWYgRU1CRURERUQKKwlib29sICJ1c2Ugc3RhdGljYWxseSBjb21waWxlZCByZWd1bGF0b3J5IHJ1bGVzIGRhdGFiYXNlIiBpZiBFWFBFUlQKIAlkZWZhdWx0IG4KIAlkZXBlbmRzIG9uIENGRzgwMjExCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwppbmRleCAzZTVkYmQ0Li5kMTEyZjAzIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYworKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwpAQCAtODAyLDExICs4MDIsMTEgQEAKIAkJCXJldHVybiBmcmVxOwogCQlpZiAoZnJlcSA9PSAwKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXdkZXZfbG9jayh3ZGV2KTsKIAkJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCQl3ZGV2X2xvY2sod2Rldik7CiAJCWVyciA9IGNmZzgwMjExX3NldF9mcmVxKHJkZXYsIHdkZXYsIGZyZXEsIE5MODAyMTFfQ0hBTl9OT19IVCk7Ci0JCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOwogCQl3ZGV2X3VubG9jayh3ZGV2KTsKKwkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CiAJCXJldHVybiBlcnI7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvbmV0L3gyNS94MjVfZmFjaWxpdGllcy5jIGIvbmV0L3gyNS94MjVfZmFjaWxpdGllcy5jCmluZGV4IDU1MTg3YzguLjQwNjIwNzUgMTAwNjQ0Ci0tLSBhL25ldC94MjUveDI1X2ZhY2lsaXRpZXMuYworKysgYi9uZXQveDI1L3gyNV9mYWNpbGl0aWVzLmMKQEAgLTI3LDkgKzI3LDE5IEBACiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQveDI1Lmg+CiAKLS8qCi0gKiBQYXJzZSBhIHNldCBvZiBmYWNpbGl0aWVzIGludG8gdGhlIGZhY2lsaXRpZXMgc3RydWN0dXJlcy4gVW5yZWNvZ25pc2VkCi0gKglmYWNpbGl0aWVzIGFyZSB3cml0dGVuIHRvIHRoZSBkZWJ1ZyBsb2cgZmlsZS4KKy8qKgorICogeDI1X3BhcnNlX2ZhY2lsaXRpZXMgLSBQYXJzZSBmYWNpbGl0aWVzIGZyb20gc2tiIGludG8gdGhlIGZhY2lsaXRpZXMgc3RydWN0cworICoKKyAqIEBza2I6IHNrX2J1ZmYgdG8gcGFyc2UKKyAqIEBmYWNpbGl0aWVzOiBSZWd1bGFyIGZhY2lsaXRlcywgdXBkYXRlZCBhcyBmYWNpbGl0aWVzIGFyZSBmb3VuZAorICogQGR0ZV9mYWNzOiBJVFUgRFRFIGZhY2lsaXRpZXMsIHVwZGF0ZWQgYXMgRFRFIGZhY2lsaXRpZXMgYXJlIGZvdW5kCisgKiBAdmNfZmFjX21hc2s6IG1hc2sgaXMgdXBkYXRlZCB3aXRoIGFsbCBmYWNpbGl0aWVzIGZvdW5kCisgKgorICogUmV0dXJuIGNvZGVzOgorICogIC0xIC0gUGFyc2luZyBlcnJvciwgY2FsbGVyIHNob3VsZCBkcm9wIGNhbGwgYW5kIGNsZWFuIHVwCisgKiAgIDAgLSBQYXJzZSBPSywgdGhpcyBza2IgaGFzIG5vIGZhY2lsaXRpZXMKKyAqICA+MCAtIFBhcnNlIE9LLCByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGZhY2lsaXRpZXMgaGVhZGVyCisgKgogICovCiBpbnQgeDI1X3BhcnNlX2ZhY2lsaXRpZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHgyNV9mYWNpbGl0aWVzICpmYWNpbGl0aWVzLAogCQlzdHJ1Y3QgeDI1X2R0ZV9mYWNpbGl0aWVzICpkdGVfZmFjcywgdW5zaWduZWQgbG9uZyAqdmNfZmFjX21hc2spCkBAIC02Miw3ICs3Miw3IEBACiAJCXN3aXRjaCAoKnAgJiBYMjVfRkFDX0NMQVNTX01BU0spIHsKIAkJY2FzZSBYMjVfRkFDX0NMQVNTX0E6CiAJCQlpZiAobGVuIDwgMikKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gLTE7CiAJCQlzd2l0Y2ggKCpwKSB7CiAJCQljYXNlIFgyNV9GQUNfUkVWRVJTRToKIAkJCQlpZigocFsxXSAmIDB4ODEpID09IDB4ODEpIHsKQEAgLTEwNyw3ICsxMTcsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgWDI1X0ZBQ19DTEFTU19COgogCQkJaWYgKGxlbiA8IDMpCi0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIC0xOwogCQkJc3dpdGNoICgqcCkgewogCQkJY2FzZSBYMjVfRkFDX1BBQ0tFVF9TSVpFOgogCQkJCWZhY2lsaXRpZXMtPnBhY3NpemVfaW4gID0gcFsxXTsKQEAgLTEzMCw3ICsxNDAsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgWDI1X0ZBQ19DTEFTU19DOgogCQkJaWYgKGxlbiA8IDQpCi0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIC0xOwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIlguMjU6IHVua25vd24gZmFjaWxpdHkgJTAyWCwgIgogCQkJICAgICAgICJ2YWx1ZXMgJTAyWCwgJTAyWCwgJTAyWFxuIiwKIAkJCSAgICAgICBwWzBdLCBwWzFdLCBwWzJdLCBwWzNdKTsKQEAgLTEzOSwxOCArMTQ5LDE4IEBACiAJCQlicmVhazsKIAkJY2FzZSBYMjVfRkFDX0NMQVNTX0Q6CiAJCQlpZiAobGVuIDwgcFsxXSArIDIpCi0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIC0xOwogCQkJc3dpdGNoICgqcCkgewogCQkJY2FzZSBYMjVfRkFDX0NBTExJTkdfQUU6CiAJCQkJaWYgKHBbMV0gPiBYMjVfTUFYX0RURV9GQUNJTF9MRU4gfHwgcFsxXSA8PSAxKQotCQkJCQlyZXR1cm4gMDsKKwkJCQkJcmV0dXJuIC0xOwogCQkJCWR0ZV9mYWNzLT5jYWxsaW5nX2xlbiA9IHBbMl07CiAJCQkJbWVtY3B5KGR0ZV9mYWNzLT5jYWxsaW5nX2FlLCAmcFszXSwgcFsxXSAtIDEpOwogCQkJCSp2Y19mYWNfbWFzayB8PSBYMjVfTUFTS19DQUxMSU5HX0FFOwogCQkJCWJyZWFrOwogCQkJY2FzZSBYMjVfRkFDX0NBTExFRF9BRToKIAkJCQlpZiAocFsxXSA+IFgyNV9NQVhfRFRFX0ZBQ0lMX0xFTiB8fCBwWzFdIDw9IDEpCi0JCQkJCXJldHVybiAwOworCQkJCQlyZXR1cm4gLTE7CiAJCQkJZHRlX2ZhY3MtPmNhbGxlZF9sZW4gPSBwWzJdOwogCQkJCW1lbWNweShkdGVfZmFjcy0+Y2FsbGVkX2FlLCAmcFszXSwgcFsxXSAtIDEpOwogCQkJCSp2Y19mYWNfbWFzayB8PSBYMjVfTUFTS19DQUxMRURfQUU7CmRpZmYgLS1naXQgYS9uZXQveDI1L3gyNV9pbi5jIGIvbmV0L3gyNS94MjVfaW4uYwppbmRleCBmNzI5ZjAyLi4xNWRlNjVmIDEwMDY0NAotLS0gYS9uZXQveDI1L3gyNV9pbi5jCisrKyBiL25ldC94MjUveDI1X2luLmMKQEAgLTkxLDEwICs5MSwxMCBAQAogewogCXN0cnVjdCB4MjVfYWRkcmVzcyBzb3VyY2VfYWRkciwgZGVzdF9hZGRyOwogCWludCBsZW47CisJc3RydWN0IHgyNV9zb2NrICp4MjUgPSB4MjVfc2soc2spOwogCiAJc3dpdGNoIChmcmFtZXR5cGUpIHsKIAkJY2FzZSBYMjVfQ0FMTF9BQ0NFUFRFRDogewotCQkJc3RydWN0IHgyNV9zb2NrICp4MjUgPSB4MjVfc2soc2spOwogCiAJCQl4MjVfc3RvcF90aW1lcihzayk7CiAJCQl4MjUtPmNvbmRpdGlvbiA9IDB4MDA7CkBAIC0xMTMsMTQgKzExMywxNiBAQAogCQkJCQkJJmRlc3RfYWRkcik7CiAJCQlpZiAobGVuID4gMCkKIAkJCQlza2JfcHVsbChza2IsIGxlbik7CisJCQllbHNlIGlmIChsZW4gPCAwKQorCQkJCWdvdG8gb3V0X2NsZWFyOwogCiAJCQlsZW4gPSB4MjVfcGFyc2VfZmFjaWxpdGllcyhza2IsICZ4MjUtPmZhY2lsaXRpZXMsCiAJCQkJCQkmeDI1LT5kdGVfZmFjaWxpdGllcywKIAkJCQkJCSZ4MjUtPnZjX2ZhY2lsX21hc2spOwogCQkJaWYgKGxlbiA+IDApCiAJCQkJc2tiX3B1bGwoc2tiLCBsZW4pOwotCQkJZWxzZQotCQkJCXJldHVybiAtMTsKKwkJCWVsc2UgaWYgKGxlbiA8IDApCisJCQkJZ290byBvdXRfY2xlYXI7CiAJCQkvKgogCQkJICoJQ29weSBhbnkgQ2FsbCBVc2VyIERhdGEuCiAJCQkgKi8KQEAgLTE0NCw2ICsxNDYsMTIgQEAKIAl9CiAKIAlyZXR1cm4gMDsKKworb3V0X2NsZWFyOgorCXgyNV93cml0ZV9pbnRlcm5hbChzaywgWDI1X0NMRUFSX1JFUVVFU1QpOworCXgyNS0+c3RhdGUgPSBYMjVfU1RBVEVfMjsKKwl4MjVfc3RhcnRfdDIzdGltZXIoc2spOworCXJldHVybiAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L3gyNS94MjVfbGluay5jIGIvbmV0L3gyNS94MjVfbGluay5jCmluZGV4IDRjYmM5NDIuLjIxMzA2OTIgMTAwNjQ0Ci0tLSBhL25ldC94MjUveDI1X2xpbmsuYworKysgYi9uZXQveDI1L3gyNV9saW5rLmMKQEAgLTM5Niw5ICszOTYsMTIgQEAKIAl3cml0ZV9sb2NrX2JoKCZ4MjVfbmVpZ2hfbGlzdF9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgdG1wLCAmeDI1X25laWdoX2xpc3QpIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwogCQluYiA9IGxpc3RfZW50cnkoZW50cnksIHN0cnVjdCB4MjVfbmVpZ2gsIG5vZGUpOworCQlkZXYgPSBuYi0+ZGV2OwogCQlfX3gyNV9yZW1vdmVfbmVpZ2gobmIpOwotCQlkZXZfcHV0KG5iLT5kZXYpOworCQlkZXZfcHV0KGRldik7CiAJfQogCXdyaXRlX3VubG9ja19iaCgmeDI1X25laWdoX2xpc3RfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwppbmRleCA4YjNlZjQwLi42NDU5NTg4IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jCisrKyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKQEAgLTEzNDAsMTAgKzEzNDAsMTMgQEAKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9Ci0JeGRzdCA9IGRzdF9hbGxvYyhkc3Rfb3BzKSA/OiBFUlJfUFRSKC1FTk9CVUZTKTsKKwl4ZHN0ID0gZHN0X2FsbG9jKGRzdF9vcHMpOwogCXhmcm1fcG9saWN5X3B1dF9hZmluZm8oYWZpbmZvKTsKIAotCXhkc3QtPmZsby5vcHMgPSAmeGZybV9idW5kbGVfZmNfb3BzOworCWlmIChsaWtlbHkoeGRzdCkpCisJCXhkc3QtPmZsby5vcHMgPSAmeGZybV9idW5kbGVfZmNfb3BzOworCWVsc2UKKwkJeGRzdCA9IEVSUl9QVFIoLUVOT0JVRlMpOwogCiAJcmV0dXJuIHhkc3Q7CiB9CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCmluZGV4IGQ1ZTFlMGIuLjYxMjkxOTYgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jCisrKyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCkBAIC0yMTg5LDcgKzIxODksNyBAQAogCiAJaWYgKCh0eXBlID09IChYRlJNX01TR19HRVRTQSAtIFhGUk1fTVNHX0JBU0UpIHx8CiAJICAgICB0eXBlID09IChYRlJNX01TR19HRVRQT0xJQ1kgLSBYRlJNX01TR19CQVNFKSkgJiYKLQkgICAgKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9EVU1QKSA9PSBOTE1fRl9EVU1QKSB7CisJICAgIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfRFVNUCkpIHsKIAkJaWYgKGxpbmstPmR1bXAgPT0gTlVMTCkKIAkJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL2Jhc2ljL2ZpeGRlcC5jIGIvc2NyaXB0cy9iYXNpYy9maXhkZXAuYwppbmRleCBjOWExNmFiLi42Yzk0YzZjIDEwMDY0NAotLS0gYS9zY3JpcHRzL2Jhc2ljL2ZpeGRlcC5jCisrKyBiL3NjcmlwdHMvYmFzaWMvZml4ZGVwLmMKQEAgLTMxNSw2ICszMTUsNyBAQAogCWNoYXIgKmVuZCA9IG0gKyBsZW47CiAJY2hhciAqcDsKIAljaGFyIHNbUEFUSF9NQVhdOworCWludCBmaXJzdDsKIAogCXAgPSBzdHJjaHIobSwgJzonKTsKIAlpZiAoIXApIHsKQEAgLTMyNyw2ICszMjgsNyBAQAogCiAJY2xlYXJfY29uZmlnKCk7CiAKKwlmaXJzdCA9IDE7CiAJd2hpbGUgKG0gPCBlbmQpIHsKIAkJd2hpbGUgKG0gPCBlbmQgJiYgKCptID09ICcgJyB8fCAqbSA9PSAnXFwnIHx8ICptID09ICdcbicpKQogCQkJbSsrOwpAQCAtMzQwLDkgKzM0MiwxNyBAQAogCQlpZiAoc3RycmNtcChzLCAiaW5jbHVkZS9nZW5lcmF0ZWQvYXV0b2NvbmYuaCIpICYmCiAJCSAgICBzdHJyY21wKHMsICJhcmNoL3VtL2luY2x1ZGUvdW1sLWNvbmZpZy5oIikgJiYKIAkJICAgIHN0cnJjbXAocywgIi52ZXIiKSkgewotCQkJcHJpbnRmKCIgICVzIFxcXG4iLCBzKTsKKwkJCS8qCisJCQkgKiBEbyBub3Qgb3V0cHV0IHRoZSBmaXJzdCBkZXBlbmRlbmN5ICh0aGUKKwkJCSAqIHNvdXJjZSBmaWxlKSwgc28gdGhhdCBrYnVpbGQgaXMgbm90IGNvbmZ1c2VkCisJCQkgKiBpZiBhIC5jIGZpbGUgaXMgcmV3cml0dGVuIGludG8gLlMgb3IgdmljZQorCQkJICogdmVyc2EuCisJCQkgKi8KKwkJCWlmICghZmlyc3QpCisJCQkJcHJpbnRmKCIgICVzIFxcXG4iLCBzKTsKIAkJCWRvX2NvbmZpZ19maWxlKHMpOwogCQl9CisJCWZpcnN0ID0gMDsKIAkJbSA9IHAgKyAxOwogCX0KIAlwcmludGYoIlxuJXM6ICQoZGVwc18lcylcblxuIiwgdGFyZ2V0LCB0YXJnZXQpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL2J1aWxkZGViIGIvc2NyaXB0cy9wYWNrYWdlL2J1aWxkZGViCmluZGV4IGIwYjIzNTcuLmY2Y2JjM2QgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcGFja2FnZS9idWlsZGRlYgorKysgYi9zY3JpcHRzL3BhY2thZ2UvYnVpbGRkZWIKQEAgLTIzOCwxMiArMjM4LDEyIEBACiBmaQogCiAjIEJ1aWxkIGhlYWRlciBwYWNrYWdlCi1maW5kIC4gLW5hbWUgTWFrZWZpbGUgLW8gLW5hbWUgS2NvbmZpZ1wqIC1vIC1uYW1lIFwqLnBsID4gL3RtcC9maWxlcyQkCi1maW5kIGFyY2gveDg2L2luY2x1ZGUgaW5jbHVkZSBzY3JpcHRzIC10eXBlIGYgPj4gL3RtcC9maWxlcyQkCisoY2QgJHNyY3RyZWU7IGZpbmQgLiAtbmFtZSBNYWtlZmlsZSAtbyAtbmFtZSBLY29uZmlnXCogLW8gLW5hbWUgXCoucGwgPiAvdG1wL2ZpbGVzJCQpCisoY2QgJHNyY3RyZWU7IGZpbmQgYXJjaC8kU1JDQVJDSC9pbmNsdWRlIGluY2x1ZGUgc2NyaXB0cyAtdHlwZSBmID4+IC90bXAvZmlsZXMkJCkKIChjZCAkb2JqdHJlZTsgZmluZCAuY29uZmlnIE1vZHVsZS5zeW12ZXJzIGluY2x1ZGUgc2NyaXB0cyAtdHlwZSBmID4+IC90bXAvb2JqZmlsZXMkJCkKIGRlc3RkaXI9JGtlcm5lbF9oZWFkZXJzX2Rpci91c3Ivc3JjL2xpbnV4LWhlYWRlcnMtJHZlcnNpb24KIG1rZGlyIC1wICIkZGVzdGRpciIKLXRhciAtYyAtZiAtIC1UIC90bXAvZmlsZXMkJCB8IChjZCAkZGVzdGRpcjsgdGFyIC14ZiAtKQorKGNkICRzcmN0cmVlOyB0YXIgLWMgLWYgLSAtVCAvdG1wL2ZpbGVzJCQpIHwgKGNkICRkZXN0ZGlyOyB0YXIgLXhmIC0pCiAoY2QgJG9ianRyZWU7IHRhciAtYyAtZiAtIC1UIC90bXAvb2JqZmlsZXMkJCkgfCAoY2QgJGRlc3RkaXI7IHRhciAteGYgLSkKIHJtIC1mIC90bXAvZmlsZXMkJCAvdG1wL29iamZpbGVzJCQKIGFyY2g9JChkcGtnIC0tcHJpbnQtYXJjaGl0ZWN0dXJlKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9NYWtlZmlsZSBiL3NlY3VyaXR5L2tleXMvTWFrZWZpbGUKaW5kZXggNmM5NDEwNS4uMWJmMDkwYSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9NYWtlZmlsZQorKysgYi9zZWN1cml0eS9rZXlzL01ha2VmaWxlCkBAIC0xMyw4ICsxMyw4IEBACiAJcmVxdWVzdF9rZXlfYXV0aC5vIFwKIAl1c2VyX2RlZmluZWQubwogCi1vYmotJChDT05GSUdfVFJVU1RFRF9LRVlTKSArPSB0cnVzdGVkX2RlZmluZWQubwotb2JqLSQoQ09ORklHX0VOQ1JZUFRFRF9LRVlTKSArPSBlbmNyeXB0ZWRfZGVmaW5lZC5vCitvYmotJChDT05GSUdfVFJVU1RFRF9LRVlTKSArPSB0cnVzdGVkLm8KK29iai0kKENPTkZJR19FTkNSWVBURURfS0VZUykgKz0gZW5jcnlwdGVkLm8KIG9iai0kKENPTkZJR19LRVlTX0NPTVBBVCkgKz0gY29tcGF0Lm8KIG9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm8KIG9iai0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bC5vCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2NvbXBhdC5jIGIvc2VjdXJpdHkva2V5cy9jb21wYXQuYwppbmRleCA3OTJjMGE2Li4wN2E1ZjM1IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2NvbXBhdC5jCisrKyBiL3NlY3VyaXR5L2tleXMvY29tcGF0LmMKQEAgLTEsNCArMSw0IEBACi0vKiBjb21wYXQuYzogMzItYml0IGNvbXBhdGliaWxpdHkgc3lzY2FsbCBmb3IgNjQtYml0IHN5c3RlbXMKKy8qIDMyLWJpdCBjb21wYXRpYmlsaXR5IHN5c2NhbGwgZm9yIDY0LWJpdCBzeXN0ZW1zCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA0LTUgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQpAQCAtMTQsMTMgKzE0LDEzIEBACiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIHRoZSBrZXkgY29udHJvbCBzeXN0ZW0gY2FsbCwgMzItYml0IGNvbXBhdGliaWxpdHkgdmVyc2lvbiBmb3IgNjQtYml0IGFyY2hzCi0gKiAtIHRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSA2NC1iaXQgYXJjaCB1c2VzIHdlaXJkIHBvaW50ZXJzIGluCi0gKiAgIDMyLWJpdCBtb2RlIG9yIGRvZXNuJ3QgZ3VhcmFudGVlIHRoYXQgdGhlIHRvcCAzMi1iaXRzIG9mIHRoZSBhcmd1bWVudAotICogICByZWdpc3RlcnMgb24gdGFraW5nIGEgMzItYml0IHN5c2NhbGwgYXJlIHplcm8KLSAqIC0gaWYgeW91IGNhbiwgeW91IHNob3VsZCBjYWxsIHN5c19rZXljdGwgZGlyZWN0bHkKKyAqIFRoZSBrZXkgY29udHJvbCBzeXN0ZW0gY2FsbCwgMzItYml0IGNvbXBhdGliaWxpdHkgdmVyc2lvbiBmb3IgNjQtYml0IGFyY2hzCisgKgorICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgdGhlIDY0LWJpdCBhcmNoIHVzZXMgd2VpcmQgcG9pbnRlcnMgaW4gMzItYml0CisgKiBtb2RlIG9yIGRvZXNuJ3QgZ3VhcmFudGVlIHRoYXQgdGhlIHRvcCAzMi1iaXRzIG9mIHRoZSBhcmd1bWVudCByZWdpc3RlcnMgb24KKyAqIHRha2luZyBhIDMyLWJpdCBzeXNjYWxsIGFyZSB6ZXJvLiAgSWYgeW91IGNhbiwgeW91IHNob3VsZCBjYWxsIHN5c19rZXljdGwoKQorICogZGlyZWN0bHkuCiAgKi8KIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2tleWN0bCh1MzIgb3B0aW9uLAogCQkJCSAgdTMyIGFyZzIsIHUzMiBhcmczLCB1MzIgYXJnNCwgdTMyIGFyZzUpCkBAIC04OCw1ICs4OCw0IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KLQotfSAvKiBlbmQgY29tcGF0X3N5c19rZXljdGwoKSAqLworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWRfZGVmaW5lZC5jIGIvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQuYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBzZWN1cml0eS9rZXlzL2VuY3J5cHRlZF9kZWZpbmVkLmMKcmVuYW1lIHRvIHNlY3VyaXR5L2tleXMvZW5jcnlwdGVkLmMKaW5kZXggMzJkMjdjOC4uOWU3ZTRjZSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWRfZGVmaW5lZC5jCisrKyBiL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkLmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxjcnlwdG8vc2hhLmg+CiAjaW5jbHVkZSA8Y3J5cHRvL2Flcy5oPgogCi0jaW5jbHVkZSAiZW5jcnlwdGVkX2RlZmluZWQuaCIKKyNpbmNsdWRlICJlbmNyeXB0ZWQuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgS0VZX1RSVVNURURfUFJFRklYW10gPSAidHJ1c3RlZDoiOwogc3RhdGljIGNvbnN0IGNoYXIgS0VZX1VTRVJfUFJFRklYW10gPSAidXNlcjoiOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWRfZGVmaW5lZC5oIGIvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWRfZGVmaW5lZC5oCnJlbmFtZSB0byBzZWN1cml0eS9rZXlzL2VuY3J5cHRlZC5oCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2djLmMgYi9zZWN1cml0eS9rZXlzL2djLmMKaW5kZXggYTQ2ZTgyNS4uODlkZjZiNSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9nYy5jCisrKyBiL3NlY3VyaXR5L2tleXMvZ2MuYwpAQCAtMzIsOCArMzIsOCBAQAogc3RhdGljIHRpbWVfdCBrZXlfZ2NfbmV3X3RpbWVyOwogCiAvKgotICogU2NoZWR1bGUgYSBnYXJiYWdlIGNvbGxlY3Rpb24gcnVuCi0gKiAtIHByZWNpc2lvbiBpc24ndCBwYXJ0aWN1bGFybHkgaW1wb3J0YW50CisgKiBTY2hlZHVsZSBhIGdhcmJhZ2UgY29sbGVjdGlvbiBydW4uCisgKiAtIHRpbWUgcHJlY2lzaW9uIGlzbid0IHBhcnRpY3VsYXJseSBpbXBvcnRhbnQKICAqLwogdm9pZCBrZXlfc2NoZWR1bGVfZ2ModGltZV90IGdjX2F0KQogewpAQCAtNjEsOCArNjEsOSBAQAogfQogCiAvKgotICogR2FyYmFnZSBjb2xsZWN0IHBvaW50ZXJzIGZyb20gYSBrZXlyaW5nCi0gKiAtIHJldHVybiB0cnVlIGlmIHdlIGFsdGVyZWQgdGhlIGtleXJpbmcKKyAqIEdhcmJhZ2UgY29sbGVjdCBwb2ludGVycyBmcm9tIGEga2V5cmluZy4KKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBhbHRlcmVkIHRoZSBrZXlyaW5nLgogICovCiBzdGF0aWMgYm9vbCBrZXlfZ2Nfa2V5cmluZyhzdHJ1Y3Qga2V5ICprZXlyaW5nLCB0aW1lX3QgbGltaXQpCiAJX19yZWxlYXNlcyhrZXlfc2VyaWFsX2xvY2spCkBAIC0xMDcsOSArMTA4LDggQEAKIH0KIAogLyoKLSAqIEdhcmJhZ2UgY29sbGVjdG9yIGZvciBrZXlzCi0gKiAtIHRoaXMgaW52b2x2ZXMgc2Nhbm5pbmcgdGhlIGtleXJpbmdzIGZvciBkZWFkLCBleHBpcmVkIGFuZCByZXZva2VkIGtleXMKLSAqICAgdGhhdCBoYXZlIG92ZXJzdGF5ZWQgdGhlaXIgd2VsY29tZQorICogR2FyYmFnZSBjb2xsZWN0b3IgZm9yIGtleXMuICBUaGlzIGludm9sdmVzIHNjYW5uaW5nIHRoZSBrZXlyaW5ncyBmb3IgZGVhZCwKKyAqIGV4cGlyZWQgYW5kIHJldm9rZWQga2V5cyB0aGF0IGhhdmUgb3ZlcnN0YXllZCB0aGVpciB3ZWxjb21lCiAgKi8KIHN0YXRpYyB2b2lkIGtleV9nYXJiYWdlX2NvbGxlY3RvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2ludGVybmFsLmggYi9zZWN1cml0eS9rZXlzL2ludGVybmFsLmgKaW5kZXggNTZhMTMzZC4uYTUyYWE3YyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oCisrKyBiL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaApAQCAtMSw0ICsxLDQgQEAKLS8qIGludGVybmFsLmg6IGF1dGhlbnRpY2F0aW9uIHRva2VuIGFuZCBhY2Nlc3Mga2V5IG1hbmFnZW1lbnQgaW50ZXJuYWwgZGVmcworLyogQXV0aGVudGljYXRpb24gdG9rZW4gYW5kIGFjY2VzcyBrZXkgbWFuYWdlbWVudCBpbnRlcm5hbCBkZWZzCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAzLTUsIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQpAQCAtMzUsMTAgKzM1LDEyIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBrZWVwIHRyYWNrIG9mIGtleXMgZm9yIGEgdXNlcgotICogLSB0aGlzIG5lZWRzIHRvIGJlIHNlcGFyYXRlIHRvIHVzZXJfc3RydWN0IHRvIGF2b2lkIGEgcmVmY291bnQtbG9vcAotICogICAodXNlcl9zdHJ1Y3QgcGlucyBzb21lIGtleXJpbmdzIHdoaWNoIHBpbiB0aGlzIHN0cnVjdCkKLSAqIC0gdGhpcyBhbHNvIGtlZXBzIHRyYWNrIG9mIGtleXMgdW5kZXIgcmVxdWVzdCBmcm9tIHVzZXJzcGFjZSBmb3IgdGhpcyBVSUQKKyAqIEtlZXAgdHJhY2sgb2Yga2V5cyBmb3IgYSB1c2VyLgorICoKKyAqIFRoaXMgbmVlZHMgdG8gYmUgc2VwYXJhdGUgdG8gdXNlcl9zdHJ1Y3QgdG8gYXZvaWQgYSByZWZjb3VudC1sb29wCisgKiAodXNlcl9zdHJ1Y3QgcGlucyBzb21lIGtleXJpbmdzIHdoaWNoIHBpbiB0aGlzIHN0cnVjdCkuCisgKgorICogV2UgYWxzbyBrZWVwIHRyYWNrIG9mIGtleXMgdW5kZXIgcmVxdWVzdCBmcm9tIHVzZXJzcGFjZSBmb3IgdGhpcyBVSUQgaGVyZS4KICAqLwogc3RydWN0IGtleV91c2VyIHsKIAlzdHJ1Y3QgcmJfbm9kZQkJbm9kZTsKQEAgLTYyLDcgKzY0LDcgQEAKIGV4dGVybiB2b2lkIGtleV91c2VyX3B1dChzdHJ1Y3Qga2V5X3VzZXIgKnVzZXIpOwogCiAvKgotICoga2V5IHF1b3RhIGxpbWl0cworICogS2V5IHF1b3RhIGxpbWl0cy4KICAqIC0gcm9vdCBoYXMgaXRzIG93biBzZXBhcmF0ZSBsaW1pdHMgdG8gZXZlcnlvbmUgZWxzZQogICovCiBleHRlcm4gdW5zaWduZWQga2V5X3F1b3RhX3Jvb3RfbWF4a2V5czsKQEAgLTg1LDEzICs4NywxMyBAQAogZXh0ZXJuIGludCBfX2tleV9saW5rX2JlZ2luKHN0cnVjdCBrZXkgKmtleXJpbmcsCiAJCQkgICAgY29uc3Qgc3RydWN0IGtleV90eXBlICp0eXBlLAogCQkJICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLAotCQkJICAgIHN0cnVjdCBrZXlyaW5nX2xpc3QgKipfcHJlYWxsb2MpOworCQkJICAgIHVuc2lnbmVkIGxvbmcgKl9wcmVhbGxvYyk7CiBleHRlcm4gaW50IF9fa2V5X2xpbmtfY2hlY2tfbGl2ZV9rZXkoc3RydWN0IGtleSAqa2V5cmluZywgc3RydWN0IGtleSAqa2V5KTsKIGV4dGVybiB2b2lkIF9fa2V5X2xpbmsoc3RydWN0IGtleSAqa2V5cmluZywgc3RydWN0IGtleSAqa2V5LAotCQkgICAgICAgc3RydWN0IGtleXJpbmdfbGlzdCAqKl9wcmVhbGxvYyk7CisJCSAgICAgICB1bnNpZ25lZCBsb25nICpfcHJlYWxsb2MpOwogZXh0ZXJuIHZvaWQgX19rZXlfbGlua19lbmQoc3RydWN0IGtleSAqa2V5cmluZywKIAkJCSAgIHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKLQkJCSAgIHN0cnVjdCBrZXlyaW5nX2xpc3QgKnByZWFsbG9jKTsKKwkJCSAgIHVuc2lnbmVkIGxvbmcgcHJlYWxsb2MpOwogCiBleHRlcm4ga2V5X3JlZl90IF9fa2V5cmluZ19zZWFyY2hfb25lKGtleV9yZWZfdCBrZXlyaW5nX3JlZiwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCkBAIC0xNDYsMTMgKzE0OCwxMyBAQAogZXh0ZXJuIHZvaWQga2V5cmluZ19nYyhzdHJ1Y3Qga2V5ICprZXlyaW5nLCB0aW1lX3QgbGltaXQpOwogZXh0ZXJuIHZvaWQga2V5X3NjaGVkdWxlX2djKHRpbWVfdCBleHBpcnlfYXQpOwogCi0vKgotICogY2hlY2sgdG8gc2VlIHdoZXRoZXIgcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIHVzZSBhIGtleSBpbiB0aGUgZGVzaXJlZCB3YXkKLSAqLwogZXh0ZXJuIGludCBrZXlfdGFza19wZXJtaXNzaW9uKGNvbnN0IGtleV9yZWZfdCBrZXlfcmVmLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLAogCQkJICAgICAgIGtleV9wZXJtX3QgcGVybSk7CiAKKy8qCisgKiBDaGVjayB0byBzZWUgd2hldGhlciBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gdXNlIGEga2V5IGluIHRoZSBkZXNpcmVkIHdheS4KKyAqLwogc3RhdGljIGlubGluZSBpbnQga2V5X3Blcm1pc3Npb24oY29uc3Qga2V5X3JlZl90IGtleV9yZWYsIGtleV9wZXJtX3QgcGVybSkKIHsKIAlyZXR1cm4ga2V5X3Rhc2tfcGVybWlzc2lvbihrZXlfcmVmLCBjdXJyZW50X2NyZWQoKSwgcGVybSk7CkBAIC0xNjgsNyArMTcwLDcgQEAKICNkZWZpbmUJS0VZX0FMTAkJMHgzZgkvKiBhbGwgdGhlIGFib3ZlIHBlcm1pc3Npb25zICovCiAKIC8qCi0gKiByZXF1ZXN0X2tleSBhdXRob3Jpc2F0aW9uCisgKiBBdXRob3Jpc2F0aW9uIHJlY29yZCBmb3IgcmVxdWVzdF9rZXkoKS4KICAqLwogc3RydWN0IHJlcXVlc3Rfa2V5X2F1dGggewogCXN0cnVjdCBrZXkJCSp0YXJnZXRfa2V5OwpAQCAtMTg4LDcgKzE5MCw3IEBACiBleHRlcm4gc3RydWN0IGtleSAqa2V5X2dldF9pbnN0YW50aWF0aW9uX2F1dGhrZXkoa2V5X3NlcmlhbF90IHRhcmdldF9pZCk7CiAKIC8qCi0gKiBrZXljdGwgZnVuY3Rpb25zCisgKiBrZXljdGwoKSBmdW5jdGlvbnMKICAqLwogZXh0ZXJuIGxvbmcga2V5Y3RsX2dldF9rZXlyaW5nX0lEKGtleV9zZXJpYWxfdCwgaW50KTsKIGV4dGVybiBsb25nIGtleWN0bF9qb2luX3Nlc3Npb25fa2V5cmluZyhjb25zdCBjaGFyIF9fdXNlciAqKTsKQEAgLTIxNCw3ICsyMTYsNyBAQAogZXh0ZXJuIGxvbmcga2V5Y3RsX3Nlc3Npb25fdG9fcGFyZW50KHZvaWQpOwogCiAvKgotICogZGVidWdnaW5nIGtleSB2YWxpZGF0aW9uCisgKiBEZWJ1Z2dpbmcga2V5IHZhbGlkYXRpb24KICAqLwogI2lmZGVmIEtFWV9ERUJVR0dJTkcKIGV4dGVybiB2b2lkIF9fa2V5X2NoZWNrKGNvbnN0IHN0cnVjdCBrZXkgKik7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleS5jIGIvc2VjdXJpdHkva2V5cy9rZXkuYwppbmRleCBjMWVhYzgwLi4xYzJkNDNkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleS5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5LmMKQEAgLTM5LDEwICszOSwxMCBAQAogc3RhdGljIHZvaWQga2V5X2NsZWFudXAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyBERUNMQVJFX1dPUksoa2V5X2NsZWFudXBfdGFzaywga2V5X2NsZWFudXApOwogCi0vKiB3ZSBzZXJpYWxpc2Uga2V5IGluc3RhbnRpYXRpb24gYW5kIGxpbmsgKi8KKy8qIFdlIHNlcmlhbGlzZSBrZXkgaW5zdGFudGlhdGlvbiBhbmQgbGluayAqLwogREVGSU5FX01VVEVYKGtleV9jb25zdHJ1Y3Rpb25fbXV0ZXgpOwogCi0vKiBhbnkga2V5IHdobydzIHR5cGUgZ2V0cyB1bmVnaXN0ZXJlZCB3aWxsIGJlIHJlLXR5cGVkIHRvIHRoaXMgKi8KKy8qIEFueSBrZXkgd2hvJ3MgdHlwZSBnZXRzIHVuZWdpc3RlcmVkIHdpbGwgYmUgcmUtdHlwZWQgdG8gdGhpcyAqLwogc3RhdGljIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9kZWFkID0gewogCS5uYW1lCQk9ICJkZWFkIiwKIH07CkBAIC01NiwxMCArNTYsOSBAQAogfQogI2VuZGlmCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBnZXQgdGhlIGtleSBxdW90YSByZWNvcmQgZm9yIGEgdXNlciwgYWxsb2NhdGluZyBhIG5ldyByZWNvcmQgaWYgb25lIGRvZXNuJ3QKLSAqIGFscmVhZHkgZXhpc3QKKyAqIEdldCB0aGUga2V5IHF1b3RhIHJlY29yZCBmb3IgYSB1c2VyLCBhbGxvY2F0aW5nIGEgbmV3IHJlY29yZCBpZiBvbmUgZG9lc24ndAorICogYWxyZWFkeSBleGlzdC4KICAqLwogc3RydWN0IGtleV91c2VyICprZXlfdXNlcl9sb29rdXAodWlkX3QgdWlkLCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpCiB7CkBAIC02Nyw3ICs2Niw3IEBACiAJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CiAJc3RydWN0IHJiX25vZGUgKipwOwogCi0gdHJ5X2FnYWluOgordHJ5X2FnYWluOgogCXAgPSAma2V5X3VzZXJfdHJlZS5yYl9ub2RlOwogCXNwaW5fbG9jaygma2V5X3VzZXJfbG9jayk7CiAKQEAgLTEyNCwxOCArMTIzLDE2IEBACiAJZ290byBvdXQ7CiAKIAkvKiBva2F5IC0gd2UgZm91bmQgYSB1c2VyIHJlY29yZCBmb3IgdGhpcyBVSUQgKi8KLSBmb3VuZDoKK2ZvdW5kOgogCWF0b21pY19pbmMoJnVzZXItPnVzYWdlKTsKIAlzcGluX3VubG9jaygma2V5X3VzZXJfbG9jayk7CiAJa2ZyZWUoY2FuZGlkYXRlKTsKLSBvdXQ6CitvdXQ6CiAJcmV0dXJuIHVzZXI7Cit9CiAKLX0gLyogZW5kIGtleV91c2VyX2xvb2t1cCgpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBkaXNwb3NlIG9mIGEgdXNlciBzdHJ1Y3R1cmUKKyAqIERpc3Bvc2Ugb2YgYSB1c2VyIHN0cnVjdHVyZQogICovCiB2b2lkIGtleV91c2VyX3B1dChzdHJ1Y3Qga2V5X3VzZXIgKnVzZXIpCiB7CkBAIC0xNDYsMTQgKzE0MywxMSBAQAogCiAJCWtmcmVlKHVzZXIpOwogCX0KK30KIAotfSAvKiBlbmQga2V5X3VzZXJfcHV0KCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIGFzc2lnbiBhIGtleSB0aGUgbmV4dCB1bmlxdWUgc2VyaWFsIG51bWJlcgotICogLSB0aGVzZSBhcmUgYXNzaWduZWQgcmFuZG9tbHkgdG8gYXZvaWQgc2VjdXJpdHkgaXNzdWVzIHRocm91Z2ggY292ZXJ0Ci0gKiAgIGNoYW5uZWwgcHJvYmxlbXMKKyAqIEFsbG9jYXRlIGEgc2VyaWFsIG51bWJlciBmb3IgYSBrZXkuICBUaGVzZSBhcmUgYXNzaWduZWQgcmFuZG9tbHkgdG8gYXZvaWQKKyAqIHNlY3VyaXR5IGlzc3VlcyB0aHJvdWdoIGNvdmVydCBjaGFubmVsIHByb2JsZW1zLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQga2V5X2FsbG9jX3NlcmlhbChzdHJ1Y3Qga2V5ICprZXkpCiB7CkBAIC0yMTEsMTggKzIwNSwzNiBAQAogCQlpZiAoa2V5LT5zZXJpYWwgPCB4a2V5LT5zZXJpYWwpCiAJCQlnb3RvIGF0dGVtcHRfaW5zZXJ0aW9uOwogCX0KK30KIAotfSAvKiBlbmQga2V5X2FsbG9jX3NlcmlhbCgpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBhbGxvY2F0ZSBhIGtleSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUKLSAqIC0gdXBkYXRlIHRoZSB1c2VyJ3MgcXVvdGEgdG8gcmVmbGVjdCB0aGUgZXhpc3RlbmNlIG9mIHRoZSBrZXkKLSAqIC0gY2FsbGVkIGZyb20gYSBrZXktdHlwZSBvcGVyYXRpb24gd2l0aCBrZXlfdHlwZXNfc2VtIHJlYWQtbG9ja2VkIGJ5Ci0gKiAgIGtleV9jcmVhdGVfb3JfdXBkYXRlKCkKLSAqICAgLSB0aGlzIHByZXZlbnRzIHVucmVnaXN0cmF0aW9uIG9mIHRoZSBrZXkgdHlwZQotICogLSB1cG9uIHJldHVybiB0aGUga2V5IGlzIGFzIHlldCB1bmluc3RhbnRpYXRlZDsgdGhlIGNhbGxlciBuZWVkcyB0byBlaXRoZXIKLSAqICAgaW5zdGFudGlhdGUgdGhlIGtleSBvciBkaXNjYXJkIGl0IGJlZm9yZSByZXR1cm5pbmcKKy8qKgorICoga2V5X2FsbG9jIC0gQWxsb2NhdGUgYSBrZXkgb2YgdGhlIHNwZWNpZmllZCB0eXBlLgorICogQHR5cGU6IFRoZSB0eXBlIG9mIGtleSB0byBhbGxvY2F0ZS4KKyAqIEBkZXNjOiBUaGUga2V5IGRlc2NyaXB0aW9uIHRvIGFsbG93IHRoZSBrZXkgdG8gYmUgc2VhcmNoZWQgb3V0LgorICogQHVpZDogVGhlIG93bmVyIG9mIHRoZSBuZXcga2V5LgorICogQGdpZDogVGhlIGdyb3VwIElEIGZvciB0aGUgbmV3IGtleSdzIGdyb3VwIHBlcm1pc3Npb25zLgorICogQGNyZWQ6IFRoZSBjcmVkZW50aWFscyBzcGVjaWZ5aW5nIFVJRCBuYW1lc3BhY2UuCisgKiBAcGVybTogVGhlIHBlcm1pc3Npb25zIG1hc2sgb2YgdGhlIG5ldyBrZXkuCisgKiBAZmxhZ3M6IEZsYWdzIHNwZWNpZnlpbmcgcXVvdGEgcHJvcGVydGllcy4KKyAqCisgKiBBbGxvY2F0ZSBhIGtleSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgd2l0aCB0aGUgYXR0cmlidXRlcyBnaXZlbi4gIFRoZSBrZXkgaXMKKyAqIHJldHVybmVkIGluIGFuIHVuaW5zdGFudGlhdGVkIHN0YXRlIGFuZCB0aGUgY2FsbGVyIG5lZWRzIHRvIGluc3RhbnRpYXRlIHRoZQorICoga2V5IGJlZm9yZSByZXR1cm5pbmcuCisgKgorICogVGhlIHVzZXIncyBrZXkgY291bnQgcXVvdGEgaXMgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBjcmVhdGlvbiBvZiB0aGUga2V5IGFuZAorICogdGhlIHVzZXIncyBrZXkgZGF0YSBxdW90YSBoYXMgdGhlIGRlZmF1bHQgZm9yIHRoZSBrZXkgdHlwZSByZXNlcnZlZC4gIFRoZQorICogaW5zdGFudGlhdGlvbiBmdW5jdGlvbiBzaG91bGQgYW1lbmQgdGhpcyBhcyBuZWNlc3NhcnkuICBJZiBpbnN1ZmZpY2llbnQKKyAqIHF1b3RhIGlzIGF2YWlsYWJsZSwgLUVEUVVPVCB3aWxsIGJlIHJldHVybmVkLgorICoKKyAqIFRoZSBMU00gc2VjdXJpdHkgbW9kdWxlcyBjYW4gcHJldmVudCBhIGtleSBiZWluZyBjcmVhdGVkLCBpbiB3aGljaCBjYXNlCisgKiAtRUFDQ0VTIHdpbGwgYmUgcmV0dXJuZWQuCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5ldyBrZXkgaWYgc3VjY2Vzc2Z1bCBhbmQgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UuCisgKgorICogTm90ZSB0aGF0IHRoZSBjYWxsZXIgbmVlZHMgdG8gZW5zdXJlIHRoZSBrZXkgdHlwZSBpc24ndCB1bmluc3RhbnRpYXRlZC4KKyAqIEludGVybmFsbHkgdGhpcyBjYW4gYmUgZG9uZSBieSBsb2NraW5nIGtleV90eXBlc19zZW0uICBFeHRlcm5hbGx5LCB0aGlzIGNhbgorICogYmUgZG9uZSBieSBlaXRoZXIgbmV2ZXIgdW5yZWdpc3RlcmluZyB0aGUga2V5IHR5cGUsIG9yIG1ha2luZyBzdXJlCisgKiBrZXlfYWxsb2MoKSBjYWxscyBkb24ndCByYWNlIHdpdGggbW9kdWxlIHVubG9hZGluZy4KICAqLwogc3RydWN0IGtleSAqa2V5X2FsbG9jKHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwgY29uc3QgY2hhciAqZGVzYywKIAkJICAgICAgdWlkX3QgdWlkLCBnaWRfdCBnaWQsIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLApAQCAtMzQ0LDE0ICszNTYsMTkgQEAKIAlrZXlfdXNlcl9wdXQodXNlcik7CiAJa2V5ID0gRVJSX1BUUigtRURRVU9UKTsKIAlnb3RvIGVycm9yOwotCi19IC8qIGVuZCBrZXlfYWxsb2MoKSAqLwotCit9CiBFWFBPUlRfU1lNQk9MKGtleV9hbGxvYyk7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiByZXNlcnZlIGFuIGFtb3VudCBvZiBxdW90YSBmb3IgdGhlIGtleSdzIHBheWxvYWQKKy8qKgorICoga2V5X3BheWxvYWRfcmVzZXJ2ZSAtIEFkanVzdCBkYXRhIHF1b3RhIHJlc2VydmF0aW9uIGZvciB0aGUga2V5J3MgcGF5bG9hZAorICogQGtleTogVGhlIGtleSB0byBtYWtlIHRoZSByZXNlcnZhdGlvbiBmb3IuCisgKiBAZGF0YWxlbjogVGhlIGFtb3VudCBvZiBkYXRhIHBheWxvYWQgdGhlIGNhbGxlciBub3cgd2FudHMuCisgKgorICogQWRqdXN0IHRoZSBhbW91bnQgb2YgdGhlIG93bmluZyB1c2VyJ3Mga2V5IGRhdGEgcXVvdGEgdGhhdCBhIGtleSByZXNlcnZlcy4KKyAqIElmIHRoZSBhbW91bnQgaXMgaW5jcmVhc2VkLCB0aGVuIC1FRFFVT1QgbWF5IGJlIHJldHVybmVkIGlmIHRoZXJlIGlzbid0CisgKiBlbm91Z2ggZnJlZSBxdW90YSBhdmFpbGFibGUuCisgKgorICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC4KICAqLwogaW50IGtleV9wYXlsb2FkX3Jlc2VydmUoc3RydWN0IGtleSAqa2V5LCBzaXplX3QgZGF0YWxlbikKIHsKQEAgLTM4NCwyMiArNDAxLDIxIEBACiAJCWtleS0+ZGF0YWxlbiA9IGRhdGFsZW47CiAKIAlyZXR1cm4gcmV0OwotCi19IC8qIGVuZCBrZXlfcGF5bG9hZF9yZXNlcnZlKCkgKi8KLQorfQogRVhQT1JUX1NZTUJPTChrZXlfcGF5bG9hZF9yZXNlcnZlKTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIGluc3RhbnRpYXRlIGEga2V5IGFuZCBsaW5rIGl0IGludG8gdGhlIHRhcmdldCBrZXlyaW5nIGF0b21pY2FsbHkKLSAqIC0gY2FsbGVkIHdpdGggdGhlIHRhcmdldCBrZXlyaW5nJ3Mgc2VtYXBob3JlIHdyaXRlbG9ja2VkCisgKiBJbnN0YW50aWF0ZSBhIGtleSBhbmQgbGluayBpdCBpbnRvIHRoZSB0YXJnZXQga2V5cmluZyBhdG9taWNhbGx5LiAgTXVzdCBiZQorICogY2FsbGVkIHdpdGggdGhlIHRhcmdldCBrZXlyaW5nJ3Mgc2VtYXBob3JlIHdyaXRlbG9ja2VkLiAgVGhlIHRhcmdldCBrZXkncworICogc2VtYXBob3JlIG5lZWQgbm90IGJlIGxvY2tlZCBhcyBpbnN0YW50aWF0aW9uIGlzIHNlcmlhbGlzZWQgYnkKKyAqIGtleV9jb25zdHJ1Y3Rpb25fbXV0ZXguCiAgKi8KIHN0YXRpYyBpbnQgX19rZXlfaW5zdGFudGlhdGVfYW5kX2xpbmsoc3RydWN0IGtleSAqa2V5LAogCQkJCSAgICAgIGNvbnN0IHZvaWQgKmRhdGEsCiAJCQkJICAgICAgc2l6ZV90IGRhdGFsZW4sCiAJCQkJICAgICAgc3RydWN0IGtleSAqa2V5cmluZywKIAkJCQkgICAgICBzdHJ1Y3Qga2V5ICphdXRoa2V5LAotCQkJCSAgICAgIHN0cnVjdCBrZXlyaW5nX2xpc3QgKipfcHJlYWxsb2MpCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyAqX3ByZWFsbG9jKQogewogCWludCByZXQsIGF3YWtlbjsKIApAQCAtNDQxLDEyICs0NTcsMjMgQEAKIAkJd2FrZV91cF9iaXQoJmtleS0+ZmxhZ3MsIEtFWV9GTEFHX1VTRVJfQ09OU1RSVUNUKTsKIAogCXJldHVybiByZXQ7Cit9CiAKLX0gLyogZW5kIF9fa2V5X2luc3RhbnRpYXRlX2FuZF9saW5rKCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIGluc3RhbnRpYXRlIGEga2V5IGFuZCBsaW5rIGl0IGludG8gdGhlIHRhcmdldCBrZXlyaW5nIGF0b21pY2FsbHkKKy8qKgorICoga2V5X2luc3RhbnRpYXRlX2FuZF9saW5rIC0gSW5zdGFudGlhdGUgYSBrZXkgYW5kIGxpbmsgaXQgaW50byB0aGUga2V5cmluZy4KKyAqIEBrZXk6IFRoZSBrZXkgdG8gaW5zdGFudGlhdGUuCisgKiBAZGF0YTogVGhlIGRhdGEgdG8gdXNlIHRvIGluc3RhbnRpYXRlIHRoZSBrZXlyaW5nLgorICogQGRhdGFsZW46IFRoZSBsZW5ndGggb2YgQGRhdGEuCisgKiBAa2V5cmluZzogS2V5cmluZyB0byBjcmVhdGUgYSBsaW5rIGluIG9uIHN1Y2Nlc3MgKG9yIE5VTEwpLgorICogQGF1dGhrZXk6IFRoZSBhdXRob3Jpc2F0aW9uIHRva2VuIHBlcm1pdHRpbmcgaW5zdGFudGlhdGlvbi4KKyAqCisgKiBJbnN0YW50aWF0ZSBhIGtleSB0aGF0J3MgaW4gdGhlIHVuaW5zdGFudGlhdGVkIHN0YXRlIHVzaW5nIHRoZSBwcm92aWRlZCBkYXRhCisgKiBhbmQsIGlmIHN1Y2Nlc3NmdWwsIGxpbmsgaXQgaW4gdG8gdGhlIGRlc3RpbmF0aW9uIGtleXJpbmcgaWYgb25lIGlzCisgKiBzdXBwbGllZC4KKyAqCisgKiBJZiBzdWNjZXNzZnVsLCAwIGlzIHJldHVybmVkLCB0aGUgYXV0aG9yaXNhdGlvbiB0b2tlbiBpcyByZXZva2VkIGFuZCBhbnlvbmUKKyAqIHdhaXRpbmcgZm9yIHRoZSBrZXkgaXMgd29rZW4gdXAuICBJZiB0aGUga2V5IHdhcyBhbHJlYWR5IGluc3RhbnRpYXRlZCwKKyAqIC1FQlVTWSB3aWxsIGJlIHJldHVybmVkLgogICovCiBpbnQga2V5X2luc3RhbnRpYXRlX2FuZF9saW5rKHN0cnVjdCBrZXkgKmtleSwKIAkJCSAgICAgY29uc3Qgdm9pZCAqZGF0YSwKQEAgLTQ1NCw3ICs0ODEsNyBAQAogCQkJICAgICBzdHJ1Y3Qga2V5ICprZXlyaW5nLAogCQkJICAgICBzdHJ1Y3Qga2V5ICphdXRoa2V5KQogewotCXN0cnVjdCBrZXlyaW5nX2xpc3QgKnByZWFsbG9jOworCXVuc2lnbmVkIGxvbmcgcHJlYWxsb2M7CiAJaW50IHJldDsKIAogCWlmIChrZXlyaW5nKSB7CkBAIC00NzEsMjEgKzQ5OCwzNSBAQAogCQlfX2tleV9saW5rX2VuZChrZXlyaW5nLCBrZXktPnR5cGUsIHByZWFsbG9jKTsKIAogCXJldHVybiByZXQ7Ci0KLX0gLyogZW5kIGtleV9pbnN0YW50aWF0ZV9hbmRfbGluaygpICovCit9CiAKIEVYUE9SVF9TWU1CT0woa2V5X2luc3RhbnRpYXRlX2FuZF9saW5rKTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIG5lZ2F0aXZlbHkgaW5zdGFudGlhdGUgYSBrZXkgYW5kIGxpbmsgaXQgaW50byB0aGUgdGFyZ2V0IGtleXJpbmcgYXRvbWljYWxseQorLyoqCisgKiBrZXlfbmVnYXRlX2FuZF9saW5rIC0gTmVnYXRpdmVseSBpbnN0YW50aWF0ZSBhIGtleSBhbmQgbGluayBpdCBpbnRvIHRoZSBrZXlyaW5nLgorICogQGtleTogVGhlIGtleSB0byBpbnN0YW50aWF0ZS4KKyAqIEB0aW1lb3V0OiBUaGUgdGltZW91dCBvbiB0aGUgbmVnYXRpdmUga2V5LgorICogQGtleXJpbmc6IEtleXJpbmcgdG8gY3JlYXRlIGEgbGluayBpbiBvbiBzdWNjZXNzIChvciBOVUxMKS4KKyAqIEBhdXRoa2V5OiBUaGUgYXV0aG9yaXNhdGlvbiB0b2tlbiBwZXJtaXR0aW5nIGluc3RhbnRpYXRpb24uCisgKgorICogTmVnYXRpdmVseSBpbnN0YW50aWF0ZSBhIGtleSB0aGF0J3MgaW4gdGhlIHVuaW5zdGFudGlhdGVkIHN0YXRlIGFuZCwgaWYKKyAqIHN1Y2Nlc3NmdWwsIHNldCBpdHMgdGltZW91dCBhbmQgbGluayBpdCBpbiB0byB0aGUgZGVzdGluYXRpb24ga2V5cmluZyBpZiBvbmUKKyAqIGlzIHN1cHBsaWVkLiAgVGhlIGtleSBhbmQgYW55IGxpbmtzIHRvIHRoZSBrZXkgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGdhcmJhZ2UKKyAqIGNvbGxlY3RlZCBhZnRlciB0aGUgdGltZW91dCBleHBpcmVzLgorICoKKyAqIE5lZ2F0aXZlIGtleXMgYXJlIHVzZWQgdG8gcmF0ZSBsaW1pdCByZXBlYXRlZCByZXF1ZXN0X2tleSgpIGNhbGxzIGJ5IGNhdXNpbmcKKyAqIHRoZW0gdG8gcmV0dXJuIC1FTk9LRVkgdW50aWwgdGhlIG5lZ2F0aXZlIGtleSBleHBpcmVzLgorICoKKyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQsIHRoZSBhdXRob3Jpc2F0aW9uIHRva2VuIGlzIHJldm9rZWQgYW5kIGFueW9uZQorICogd2FpdGluZyBmb3IgdGhlIGtleSBpcyB3b2tlbiB1cC4gIElmIHRoZSBrZXkgd2FzIGFscmVhZHkgaW5zdGFudGlhdGVkLAorICogLUVCVVNZIHdpbGwgYmUgcmV0dXJuZWQuCiAgKi8KIGludCBrZXlfbmVnYXRlX2FuZF9saW5rKHN0cnVjdCBrZXkgKmtleSwKIAkJCXVuc2lnbmVkIHRpbWVvdXQsCiAJCQlzdHJ1Y3Qga2V5ICprZXlyaW5nLAogCQkJc3RydWN0IGtleSAqYXV0aGtleSkKIHsKLQlzdHJ1Y3Qga2V5cmluZ19saXN0ICpwcmVhbGxvYzsKKwl1bnNpZ25lZCBsb25nIHByZWFsbG9jOwogCXN0cnVjdCB0aW1lc3BlYyBub3c7CiAJaW50IHJldCwgYXdha2VuLCBsaW5rX3JldCA9IDA7CiAKQEAgLTUzNSwyMiArNTc2LDIzIEBACiAJCXdha2VfdXBfYml0KCZrZXktPmZsYWdzLCBLRVlfRkxBR19VU0VSX0NPTlNUUlVDVCk7CiAKIAlyZXR1cm4gcmV0ID09IDAgPyBsaW5rX3JldCA6IHJldDsKLQotfSAvKiBlbmQga2V5X25lZ2F0ZV9hbmRfbGluaygpICovCit9CiAKIEVYUE9SVF9TWU1CT0woa2V5X25lZ2F0ZV9hbmRfbGluayk7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBkbyBjbGVhbmluZyB1cCBpbiBwcm9jZXNzIGNvbnRleHQgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGRpc2FibGUKLSAqIGludGVycnVwdHMgYWxsIG92ZXIgdGhlIHBsYWNlCisgKiBHYXJiYWdlIGNvbGxlY3Qga2V5cyBpbiBwcm9jZXNzIGNvbnRleHQgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGRpc2FibGUKKyAqIGludGVycnVwdHMgYWxsIG92ZXIgdGhlIHBsYWNlLgorICoKKyAqIGtleV9wdXQoKSBzY2hlZHVsZXMgdGhpcyByYXRoZXIgdGhhbiB0cnlpbmcgdG8gZG8gdGhlIGNsZWFudXAgaXRzZWxmLCB3aGljaAorICogbWVhbnMga2V5X3B1dCgpIGRvZXNuJ3QgaGF2ZSB0byBzbGVlcC4KICAqLwogc3RhdGljIHZvaWQga2V5X2NsZWFudXAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCByYl9ub2RlICpfbjsKIAlzdHJ1Y3Qga2V5ICprZXk7CiAKLSBnb19hZ2FpbjoKK2dvX2FnYWluOgogCS8qIGxvb2sgZm9yIGEgZGVhZCBrZXkgaW4gdGhlIHRyZWUgKi8KIAlzcGluX2xvY2soJmtleV9zZXJpYWxfbG9jayk7CiAKQEAgLTU2NCw3ICs2MDYsNyBAQAogCXNwaW5fdW5sb2NrKCZrZXlfc2VyaWFsX2xvY2spOwogCXJldHVybjsKIAotIGZvdW5kX2RlYWRfa2V5OgorZm91bmRfZGVhZF9rZXk6CiAJLyogd2UgZm91bmQgYSBkZWFkIGtleSAtIG9uY2Ugd2UndmUgcmVtb3ZlZCBpdCBmcm9tIHRoZSB0cmVlLCB3ZSBjYW4KIAkgKiBkcm9wIHRoZSBsb2NrICovCiAJcmJfZXJhc2UoJmtleS0+c2VyaWFsX25vZGUsICZrZXlfc2VyaWFsX3RyZWUpOwpAQCAtNjAxLDE0ICs2NDMsMTUgQEAKIAogCS8qIHRoZXJlIG1heSwgb2YgY291cnNlLCBiZSBtb3JlIHRoYW4gb25lIGtleSB0byBkZXN0cm95ICovCiAJZ290byBnb19hZ2FpbjsKK30KIAotfSAvKiBlbmQga2V5X2NsZWFudXAoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogZGlzcG9zZSBvZiBhIHJlZmVyZW5jZSB0byBhIGtleQotICogLSB3aGVuIGFsbCB0aGUgcmVmZXJlbmNlcyBhcmUgZ29uZSwgd2Ugc2NoZWR1bGUgdGhlIGNsZWFudXAgdGFzayB0byBjb21lIGFuZAotICogICBwdWxsIGl0IG91dCBvZiB0aGUgdHJlZSBpbiBkZWZpbml0ZSBwcm9jZXNzIGNvbnRleHQKKy8qKgorICoga2V5X3B1dCAtIERpc2NhcmQgYSByZWZlcmVuY2UgdG8gYSBrZXkuCisgKiBAa2V5OiBUaGUga2V5IHRvIGRpc2NhcmQgYSByZWZlcmVuY2UgZnJvbS4KKyAqCisgKiBEaXNjYXJkIGEgcmVmZXJlbmNlIHRvIGEga2V5LCBhbmQgd2hlbiBhbGwgdGhlIHJlZmVyZW5jZXMgYXJlIGdvbmUsIHdlCisgKiBzY2hlZHVsZSB0aGUgY2xlYW51cCB0YXNrIHRvIGNvbWUgYW5kIHB1bGwgaXQgb3V0IG9mIHRoZSB0cmVlIGluIHByb2Nlc3MKKyAqIGNvbnRleHQgYXQgc29tZSBsYXRlciB0aW1lLgogICovCiB2b2lkIGtleV9wdXQoc3RydWN0IGtleSAqa2V5KQogewpAQCAtNjE4LDE0ICs2NjEsMTEgQEAKIAkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmtleS0+dXNhZ2UpKQogCQkJc2NoZWR1bGVfd29yaygma2V5X2NsZWFudXBfdGFzayk7CiAJfQotCi19IC8qIGVuZCBrZXlfcHV0KCkgKi8KLQorfQogRVhQT1JUX1NZTUJPTChrZXlfcHV0KTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIGZpbmQgYSBrZXkgYnkgaXRzIHNlcmlhbCBudW1iZXIKKyAqIEZpbmQgYSBrZXkgYnkgaXRzIHNlcmlhbCBudW1iZXIuCiAgKi8KIHN0cnVjdCBrZXkgKmtleV9sb29rdXAoa2V5X3NlcmlhbF90IGlkKQogewpAQCAtNjQ3LDExICs2ODcsMTEgQEAKIAkJCWdvdG8gZm91bmQ7CiAJfQogCi0gbm90X2ZvdW5kOgorbm90X2ZvdW5kOgogCWtleSA9IEVSUl9QVFIoLUVOT0tFWSk7CiAJZ290byBlcnJvcjsKIAotIGZvdW5kOgorZm91bmQ6CiAJLyogcHJldGVuZCBpdCBkb2Vzbid0IGV4aXN0IGlmIGl0IGlzIGF3YWl0aW5nIGRlbGV0aW9uICovCiAJaWYgKGF0b21pY19yZWFkKCZrZXktPnVzYWdlKSA9PSAwKQogCQlnb3RvIG5vdF9mb3VuZDsKQEAgLTY2MSwxNiArNzAxLDE2IEBACiAJICovCiAJYXRvbWljX2luYygma2V5LT51c2FnZSk7CiAKLSBlcnJvcjoKK2Vycm9yOgogCXNwaW5fdW5sb2NrKCZrZXlfc2VyaWFsX2xvY2spOwogCXJldHVybiBrZXk7Cit9CiAKLX0gLyogZW5kIGtleV9sb29rdXAoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogZmluZCBhbmQgbG9jayB0aGUgc3BlY2lmaWVkIGtleSB0eXBlIGFnYWluc3QgcmVtb3ZhbAotICogLSB3ZSByZXR1cm4gd2l0aCB0aGUgc2VtIHJlYWRsb2NrZWQKKyAqIEZpbmQgYW5kIGxvY2sgdGhlIHNwZWNpZmllZCBrZXkgdHlwZSBhZ2FpbnN0IHJlbW92YWwuCisgKgorICogV2UgcmV0dXJuIHdpdGggdGhlIHNlbSByZWFkLWxvY2tlZCBpZiBzdWNjZXNzZnVsLiAgSWYgdGhlIHR5cGUgd2Fzbid0CisgKiBhdmFpbGFibGUgLUVOT0tFWSBpcyByZXR1cm5lZCBpbnN0ZWFkLgogICovCiBzdHJ1Y3Qga2V5X3R5cGUgKmtleV90eXBlX2xvb2t1cChjb25zdCBjaGFyICp0eXBlKQogewpAQCAtNjg4LDI2ICs3MjgsMjMgQEAKIAl1cF9yZWFkKCZrZXlfdHlwZXNfc2VtKTsKIAlrdHlwZSA9IEVSUl9QVFIoLUVOT0tFWSk7CiAKLSBmb3VuZF9rZXJuZWxfdHlwZToKK2ZvdW5kX2tlcm5lbF90eXBlOgogCXJldHVybiBrdHlwZTsKK30KIAotfSAvKiBlbmQga2V5X3R5cGVfbG9va3VwKCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIHVubG9jayBhIGtleSB0eXBlCisgKiBVbmxvY2sgYSBrZXkgdHlwZSBsb2NrZWQgYnkga2V5X3R5cGVfbG9va3VwKCkuCiAgKi8KIHZvaWQga2V5X3R5cGVfcHV0KHN0cnVjdCBrZXlfdHlwZSAqa3R5cGUpCiB7CiAJdXBfcmVhZCgma2V5X3R5cGVzX3NlbSk7Cit9CiAKLX0gLyogZW5kIGtleV90eXBlX3B1dCgpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBhdHRlbXB0IHRvIHVwZGF0ZSBhbiBleGlzdGluZyBrZXkKLSAqIC0gdGhlIGtleSBoYXMgYW4gaW5jcmVtZW50ZWQgcmVmY291bnQKLSAqIC0gd2UgbmVlZCB0byBwdXQgdGhlIGtleSBpZiB3ZSBnZXQgYW4gZXJyb3IKKyAqIEF0dGVtcHQgdG8gdXBkYXRlIGFuIGV4aXN0aW5nIGtleS4KKyAqCisgKiBUaGUga2V5IGlzIGdpdmVuIHRvIHVzIHdpdGggYW4gaW5jcmVtZW50ZWQgcmVmY291bnQgdGhhdCB3ZSBuZWVkIHRvIGRpc2NhcmQKKyAqIGlmIHdlIGdldCBhbiBlcnJvci4KICAqLwogc3RhdGljIGlubGluZSBrZXlfcmVmX3QgX19rZXlfdXBkYXRlKGtleV9yZWZfdCBrZXlfcmVmLAogCQkJCSAgICAgY29uc3Qgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IHBsZW4pCkBAIC03NDIsMTMgKzc3OSwzMiBAQAogCWtleV9wdXQoa2V5KTsKIAlrZXlfcmVmID0gRVJSX1BUUihyZXQpOwogCWdvdG8gb3V0OworfQogCi19IC8qIGVuZCBfX2tleV91cGRhdGUoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogc2VhcmNoIHRoZSBzcGVjaWZpZWQga2V5cmluZyBmb3IgYSBrZXkgb2YgdGhlIHNhbWUgZGVzY3JpcHRpb247IGlmIG9uZSBpcwotICogZm91bmQsIHVwZGF0ZSBpdCwgb3RoZXJ3aXNlIGFkZCBhIG5ldyBvbmUKKy8qKgorICoga2V5X2NyZWF0ZV9vcl91cGRhdGUgLSBVcGRhdGUgb3IgY3JlYXRlIGFuZCBpbnN0YW50aWF0ZSBhIGtleS4KKyAqIEBrZXlyaW5nX3JlZjogQSBwb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBrZXlyaW5nIHdpdGggcG9zc2Vzc2lvbiBmbGFnLgorICogQHR5cGU6IFRoZSB0eXBlIG9mIGtleS4KKyAqIEBkZXNjcmlwdGlvbjogVGhlIHNlYXJjaGFibGUgZGVzY3JpcHRpb24gZm9yIHRoZSBrZXkuCisgKiBAcGF5bG9hZDogVGhlIGRhdGEgdG8gdXNlIHRvIGluc3RhbnRpYXRlIG9yIHVwZGF0ZSB0aGUga2V5LgorICogQHBsZW46IFRoZSBsZW5ndGggb2YgQHBheWxvYWQuCisgKiBAcGVybTogVGhlIHBlcm1pc3Npb25zIG1hc2sgZm9yIGEgbmV3IGtleS4KKyAqIEBmbGFnczogVGhlIHF1b3RhIGZsYWdzIGZvciBhIG5ldyBrZXkuCisgKgorICogU2VhcmNoIHRoZSBkZXN0aW5hdGlvbiBrZXlyaW5nIGZvciBhIGtleSBvZiB0aGUgc2FtZSBkZXNjcmlwdGlvbiBhbmQgaWYgb25lCisgKiBpcyBmb3VuZCwgdXBkYXRlIGl0LCBvdGhlcndpc2UgY3JlYXRlIGFuZCBpbnN0YW50aWF0ZSBhIG5ldyBvbmUgYW5kIGNyZWF0ZSBhCisgKiBsaW5rIHRvIGl0IGZyb20gdGhhdCBrZXlyaW5nLgorICoKKyAqIElmIHBlcm0gaXMgS0VZX1BFUk1fVU5ERUYgdGhlbiBhbiBhcHByb3ByaWF0ZSBrZXkgcGVybWlzc2lvbnMgbWFzayB3aWxsIGJlCisgKiBjb25jb2N0ZWQuCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5ldyBrZXkgaWYgc3VjY2Vzc2Z1bCwgLUVOT0RFViBpZiB0aGUga2V5IHR5cGUKKyAqIHdhc24ndCBhdmFpbGFibGUsIC1FTk9URElSIGlmIHRoZSBrZXlyaW5nIHdhc24ndCBhIGtleXJpbmcsIC1FQUNDRVMgaWYgdGhlCisgKiBjYWxsZXIgaXNuJ3QgcGVybWl0dGVkIHRvIG1vZGlmeSB0aGUga2V5cmluZyBvciB0aGUgTFNNIGRpZCBub3QgcGVybWl0CisgKiBjcmVhdGlvbiBvZiB0aGUga2V5LgorICoKKyAqIE9uIHN1Y2Nlc3MsIHRoZSBwb3NzZXNzaW9uIGZsYWcgZnJvbSB0aGUga2V5cmluZyByZWYgd2lsbCBiZSB0YWNrZWQgb24gdG8KKyAqIHRoZSBrZXkgcmVmIGJlZm9yZSBpdCBpcyByZXR1cm5lZC4KICAqLwoga2V5X3JlZl90IGtleV9jcmVhdGVfb3JfdXBkYXRlKGtleV9yZWZfdCBrZXlyaW5nX3JlZiwKIAkJCSAgICAgICBjb25zdCBjaGFyICp0eXBlLApAQCAtNzU4LDcgKzgxNCw3IEBACiAJCQkgICAgICAga2V5X3Blcm1fdCBwZXJtLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc3RydWN0IGtleXJpbmdfbGlzdCAqcHJlYWxsb2M7CisJdW5zaWduZWQgbG9uZyBwcmVhbGxvYzsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwogCXN0cnVjdCBrZXlfdHlwZSAqa3R5cGU7CiAJc3RydWN0IGtleSAqa2V5cmluZywgKmtleSA9IE5VTEw7CkBAIC04NTUsMTQgKzkxMSwyMSBAQAogCiAJa2V5X3JlZiA9IF9fa2V5X3VwZGF0ZShrZXlfcmVmLCBwYXlsb2FkLCBwbGVuKTsKIAlnb3RvIGVycm9yOwotCi19IC8qIGVuZCBrZXlfY3JlYXRlX29yX3VwZGF0ZSgpICovCi0KK30KIEVYUE9SVF9TWU1CT0woa2V5X2NyZWF0ZV9vcl91cGRhdGUpOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogdXBkYXRlIGEga2V5CisvKioKKyAqIGtleV91cGRhdGUgLSBVcGRhdGUgYSBrZXkncyBjb250ZW50cy4KKyAqIEBrZXlfcmVmOiBUaGUgcG9pbnRlciAocGx1cyBwb3NzZXNzaW9uIGZsYWcpIHRvIHRoZSBrZXkuCisgKiBAcGF5bG9hZDogVGhlIGRhdGEgdG8gYmUgdXNlZCB0byB1cGRhdGUgdGhlIGtleS4KKyAqIEBwbGVuOiBUaGUgbGVuZ3RoIG9mIEBwYXlsb2FkLgorICoKKyAqIEF0dGVtcHQgdG8gdXBkYXRlIHRoZSBjb250ZW50cyBvZiBhIGtleSB3aXRoIHRoZSBnaXZlbiBwYXlsb2FkIGRhdGEuICBUaGUKKyAqIGNhbGxlciBtdXN0IGJlIGdyYW50ZWQgV3JpdGUgcGVybWlzc2lvbiBvbiB0aGUga2V5LiAgTmVnYXRpdmUga2V5cyBjYW4gYmUKKyAqIGluc3RhbnRpYXRlZCBieSB0aGlzIG1ldGhvZC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVBQ0NFUyBpZiBub3QgcGVybWl0dGVkIGFuZCAtRU9QTk9UU1VQUCBpZiB0aGUga2V5CisgKiB0eXBlIGRvZXMgbm90IHN1cHBvcnQgdXBkYXRpbmcuICBUaGUga2V5IHR5cGUgbWF5IHJldHVybiBvdGhlciBlcnJvcnMuCiAgKi8KIGludCBrZXlfdXBkYXRlKGtleV9yZWZfdCBrZXlfcmVmLCBjb25zdCB2b2lkICpwYXlsb2FkLCBzaXplX3QgcGxlbikKIHsKQEAgLTg5MSwxNCArOTU0LDE3IEBACiAKICBlcnJvcjoKIAlyZXR1cm4gcmV0OwotCi19IC8qIGVuZCBrZXlfdXBkYXRlKCkgKi8KLQorfQogRVhQT1JUX1NZTUJPTChrZXlfdXBkYXRlKTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIHJldm9rZSBhIGtleQorLyoqCisgKiBrZXlfcmV2b2tlIC0gUmV2b2tlIGEga2V5LgorICogQGtleTogVGhlIGtleSB0byBiZSByZXZva2VkLgorICoKKyAqIE1hcmsgYSBrZXkgYXMgYmVpbmcgcmV2b2tlZCBhbmQgYXNrIHRoZSB0eXBlIHRvIGZyZWUgdXAgaXRzIHJlc291cmNlcy4gIFRoZQorICogcmV2b2NhdGlvbiB0aW1lb3V0IGlzIHNldCBhbmQgdGhlIGtleSBhbmQgYWxsIGl0cyBsaW5rcyB3aWxsIGJlCisgKiBhdXRvbWF0aWNhbGx5IGdhcmJhZ2UgY29sbGVjdGVkIGFmdGVyIGtleV9nY19kZWxheSBhbW91bnQgb2YgdGltZSBpZiB0aGV5CisgKiBhcmUgbm90IG1hbnVhbGx5IGRlYWx0IHdpdGggZmlyc3QuCiAgKi8KIHZvaWQga2V5X3Jldm9rZShzdHJ1Y3Qga2V5ICprZXkpCiB7CkBAIC05MjYsMTQgKzk5MiwxNiBAQAogCX0KIAogCXVwX3dyaXRlKCZrZXktPnNlbSk7Ci0KLX0gLyogZW5kIGtleV9yZXZva2UoKSAqLwotCit9CiBFWFBPUlRfU1lNQk9MKGtleV9yZXZva2UpOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogcmVnaXN0ZXIgYSB0eXBlIG9mIGtleQorLyoqCisgKiByZWdpc3Rlcl9rZXlfdHlwZSAtIFJlZ2lzdGVyIGEgdHlwZSBvZiBrZXkuCisgKiBAa3R5cGU6IFRoZSBuZXcga2V5IHR5cGUuCisgKgorICogUmVnaXN0ZXIgYSBuZXcga2V5IHR5cGUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLUVFWElTVCBpZiBhIHR5cGUgb2YgdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLgogICovCiBpbnQgcmVnaXN0ZXJfa2V5X3R5cGUoc3RydWN0IGtleV90eXBlICprdHlwZSkKIHsKQEAgLTk1MywxNyArMTAyMSwxOSBAQAogCWxpc3RfYWRkKCZrdHlwZS0+bGluaywgJmtleV90eXBlc19saXN0KTsKIAlyZXQgPSAwOwogCi0gb3V0Ogorb3V0OgogCXVwX3dyaXRlKCZrZXlfdHlwZXNfc2VtKTsKIAlyZXR1cm4gcmV0OwotCi19IC8qIGVuZCByZWdpc3Rlcl9rZXlfdHlwZSgpICovCi0KK30KIEVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfa2V5X3R5cGUpOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogdW5yZWdpc3RlciBhIHR5cGUgb2Yga2V5CisvKioKKyAqIHVucmVnaXN0ZXJfa2V5X3R5cGUgLSBVbnJlZ2lzdGVyIGEgdHlwZSBvZiBrZXkuCisgKiBAa3R5cGU6IFRoZSBrZXkgdHlwZS4KKyAqCisgKiBVbnJlZ2lzdGVyIGEga2V5IHR5cGUgYW5kIG1hcmsgYWxsIHRoZSBleHRhbnQga2V5cyBvZiB0aGlzIHR5cGUgYXMgZGVhZC4KKyAqIFRob3NlIGtleXMgb2YgdGhpcyB0eXBlIGFyZSB0aGVuIGRlc3Ryb3llZCB0byBnZXQgcmlkIG9mIHRoZWlyIHBheWxvYWRzIGFuZAorICogdGhleSBhbmQgdGhlaXIgbGlua3Mgd2lsbCBiZSBnYXJiYWdlIGNvbGxlY3RlZCBhcyBzb29uIGFzIHBvc3NpYmxlLgogICovCiB2b2lkIHVucmVnaXN0ZXJfa2V5X3R5cGUoc3RydWN0IGtleV90eXBlICprdHlwZSkKIHsKQEAgLTEwMTAsMTQgKzEwODAsMTEgQEAKIAl1cF93cml0ZSgma2V5X3R5cGVzX3NlbSk7CiAKIAlrZXlfc2NoZWR1bGVfZ2MoMCk7Ci0KLX0gLyogZW5kIHVucmVnaXN0ZXJfa2V5X3R5cGUoKSAqLwotCit9CiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfa2V5X3R5cGUpOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogaW5pdGlhbGlzZSB0aGUga2V5IG1hbmFnZW1lbnQgc3R1ZmYKKyAqIEluaXRpYWxpc2UgdGhlIGtleSBtYW5hZ2VtZW50IHN0YXRlLgogICovCiB2b2lkIF9faW5pdCBrZXlfaW5pdCh2b2lkKQogewpAQCAtMTAzNyw1ICsxMTA0LDQgQEAKIAogCXJiX2luc2VydF9jb2xvcigmcm9vdF9rZXlfdXNlci5ub2RlLAogCQkJJmtleV91c2VyX3RyZWUpOwotCi19IC8qIGVuZCBrZXlfaW5pdCgpICovCit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleWN0bC5jIGIvc2VjdXJpdHkva2V5cy9rZXljdGwuYwppbmRleCA2MDkyNGY2Li4zMWEwZmQ4IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleWN0bC5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKQEAgLTEsNCArMSw0IEBACi0vKiBrZXljdGwuYzogdXNlcnNwYWNlIGtleWN0bCBvcGVyYXRpb25zCisvKiBVc2Vyc3BhY2Uga2V5IGNvbnRyb2wgb3BlcmF0aW9ucwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNC01IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKQEAgLTMxLDI4ICszMSwyNCBAQAogCWludCByZXQ7CiAKIAlyZXQgPSBzdHJuY3B5X2Zyb21fdXNlcih0eXBlLCBfdHlwZSwgbGVuKTsKLQogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwotCiAJaWYgKHJldCA9PSAwIHx8IHJldCA+PSBsZW4pCiAJCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKHR5cGVbMF0gPT0gJy4nKQogCQlyZXR1cm4gLUVQRVJNOwotCiAJdHlwZVtsZW4gLSAxXSA9ICdcMCc7Ci0KIAlyZXR1cm4gMDsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIGV4dHJhY3QgdGhlIGRlc2NyaXB0aW9uIG9mIGEgbmV3IGtleSBmcm9tIHVzZXJzcGFjZSBhbmQgZWl0aGVyIGFkZCBpdCBhcyBhCi0gKiBuZXcga2V5IHRvIHRoZSBzcGVjaWZpZWQga2V5cmluZyBvciB1cGRhdGUgYSBtYXRjaGluZyBrZXkgaW4gdGhhdCBrZXlyaW5nCi0gKiAtIHRoZSBrZXlyaW5nIG11c3QgYmUgd3JpdGFibGUKLSAqIC0gcmV0dXJucyB0aGUgbmV3IGtleSdzIHNlcmlhbCBudW1iZXIKLSAqIC0gaW1wbGVtZW50cyBhZGRfa2V5KCkKKyAqIEV4dHJhY3QgdGhlIGRlc2NyaXB0aW9uIG9mIGEgbmV3IGtleSBmcm9tIHVzZXJzcGFjZSBhbmQgZWl0aGVyIGFkZCBpdCBhcyBhCisgKiBuZXcga2V5IHRvIHRoZSBzcGVjaWZpZWQga2V5cmluZyBvciB1cGRhdGUgYSBtYXRjaGluZyBrZXkgaW4gdGhhdCBrZXlyaW5nLgorICoKKyAqIFRoZSBrZXlyaW5nIG11c3QgYmUgd3JpdGFibGUgc28gdGhhdCB3ZSBjYW4gYXR0YWNoIHRoZSBrZXkgdG8gaXQuCisgKgorICogSWYgc3VjY2Vzc2Z1bCwgdGhlIG5ldyBrZXkncyBzZXJpYWwgbnVtYmVyIGlzIHJldHVybmVkLCBvdGhlcndpc2UgYW4gZXJyb3IKKyAqIGNvZGUgaXMgcmV0dXJuZWQuCiAgKi8KIFNZU0NBTExfREVGSU5FNShhZGRfa2V5LCBjb25zdCBjaGFyIF9fdXNlciAqLCBfdHlwZSwKIAkJY29uc3QgY2hhciBfX3VzZXIgKiwgX2Rlc2NyaXB0aW9uLApAQCAtMTMyLDE5ICsxMjgsMjAgQEAKIAlrZnJlZShkZXNjcmlwdGlvbik7CiAgZXJyb3I6CiAJcmV0dXJuIHJldDsKK30KIAotfSAvKiBlbmQgc3lzX2FkZF9rZXkoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogc2VhcmNoIHRoZSBwcm9jZXNzIGtleXJpbmdzIGZvciBhIG1hdGNoaW5nIGtleQotICogLSBuZXN0ZWQga2V5cmluZ3MgbWF5IGFsc28gYmUgc2VhcmNoZWQgaWYgdGhleSBoYXZlIFNlYXJjaCBwZXJtaXNzaW9uCi0gKiAtIGlmIGEga2V5IGlzIGZvdW5kLCBpdCB3aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBkZXN0aW5hdGlvbiBrZXlyaW5nIGlmCi0gKiAgIHRoZXJlJ3Mgb25lIHNwZWNpZmllZAotICogLSAvc2Jpbi9yZXF1ZXN0LWtleSB3aWxsIGJlIGludm9rZWQgaWYgX2NhbGxvdXRfaW5mbyBpcyBub24tTlVMTAotICogICAtIHRoZSBfY2FsbG91dF9pbmZvIHN0cmluZyB3aWxsIGJlIHBhc3NlZCB0byAvc2Jpbi9yZXF1ZXN0LWtleQotICogICAtIGlmIHRoZSBfY2FsbG91dF9pbmZvIHN0cmluZyBpcyBlbXB0eSwgaXQgd2lsbCBiZSByZW5kZXJlZCBhcyAiLSIKLSAqIC0gaW1wbGVtZW50cyByZXF1ZXN0X2tleSgpCisgKiBTZWFyY2ggdGhlIHByb2Nlc3Mga2V5cmluZ3MgYW5kIGtleXJpbmcgdHJlZXMgbGlua2VkIGZyb20gdGhvc2UgZm9yIGEKKyAqIG1hdGNoaW5nIGtleS4gIEtleXJpbmdzIG11c3QgaGF2ZSBhcHByb3ByaWF0ZSBTZWFyY2ggcGVybWlzc2lvbiB0byBiZQorICogc2VhcmNoZWQuCisgKgorICogSWYgYSBrZXkgaXMgZm91bmQsIGl0IHdpbGwgYmUgYXR0YWNoZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGtleXJpbmcgaWYgdGhlcmUncworICogb25lIHNwZWNpZmllZCBhbmQgdGhlIHNlcmlhbCBudW1iZXIgb2YgdGhlIGtleSB3aWxsIGJlIHJldHVybmVkLgorICoKKyAqIElmIG5vIGtleSBpcyBmb3VuZCwgL3NiaW4vcmVxdWVzdC1rZXkgd2lsbCBiZSBpbnZva2VkIGlmIF9jYWxsb3V0X2luZm8gaXMKKyAqIG5vbi1OVUxMIGluIGFuIGF0dGVtcHQgdG8gY3JlYXRlIGEga2V5LiAgVGhlIF9jYWxsb3V0X2luZm8gc3RyaW5nIHdpbGwgYmUKKyAqIHBhc3NlZCB0byAvc2Jpbi9yZXF1ZXN0LWtleSB0byBhaWQgd2l0aCBjb21wbGV0aW5nIHRoZSByZXF1ZXN0LiAgSWYgdGhlCisgKiBfY2FsbG91dF9pbmZvIHN0cmluZyBpcyAiIiB0aGVuIGl0IHdpbGwgYmUgY2hhbmdlZCB0byAiLSIuCiAgKi8KIFNZU0NBTExfREVGSU5FNChyZXF1ZXN0X2tleSwgY29uc3QgY2hhciBfX3VzZXIgKiwgX3R5cGUsCiAJCWNvbnN0IGNoYXIgX191c2VyICosIF9kZXNjcmlwdGlvbiwKQEAgLTIyMiwxNCArMjE5LDE0IEBACiAJa2ZyZWUoZGVzY3JpcHRpb24pOwogZXJyb3I6CiAJcmV0dXJuIHJldDsKK30KIAotfSAvKiBlbmQgc3lzX3JlcXVlc3Rfa2V5KCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIGdldCB0aGUgSUQgb2YgdGhlIHNwZWNpZmllZCBwcm9jZXNzIGtleXJpbmcKLSAqIC0gdGhlIGtleXJpbmcgbXVzdCBoYXZlIHNlYXJjaCBwZXJtaXNzaW9uIHRvIGJlIGZvdW5kCi0gKiAtIGltcGxlbWVudHMga2V5Y3RsKEtFWUNUTF9HRVRfS0VZUklOR19JRCkKKyAqIEdldCB0aGUgSUQgb2YgdGhlIHNwZWNpZmllZCBwcm9jZXNzIGtleXJpbmcuCisgKgorICogVGhlIHJlcXVlc3RlZCBrZXlyaW5nIG11c3QgaGF2ZSBzZWFyY2ggcGVybWlzc2lvbiB0byBiZSBmb3VuZC4KKyAqCisgKiBJZiBzdWNjZXNzZnVsLCB0aGUgSUQgb2YgdGhlIHJlcXVlc3RlZCBrZXlyaW5nIHdpbGwgYmUgcmV0dXJuZWQuCiAgKi8KIGxvbmcga2V5Y3RsX2dldF9rZXlyaW5nX0lEKGtleV9zZXJpYWxfdCBpZCwgaW50IGNyZWF0ZSkKIHsKQEAgLTI0OCwxMyArMjQ1LDE3IEBACiAJa2V5X3JlZl9wdXQoa2V5X3JlZik7CiBlcnJvcjoKIAlyZXR1cm4gcmV0OworfQogCi19IC8qIGVuZCBrZXljdGxfZ2V0X2tleXJpbmdfSUQoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogam9pbiB0aGUgc2Vzc2lvbiBrZXlyaW5nCi0gKiAtIGltcGxlbWVudHMga2V5Y3RsKEtFWUNUTF9KT0lOX1NFU1NJT05fS0VZUklORykKKyAqIEpvaW4gYSAobmFtZWQpIHNlc3Npb24ga2V5cmluZy4KKyAqCisgKiBDcmVhdGUgYW5kIGpvaW4gYW4gYW5vbnltb3VzIHNlc3Npb24ga2V5cmluZyBvciBqb2luIGEgbmFtZWQgc2Vzc2lvbgorICoga2V5cmluZywgY3JlYXRpbmcgaXQgaWYgbmVjZXNzYXJ5LiAgQSBuYW1lZCBzZXNzaW9uIGtleXJpbmcgbXVzdCBoYXZlIFNlYXJjaAorICogcGVybWlzc2lvbiBmb3IgaXQgdG8gYmUgam9pbmVkLiAgU2Vzc2lvbiBrZXlyaW5ncyB3aXRob3V0IHRoaXMgcGVybWl0IHdpbGwKKyAqIGJlIHNraXBwZWQgb3Zlci4KKyAqCisgKiBJZiBzdWNjZXNzZnVsLCB0aGUgSUQgb2YgdGhlIGpvaW5lZCBzZXNzaW9uIGtleXJpbmcgd2lsbCBiZSByZXR1cm5lZC4KICAqLwogbG9uZyBrZXljdGxfam9pbl9zZXNzaW9uX2tleXJpbmcoY29uc3QgY2hhciBfX3VzZXIgKl9uYW1lKQogewpAQCAtMjc3LDE0ICsyNzgsMTcgQEAKIAogZXJyb3I6CiAJcmV0dXJuIHJldDsKK30KIAotfSAvKiBlbmQga2V5Y3RsX2pvaW5fc2Vzc2lvbl9rZXlyaW5nKCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIHVwZGF0ZSBhIGtleSdzIGRhdGEgcGF5bG9hZAotICogLSB0aGUga2V5IG11c3QgYmUgd3JpdGFibGUKLSAqIC0gaW1wbGVtZW50cyBrZXljdGwoS0VZQ1RMX1VQREFURSkKKyAqIFVwZGF0ZSBhIGtleSdzIGRhdGEgcGF5bG9hZCBmcm9tIHRoZSBnaXZlbiBkYXRhLgorICoKKyAqIFRoZSBrZXkgbXVzdCBncmFudCB0aGUgY2FsbGVyIFdyaXRlIHBlcm1pc3Npb24gYW5kIHRoZSBrZXkgdHlwZSBtdXN0IHN1cHBvcnQKKyAqIHVwZGF0aW5nIGZvciB0aGlzIHRvIHdvcmsuICBBIG5lZ2F0aXZlIGtleSBjYW4gYmUgcG9zaXRpdmVseSBpbnN0YW50aWF0ZWQKKyAqIHdpdGggdGhpcyBjYWxsLgorICoKKyAqIElmIHN1Y2Nlc3NmdWwsIDAgd2lsbCBiZSByZXR1cm5lZC4gIElmIHRoZSBrZXkgdHlwZSBkb2VzIG5vdCBzdXBwb3J0CisgKiB1cGRhdGluZywgdGhlbiAtRU9QTk9UU1VQUCB3aWxsIGJlIHJldHVybmVkLgogICovCiBsb25nIGtleWN0bF91cGRhdGVfa2V5KGtleV9zZXJpYWxfdCBpZCwKIAkJICAgICAgIGNvbnN0IHZvaWQgX191c2VyICpfcGF5bG9hZCwKQEAgLTMyNiwxNCArMzMwLDE3IEBACiAJa2ZyZWUocGF5bG9hZCk7CiBlcnJvcjoKIAlyZXR1cm4gcmV0OworfQogCi19IC8qIGVuZCBrZXljdGxfdXBkYXRlX2tleSgpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiByZXZva2UgYSBrZXkKLSAqIC0gdGhlIGtleSBtdXN0IGJlIHdyaXRhYmxlCi0gKiAtIGltcGxlbWVudHMga2V5Y3RsKEtFWUNUTF9SRVZPS0UpCisgKiBSZXZva2UgYSBrZXkuCisgKgorICogVGhlIGtleSBtdXN0IGJlIGdyYW50IHRoZSBjYWxsZXIgV3JpdGUgb3IgU2V0YXR0ciBwZXJtaXNzaW9uIGZvciB0aGlzIHRvCisgKiB3b3JrLiAgVGhlIGtleSB0eXBlIHNob3VsZCBnaXZlIHVwIGl0cyBxdW90YSBjbGFpbSB3aGVuIHJldm9rZWQuICBUaGUga2V5CisgKiBhbmQgYW55IGxpbmtzIHRvIHRoZSBrZXkgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGdhcmJhZ2UgY29sbGVjdGVkIGFmdGVyIGEKKyAqIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUgKC9wcm9jL3N5cy9rZXJuZWwva2V5cy9nY19kZWxheSkuCisgKgorICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC4KICAqLwogbG9uZyBrZXljdGxfcmV2b2tlX2tleShrZXlfc2VyaWFsX3QgaWQpCiB7CkBAIC0zNTgsMTQgKzM2NSwxNCBAQAogCWtleV9yZWZfcHV0KGtleV9yZWYpOwogZXJyb3I6CiAJcmV0dXJuIHJldDsKK30KIAotfSAvKiBlbmQga2V5Y3RsX3Jldm9rZV9rZXkoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogY2xlYXIgdGhlIHNwZWNpZmllZCBwcm9jZXNzIGtleXJpbmcKLSAqIC0gdGhlIGtleXJpbmcgbXVzdCBiZSB3cml0YWJsZQotICogLSBpbXBsZW1lbnRzIGtleWN0bChLRVlDVExfQ0xFQVIpCisgKiBDbGVhciB0aGUgc3BlY2lmaWVkIGtleXJpbmcsIGNyZWF0aW5nIGFuIGVtcHR5IHByb2Nlc3Mga2V5cmluZyBpZiBvbmUgb2YgdGhlCisgKiBzcGVjaWFsIGtleXJpbmcgSURzIGlzIHVzZWQuCisgKgorICogVGhlIGtleXJpbmcgbXVzdCBncmFudCB0aGUgY2FsbGVyIFdyaXRlIHBlcm1pc3Npb24gZm9yIHRoaXMgdG8gd29yay4gIElmCisgKiBzdWNjZXNzZnVsLCAwIHdpbGwgYmUgcmV0dXJuZWQuCiAgKi8KIGxvbmcga2V5Y3RsX2tleXJpbmdfY2xlYXIoa2V5X3NlcmlhbF90IHJpbmdpZCkKIHsKQEAgLTM4MywxNSArMzkwLDE4IEBACiAJa2V5X3JlZl9wdXQoa2V5cmluZ19yZWYpOwogZXJyb3I6CiAJcmV0dXJuIHJldDsKK30KIAotfSAvKiBlbmQga2V5Y3RsX2tleXJpbmdfY2xlYXIoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogbGluayBhIGtleSBpbnRvIGEga2V5cmluZwotICogLSB0aGUga2V5cmluZyBtdXN0IGJlIHdyaXRhYmxlCi0gKiAtIHRoZSBrZXkgbXVzdCBiZSBsaW5rYWJsZQotICogLSBpbXBsZW1lbnRzIGtleWN0bChLRVlDVExfTElOSykKKyAqIENyZWF0ZSBhIGxpbmsgZnJvbSBhIGtleXJpbmcgdG8gYSBrZXkgaWYgdGhlcmUncyBubyBtYXRjaGluZyBrZXkgaW4gdGhlCisgKiBrZXlyaW5nLCBvdGhlcndpc2UgcmVwbGFjZSB0aGUgbGluayB0byB0aGUgbWF0Y2hpbmcga2V5IHdpdGggYSBsaW5rIHRvIHRoZQorICogbmV3IGtleS4KKyAqCisgKiBUaGUga2V5IG11c3QgZ3JhbnQgdGhlIGNhbGxlciBMaW5rIHBlcm1pc3Npb24gYW5kIHRoZSB0aGUga2V5cmluZyBtdXN0IGdyYW50CisgKiB0aGUgY2FsbGVyIFdyaXRlIHBlcm1pc3Npb24uICBGdXJ0aGVybW9yZSwgaWYgYW4gYWRkaXRpb25hbCBsaW5rIGlzIGNyZWF0ZWQsCisgKiB0aGUga2V5cmluZydzIHF1b3RhIHdpbGwgYmUgZXh0ZW5kZWQuCisgKgorICogSWYgc3VjY2Vzc2Z1bCwgMCB3aWxsIGJlIHJldHVybmVkLgogICovCiBsb25nIGtleWN0bF9rZXlyaW5nX2xpbmsoa2V5X3NlcmlhbF90IGlkLCBrZXlfc2VyaWFsX3QgcmluZ2lkKQogewpAQCAtNDE3LDE1ICs0MjcsMTYgQEAKIAlrZXlfcmVmX3B1dChrZXlyaW5nX3JlZik7CiBlcnJvcjoKIAlyZXR1cm4gcmV0OworfQogCi19IC8qIGVuZCBrZXljdGxfa2V5cmluZ19saW5rKCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIHVubGluayB0aGUgZmlyc3QgYXR0YWNobWVudCBvZiBhIGtleSBmcm9tIGEga2V5cmluZwotICogLSB0aGUga2V5cmluZyBtdXN0IGJlIHdyaXRhYmxlCi0gKiAtIHdlIGRvbid0IG5lZWQgYW55IHBlcm1pc3Npb25zIG9uIHRoZSBrZXkKLSAqIC0gaW1wbGVtZW50cyBrZXljdGwoS0VZQ1RMX1VOTElOSykKKyAqIFVubGluayBhIGtleSBmcm9tIGEga2V5cmluZy4KKyAqCisgKiBUaGUga2V5cmluZyBtdXN0IGdyYW50IHRoZSBjYWxsZXIgV3JpdGUgcGVybWlzc2lvbiBmb3IgdGhpcyB0byB3b3JrOyB0aGUga2V5CisgKiBpdHNlbGYgbmVlZCBub3QgZ3JhbnQgdGhlIGNhbGxlciBhbnl0aGluZy4gIElmIHRoZSBsYXN0IGxpbmsgdG8gYSBrZXkgaXMKKyAqIHJlbW92ZWQgdGhlbiB0aGF0IGtleSB3aWxsIGJlIHNjaGVkdWxlZCBmb3IgZGVzdHJ1Y3Rpb24uCisgKgorICogSWYgc3VjY2Vzc2Z1bCwgMCB3aWxsIGJlIHJldHVybmVkLgogICovCiBsb25nIGtleWN0bF9rZXlyaW5nX3VubGluayhrZXlfc2VyaWFsX3QgaWQsIGtleV9zZXJpYWxfdCByaW5naWQpCiB7CkBAIC00NTEsMTkgKzQ2MiwyMCBAQAogCWtleV9yZWZfcHV0KGtleXJpbmdfcmVmKTsKIGVycm9yOgogCXJldHVybiByZXQ7Cit9CiAKLX0gLyogZW5kIGtleWN0bF9rZXlyaW5nX3VubGluaygpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBkZXNjcmliZSBhIHVzZXIga2V5Ci0gKiAtIHRoZSBrZXkgbXVzdCBoYXZlIHZpZXcgcGVybWlzc2lvbgotICogLSBpZiB0aGVyZSdzIGEgYnVmZmVyLCB3ZSBwbGFjZSB1cCB0byBidWZsZW4gYnl0ZXMgb2YgZGF0YSBpbnRvIGl0Ci0gKiAtIHVubGVzcyB0aGVyZSdzIGFuIGVycm9yLCB3ZSByZXR1cm4gdGhlIGFtb3VudCBvZiBkZXNjcmlwdGlvbiBhdmFpbGFibGUsCi0gKiAgIGlycmVzcGVjdGl2ZSBvZiBob3cgbXVjaCB3ZSBtYXkgaGF2ZSBjb3BpZWQKLSAqIC0gdGhlIGRlc2NyaXB0aW9uIGlzIGZvcm1hdHRlZCB0aHVzOgorICogUmV0dXJuIGEgZGVzY3JpcHRpb24gb2YgYSBrZXkgdG8gdXNlcnNwYWNlLgorICoKKyAqIFRoZSBrZXkgbXVzdCBncmFudCB0aGUgY2FsbGVyIFZpZXcgcGVybWlzc2lvbiBmb3IgdGhpcyB0byB3b3JrLgorICoKKyAqIElmIHRoZXJlJ3MgYSBidWZmZXIsIHdlIHBsYWNlIHVwIHRvIGJ1ZmxlbiBieXRlcyBvZiBkYXRhIGludG8gaXQgZm9ybWF0dGVkCisgKiBpbiB0aGUgZm9sbG93aW5nIHdheToKKyAqCiAgKgl0eXBlO3VpZDtnaWQ7cGVybTtkZXNjcmlwdGlvbjxOVUw+Ci0gKiAtIGltcGxlbWVudHMga2V5Y3RsKEtFWUNUTF9ERVNDUklCRSkKKyAqCisgKiBJZiBzdWNjZXNzZnVsLCB3ZSByZXR1cm4gdGhlIGFtb3VudCBvZiBkZXNjcmlwdGlvbiBhdmFpbGFibGUsIGlycmVzcGVjdGl2ZQorICogb2YgaG93IG11Y2ggd2UgbWF5IGhhdmUgY29waWVkIGludG8gdGhlIGJ1ZmZlci4KICAqLwogbG9uZyBrZXljdGxfZGVzY3JpYmVfa2V5KGtleV9zZXJpYWxfdCBrZXlpZCwKIAkJCSBjaGFyIF9fdXNlciAqYnVmZmVyLApAQCAtNTMxLDE4ICs1NDMsMTcgQEAKIAlrZXlfcmVmX3B1dChrZXlfcmVmKTsKIGVycm9yOgogCXJldHVybiByZXQ7Cit9CiAKLX0gLyogZW5kIGtleWN0bF9kZXNjcmliZV9rZXkoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogc2VhcmNoIHRoZSBzcGVjaWZpZWQga2V5cmluZyBmb3IgYSBtYXRjaGluZyBrZXkKLSAqIC0gdGhlIHN0YXJ0IGtleXJpbmcgbXVzdCBiZSBzZWFyY2hhYmxlCi0gKiAtIG5lc3RlZCBrZXlyaW5ncyBtYXkgYWxzbyBiZSBzZWFyY2hlZCBpZiB0aGV5IGFyZSBzZWFyY2hhYmxlCi0gKiAtIG9ubHkga2V5cyB3aXRoIHNlYXJjaCBwZXJtaXNzaW9uIG1heSBiZSBmb3VuZAotICogLSBpZiBhIGtleSBpcyBmb3VuZCwgaXQgd2lsbCBiZSBhdHRhY2hlZCB0byB0aGUgZGVzdGluYXRpb24ga2V5cmluZyBpZgotICogICB0aGVyZSdzIG9uZSBzcGVjaWZpZWQKLSAqIC0gaW1wbGVtZW50cyBrZXljdGwoS0VZQ1RMX1NFQVJDSCkKKyAqIFNlYXJjaCB0aGUgc3BlY2lmaWVkIGtleXJpbmcgYW5kIGFueSBrZXlyaW5ncyBpdCBsaW5rcyB0byBmb3IgYSBtYXRjaGluZworICoga2V5LiAgT25seSBrZXlyaW5ncyB0aGF0IGdyYW50IHRoZSBjYWxsZXIgU2VhcmNoIHBlcm1pc3Npb24gd2lsbCBiZSBzZWFyY2hlZAorICogKHRoaXMgaW5jbHVkZXMgdGhlIHN0YXJ0aW5nIGtleXJpbmcpLiAgT25seSBrZXlzIHdpdGggU2VhcmNoIHBlcm1pc3Npb24gY2FuCisgKiBiZSBmb3VuZC4KKyAqCisgKiBJZiBzdWNjZXNzZnVsLCB0aGUgZm91bmQga2V5IHdpbGwgYmUgbGlua2VkIHRvIHRoZSBkZXN0aW5hdGlvbiBrZXlyaW5nIGlmCisgKiBzdXBwbGllZCBhbmQgdGhlIGtleSBoYXMgTGluayBwZXJtaXNzaW9uLCBhbmQgdGhlIGZvdW5kIGtleSBJRCB3aWxsIGJlCisgKiByZXR1cm5lZC4KICAqLwogbG9uZyBrZXljdGxfa2V5cmluZ19zZWFyY2goa2V5X3NlcmlhbF90IHJpbmdpZCwKIAkJCSAgIGNvbnN0IGNoYXIgX191c2VyICpfdHlwZSwKQEAgLTYyNiwxOCArNjM3LDE3IEBACiAJa2ZyZWUoZGVzY3JpcHRpb24pOwogZXJyb3I6CiAJcmV0dXJuIHJldDsKK30KIAotfSAvKiBlbmQga2V5Y3RsX2tleXJpbmdfc2VhcmNoKCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIHJlYWQgYSB1c2VyIGtleSdzIHBheWxvYWQKLSAqIC0gdGhlIGtleXJpbmcgbXVzdCBiZSByZWFkYWJsZSBvciB0aGUga2V5IG11c3QgYmUgc2VhcmNoYWJsZSBmcm9tIHRoZQotICogICBwcm9jZXNzJ3Mga2V5cmluZ3MKLSAqIC0gaWYgdGhlcmUncyBhIGJ1ZmZlciwgd2UgcGxhY2UgdXAgdG8gYnVmbGVuIGJ5dGVzIG9mIGRhdGEgaW50byBpdAotICogLSB1bmxlc3MgdGhlcmUncyBhbiBlcnJvciwgd2UgcmV0dXJuIHRoZSBhbW91bnQgb2YgZGF0YSBpbiB0aGUga2V5LAotICogICBpcnJlc3BlY3RpdmUgb2YgaG93IG11Y2ggd2UgbWF5IGhhdmUgY29waWVkCi0gKiAtIGltcGxlbWVudHMga2V5Y3RsKEtFWUNUTF9SRUFEKQorICogUmVhZCBhIGtleSdzIHBheWxvYWQuCisgKgorICogVGhlIGtleSBtdXN0IGVpdGhlciBncmFudCB0aGUgY2FsbGVyIFJlYWQgcGVybWlzc2lvbiwgb3IgaXQgbXVzdCBncmFudCB0aGUKKyAqIGNhbGxlciBTZWFyY2ggcGVybWlzc2lvbiB3aGVuIHNlYXJjaGVkIGZvciBmcm9tIHRoZSBwcm9jZXNzIGtleXJpbmdzLgorICoKKyAqIElmIHN1Y2Nlc3NmdWwsIHdlIHBsYWNlIHVwIHRvIGJ1ZmxlbiBieXRlcyBvZiBkYXRhIGludG8gdGhlIGJ1ZmZlciwgaWYgb25lCisgKiBpcyBwcm92aWRlZCwgYW5kIHJldHVybiB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCBpcyBhdmFpbGFibGUgaW4gdGhlIGtleSwKKyAqIGlycmVzcGVjdGl2ZSBvZiBob3cgbXVjaCB3ZSBjb3BpZWQgaW50byB0aGUgYnVmZmVyLgogICovCiBsb25nIGtleWN0bF9yZWFkX2tleShrZXlfc2VyaWFsX3Qga2V5aWQsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBidWZsZW4pCiB7CkBAIC02ODgsMTUgKzY5OCwyMiBAQAogCWtleV9wdXQoa2V5KTsKIGVycm9yOgogCXJldHVybiByZXQ7Cit9CiAKLX0gLyogZW5kIGtleWN0bF9yZWFkX2tleSgpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBjaGFuZ2UgdGhlIG93bmVyc2hpcCBvZiBhIGtleQotICogLSB0aGUga2V5cmluZyBvd25lZCBieSB0aGUgY2hhbmdlcgotICogLSBpZiB0aGUgdWlkIG9yIGdpZCBpcyAtMSwgdGhlbiB0aGF0IHBhcmFtZXRlciBpcyBub3QgY2hhbmdlZAotICogLSBpbXBsZW1lbnRzIGtleWN0bChLRVlDVExfQ0hPV04pCisgKiBDaGFuZ2UgdGhlIG93bmVyc2hpcCBvZiBhIGtleQorICoKKyAqIFRoZSBrZXkgbXVzdCBncmFudCB0aGUgY2FsbGVyIFNldGF0dHIgcGVybWlzc2lvbiBmb3IgdGhpcyB0byB3b3JrLCB0aG91Z2gKKyAqIHRoZSBrZXkgbmVlZCBub3QgYmUgZnVsbHkgaW5zdGFudGlhdGVkIHlldC4gIEZvciB0aGUgVUlEIHRvIGJlIGNoYW5nZWQsIG9yCisgKiBmb3IgdGhlIEdJRCB0byBiZSBjaGFuZ2VkIHRvIGEgZ3JvdXAgdGhlIGNhbGxlciBpcyBub3QgYSBtZW1iZXIgb2YsIHRoZQorICogY2FsbGVyIG11c3QgaGF2ZSBzeXNhZG1pbiBjYXBhYmlsaXR5LiAgSWYgZWl0aGVyIHVpZCBvciBnaWQgaXMgLTEgdGhlbiB0aGF0CisgKiBhdHRyaWJ1dGUgaXMgbm90IGNoYW5nZWQuCisgKgorICogSWYgdGhlIFVJRCBpcyB0byBiZSBjaGFuZ2VkLCB0aGUgbmV3IHVzZXIgbXVzdCBoYXZlIHN1ZmZpY2llbnQgcXVvdGEgdG8KKyAqIGFjY2VwdCB0aGUga2V5LiAgVGhlIHF1b3RhIGRlZHVjdGlvbiB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgb2xkIHVzZXIgdG8KKyAqIHRoZSBuZXcgdXNlciBzaG91bGQgdGhlIGF0dHJpYnV0ZSBiZSBjaGFuZ2VkLgorICoKKyAqIElmIHN1Y2Nlc3NmdWwsIDAgd2lsbCBiZSByZXR1cm5lZC4KICAqLwogbG9uZyBrZXljdGxfY2hvd25fa2V5KGtleV9zZXJpYWxfdCBpZCwgdWlkX3QgdWlkLCBnaWRfdCBnaWQpCiB7CkBAIC03OTYsMTQgKzgxMywxNCBAQAogCXphcG93bmVyID0gbmV3b3duZXI7CiAJcmV0ID0gLUVEUVVPVDsKIAlnb3RvIGVycm9yX3B1dDsKK30KIAotfSAvKiBlbmQga2V5Y3RsX2Nob3duX2tleSgpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBjaGFuZ2UgdGhlIHBlcm1pc3Npb24gbWFzayBvbiBhIGtleQotICogLSB0aGUga2V5cmluZyBvd25lZCBieSB0aGUgY2hhbmdlcgotICogLSBpbXBsZW1lbnRzIGtleWN0bChLRVlDVExfU0VUUEVSTSkKKyAqIENoYW5nZSB0aGUgcGVybWlzc2lvbiBtYXNrIG9uIGEga2V5LgorICoKKyAqIFRoZSBrZXkgbXVzdCBncmFudCB0aGUgY2FsbGVyIFNldGF0dHIgcGVybWlzc2lvbiBmb3IgdGhpcyB0byB3b3JrLCB0aG91Z2gKKyAqIHRoZSBrZXkgbmVlZCBub3QgYmUgZnVsbHkgaW5zdGFudGlhdGVkIHlldC4gIElmIHRoZSBjYWxsZXIgZG9lcyBub3QgaGF2ZQorICogc3lzYWRtaW4gY2FwYWJpbGl0eSwgaXQgbWF5IG9ubHkgY2hhbmdlIHRoZSBwZXJtaXNzaW9uIG9uIGtleXMgdGhhdCBpdCBvd25zLgogICovCiBsb25nIGtleWN0bF9zZXRwZXJtX2tleShrZXlfc2VyaWFsX3QgaWQsIGtleV9wZXJtX3QgcGVybSkKIHsKQEAgLTgzOCwxMSArODU1LDExIEBACiAJa2V5X3B1dChrZXkpOwogZXJyb3I6CiAJcmV0dXJuIHJldDsKLQotfSAvKiBlbmQga2V5Y3RsX3NldHBlcm1fa2V5KCkgKi8KK30KIAogLyoKLSAqIGdldCB0aGUgZGVzdGluYXRpb24ga2V5cmluZyBmb3IgaW5zdGFudGlhdGlvbgorICogR2V0IHRoZSBkZXN0aW5hdGlvbiBrZXlyaW5nIGZvciBpbnN0YW50aWF0aW9uIGFuZCBjaGVjayB0aGF0IHRoZSBjYWxsZXIgaGFzCisgKiBXcml0ZSBwZXJtaXNzaW9uIG9uIGl0LgogICovCiBzdGF0aWMgbG9uZyBnZXRfaW5zdGFudGlhdGlvbl9rZXlyaW5nKGtleV9zZXJpYWxfdCByaW5naWQsCiAJCQkJICAgICAgc3RydWN0IHJlcXVlc3Rfa2V5X2F1dGggKnJrYSwKQEAgLTg3OSw3ICs4OTYsNyBAQAogfQogCiAvKgotICogY2hhbmdlIHRoZSByZXF1ZXN0X2tleSBhdXRob3Jpc2F0aW9uIGtleSBvbiB0aGUgY3VycmVudCBwcm9jZXNzCisgKiBDaGFuZ2UgdGhlIHJlcXVlc3Rfa2V5IGF1dGhvcmlzYXRpb24ga2V5IG9uIHRoZSBjdXJyZW50IHByb2Nlc3MuCiAgKi8KIHN0YXRpYyBpbnQga2V5Y3RsX2NoYW5nZV9yZXFrZXlfYXV0aChzdHJ1Y3Qga2V5ICprZXkpCiB7CkBAIC04OTUsMTAgKzkxMiwxNCBAQAogCXJldHVybiBjb21taXRfY3JlZHMobmV3KTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIGluc3RhbnRpYXRlIHRoZSBrZXkgd2l0aCB0aGUgc3BlY2lmaWVkIHBheWxvYWQsIGFuZCwgaWYgb25lIGlzIGdpdmVuLCBsaW5rCi0gKiB0aGUga2V5IGludG8gdGhlIGtleXJpbmcKKyAqIEluc3RhbnRpYXRlIGEga2V5IHdpdGggdGhlIHNwZWNpZmllZCBwYXlsb2FkIGFuZCBsaW5rIHRoZSBrZXkgaW50byB0aGUKKyAqIGRlc3RpbmF0aW9uIGtleXJpbmcgaWYgb25lIGlzIGdpdmVuLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHRoZSBhcHByb3ByaWF0ZSBpbnN0YW50aWF0aW9uIHBlcm1pdCBzZXQgZm9yIHRoaXMgdG8KKyAqIHdvcmsgKHNlZSBrZXljdGxfYXNzdW1lX2F1dGhvcml0eSkuICBObyBvdGhlciBwZXJtaXNzaW9ucyBhcmUgcmVxdWlyZWQuCisgKgorICogSWYgc3VjY2Vzc2Z1bCwgMCB3aWxsIGJlIHJldHVybmVkLgogICovCiBsb25nIGtleWN0bF9pbnN0YW50aWF0ZV9rZXkoa2V5X3NlcmlhbF90IGlkLAogCQkJICAgIGNvbnN0IHZvaWQgX191c2VyICpfcGF5bG9hZCwKQEAgLTk3MywxMyArOTk0LDIyIEBACiAJCXZmcmVlKHBheWxvYWQpOwogZXJyb3I6CiAJcmV0dXJuIHJldDsKK30KIAotfSAvKiBlbmQga2V5Y3RsX2luc3RhbnRpYXRlX2tleSgpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBuZWdhdGl2ZWx5IGluc3RhbnRpYXRlIHRoZSBrZXkgd2l0aCB0aGUgZ2l2ZW4gdGltZW91dCAoaW4gc2Vjb25kcyksIGFuZCwgaWYKLSAqIG9uZSBpcyBnaXZlbiwgbGluayB0aGUga2V5IGludG8gdGhlIGtleXJpbmcKKyAqIE5lZ2F0aXZlbHkgaW5zdGFudGlhdGUgdGhlIGtleSB3aXRoIHRoZSBnaXZlbiB0aW1lb3V0IChpbiBzZWNvbmRzKSBhbmQgbGluaworICogdGhlIGtleSBpbnRvIHRoZSBkZXN0aW5hdGlvbiBrZXlyaW5nIGlmIG9uZSBpcyBnaXZlbi4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgaW5zdGFudGlhdGlvbiBwZXJtaXQgc2V0IGZvciB0aGlzIHRvCisgKiB3b3JrIChzZWUga2V5Y3RsX2Fzc3VtZV9hdXRob3JpdHkpLiAgTm8gb3RoZXIgcGVybWlzc2lvbnMgYXJlIHJlcXVpcmVkLgorICoKKyAqIFRoZSBrZXkgYW5kIGFueSBsaW5rcyB0byB0aGUga2V5IHdpbGwgYmUgYXV0b21hdGljYWxseSBnYXJiYWdlIGNvbGxlY3RlZAorICogYWZ0ZXIgdGhlIHRpbWVvdXQgZXhwaXJlcy4KKyAqCisgKiBOZWdhdGl2ZSBrZXlzIGFyZSB1c2VkIHRvIHJhdGUgbGltaXQgcmVwZWF0ZWQgcmVxdWVzdF9rZXkoKSBjYWxscyBieSBjYXVzaW5nCisgKiB0aGVtIHRvIHJldHVybiAtRU5PS0VZIHVudGlsIHRoZSBuZWdhdGl2ZSBrZXkgZXhwaXJlcy4KKyAqCisgKiBJZiBzdWNjZXNzZnVsLCAwIHdpbGwgYmUgcmV0dXJuZWQuCiAgKi8KIGxvbmcga2V5Y3RsX25lZ2F0ZV9rZXkoa2V5X3NlcmlhbF90IGlkLCB1bnNpZ25lZCB0aW1lb3V0LCBrZXlfc2VyaWFsX3QgcmluZ2lkKQogewpAQCAtMTAyMCwxMyArMTA1MCwxNCBAQAogCiBlcnJvcjoKIAlyZXR1cm4gcmV0OworfQogCi19IC8qIGVuZCBrZXljdGxfbmVnYXRlX2tleSgpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBzZXQgdGhlIGRlZmF1bHQga2V5cmluZyBpbiB3aGljaCByZXF1ZXN0X2tleSgpIHdpbGwgY2FjaGUga2V5cwotICogLSByZXR1cm4gdGhlIG9sZCBzZXR0aW5nCisgKiBSZWFkIG9yIHNldCB0aGUgZGVmYXVsdCBrZXlyaW5nIGluIHdoaWNoIHJlcXVlc3Rfa2V5KCkgd2lsbCBjYWNoZSBrZXlzIGFuZAorICogcmV0dXJuIHRoZSBvbGQgc2V0dGluZy4KKyAqCisgKiBJZiBhIHByb2Nlc3Mga2V5cmluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGlzIHdpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2Vzbid0CisgKiB5ZXQgZXhpc3QuICBUaGUgb2xkIHNldHRpbmcgd2lsbCBiZSByZXR1cm5lZCBpZiBzdWNjZXNzZnVsLgogICovCiBsb25nIGtleWN0bF9zZXRfcmVxa2V5X2tleXJpbmcoaW50IHJlcWtleV9kZWZsKQogewpAQCAtMTA3OSwxMiArMTExMCwxOSBAQAogZXJyb3I6CiAJYWJvcnRfY3JlZHMobmV3KTsKIAlyZXR1cm4gcmV0OworfQogCi19IC8qIGVuZCBrZXljdGxfc2V0X3JlcWtleV9rZXlyaW5nKCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIHNldCBvciBjbGVhciB0aGUgdGltZW91dCBmb3IgYSBrZXkKKyAqIFNldCBvciBjbGVhciB0aGUgdGltZW91dCBvbiBhIGtleS4KKyAqCisgKiBFaXRoZXIgdGhlIGtleSBtdXN0IGdyYW50IHRoZSBjYWxsZXIgU2V0YXR0ciBwZXJtaXNzaW9uIG9yIGVsc2UgdGhlIGNhbGxlcgorICogbXVzdCBob2xkIGFuIGluc3RhbnRpYXRpb24gYXV0aG9yaXNhdGlvbiB0b2tlbiBmb3IgdGhlIGtleS4KKyAqCisgKiBUaGUgdGltZW91dCBpcyBlaXRoZXIgMCB0byBjbGVhciB0aGUgdGltZW91dCwgb3IgYSBudW1iZXIgb2Ygc2Vjb25kcyBmcm9tCisgKiB0aGUgY3VycmVudCB0aW1lLiAgVGhlIGtleSBhbmQgYW55IGxpbmtzIHRvIHRoZSBrZXkgd2lsbCBiZSBhdXRvbWF0aWNhbGx5CisgKiBnYXJiYWdlIGNvbGxlY3RlZCBhZnRlciB0aGUgdGltZW91dCBleHBpcmVzLgorICoKKyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuCiAgKi8KIGxvbmcga2V5Y3RsX3NldF90aW1lb3V0KGtleV9zZXJpYWxfdCBpZCwgdW5zaWduZWQgdGltZW91dCkKIHsKQEAgLTExMzYsMTIgKzExNzQsMjQgQEAKIAlyZXQgPSAwOwogZXJyb3I6CiAJcmV0dXJuIHJldDsKK30KIAotfSAvKiBlbmQga2V5Y3RsX3NldF90aW1lb3V0KCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIGFzc3VtZSB0aGUgYXV0aG9yaXR5IHRvIGluc3RhbnRpYXRlIHRoZSBzcGVjaWZpZWQga2V5CisgKiBBc3N1bWUgKG9yIGNsZWFyKSB0aGUgYXV0aG9yaXR5IHRvIGluc3RhbnRpYXRlIHRoZSBzcGVjaWZpZWQga2V5LgorICoKKyAqIFRoaXMgc2V0cyB0aGUgYXV0aG9yaXRhdGl2ZSB0b2tlbiBjdXJyZW50bHkgaW4gZm9yY2UgZm9yIGtleSBpbnN0YW50aWF0aW9uLgorICogVGhpcyBtdXN0IGJlIGRvbmUgZm9yIGEga2V5IHRvIGJlIGluc3RhbnRpYXRlZC4gIEl0IGhhcyB0aGUgZWZmZWN0IG9mIG1ha2luZworICogYXZhaWxhYmxlIGFsbCB0aGUga2V5cyBmcm9tIHRoZSBjYWxsZXIgb2YgdGhlIHJlcXVlc3Rfa2V5KCkgdGhhdCBjcmVhdGVkIGEKKyAqIGtleSB0byByZXF1ZXN0X2tleSgpIGNhbGxzIG1hZGUgYnkgdGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHRoZSBpbnN0YW50aWF0aW9uIGtleSBpbiB0aGVpciBwcm9jZXNzIGtleXJpbmdzIHdpdGggYQorICogU2VhcmNoIHBlcm1pc3Npb24gZ3JhbnQgYXZhaWxhYmxlIHRvIHRoZSBjYWxsZXIuCisgKgorICogSWYgdGhlIElEIGdpdmVuIGlzIDAsIHRoZW4gdGhlIHNldHRpbmcgd2lsbCBiZSBjbGVhcmVkIGFuZCAwIHJldHVybmVkLgorICoKKyAqIElmIHRoZSBJRCBnaXZlbiBoYXMgYSBtYXRjaGluZyBhbiBhdXRob3Jpc2F0aW9uIGtleSwgdGhlbiB0aGF0IGtleSB3aWxsIGJlCisgKiBzZXQgYW5kIGl0cyBJRCB3aWxsIGJlIHJldHVybmVkLiAgVGhlIGF1dGhvcmlzYXRpb24ga2V5IGNhbiBiZSByZWFkIHRvIGdldAorICogdGhlIGNhbGxvdXQgaW5mb3JtYXRpb24gcGFzc2VkIHRvIHJlcXVlc3Rfa2V5KCkuCiAgKi8KIGxvbmcga2V5Y3RsX2Fzc3VtZV9hdXRob3JpdHkoa2V5X3NlcmlhbF90IGlkKQogewpAQCAtMTE3OCwxNiArMTIyOCwxNyBAQAogCXJldCA9IGF1dGhrZXktPnNlcmlhbDsKIGVycm9yOgogCXJldHVybiByZXQ7Ci0KLX0gLyogZW5kIGtleWN0bF9hc3N1bWVfYXV0aG9yaXR5KCkgKi8KK30KIAogLyoKLSAqIGdldCB0aGUgc2VjdXJpdHkgbGFiZWwgb2YgYSBrZXkKLSAqIC0gdGhlIGtleSBtdXN0IGdyYW50IHVzIHZpZXcgcGVybWlzc2lvbgotICogLSBpZiB0aGVyZSdzIGEgYnVmZmVyLCB3ZSBwbGFjZSB1cCB0byBidWZsZW4gYnl0ZXMgb2YgZGF0YSBpbnRvIGl0Ci0gKiAtIHVubGVzcyB0aGVyZSdzIGFuIGVycm9yLCB3ZSByZXR1cm4gdGhlIGFtb3VudCBvZiBpbmZvcm1hdGlvbiBhdmFpbGFibGUsCi0gKiAgIGlycmVzcGVjdGl2ZSBvZiBob3cgbXVjaCB3ZSBtYXkgaGF2ZSBjb3BpZWQgKGluY2x1ZGluZyB0aGUgdGVybWluYWwgTlVMKQotICogLSBpbXBsZW1lbnRzIGtleWN0bChLRVlDVExfR0VUX1NFQ1VSSVRZKQorICogR2V0IGEga2V5J3MgdGhlIExTTSBzZWN1cml0eSBsYWJlbC4KKyAqCisgKiBUaGUga2V5IG11c3QgZ3JhbnQgdGhlIGNhbGxlciBWaWV3IHBlcm1pc3Npb24gZm9yIHRoaXMgdG8gd29yay4KKyAqCisgKiBJZiB0aGVyZSdzIGEgYnVmZmVyLCB0aGVuIHVwIHRvIGJ1ZmxlbiBieXRlcyBvZiBkYXRhIHdpbGwgYmUgcGxhY2VkIGludG8gaXQuCisgKgorICogSWYgc3VjY2Vzc2Z1bCwgdGhlIGFtb3VudCBvZiBpbmZvcm1hdGlvbiBhdmFpbGFibGUgd2lsbCBiZSByZXR1cm5lZCwKKyAqIGlycmVzcGVjdGl2ZSBvZiBob3cgbXVjaCB3YXMgY29waWVkIChpbmNsdWRpbmcgdGhlIHRlcm1pbmFsIE5VTCkuCiAgKi8KIGxvbmcga2V5Y3RsX2dldF9zZWN1cml0eShrZXlfc2VyaWFsX3Qga2V5aWQsCiAJCQkgY2hhciBfX3VzZXIgKmJ1ZmZlciwKQEAgLTEyNDIsMTAgKzEyOTMsMTYgQEAKIH0KIAogLyoKLSAqIGF0dGVtcHQgdG8gaW5zdGFsbCB0aGUgY2FsbGluZyBwcm9jZXNzJ3Mgc2Vzc2lvbiBrZXlyaW5nIG9uIHRoZSBwcm9jZXNzJ3MKLSAqIHBhcmVudCBwcm9jZXNzCi0gKiAtIHRoZSBrZXlyaW5nIG11c3QgZXhpc3QgYW5kIG11c3QgZ3JhbnQgdXMgTElOSyBwZXJtaXNzaW9uCi0gKiAtIGltcGxlbWVudHMga2V5Y3RsKEtFWUNUTF9TRVNTSU9OX1RPX1BBUkVOVCkKKyAqIEF0dGVtcHQgdG8gaW5zdGFsbCB0aGUgY2FsbGluZyBwcm9jZXNzJ3Mgc2Vzc2lvbiBrZXlyaW5nIG9uIHRoZSBwcm9jZXNzJ3MKKyAqIHBhcmVudCBwcm9jZXNzLgorICoKKyAqIFRoZSBrZXlyaW5nIG11c3QgZXhpc3QgYW5kIG11c3QgZ3JhbnQgdGhlIGNhbGxlciBMSU5LIHBlcm1pc3Npb24sIGFuZCB0aGUKKyAqIHBhcmVudCBwcm9jZXNzIG11c3QgYmUgc2luZ2xlLXRocmVhZGVkIGFuZCBtdXN0IGhhdmUgdGhlIHNhbWUgZWZmZWN0aXZlCisgKiBvd25lcnNoaXAgYXMgdGhpcyBwcm9jZXNzIGFuZCBtdXN0bid0IGJlIFNVSUQvU0dJRC4KKyAqCisgKiBUaGUga2V5cmluZyB3aWxsIGJlIGVtcGxhY2VkIG9uIHRoZSBwYXJlbnQgd2hlbiBpdCBuZXh0IHJlc3VtZXMgdXNlcnNwYWNlLgorICoKKyAqIElmIHN1Y2Nlc3NmdWwsIDAgd2lsbCBiZSByZXR1cm5lZC4KICAqLwogbG9uZyBrZXljdGxfc2Vzc2lvbl90b19wYXJlbnQodm9pZCkKIHsKQEAgLTEzNDgsOSArMTQwNSw4IEBACiAjZW5kaWYgLyogIVRJRl9OT1RJRllfUkVTVU1FICovCiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiB0aGUga2V5IGNvbnRyb2wgc3lzdGVtIGNhbGwKKyAqIFRoZSBrZXkgY29udHJvbCBzeXN0ZW0gY2FsbAogICovCiBTWVNDQUxMX0RFRklORTUoa2V5Y3RsLCBpbnQsIG9wdGlvbiwgdW5zaWduZWQgbG9uZywgYXJnMiwgdW5zaWduZWQgbG9uZywgYXJnMywKIAkJdW5zaWduZWQgbG9uZywgYXJnNCwgdW5zaWduZWQgbG9uZywgYXJnNSkKQEAgLTE0MzksNSArMTQ5NSw0IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KLQotfSAvKiBlbmQgc3lzX2tleWN0bCgpICovCit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCmluZGV4IGQzN2Y3MTMuLjU2MjBmMDggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCkBAIC0yNSwxNCArMjUsMTYgQEAKIAkJKGtleXJpbmcpLT5wYXlsb2FkLnN1YnNjcmlwdGlvbnMsCQkJXAogCQlyd3NlbV9pc19sb2NrZWQoKHN0cnVjdCByd19zZW1hcGhvcmUgKikmKGtleXJpbmcpLT5zZW0pKSkKIAorI2RlZmluZSBLRVlfTElOS19GSVhRVU9UQSAxVUwKKwogLyoKLSAqIHdoZW4gcGx1bWJpbmcgdGhlIGRlcHRocyBvZiB0aGUga2V5IHRyZWUsIHRoaXMgc2V0cyBhIGhhcmQgbGltaXQgc2V0IG9uIGhvdwotICogZGVlcCB3ZSdyZSB3aWxsaW5nIHRvIGdvCisgKiBXaGVuIHBsdW1iaW5nIHRoZSBkZXB0aHMgb2YgdGhlIGtleSB0cmVlLCB0aGlzIHNldHMgYSBoYXJkIGxpbWl0CisgKiBzZXQgb24gaG93IGRlZXAgd2UncmUgd2lsbGluZyB0byBnby4KICAqLwogI2RlZmluZSBLRVlSSU5HX1NFQVJDSF9NQVhfREVQVEggNgogCiAvKgotICogd2Uga2VlcCBhbGwgbmFtZWQga2V5cmluZ3MgaW4gYSBoYXNoIHRvIHNwZWVkIGxvb2tpbmcgdGhlbSB1cAorICogV2Uga2VlcCBhbGwgbmFtZWQga2V5cmluZ3MgaW4gYSBoYXNoIHRvIHNwZWVkIGxvb2tpbmcgdGhlbSB1cC4KICAqLwogI2RlZmluZSBLRVlSSU5HX05BTUVfSEFTSF9TSVpFCSgxIDw8IDUpCiAKQEAgLTUwLDcgKzUyLDkgQEAKIH0KIAogLyoKLSAqIHRoZSBrZXlyaW5nIHR5cGUgZGVmaW5pdGlvbgorICogVGhlIGtleXJpbmcga2V5IHR5cGUgZGVmaW5pdGlvbi4gIEtleXJpbmdzIGFyZSBzaW1wbHkga2V5cyBvZiB0aGlzIHR5cGUgYW5kCisgKiBjYW4gYmUgdHJlYXRlZCBhcyBvcmRpbmFyeSBrZXlzIGluIGFkZGl0aW9uIHRvIGhhdmluZyB0aGVpciBvd24gc3BlY2lhbAorICogb3BlcmF0aW9ucy4KICAqLwogc3RhdGljIGludCBrZXlyaW5nX2luc3RhbnRpYXRlKHN0cnVjdCBrZXkgKmtleXJpbmcsCiAJCQkgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4pOwpAQCAtNzEsMTkgKzc1LDE3IEBACiAJLmRlc2NyaWJlCT0ga2V5cmluZ19kZXNjcmliZSwKIAkucmVhZAkJPSBrZXlyaW5nX3JlYWQsCiB9OwotCiBFWFBPUlRfU1lNQk9MKGtleV90eXBlX2tleXJpbmcpOwogCiAvKgotICogc2VtYXBob3JlIHRvIHNlcmlhbGlzZSBsaW5rL2xpbmsgY2FsbHMgdG8gcHJldmVudCB0d28gbGluayBjYWxscyBpbiBwYXJhbGxlbAotICogaW50cm9kdWNpbmcgYSBjeWNsZQorICogU2VtYXBob3JlIHRvIHNlcmlhbGlzZSBsaW5rL2xpbmsgY2FsbHMgdG8gcHJldmVudCB0d28gbGluayBjYWxscyBpbiBwYXJhbGxlbAorICogaW50cm9kdWNpbmcgYSBjeWNsZS4KICAqLwogc3RhdGljIERFQ0xBUkVfUldTRU0oa2V5cmluZ19zZXJpYWxpc2VfbGlua19zZW0pOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogcHVibGlzaCB0aGUgbmFtZSBvZiBhIGtleXJpbmcgc28gdGhhdCBpdCBjYW4gYmUgZm91bmQgYnkgbmFtZSAoaWYgaXQgaGFzCi0gKiBvbmUpCisgKiBQdWJsaXNoIHRoZSBuYW1lIG9mIGEga2V5cmluZyBzbyB0aGF0IGl0IGNhbiBiZSBmb3VuZCBieSBuYW1lIChpZiBpdCBoYXMKKyAqIG9uZSkuCiAgKi8KIHN0YXRpYyB2b2lkIGtleXJpbmdfcHVibGlzaF9uYW1lKHN0cnVjdCBrZXkgKmtleXJpbmcpCiB7CkBAIC0xMDIsMTMgKzEwNCwxMiBAQAogCiAJCXdyaXRlX3VubG9jaygma2V5cmluZ19uYW1lX2xvY2spOwogCX0KK30KIAotfSAvKiBlbmQga2V5cmluZ19wdWJsaXNoX25hbWUoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogaW5pdGlhbGlzZSBhIGtleXJpbmcKLSAqIC0gd2Ugb2JqZWN0IGlmIHdlIHdlcmUgZ2l2ZW4gYW55IGRhdGEKKyAqIEluaXRpYWxpc2UgYSBrZXlyaW5nLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIGdpdmVuIGFueSBkYXRhLgogICovCiBzdGF0aWMgaW50IGtleXJpbmdfaW5zdGFudGlhdGUoc3RydWN0IGtleSAqa2V5cmluZywKIAkJCSAgICAgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YWxlbikKQEAgLTEyMywyMyArMTI0LDIwIEBACiAJfQogCiAJcmV0dXJuIHJldDsKK30KIAotfSAvKiBlbmQga2V5cmluZ19pbnN0YW50aWF0ZSgpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBtYXRjaCBrZXlyaW5ncyBvbiB0aGVpciBuYW1lCisgKiBNYXRjaCBrZXlyaW5ncyBvbiB0aGVpciBuYW1lCiAgKi8KIHN0YXRpYyBpbnQga2V5cmluZ19tYXRjaChjb25zdCBzdHJ1Y3Qga2V5ICprZXlyaW5nLCBjb25zdCB2b2lkICpkZXNjcmlwdGlvbikKIHsKIAlyZXR1cm4ga2V5cmluZy0+ZGVzY3JpcHRpb24gJiYKIAkJc3RyY21wKGtleXJpbmctPmRlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbikgPT0gMDsKK30KIAotfSAvKiBlbmQga2V5cmluZ19tYXRjaCgpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBkaXNwb3NlIG9mIHRoZSBkYXRhIGRhbmdsaW5nIGZyb20gdGhlIGNvcnBzZSBvZiBhIGtleXJpbmcKKyAqIENsZWFuIHVwIGEga2V5cmluZyB3aGVuIGl0IGlzIGRlc3Ryb3llZC4gIFVucHVibGlzaCBpdHMgbmFtZSBpZiBpdCBoYWQgb25lCisgKiBhbmQgZGlzcG9zZSBvZiBpdHMgZGF0YS4KICAqLwogc3RhdGljIHZvaWQga2V5cmluZ19kZXN0cm95KHN0cnVjdCBrZXkgKmtleXJpbmcpCiB7CkBAIC0xNjQsMTIgKzE2MiwxMCBAQAogCQkJa2V5X3B1dChrbGlzdC0+a2V5c1tsb29wXSk7CiAJCWtmcmVlKGtsaXN0KTsKIAl9Cit9CiAKLX0gLyogZW5kIGtleXJpbmdfZGVzdHJveSgpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBkZXNjcmliZSB0aGUga2V5cmluZworICogRGVzY3JpYmUgYSBrZXlyaW5nIGZvciAvcHJvYy4KICAqLwogc3RhdGljIHZvaWQga2V5cmluZ19kZXNjcmliZShjb25zdCBzdHJ1Y3Qga2V5ICprZXlyaW5nLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CkBAIC0xODcsMTMgKzE4MywxMiBAQAogCWVsc2UKIAkJc2VxX3B1dHMobSwgIjogZW1wdHkiKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKK30KIAotfSAvKiBlbmQga2V5cmluZ19kZXNjcmliZSgpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiByZWFkIGEgbGlzdCBvZiBrZXkgSURzIGZyb20gdGhlIGtleXJpbmcncyBjb250ZW50cwotICogLSB0aGUga2V5cmluZydzIHNlbWFwaG9yZSBpcyByZWFkLWxvY2tlZAorICogUmVhZCBhIGxpc3Qgb2Yga2V5IElEcyBmcm9tIHRoZSBrZXlyaW5nJ3MgY29udGVudHMgaW4gYmluYXJ5IGZvcm0KKyAqCisgKiBUaGUga2V5cmluZydzIHNlbWFwaG9yZSBpcyByZWFkLWxvY2tlZCBieSB0aGUgY2FsbGVyLgogICovCiBzdGF0aWMgbG9uZyBrZXlyaW5nX3JlYWQoY29uc3Qgc3RydWN0IGtleSAqa2V5cmluZywKIAkJCSBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKQpAQCAtMjQxLDEyICsyMzYsMTAgQEAKIAogZXJyb3I6CiAJcmV0dXJuIHJldDsKK30KIAotfSAvKiBlbmQga2V5cmluZ19yZWFkKCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIGFsbG9jYXRlIGEga2V5cmluZyBhbmQgbGluayBpbnRvIHRoZSBkZXN0aW5hdGlvbiBrZXlyaW5nCisgKiBBbGxvY2F0ZSBhIGtleXJpbmcgYW5kIGxpbmsgaW50byB0aGUgZGVzdGluYXRpb24ga2V5cmluZy4KICAqLwogc3RydWN0IGtleSAqa2V5cmluZ19hbGxvYyhjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwgdWlkX3QgdWlkLCBnaWRfdCBnaWQsCiAJCQkgIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCB1bnNpZ25lZCBsb25nIGZsYWdzLApAQCAtMjY5LDIwICsyNjIsNDIgQEAKIAl9CiAKIAlyZXR1cm4ga2V5cmluZzsKK30KIAotfSAvKiBlbmQga2V5cmluZ19hbGxvYygpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBzZWFyY2ggdGhlIHN1cHBsaWVkIGtleXJpbmcgdHJlZSBmb3IgYSBrZXkgdGhhdCBtYXRjaGVzIHRoZSBjcml0ZXJpb24KLSAqIC0gcGVyZm9ybSBhIGJyZWFkdGgtdGhlbi1kZXB0aCBzZWFyY2ggdXAgdG8gdGhlIHByZXNjcmliZWQgbGltaXQKLSAqIC0gd2Ugb25seSBmaW5kIGtleXMgb24gd2hpY2ggd2UgaGF2ZSBzZWFyY2ggcGVybWlzc2lvbgotICogLSB3ZSB1c2UgdGhlIHN1cHBsaWVkIG1hdGNoIGZ1bmN0aW9uIHRvIHNlZSBpZiB0aGUgZGVzY3JpcHRpb24gKG9yIG90aGVyCi0gKiAgIGZlYXR1cmUgb2YgaW50ZXJlc3QpIG1hdGNoZXMKLSAqIC0gd2UgcmVseSBvbiBSQ1UgdG8gcHJldmVudCB0aGUga2V5cmluZyBsaXN0cyBmcm9tIGRpc2FwcGVhcmluZyBvbiB1cwotICogLSB3ZSByZXR1cm4gLUVBR0FJTiBpZiB3ZSBkaWRuJ3QgZmluZCBhbnkgbWF0Y2hpbmcga2V5Ci0gKiAtIHdlIHJldHVybiAtRU5PS0VZIGlmIHdlIG9ubHkgZm91bmQgbmVnYXRpdmUgbWF0Y2hpbmcga2V5cwotICogLSB3ZSBwcm9wYWdhdGUgdGhlIHBvc3Nlc3Npb24gYXR0cmlidXRlIGZyb20gdGhlIGtleXJpbmcgcmVmIHRvIHRoZSBrZXkgcmVmCisvKioKKyAqIGtleXJpbmdfc2VhcmNoX2F1eCAtIFNlYXJjaCBhIGtleXJpbmcgdHJlZSBmb3IgYSBrZXkgbWF0Y2hpbmcgc29tZSBjcml0ZXJpYQorICogQGtleXJpbmdfcmVmOiBBIHBvaW50ZXIgdG8gdGhlIGtleXJpbmcgd2l0aCBwb3NzZXNzaW9uIGluZGljYXRvci4KKyAqIEBjcmVkOiBUaGUgY3JlZGVudGlhbHMgdG8gdXNlIGZvciBwZXJtaXNzaW9ucyBjaGVja3MuCisgKiBAdHlwZTogVGhlIHR5cGUgb2Yga2V5IHRvIHNlYXJjaCBmb3IuCisgKiBAZGVzY3JpcHRpb246IFBhcmFtZXRlciBmb3IgQG1hdGNoLgorICogQG1hdGNoOiBGdW5jdGlvbiB0byBydWxlIG9uIHdoZXRoZXIgb3Igbm90IGEga2V5IGlzIHRoZSBvbmUgcmVxdWlyZWQuCisgKgorICogU2VhcmNoIHRoZSBzdXBwbGllZCBrZXlyaW5nIHRyZWUgZm9yIGEga2V5IHRoYXQgbWF0Y2hlcyB0aGUgY3JpdGVyaWEgZ2l2ZW4uCisgKiBUaGUgcm9vdCBrZXlyaW5nIGFuZCBhbnkgbGlua2VkIGtleXJpbmdzIG11c3QgZ3JhbnQgU2VhcmNoIHBlcm1pc3Npb24gdG8gdGhlCisgKiBjYWxsZXIgdG8gYmUgc2VhcmNoYWJsZSBhbmQga2V5cyBjYW4gb25seSBiZSBmb3VuZCBpZiB0aGV5IHRvbyBncmFudCBTZWFyY2gKKyAqIHRvIHRoZSBjYWxsZXIuIFRoZSBwb3NzZXNzaW9uIGZsYWcgb24gdGhlIHJvb3Qga2V5cmluZyBwb2ludGVyIGNvbnRyb2xzIHVzZQorICogb2YgdGhlIHBvc3Nlc3NvciBiaXRzIGluIHBlcm1pc3Npb25zIGNoZWNraW5nIG9mIHRoZSBlbnRpcmUgdHJlZS4gIEluCisgKiBhZGRpdGlvbiwgdGhlIExTTSBnZXRzIHRvIGZvcmJpZCBrZXlyaW5nIHNlYXJjaGVzIGFuZCBrZXkgbWF0Y2hlcy4KKyAqCisgKiBUaGUgc2VhcmNoIGlzIHBlcmZvcm1lZCBhcyBhIGJyZWFkdGgtdGhlbi1kZXB0aCBzZWFyY2ggdXAgdG8gdGhlIHByZXNjcmliZWQKKyAqIGxpbWl0IChLRVlSSU5HX1NFQVJDSF9NQVhfREVQVEgpLgorICoKKyAqIEtleXMgYXJlIG1hdGNoZWQgdG8gdGhlIHR5cGUgcHJvdmlkZWQgYW5kIGFyZSB0aGVuIGZpbHRlcmVkIGJ5IHRoZSBtYXRjaAorICogZnVuY3Rpb24sIHdoaWNoIGlzIGdpdmVuIHRoZSBkZXNjcmlwdGlvbiB0byB1c2UgaW4gYW55IHdheSBpdCBzZWVzIGZpdC4gIFRoZQorICogbWF0Y2ggZnVuY3Rpb24gbWF5IHVzZSBhbnkgYXR0cmlidXRlcyBvZiBhIGtleSB0aGF0IGl0IHdpc2hlcyB0byB0bworICogZGV0ZXJtaW5lIHRoZSBtYXRjaC4gIE5vcm1hbGx5IHRoZSBtYXRjaCBmdW5jdGlvbiBmcm9tIHRoZSBrZXkgdHlwZSB3b3VsZCBiZQorICogdXNlZC4KKyAqCisgKiBSQ1UgaXMgdXNlZCB0byBwcmV2ZW50IHRoZSBrZXlyaW5nIGtleSBsaXN0cyBmcm9tIGRpc2FwcGVhcmluZyB3aXRob3V0IHRoZQorICogbmVlZCB0byB0YWtlIGxvdHMgb2YgbG9ja3MuCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZvdW5kIGtleSBhbmQgaW5jcmVtZW50cyB0aGUga2V5IHVzYWdlIGNvdW50IGlmCisgKiBzdWNjZXNzZnVsOyAtRUFHQUlOIGlmIG5vIG1hdGNoaW5nIGtleXMgd2VyZSBmb3VuZCwgb3IgaWYgZXhwaXJlZCBvciByZXZva2VkCisgKiBrZXlzIHdlcmUgZm91bmQ7IC1FTk9LRVkgaWYgb25seSBuZWdhdGl2ZSBrZXlzIHdlcmUgZm91bmQ7IC1FTk9URElSIGlmIHRoZQorICogc3BlY2lmaWVkIGtleXJpbmcgd2Fzbid0IGEga2V5cmluZy4KKyAqCisgKiBJbiB0aGUgY2FzZSBvZiBhIHN1Y2Nlc3NmdWwgcmV0dXJuLCB0aGUgcG9zc2Vzc2lvbiBhdHRyaWJ1dGUgZnJvbQorICogQGtleXJpbmdfcmVmIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIHJldHVybmVkIGtleSByZWZlcmVuY2UuCiAgKi8KIGtleV9yZWZfdCBrZXlyaW5nX3NlYXJjaF9hdXgoa2V5X3JlZl90IGtleXJpbmdfcmVmLAogCQkJICAgICBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwKQEAgLTQ0NCwxNyArNDU5LDE2IEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiBlcnJvcjoKIAlyZXR1cm4ga2V5X3JlZjsKK30KIAotfSAvKiBlbmQga2V5cmluZ19zZWFyY2hfYXV4KCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIHNlYXJjaCB0aGUgc3VwcGxpZWQga2V5cmluZyB0cmVlIGZvciBhIGtleSB0aGF0IG1hdGNoZXMgdGhlIGNyaXRlcmlvbgotICogLSBwZXJmb3JtIGEgYnJlYWR0aC10aGVuLWRlcHRoIHNlYXJjaCB1cCB0byB0aGUgcHJlc2NyaWJlZCBsaW1pdAotICogLSB3ZSBvbmx5IGZpbmQga2V5cyBvbiB3aGljaCB3ZSBoYXZlIHNlYXJjaCBwZXJtaXNzaW9uCi0gKiAtIHdlIHJlYWRsb2NrIHRoZSBrZXlyaW5ncyBhcyB3ZSBzZWFyY2ggZG93biB0aGUgdHJlZQotICogLSB3ZSByZXR1cm4gLUVBR0FJTiBpZiB3ZSBkaWRuJ3QgZmluZCBhbnkgbWF0Y2hpbmcga2V5Ci0gKiAtIHdlIHJldHVybiAtRU5PS0VZIGlmIHdlIG9ubHkgZm91bmQgbmVnYXRpdmUgbWF0Y2hpbmcga2V5cworLyoqCisgKiBrZXlyaW5nX3NlYXJjaCAtIFNlYXJjaCB0aGUgc3VwcGxpZWQga2V5cmluZyB0cmVlIGZvciBhIG1hdGNoaW5nIGtleQorICogQGtleXJpbmc6IFRoZSByb290IG9mIHRoZSBrZXlyaW5nIHRyZWUgdG8gYmUgc2VhcmNoZWQuCisgKiBAdHlwZTogVGhlIHR5cGUgb2Yga2V5cmluZyB3ZSB3YW50IHRvIGZpbmQuCisgKiBAZGVzY3JpcHRpb246IFRoZSBuYW1lIG9mIHRoZSBrZXlyaW5nIHdlIHdhbnQgdG8gZmluZC4KKyAqCisgKiBBcyBrZXlyaW5nX3NlYXJjaF9hdXgoKSBhYm92ZSwgYnV0IHVzaW5nIHRoZSBjdXJyZW50IHRhc2sncyBjcmVkZW50aWFscyBhbmQKKyAqIHR5cGUncyBkZWZhdWx0IG1hdGNoaW5nIGZ1bmN0aW9uLgogICovCiBrZXlfcmVmX3Qga2V5cmluZ19zZWFyY2goa2V5X3JlZl90IGtleXJpbmcsCiAJCQkgc3RydWN0IGtleV90eXBlICp0eXBlLApAQCAtNDY1LDE2ICs0NzksMjMgQEAKIAogCXJldHVybiBrZXlyaW5nX3NlYXJjaF9hdXgoa2V5cmluZywgY3VycmVudC0+Y3JlZCwKIAkJCQkgIHR5cGUsIGRlc2NyaXB0aW9uLCB0eXBlLT5tYXRjaCk7Ci0KLX0gLyogZW5kIGtleXJpbmdfc2VhcmNoKCkgKi8KLQorfQogRVhQT1JUX1NZTUJPTChrZXlyaW5nX3NlYXJjaCk7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBzZWFyY2ggdGhlIGdpdmVuIGtleXJpbmcgb25seSAobm8gcmVjdXJzaW9uKQotICogLSBrZXlyaW5nIG11c3QgYmUgbG9ja2VkIGJ5IGNhbGxlcgotICogLSBjYWxsZXIgbXVzdCBndWFyYW50ZWUgdGhhdCB0aGUga2V5cmluZyBpcyBhIGtleXJpbmcKKyAqIFNlYXJjaCB0aGUgZ2l2ZW4ga2V5cmluZyBvbmx5IChubyByZWN1cnNpb24pLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBndWFyYW50ZWUgdGhhdCB0aGUga2V5cmluZyBpcyBhIGtleXJpbmcgYW5kIHRoYXQgdGhlCisgKiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gc2VhcmNoIHRoZSBrZXlyaW5nIGFzIG5vIGNoZWNrIGlzIG1hZGUgaGVyZS4KKyAqCisgKiBSQ1UgaXMgdXNlZCB0byBtYWtlIGl0IHVubmVjZXNzYXJ5IHRvIGxvY2sgdGhlIGtleXJpbmcga2V5IGxpc3QgaGVyZS4KKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZm91bmQga2V5IHdpdGggdXNhZ2UgY291bnQgaW5jcmVtZW50ZWQgaWYKKyAqIHN1Y2Nlc3NmdWwgYW5kIHJldHVybnMgLUVOT0tFWSBpZiBub3QgZm91bmQuICBSZXZva2VkIGtleXMgYW5kIGtleXMgbm90CisgKiBwcm92aWRpbmcgdGhlIHJlcXVlc3RlZCBwZXJtaXNzaW9uIGFyZSBza2lwcGVkIG92ZXIuCisgKgorICogSWYgc3VjY2Vzc2Z1bCwgdGhlIHBvc3Nlc3Npb24gaW5kaWNhdG9yIGlzIHByb3BhZ2F0ZWQgZnJvbSB0aGUga2V5cmluZyByZWYKKyAqIHRvIHRoZSByZXR1cm5lZCBrZXkgcmVmZXJlbmNlLgogICovCiBrZXlfcmVmX3QgX19rZXlyaW5nX3NlYXJjaF9vbmUoa2V5X3JlZl90IGtleXJpbmdfcmVmLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBrZXlfdHlwZSAqa3R5cGUsCkBAIC01MTQsMTQgKzUzNSwxOCBAQAogCWF0b21pY19pbmMoJmtleS0+dXNhZ2UpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBtYWtlX2tleV9yZWYoa2V5LCBwb3NzZXNzZWQpOworfQogCi19IC8qIGVuZCBfX2tleXJpbmdfc2VhcmNoX29uZSgpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBmaW5kIGEga2V5cmluZyB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZQotICogLSBhbGwgbmFtZWQga2V5cmluZ3MgYXJlIHNlYXJjaGVkCi0gKiAtIG5vcm1hbGx5IG9ubHkgZmluZHMga2V5cmluZ3Mgd2l0aCBzZWFyY2ggcGVybWlzc2lvbiBmb3IgdGhlIGN1cnJlbnQgcHJvY2VzcworICogRmluZCBhIGtleXJpbmcgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuCisgKgorICogQWxsIG5hbWVkIGtleXJpbmdzIGluIHRoZSBjdXJyZW50IHVzZXIgbmFtZXNwYWNlIGFyZSBzZWFyY2hlZCwgcHJvdmlkZWQgdGhleQorICogZ3JhbnQgU2VhcmNoIHBlcm1pc3Npb24gZGlyZWN0bHkgdG8gdGhlIGNhbGxlciAodW5sZXNzIHRoaXMgY2hlY2sgaXMKKyAqIHNraXBwZWQpLiAgS2V5cmluZ3Mgd2hvc2UgdXNhZ2UgcG9pbnRzIGhhdmUgcmVhY2hlZCB6ZXJvIG9yIHdobyBoYXZlIGJlZW4KKyAqIHJldm9rZWQgYXJlIHNraXBwZWQuCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGtleXJpbmcgd2l0aCB0aGUga2V5cmluZydzIHJlZmNvdW50IGhhdmluZyBiZWluZworICogaW5jcmVtZW50ZWQgb24gc3VjY2Vzcy4gIC1FTk9LRVkgaXMgcmV0dXJuZWQgaWYgYSBrZXkgY291bGQgbm90IGJlIGZvdW5kLgogICovCiBzdHJ1Y3Qga2V5ICpmaW5kX2tleXJpbmdfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLCBib29sIHNraXBfcGVybV9jaGVjaykKIHsKQEAgLTU2OSwxNSArNTk0LDE0IEBACiBvdXQ6CiAJcmVhZF91bmxvY2soJmtleXJpbmdfbmFtZV9sb2NrKTsKIAlyZXR1cm4ga2V5cmluZzsKK30KIAotfSAvKiBlbmQgZmluZF9rZXlyaW5nX2J5X25hbWUoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogc2VlIGlmIGEgY3ljbGUgd2lsbCB3aWxsIGJlIGNyZWF0ZWQgYnkgaW5zZXJ0aW5nIGFjeWNsaWMgdHJlZSBCIGluIGFjeWNsaWMKLSAqIHRyZWUgQSBhdCB0aGUgdG9wbW9zdCBsZXZlbCAoaWU6IGFzIGEgZGlyZWN0IGNoaWxkIG9mIEEpCi0gKiAtIHNpbmNlIHdlIGFyZSBhZGRpbmcgQiB0byBBIGF0IHRoZSB0b3AgbGV2ZWwsIGNoZWNraW5nIGZvciBjeWNsZXMgc2hvdWxkCi0gKiAgIGp1c3QgYmUgYSBtYXR0ZXIgb2Ygc2VlaW5nIGlmIG5vZGUgQSBpcyBzb21ld2hlcmUgaW4gdHJlZSBCCisgKiBTZWUgaWYgYSBjeWNsZSB3aWxsIHdpbGwgYmUgY3JlYXRlZCBieSBpbnNlcnRpbmcgYWN5Y2xpYyB0cmVlIEIgaW4gYWN5Y2xpYworICogdHJlZSBBIGF0IHRoZSB0b3Btb3N0IGxldmVsIChpZTogYXMgYSBkaXJlY3QgY2hpbGQgb2YgQSkuCisgKgorICogU2luY2Ugd2UgYXJlIGFkZGluZyBCIHRvIEEgYXQgdGhlIHRvcCBsZXZlbCwgY2hlY2tpbmcgZm9yIGN5Y2xlcyBzaG91bGQganVzdAorICogYmUgYSBtYXR0ZXIgb2Ygc2VlaW5nIGlmIG5vZGUgQSBpcyBzb21ld2hlcmUgaW4gdHJlZSBCLgogICovCiBzdGF0aWMgaW50IGtleXJpbmdfZGV0ZWN0X2N5Y2xlKHN0cnVjdCBrZXkgKkEsIHN0cnVjdCBrZXkgKkIpCiB7CkBAIC02NTcsMTEgKzY4MSwxMCBAQAogY3ljbGVfZGV0ZWN0ZWQ6CiAJcmV0ID0gLUVERUFETEs7CiAJZ290byBlcnJvcjsKLQotfSAvKiBlbmQga2V5cmluZ19kZXRlY3RfY3ljbGUoKSAqLworfQogCiAvKgotICogZGlzcG9zZSBvZiBhIGtleXJpbmcgbGlzdCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCwgZnJlZWluZyB0aGUgdW5saW5rZWQKKyAqIERpc3Bvc2Ugb2YgYSBrZXlyaW5nIGxpc3QgYWZ0ZXIgdGhlIFJDVSBncmFjZSBwZXJpb2QsIGZyZWVpbmcgdGhlIHVubGlua2VkCiAgKiBrZXkKICAqLwogc3RhdGljIHZvaWQga2V5cmluZ191bmxpbmtfcmN1X2Rpc3Bvc2FsKHN0cnVjdCByY3VfaGVhZCAqcmN1KQpAQCAtNjc1LDE0ICs2OTgsMTQgQEAKIH0KIAogLyoKLSAqIHByZWFsbG9jYXRlIG1lbW9yeSBzbyB0aGF0IGEga2V5IGNhbiBiZSBsaW5rZWQgaW50byB0byBhIGtleXJpbmcKKyAqIFByZWFsbG9jYXRlIG1lbW9yeSBzbyB0aGF0IGEga2V5IGNhbiBiZSBsaW5rZWQgaW50byB0byBhIGtleXJpbmcuCiAgKi8KIGludCBfX2tleV9saW5rX2JlZ2luKHN0cnVjdCBrZXkgKmtleXJpbmcsIGNvbnN0IHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKLQkJICAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwKLQkJICAgICBzdHJ1Y3Qga2V5cmluZ19saXN0ICoqX3ByZWFsbG9jKQorCQkgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLCB1bnNpZ25lZCBsb25nICpfcHJlYWxsb2MpCiAJX19hY3F1aXJlcygma2V5cmluZy0+c2VtKQogewogCXN0cnVjdCBrZXlyaW5nX2xpc3QgKmtsaXN0LCAqbmtsaXN0OworCXVuc2lnbmVkIGxvbmcgcHJlYWxsb2M7CiAJdW5zaWduZWQgbWF4OwogCXNpemVfdCBzaXplOwogCWludCBsb29wLCByZXQ7CkBAIC03MjUsNiArNzQ4LDcgQEAKIAogCQkJCS8qIG5vdGUgcmVwbGFjZW1lbnQgc2xvdCAqLwogCQkJCWtsaXN0LT5kZWxrZXkgPSBua2xpc3QtPmRlbGtleSA9IGxvb3A7CisJCQkJcHJlYWxsb2MgPSAodW5zaWduZWQgbG9uZylua2xpc3Q7CiAJCQkJZ290byBkb25lOwogCQkJfQogCQl9CkBAIC03MzksNiArNzYzLDcgQEAKIAlpZiAoa2xpc3QgJiYga2xpc3QtPm5rZXlzIDwga2xpc3QtPm1heGtleXMpIHsKIAkJLyogdGhlcmUncyBzdWZmaWNpZW50IHNsYWNrIHNwYWNlIHRvIGFwcGVuZCBkaXJlY3RseSAqLwogCQlua2xpc3QgPSBOVUxMOworCQlwcmVhbGxvYyA9IEtFWV9MSU5LX0ZJWFFVT1RBOwogCX0gZWxzZSB7CiAJCS8qIGdyb3cgdGhlIGtleSBsaXN0ICovCiAJCW1heCA9IDQ7CkBAIC03NzMsOCArNzk4LDkgQEAKIAkJbmtsaXN0LT5rZXlzW25rbGlzdC0+ZGVsa2V5XSA9IE5VTEw7CiAJfQogCisJcHJlYWxsb2MgPSAodW5zaWduZWQgbG9uZylua2xpc3QgfCBLRVlfTElOS19GSVhRVU9UQTsKIGRvbmU6Ci0JKl9wcmVhbGxvYyA9IG5rbGlzdDsKKwkqX3ByZWFsbG9jID0gcHJlYWxsb2M7CiAJa2xlYXZlKCIgPSAwIik7CiAJcmV0dXJuIDA7CiAKQEAgLTc5MiwxMCArODE4LDEwIEBACiB9CiAKIC8qCi0gKiBjaGVjayBhbHJlYWR5IGluc3RhbnRpYXRlZCBrZXlzIGFyZW4ndCBnb2luZyB0byBiZSBhIHByb2JsZW0KLSAqIC0gdGhlIGNhbGxlciBtdXN0IGhhdmUgY2FsbGVkIF9fa2V5X2xpbmtfYmVnaW4oKQotICogLSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcyBmb3Iga2V5cyB0aGF0IHdlcmUgY3JlYXRlZCBzaW5jZSBfX2tleV9saW5rX2JlZ2luKCkKLSAqICAgd2FzIGNhbGxlZAorICogQ2hlY2sgYWxyZWFkeSBpbnN0YW50aWF0ZWQga2V5cyBhcmVuJ3QgZ29pbmcgdG8gYmUgYSBwcm9ibGVtLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGNhbGxlZCBfX2tleV9saW5rX2JlZ2luKCkuIERvbid0IG5lZWQgdG8gY2FsbCB0aGlzIGZvcgorICoga2V5cyB0aGF0IHdlcmUgY3JlYXRlZCBzaW5jZSBfX2tleV9saW5rX2JlZ2luKCkgd2FzIGNhbGxlZC4KICAqLwogaW50IF9fa2V5X2xpbmtfY2hlY2tfbGl2ZV9rZXkoc3RydWN0IGtleSAqa2V5cmluZywgc3RydWN0IGtleSAqa2V5KQogewpAQCAtODA3LDE3ICs4MzMsMjAgQEAKIH0KIAogLyoKLSAqIGxpbmsgYSBrZXkgaW50byB0byBhIGtleXJpbmcKLSAqIC0gbXVzdCBiZSBjYWxsZWQgd2l0aCBfX2tleV9saW5rX2JlZ2luKCkgaGF2aW5nIGJlaW5nIGNhbGxlZAotICogLSBkaXNjYXJkIGFscmVhZHkgZXh0YW50IGxpbmsgdG8gbWF0Y2hpbmcga2V5IGlmIHRoZXJlIGlzIG9uZQorICogTGluayBhIGtleSBpbnRvIHRvIGEga2V5cmluZy4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIF9fa2V5X2xpbmtfYmVnaW4oKSBoYXZpbmcgYmVpbmcgY2FsbGVkLiAgRGlzY2FyZHMgYW55CisgKiBhbHJlYWR5IGV4dGFudCBsaW5rIHRvIG1hdGNoaW5nIGtleSBpZiB0aGVyZSBpcyBvbmUsIHNvIHRoYXQgZWFjaCBrZXlyaW5nCisgKiBob2xkcyBhdCBtb3N0IG9uZSBsaW5rIHRvIGFueSBnaXZlbiBrZXkgb2YgYSBwYXJ0aWN1bGFyIHR5cGUrZGVzY3JpcHRpb24KKyAqIGNvbWJpbmF0aW9uLgogICovCiB2b2lkIF9fa2V5X2xpbmsoc3RydWN0IGtleSAqa2V5cmluZywgc3RydWN0IGtleSAqa2V5LAotCQlzdHJ1Y3Qga2V5cmluZ19saXN0ICoqX3ByZWFsbG9jKQorCQl1bnNpZ25lZCBsb25nICpfcHJlYWxsb2MpCiB7CiAJc3RydWN0IGtleXJpbmdfbGlzdCAqa2xpc3QsICpua2xpc3Q7CiAKLQlua2xpc3QgPSAqX3ByZWFsbG9jOwotCSpfcHJlYWxsb2MgPSBOVUxMOworCW5rbGlzdCA9IChzdHJ1Y3Qga2V5cmluZ19saXN0ICopKCpfcHJlYWxsb2MgJiB+S0VZX0xJTktfRklYUVVPVEEpOworCSpfcHJlYWxsb2MgPSAwOwogCiAJa2VudGVyKCIlZCwlZCwlcCIsIGtleXJpbmctPnNlcmlhbCwga2V5LT5zZXJpYWwsIG5rbGlzdCk7CiAKQEAgLTg1MiwzNCArODgxLDU0IEBACiB9CiAKIC8qCi0gKiBmaW5pc2ggbGlua2luZyBhIGtleSBpbnRvIHRvIGEga2V5cmluZwotICogLSBtdXN0IGJlIGNhbGxlZCB3aXRoIF9fa2V5X2xpbmtfYmVnaW4oKSBoYXZpbmcgYmVpbmcgY2FsbGVkCisgKiBGaW5pc2ggbGlua2luZyBhIGtleSBpbnRvIHRvIGEga2V5cmluZy4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIF9fa2V5X2xpbmtfYmVnaW4oKSBoYXZpbmcgYmVpbmcgY2FsbGVkLgogICovCiB2b2lkIF9fa2V5X2xpbmtfZW5kKHN0cnVjdCBrZXkgKmtleXJpbmcsIHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKLQkJICAgIHN0cnVjdCBrZXlyaW5nX2xpc3QgKnByZWFsbG9jKQorCQkgICAgdW5zaWduZWQgbG9uZyBwcmVhbGxvYykKIAlfX3JlbGVhc2VzKCZrZXlyaW5nLT5zZW0pCiB7CiAJQlVHX09OKHR5cGUgPT0gTlVMTCk7CiAJQlVHX09OKHR5cGUtPm5hbWUgPT0gTlVMTCk7Ci0Ja2VudGVyKCIlZCwlcywlcCIsIGtleXJpbmctPnNlcmlhbCwgdHlwZS0+bmFtZSwgcHJlYWxsb2MpOworCWtlbnRlcigiJWQsJXMsJWx4Iiwga2V5cmluZy0+c2VyaWFsLCB0eXBlLT5uYW1lLCBwcmVhbGxvYyk7CiAKIAlpZiAodHlwZSA9PSAma2V5X3R5cGVfa2V5cmluZykKIAkJdXBfd3JpdGUoJmtleXJpbmdfc2VyaWFsaXNlX2xpbmtfc2VtKTsKIAogCWlmIChwcmVhbGxvYykgewotCQlrZnJlZShwcmVhbGxvYyk7Ci0JCWtleV9wYXlsb2FkX3Jlc2VydmUoa2V5cmluZywKLQkJCQkgICAga2V5cmluZy0+ZGF0YWxlbiAtIEtFWVFVT1RBX0xJTktfQllURVMpOworCQlpZiAocHJlYWxsb2MgJiBLRVlfTElOS19GSVhRVU9UQSkKKwkJCWtleV9wYXlsb2FkX3Jlc2VydmUoa2V5cmluZywKKwkJCQkJICAgIGtleXJpbmctPmRhdGFsZW4gLQorCQkJCQkgICAgS0VZUVVPVEFfTElOS19CWVRFUyk7CisJCWtmcmVlKChzdHJ1Y3Qga2V5cmluZ19saXN0ICopKHByZWFsbG9jICYgfktFWV9MSU5LX0ZJWFFVT1RBKSk7CiAJfQogCXVwX3dyaXRlKCZrZXlyaW5nLT5zZW0pOwogfQogCi0vKgotICogbGluayBhIGtleSB0byBhIGtleXJpbmcKKy8qKgorICoga2V5X2xpbmsgLSBMaW5rIGEga2V5IHRvIGEga2V5cmluZworICogQGtleXJpbmc6IFRoZSBrZXlyaW5nIHRvIG1ha2UgdGhlIGxpbmsgaW4uCisgKiBAa2V5OiBUaGUga2V5IHRvIGxpbmsgdG8uCisgKgorICogTWFrZSBhIGxpbmsgaW4gYSBrZXlyaW5nIHRvIGEga2V5LCBzdWNoIHRoYXQgdGhlIGtleXJpbmcgaG9sZHMgYSByZWZlcmVuY2UKKyAqIG9uIHRoYXQga2V5IGFuZCB0aGUga2V5IGNhbiBwb3RlbnRpYWxseSBiZSBmb3VuZCBieSBzZWFyY2hpbmcgdGhhdCBrZXlyaW5nLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCB3cml0ZS1sb2NrIHRoZSBrZXlyaW5nJ3Mgc2VtYXBob3JlIGFuZCB3aWxsIGNvbnN1bWUgc29tZQorICogb2YgdGhlIHVzZXIncyBrZXkgZGF0YSBxdW90YSB0byBob2xkIHRoZSBsaW5rLgorICoKKyAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCAtRU5PVERJUiBpZiB0aGUga2V5cmluZyBpc24ndCBhIGtleXJpbmcsCisgKiAtRUtFWVJFVk9LRUQgaWYgdGhlIGtleXJpbmcgaGFzIGJlZW4gcmV2b2tlZCwgLUVORklMRSBpZiB0aGUga2V5cmluZyBpcworICogZnVsbCwgLUVEUVVPVCBpZiB0aGVyZSBpcyBpbnN1ZmZpY2llbnQga2V5IGRhdGEgcXVvdGEgcmVtYWluaW5nIHRvIGFkZAorICogYW5vdGhlciBsaW5rIG9yIC1FTk9NRU0gaWYgdGhlcmUncyBpbnN1ZmZpY2llbnQgbWVtb3J5LgorICoKKyAqIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgY2FsbGVyIGhhcyBjaGVja2VkIHRoYXQgaXQgaXMgcGVybWl0dGVkIGZvciBhIGxpbmsgdG8KKyAqIGJlIG1hZGUgKHRoZSBrZXlyaW5nIHNob3VsZCBoYXZlIFdyaXRlIHBlcm1pc3Npb24gYW5kIHRoZSBrZXkgTGluaworICogcGVybWlzc2lvbikuCiAgKi8KIGludCBrZXlfbGluayhzdHJ1Y3Qga2V5ICprZXlyaW5nLCBzdHJ1Y3Qga2V5ICprZXkpCiB7Ci0Jc3RydWN0IGtleXJpbmdfbGlzdCAqcHJlYWxsb2M7CisJdW5zaWduZWQgbG9uZyBwcmVhbGxvYzsKIAlpbnQgcmV0OwogCiAJa2V5X2NoZWNrKGtleXJpbmcpOwpAQCAtODk1LDEyICs5NDQsMjQgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0KIEVYUE9SVF9TWU1CT0woa2V5X2xpbmspOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogdW5saW5rIHRoZSBmaXJzdCBsaW5rIHRvIGEga2V5IGZyb20gYSBrZXlyaW5nCisvKioKKyAqIGtleV91bmxpbmsgLSBVbmxpbmsgdGhlIGZpcnN0IGxpbmsgdG8gYSBrZXkgZnJvbSBhIGtleXJpbmcuCisgKiBAa2V5cmluZzogVGhlIGtleXJpbmcgdG8gcmVtb3ZlIHRoZSBsaW5rIGZyb20uCisgKiBAa2V5OiBUaGUga2V5IHRoZSBsaW5rIGlzIHRvLgorICoKKyAqIFJlbW92ZSBhIGxpbmsgZnJvbSBhIGtleXJpbmcgdG8gYSBrZXkuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHdyaXRlLWxvY2sgdGhlIGtleXJpbmcncyBzZW1hcGhvcmUuCisgKgorICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIC1FTk9URElSIGlmIHRoZSBrZXlyaW5nIGlzbid0IGEga2V5cmluZywgLUVOT0VOVCBpZgorICogdGhlIGtleSBpc24ndCBsaW5rZWQgdG8gYnkgdGhlIGtleXJpbmcgb3IgLUVOT01FTSBpZiB0aGVyZSdzIGluc3VmZmljaWVudAorICogbWVtb3J5LgorICoKKyAqIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgY2FsbGVyIGhhcyBjaGVja2VkIHRoYXQgaXQgaXMgcGVybWl0dGVkIGZvciBhIGxpbmsgdG8KKyAqIGJlIHJlbW92ZWQgKHRoZSBrZXlyaW5nIHNob3VsZCBoYXZlIFdyaXRlIHBlcm1pc3Npb247IG5vIHBlcm1pc3Npb25zIGFyZQorICogcmVxdWlyZWQgb24gdGhlIGtleSkuCiAgKi8KIGludCBrZXlfdW5saW5rKHN0cnVjdCBrZXkgKmtleXJpbmcsIHN0cnVjdCBrZXkgKmtleSkKIHsKQEAgLTk2OCwxNSArMTAyOSwxMiBAQAogCXJldCA9IC1FTk9NRU07CiAJdXBfd3JpdGUoJmtleXJpbmctPnNlbSk7CiAJZ290byBlcnJvcjsKLQotfSAvKiBlbmQga2V5X3VubGluaygpICovCi0KK30KIEVYUE9SVF9TWU1CT0woa2V5X3VubGluayk7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBkaXNwb3NlIG9mIGEga2V5cmluZyBsaXN0IGFmdGVyIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kLCByZWxlYXNpbmcgdGhlIGtleXMgaXQKLSAqIGxpbmtzIHRvCisgKiBEaXNwb3NlIG9mIGEga2V5cmluZyBsaXN0IGFmdGVyIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kLCByZWxlYXNpbmcgdGhlIGtleXMgaXQKKyAqIGxpbmtzIHRvLgogICovCiBzdGF0aWMgdm9pZCBrZXlyaW5nX2NsZWFyX3JjdV9kaXNwb3NhbChzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKIHsKQEAgLTk4OSwxMyArMTA0NywxNSBAQAogCQlrZXlfcHV0KGtsaXN0LT5rZXlzW2xvb3BdKTsKIAogCWtmcmVlKGtsaXN0KTsKK30KIAotfSAvKiBlbmQga2V5cmluZ19jbGVhcl9yY3VfZGlzcG9zYWwoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogY2xlYXIgdGhlIHNwZWNpZmllZCBwcm9jZXNzIGtleXJpbmcKLSAqIC0gaW1wbGVtZW50cyBrZXljdGwoS0VZQ1RMX0NMRUFSKQorLyoqCisgKiBrZXlyaW5nX2NsZWFyIC0gQ2xlYXIgYSBrZXlyaW5nCisgKiBAa2V5cmluZzogVGhlIGtleXJpbmcgdG8gY2xlYXIuCisgKgorICogQ2xlYXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBzcGVjaWZpZWQga2V5cmluZy4KKyAqCisgKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCBvciAtRU5PVERJUiBpZiB0aGUga2V5cmluZyBpc24ndCBhIGtleXJpbmcuCiAgKi8KIGludCBrZXlyaW5nX2NsZWFyKHN0cnVjdCBrZXkgKmtleXJpbmcpCiB7CkBAIC0xMDI3LDE1ICsxMDg3LDEzIEBACiAJfQogCiAJcmV0dXJuIHJldDsKLQotfSAvKiBlbmQga2V5cmluZ19jbGVhcigpICovCi0KK30KIEVYUE9SVF9TWU1CT0woa2V5cmluZ19jbGVhcik7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBkaXNwb3NlIG9mIHRoZSBsaW5rcyBmcm9tIGEgcmV2b2tlZCBrZXlyaW5nCi0gKiAtIGNhbGxlZCB3aXRoIHRoZSBrZXkgc2VtIHdyaXRlLWxvY2tlZAorICogRGlzcG9zZSBvZiB0aGUgbGlua3MgZnJvbSBhIHJldm9rZWQga2V5cmluZy4KKyAqCisgKiBUaGlzIGlzIGNhbGxlZCB3aXRoIHRoZSBrZXkgc2VtIHdyaXRlLWxvY2tlZC4KICAqLwogc3RhdGljIHZvaWQga2V5cmluZ19yZXZva2Uoc3RydWN0IGtleSAqa2V5cmluZykKIHsKQEAgLTEwNTAsMTEgKzExMDgsMTAgQEAKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKGtleXJpbmctPnBheWxvYWQuc3Vic2NyaXB0aW9ucywgTlVMTCk7CiAJCWNhbGxfcmN1KCZrbGlzdC0+cmN1LCBrZXlyaW5nX2NsZWFyX3JjdV9kaXNwb3NhbCk7CiAJfQotCi19IC8qIGVuZCBrZXlyaW5nX3Jldm9rZSgpICovCit9CiAKIC8qCi0gKiBEZXRlcm1pbmUgd2hldGhlciBhIGtleSBpcyBkZWFkCisgKiBEZXRlcm1pbmUgd2hldGhlciBhIGtleSBpcyBkZWFkLgogICovCiBzdGF0aWMgYm9vbCBrZXlfaXNfZGVhZChzdHJ1Y3Qga2V5ICprZXksIHRpbWVfdCBsaW1pdCkKIHsKQEAgLTEwNjMsNyArMTEyMCwxMiBAQAogfQogCiAvKgotICogQ29sbGVjdCBnYXJiYWdlIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEga2V5cmluZworICogQ29sbGVjdCBnYXJiYWdlIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEga2V5cmluZywgcmVwbGFjaW5nIHRoZSBvbGQgbGlzdCB3aXRoCisgKiBhIG5ldyBvbmUgd2l0aCB0aGUgcG9pbnRlcnMgYWxsIHNodWZmbGVkIGRvd24uCisgKgorICogRGVhZCBrZXlzIGFyZSBjbGFzc2VkIGFzIG9uZWQgdGhhdCBhcmUgZmxhZ2dlZCBhcyBiZWluZyBkZWFkIG9yIGFyZSByZXZva2VkLAorICogZXhwaXJlZCBvciBuZWdhdGl2ZSBrZXlzIHRoYXQgd2VyZSByZXZva2VkIG9yIGV4cGlyZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQKKyAqIGxpbWl0LgogICovCiB2b2lkIGtleXJpbmdfZ2Moc3RydWN0IGtleSAqa2V5cmluZywgdGltZV90IGxpbWl0KQogewpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9wZXJtaXNzaW9uLmMgYi9zZWN1cml0eS9rZXlzL3Blcm1pc3Npb24uYwppbmRleCAyODY0NTUwLi5jMzViNTIyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3Blcm1pc3Npb24uYworKysgYi9zZWN1cml0eS9rZXlzL3Blcm1pc3Npb24uYwpAQCAtMSw0ICsxLDQgQEAKLS8qIHBlcm1pc3Npb24uYzoga2V5IHBlcm1pc3Npb24gZGV0ZXJtaW5hdGlvbgorLyogS2V5IHBlcm1pc3Npb24gY2hlY2tpbmcKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQpAQCAtMTMsMTggKzEzLDE5IEBACiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioKICAqIGtleV90YXNrX3Blcm1pc3Npb24gLSBDaGVjayBhIGtleSBjYW4gYmUgdXNlZAotICogQGtleV9yZWY6IFRoZSBrZXkgdG8gY2hlY2sKLSAqIEBjcmVkOiBUaGUgY3JlZGVudGlhbHMgdG8gdXNlCi0gKiBAcGVybTogVGhlIHBlcm1pc3Npb25zIHRvIGNoZWNrIGZvcgorICogQGtleV9yZWY6IFRoZSBrZXkgdG8gY2hlY2suCisgKiBAY3JlZDogVGhlIGNyZWRlbnRpYWxzIHRvIHVzZS4KKyAqIEBwZXJtOiBUaGUgcGVybWlzc2lvbnMgdG8gY2hlY2sgZm9yLgogICoKICAqIENoZWNrIHRvIHNlZSB3aGV0aGVyIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byB1c2UgYSBrZXkgaW4gdGhlIGRlc2lyZWQgd2F5LAogICogYnV0IHBlcm1pdCB0aGUgc2VjdXJpdHkgbW9kdWxlcyB0byBvdmVycmlkZS4KICAqCi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBlaXRoZXIgYSByZWYgb24gY3JlZCBvciBtdXN0IGhvbGQgdGhlIFJDVSByZWFkbG9jayBvciBhCi0gKiBzcGlubG9jay4KKyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGVpdGhlciBhIHJlZiBvbiBjcmVkIG9yIG11c3QgaG9sZCB0aGUgUkNVIHJlYWRsb2NrLgorICoKKyAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCAtRUFDQ0VTIGlmIGFjY2VzcyBpcyBkZW5pZWQgYmFzZWQgb24gdGhlCisgKiBwZXJtaXNzaW9ucyBiaXRzIG9yIHRoZSBMU00gY2hlY2suCiAgKi8KIGludCBrZXlfdGFza19wZXJtaXNzaW9uKGNvbnN0IGtleV9yZWZfdCBrZXlfcmVmLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwKIAkJCWtleV9wZXJtX3QgcGVybSkKQEAgLTc5LDE0ICs4MCwxNiBAQAogCiAJLyogbGV0IExTTSBiZSB0aGUgZmluYWwgYXJiaXRlciAqLwogCXJldHVybiBzZWN1cml0eV9rZXlfcGVybWlzc2lvbihrZXlfcmVmLCBjcmVkLCBwZXJtKTsKLQotfSAvKiBlbmQga2V5X3Rhc2tfcGVybWlzc2lvbigpICovCi0KK30KIEVYUE9SVF9TWU1CT0woa2V5X3Rhc2tfcGVybWlzc2lvbik7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiB2YWxpZGF0ZSBhIGtleQorLyoqCisgKiBrZXlfdmFsaWRhdGUgLSBWYWxpZGF0ZSBhIGtleS4KKyAqIEBrZXk6IFRoZSBrZXkgdG8gYmUgdmFsaWRhdGVkLgorICoKKyAqIENoZWNrIHRoYXQgYSBrZXkgaXMgdmFsaWQsIHJldHVybmluZyAwIGlmIHRoZSBrZXkgaXMgb2theSwgLUVLRVlSRVZPS0VEIGlmCisgKiB0aGUga2V5J3MgdHlwZSBoYXMgYmVlbiByZW1vdmVkIG9yIGlmIHRoZSBrZXkgaGFzIGJlZW4gcmV2b2tlZCBvcgorICogLUVLRVlFWFBJUkVEIGlmIHRoZSBrZXkgaGFzIGV4cGlyZWQuCiAgKi8KIGludCBrZXlfdmFsaWRhdGUoc3RydWN0IGtleSAqa2V5KQogewpAQCAtMTExLDcgKzExNCw1IEBACiAKIGVycm9yOgogCXJldHVybiByZXQ7Ci0KLX0gLyogZW5kIGtleV92YWxpZGF0ZSgpICovCi0KK30KIEVYUE9SVF9TWU1CT0woa2V5X3ZhbGlkYXRlKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvcHJvYy5jIGIvc2VjdXJpdHkva2V5cy9wcm9jLmMKaW5kZXggNzAzNzM5NjYuLjUyNWNmOGEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcHJvYy5jCisrKyBiL3NlY3VyaXR5L2tleXMvcHJvYy5jCkBAIC0xLDQgKzEsNCBAQAotLyogcHJvYy5jOiBwcm9jIGZpbGVzIGZvciBrZXkgZGF0YWJhc2UgZW51bWVyYXRpb24KKy8qIHByb2NmcyBmaWxlcyBmb3Iga2V5IGRhdGFiYXNlIGVudW1lcmF0aW9uCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKQEAgLTYwLDkgKzYwLDggQEAKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIGRlY2xhcmUgdGhlIC9wcm9jIGZpbGVzCisgKiBEZWNsYXJlIHRoZSAvcHJvYyBmaWxlcy4KICAqLwogc3RhdGljIGludCBfX2luaXQga2V5X3Byb2NfaW5pdCh2b2lkKQogewpAQCAtNzksMTQgKzc4LDEzIEBACiAJCXBhbmljKCJDYW5ub3QgY3JlYXRlIC9wcm9jL2tleS11c2Vyc1xuIik7CiAKIAlyZXR1cm4gMDsKLQotfSAvKiBlbmQga2V5X3Byb2NfaW5pdCgpICovCit9CiAKIF9faW5pdGNhbGwoa2V5X3Byb2NfaW5pdCk7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBpbXBsZW1lbnQgIi9wcm9jL2tleXMiIHRvIHByb3ZpZGVzIGEgbGlzdCBvZiB0aGUga2V5cyBvbiB0aGUgc3lzdGVtCisgKiBJbXBsZW1lbnQgIi9wcm9jL2tleXMiIHRvIHByb3ZpZGUgYSBsaXN0IG9mIHRoZSBrZXlzIG9uIHRoZSBzeXN0ZW0gdGhhdAorICogZ3JhbnQgVmlldyBwZXJtaXNzaW9uIHRvIHRoZSBjYWxsZXIuCiAgKi8KICNpZmRlZiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVMKIApAQCAtMjkzLDkgKzI5MSw5IEBACiAJcmV0dXJuIF9fa2V5X3VzZXJfbmV4dChuKTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIGltcGxlbWVudCAiL3Byb2Mva2V5LXVzZXJzIiB0byBwcm92aWRlcyBhIGxpc3Qgb2YgdGhlIGtleSB1c2VycworICogSW1wbGVtZW50ICIvcHJvYy9rZXktdXNlcnMiIHRvIHByb3ZpZGVzIGEgbGlzdCBvZiB0aGUga2V5IHVzZXJzIGFuZCB0aGVpcgorICogcXVvdGFzLgogICovCiBzdGF0aWMgaW50IHByb2Nfa2V5X3VzZXJzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CkBAIC0zNTEsNSArMzQ5LDQgQEAKIAkJICAgbWF4Ynl0ZXMpOwogCiAJcmV0dXJuIDA7Ci0KIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMgYi9zZWN1cml0eS9rZXlzL3Byb2Nlc3Nfa2V5cy5jCmluZGV4IDUwNGJkZDIuLjkzMDYzNGUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMKKysrIGIvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIE1hbmFnZW1lbnQgb2YgYSBwcm9jZXNzJ3Mga2V5cmluZ3MKKy8qIE1hbmFnZSBhIHByb2Nlc3MncyBrZXlyaW5ncwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1LCAyMDA4IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKQEAgLTIxLDEzICsyMSwxMyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotLyogc2Vzc2lvbiBrZXlyaW5nIGNyZWF0ZSB2cyBqb2luIHNlbWFwaG9yZSAqLworLyogU2Vzc2lvbiBrZXlyaW5nIGNyZWF0ZSB2cyBqb2luIHNlbWFwaG9yZSAqLwogc3RhdGljIERFRklORV9NVVRFWChrZXlfc2Vzc2lvbl9tdXRleCk7CiAKLS8qIHVzZXIga2V5cmluZyBjcmVhdGlvbiBzZW1hcGhvcmUgKi8KKy8qIFVzZXIga2V5cmluZyBjcmVhdGlvbiBzZW1hcGhvcmUgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgoa2V5X3VzZXJfa2V5cmluZ19tdXRleCk7CiAKLS8qIHRoZSByb290IHVzZXIncyB0cmFja2luZyBzdHJ1Y3QgKi8KKy8qIFRoZSByb290IHVzZXIncyB0cmFja2luZyBzdHJ1Y3QgKi8KIHN0cnVjdCBrZXlfdXNlciByb290X2tleV91c2VyID0gewogCS51c2FnZQkJPSBBVE9NSUNfSU5JVCgzKSwKIAkuY29uc19sb2NrCT0gX19NVVRFWF9JTklUSUFMSVpFUihyb290X2tleV91c2VyLmNvbnNfbG9jayksCkBAIC0zOCw5ICszOCw4IEBACiAJLnVzZXJfbnMJPSAmaW5pdF91c2VyX25zLAogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIGluc3RhbGwgdXNlciBhbmQgdXNlciBzZXNzaW9uIGtleXJpbmdzIGZvciBhIHBhcnRpY3VsYXIgVUlECisgKiBJbnN0YWxsIHRoZSB1c2VyIGFuZCB1c2VyIHNlc3Npb24ga2V5cmluZ3MgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MncyBVSUQuCiAgKi8KIGludCBpbnN0YWxsX3VzZXJfa2V5cmluZ3Modm9pZCkKIHsKQEAgLTEyMiw3ICsxMjEsOCBAQAogfQogCiAvKgotICogaW5zdGFsbCBhIGZyZXNoIHRocmVhZCBrZXlyaW5nIGRpcmVjdGx5IHRvIG5ldyBjcmVkZW50aWFscworICogSW5zdGFsbCBhIGZyZXNoIHRocmVhZCBrZXlyaW5nIGRpcmVjdGx5IHRvIG5ldyBjcmVkZW50aWFscy4gIFRoaXMga2V5cmluZyBpcworICogYWxsb3dlZCB0byBvdmVycnVuIHRoZSBxdW90YS4KICAqLwogaW50IGluc3RhbGxfdGhyZWFkX2tleXJpbmdfdG9fY3JlZChzdHJ1Y3QgY3JlZCAqbmV3KQogewpAQCAtMTM4LDcgKzEzOCw3IEBACiB9CiAKIC8qCi0gKiBpbnN0YWxsIGEgZnJlc2ggdGhyZWFkIGtleXJpbmcsIGRpc2NhcmRpbmcgdGhlIG9sZCBvbmUKKyAqIEluc3RhbGwgYSBmcmVzaCB0aHJlYWQga2V5cmluZywgZGlzY2FyZGluZyB0aGUgb2xkIG9uZS4KICAqLwogc3RhdGljIGludCBpbnN0YWxsX3RocmVhZF9rZXlyaW5nKHZvaWQpCiB7CkBAIC0xNjEsOSArMTYxLDEwIEBACiB9CiAKIC8qCi0gKiBpbnN0YWxsIGEgcHJvY2VzcyBrZXlyaW5nIGRpcmVjdGx5IHRvIGEgY3JlZGVudGlhbHMgc3RydWN0Ci0gKiAtIHJldHVybnMgLUVFWElTVCBpZiB0aGVyZSB3YXMgYWxyZWFkeSBhIHByb2Nlc3Mga2V5cmluZywgMCBpZiBvbmUgaW5zdGFsbGVkLAotICogICBhbmQgb3RoZXIgLXZlIG9uIGFueSBvdGhlciBlcnJvcgorICogSW5zdGFsbCBhIHByb2Nlc3Mga2V5cmluZyBkaXJlY3RseSB0byBhIGNyZWRlbnRpYWxzIHN0cnVjdC4KKyAqCisgKiBSZXR1cm5zIC1FRVhJU1QgaWYgdGhlcmUgd2FzIGFscmVhZHkgYSBwcm9jZXNzIGtleXJpbmcsIDAgaWYgb25lIGluc3RhbGxlZCwKKyAqIGFuZCBvdGhlciB2YWx1ZSBvbiBhbnkgb3RoZXIgZXJyb3IKICAqLwogaW50IGluc3RhbGxfcHJvY2Vzc19rZXlyaW5nX3RvX2NyZWQoc3RydWN0IGNyZWQgKm5ldykKIHsKQEAgLTE5Miw4ICsxOTMsMTEgQEAKIH0KIAogLyoKLSAqIG1ha2Ugc3VyZSBhIHByb2Nlc3Mga2V5cmluZyBpcyBpbnN0YWxsZWQKLSAqIC0gd2UKKyAqIE1ha2Ugc3VyZSBhIHByb2Nlc3Mga2V5cmluZyBpcyBpbnN0YWxsZWQgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MuICBUaGUKKyAqIGV4aXN0aW5nIHByb2Nlc3Mga2V5cmluZyBpcyBub3QgcmVwbGFjZWQuCisgKgorICogUmV0dXJucyAwIGlmIHRoZXJlIGlzIGEgcHJvY2VzcyBrZXlyaW5nIGJ5IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbiwgc29tZQorICogZXJyb3Igb3RoZXJ3aXNlLgogICovCiBzdGF0aWMgaW50IGluc3RhbGxfcHJvY2Vzc19rZXlyaW5nKHZvaWQpCiB7CkBAIC0yMTQsNyArMjE4LDcgQEAKIH0KIAogLyoKLSAqIGluc3RhbGwgYSBzZXNzaW9uIGtleXJpbmcgZGlyZWN0bHkgdG8gYSBjcmVkZW50aWFscyBzdHJ1Y3QKKyAqIEluc3RhbGwgYSBzZXNzaW9uIGtleXJpbmcgZGlyZWN0bHkgdG8gYSBjcmVkZW50aWFscyBzdHJ1Y3QuCiAgKi8KIGludCBpbnN0YWxsX3Nlc3Npb25fa2V5cmluZ190b19jcmVkKHN0cnVjdCBjcmVkICpjcmVkLCBzdHJ1Y3Qga2V5ICprZXlyaW5nKQogewpAQCAtMjU0LDggKzI1OCw4IEBACiB9CiAKIC8qCi0gKiBpbnN0YWxsIGEgc2Vzc2lvbiBrZXlyaW5nLCBkaXNjYXJkaW5nIHRoZSBvbGQgb25lCi0gKiAtIGlmIGEga2V5cmluZyBpcyBub3Qgc3VwcGxpZWQsIGFuIGVtcHR5IG9uZSBpcyBpbnZlbnRlZAorICogSW5zdGFsbCBhIHNlc3Npb24ga2V5cmluZywgZGlzY2FyZGluZyB0aGUgb2xkIG9uZS4gIElmIGEga2V5cmluZyBpcyBub3QKKyAqIHN1cHBsaWVkLCBhbiBlbXB0eSBvbmUgaXMgaW52ZW50ZWQuCiAgKi8KIHN0YXRpYyBpbnQgaW5zdGFsbF9zZXNzaW9uX2tleXJpbmcoc3RydWN0IGtleSAqa2V5cmluZykKIHsKQEAgLTI3NSw5ICsyNzksOCBAQAogCXJldHVybiBjb21taXRfY3JlZHMobmV3KTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIHRoZSBmaWxlc3lzdGVtIHVzZXIgSUQgY2hhbmdlZAorICogSGFuZGxlIHRoZSBmc3VpZCBjaGFuZ2luZy4KICAqLwogdm9pZCBrZXlfZnN1aWRfY2hhbmdlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKQEAgLTI4OCwxMiArMjkxLDEwIEBACiAJCXRzay0+Y3JlZC0+dGhyZWFkX2tleXJpbmctPnVpZCA9IHRzay0+Y3JlZC0+ZnN1aWQ7CiAJCXVwX3dyaXRlKCZ0c2stPmNyZWQtPnRocmVhZF9rZXlyaW5nLT5zZW0pOwogCX0KK30KIAotfSAvKiBlbmQga2V5X2ZzdWlkX2NoYW5nZWQoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogdGhlIGZpbGVzeXN0ZW0gZ3JvdXAgSUQgY2hhbmdlZAorICogSGFuZGxlIHRoZSBmc2dpZCBjaGFuZ2luZy4KICAqLwogdm9pZCBrZXlfZnNnaWRfY2hhbmdlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKQEAgLTMwNCwxNiArMzA1LDI4IEBACiAJCXRzay0+Y3JlZC0+dGhyZWFkX2tleXJpbmctPmdpZCA9IHRzay0+Y3JlZC0+ZnNnaWQ7CiAJCXVwX3dyaXRlKCZ0c2stPmNyZWQtPnRocmVhZF9rZXlyaW5nLT5zZW0pOwogCX0KK30KIAotfSAvKiBlbmQga2V5X2ZzZ2lkX2NoYW5nZWQoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogc2VhcmNoIG9ubHkgbXkgcHJvY2VzcyBrZXlyaW5ncyBmb3IgdGhlIGZpcnN0IG1hdGNoaW5nIGtleQotICogLSB3ZSB1c2UgdGhlIHN1cHBsaWVkIG1hdGNoIGZ1bmN0aW9uIHRvIHNlZSBpZiB0aGUgZGVzY3JpcHRpb24gKG9yIG90aGVyCi0gKiAgIGZlYXR1cmUgb2YgaW50ZXJlc3QpIG1hdGNoZXMKLSAqIC0gd2UgcmV0dXJuIC1FQUdBSU4gaWYgd2UgZGlkbid0IGZpbmQgYW55IG1hdGNoaW5nIGtleQotICogLSB3ZSByZXR1cm4gLUVOT0tFWSBpZiB3ZSBmb3VuZCBvbmx5IG5lZ2F0aXZlIG1hdGNoaW5nIGtleXMKKyAqIFNlYXJjaCB0aGUgcHJvY2VzcyBrZXlyaW5ncyBhdHRhY2hlZCB0byB0aGUgc3VwcGxpZWQgY3JlZCBmb3IgdGhlIGZpcnN0CisgKiBtYXRjaGluZyBrZXkuCisgKgorICogVGhlIHNlYXJjaCBjcml0ZXJpYSBhcmUgdGhlIHR5cGUgYW5kIHRoZSBtYXRjaCBmdW5jdGlvbi4gIFRoZSBkZXNjcmlwdGlvbiBpcworICogZ2l2ZW4gdG8gdGhlIG1hdGNoIGZ1bmN0aW9uIGFzIGEgcGFyYW1ldGVyLCBidXQgZG9lc24ndCBvdGhlcndpc2UgaW5mbHVlbmNlCisgKiB0aGUgc2VhcmNoLiAgVHlwaWNhbGx5IHRoZSBtYXRjaCBmdW5jdGlvbiB3aWxsIGNvbXBhcmUgdGhlIGRlc2NyaXB0aW9uCisgKiBwYXJhbWV0ZXIgdG8gdGhlIGtleSdzIGRlc2NyaXB0aW9uLgorICoKKyAqIFRoaXMgY2FuIG9ubHkgc2VhcmNoIGtleXJpbmdzIHRoYXQgZ3JhbnQgU2VhcmNoIHBlcm1pc3Npb24gdG8gdGhlIHN1cHBsaWVkCisgKiBjcmVkZW50aWFscy4gIEtleXJpbmdzIGxpbmtlZCB0byBzZWFyY2hlZCBrZXlyaW5ncyB3aWxsIGFsc28gYmUgc2VhcmNoZWQgaWYKKyAqIHRoZXkgZ3JhbnQgU2VhcmNoIHBlcm1pc3Npb24gdG9vLiAgS2V5cyBjYW4gb25seSBiZSBmb3VuZCBpZiB0aGV5IGdyYW50CisgKiBTZWFyY2ggcGVybWlzc2lvbiB0byB0aGUgY3JlZGVudGlhbHMuCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGtleSB3aXRoIHRoZSBrZXkgdXNhZ2UgY291bnQgaW5jcmVtZW50ZWQgaWYKKyAqIHN1Y2Nlc3NmdWwsIC1FQUdBSU4gaWYgd2UgZGlkbid0IGZpbmQgYW55IG1hdGNoaW5nIGtleSBvciAtRU5PS0VZIGlmIHdlIG9ubHkKKyAqIG1hdGNoZWQgbmVnYXRpdmUga2V5cy4KKyAqCisgKiBJbiB0aGUgY2FzZSBvZiBhIHN1Y2Nlc3NmdWwgcmV0dXJuLCB0aGUgcG9zc2Vzc2lvbiBhdHRyaWJ1dGUgaXMgc2V0IG9uIHRoZQorICogcmV0dXJuZWQga2V5IHJlZmVyZW5jZS4KICAqLwoga2V5X3JlZl90IHNlYXJjaF9teV9wcm9jZXNzX2tleXJpbmdzKHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKIAkJCQkgICAgIGNvbnN0IHZvaWQgKmRlc2NyaXB0aW9uLApAQCAtNDI4LDEzICs0NDEsMTMgQEAKIAlyZXR1cm4ga2V5X3JlZjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIHNlYXJjaCB0aGUgcHJvY2VzcyBrZXlyaW5ncyBmb3IgdGhlIGZpcnN0IG1hdGNoaW5nIGtleQotICogLSB3ZSB1c2UgdGhlIHN1cHBsaWVkIG1hdGNoIGZ1bmN0aW9uIHRvIHNlZSBpZiB0aGUgZGVzY3JpcHRpb24gKG9yIG90aGVyCi0gKiAgIGZlYXR1cmUgb2YgaW50ZXJlc3QpIG1hdGNoZXMKLSAqIC0gd2UgcmV0dXJuIC1FQUdBSU4gaWYgd2UgZGlkbid0IGZpbmQgYW55IG1hdGNoaW5nIGtleQotICogLSB3ZSByZXR1cm4gLUVOT0tFWSBpZiB3ZSBmb3VuZCBvbmx5IG5lZ2F0aXZlIG1hdGNoaW5nIGtleXMKKyAqIFNlYXJjaCB0aGUgcHJvY2VzcyBrZXlyaW5ncyBhdHRhY2hlZCB0byB0aGUgc3VwcGxpZWQgY3JlZCBmb3IgdGhlIGZpcnN0CisgKiBtYXRjaGluZyBrZXkgaW4gdGhlIG1hbm5lciBvZiBzZWFyY2hfbXlfcHJvY2Vzc19rZXlyaW5ncygpLCBidXQgYWxzbyBzZWFyY2gKKyAqIHRoZSBrZXlzIGF0dGFjaGVkIHRvIHRoZSBhc3N1bWVkIGF1dGhvcmlzYXRpb24ga2V5IHVzaW5nIGl0cyBjcmVkZW50aWFscyBpZgorICogb25lIGlzIGF2YWlsYWJsZS4KKyAqCisgKiBSZXR1cm4gc2FtZSBhcyBzZWFyY2hfbXlfcHJvY2Vzc19rZXlyaW5ncygpLgogICovCiBrZXlfcmVmX3Qgc2VhcmNoX3Byb2Nlc3Nfa2V5cmluZ3Moc3RydWN0IGtleV90eXBlICp0eXBlLAogCQkJCSAgY29uc3Qgdm9pZCAqZGVzY3JpcHRpb24sCkBAIC00ODksMjQgKzUwMiwzMyBAQAogCiBmb3VuZDoKIAlyZXR1cm4ga2V5X3JlZjsKK30KIAotfSAvKiBlbmQgc2VhcmNoX3Byb2Nlc3Nfa2V5cmluZ3MoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogc2VlIGlmIHRoZSBrZXkgd2UncmUgbG9va2luZyBhdCBpcyB0aGUgdGFyZ2V0IGtleQorICogU2VlIGlmIHRoZSBrZXkgd2UncmUgbG9va2luZyBhdCBpcyB0aGUgdGFyZ2V0IGtleS4KICAqLwogaW50IGxvb2t1cF91c2VyX2tleV9wb3NzZXNzZWQoY29uc3Qgc3RydWN0IGtleSAqa2V5LCBjb25zdCB2b2lkICp0YXJnZXQpCiB7CiAJcmV0dXJuIGtleSA9PSB0YXJnZXQ7Cit9CiAKLX0gLyogZW5kIGxvb2t1cF91c2VyX2tleV9wb3NzZXNzZWQoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogbG9va3VwIGEga2V5IGdpdmVuIGEga2V5IElEIGZyb20gdXNlcnNwYWNlIHdpdGggYSBnaXZlbiBwZXJtaXNzaW9ucyBtYXNrCi0gKiAtIGRvbid0IGNyZWF0ZSBzcGVjaWFsIGtleXJpbmdzIHVubGVzcyBzbyByZXF1ZXN0ZWQKLSAqIC0gcGFydGlhbGx5IGNvbnN0cnVjdGVkIGtleXMgYXJlbid0IGZvdW5kIHVubGVzcyByZXF1ZXN0ZWQKKyAqIExvb2sgdXAgYSBrZXkgSUQgZ2l2ZW4gdXMgYnkgdXNlcnNwYWNlIHdpdGggYSBnaXZlbiBwZXJtaXNzaW9ucyBtYXNrIHRvIGdldAorICogdGhlIGtleSBpdCByZWZlcnMgdG8uCisgKgorICogRmxhZ3MgY2FuIGJlIHBhc3NlZCB0byByZXF1ZXN0IHRoYXQgc3BlY2lhbCBrZXlyaW5ncyBiZSBjcmVhdGVkIGlmIHJlZmVycmVkCisgKiB0byBkaXJlY3RseSwgdG8gcGVybWl0IHBhcnRpYWxseSBjb25zdHJ1Y3RlZCBrZXlzIHRvIGJlIGZvdW5kIGFuZCB0byBza2lwCisgKiB2YWxpZGl0eSBhbmQgcGVybWlzc2lvbiBjaGVja3Mgb24gdGhlIGZvdW5kIGtleS4KKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUga2V5IHdpdGggYW4gaW5jcmVtZW50ZWQgdXNhZ2UgY291bnQgaWYgc3VjY2Vzc2Z1bDsKKyAqIC1FSU5WQUwgaWYgdGhlIGtleSBJRCBpcyBpbnZhbGlkOyAtRU5PS0VZIGlmIHRoZSBrZXkgSUQgZG9lcyBub3QgY29ycmVzcG9uZAorICogdG8gYSBrZXkgb3IgdGhlIGJlc3QgZm91bmQga2V5IHdhcyBhIG5lZ2F0aXZlIGtleTsgLUVLRVlSRVZPS0VEIG9yCisgKiAtRUtFWUVYUElSRUQgaWYgdGhlIGJlc3QgZm91bmQga2V5IHdhcyByZXZva2VkIG9yIGV4cGlyZWQ7IC1FQUNDRVMgaWYgdGhlCisgKiBmb3VuZCBrZXkgZG9lc24ndCBncmFudCB0aGUgcmVxdWVzdGVkIHBlcm1pdCBvciB0aGUgTFNNIGRlbmllZCBhY2Nlc3MgdG8gaXQ7CisgKiBvciAtRU5PTUVNIGlmIGEgc3BlY2lhbCBrZXlyaW5nIGNvdWxkbid0IGJlIGNyZWF0ZWQuCisgKgorICogSW4gdGhlIGNhc2Ugb2YgYSBzdWNjZXNzZnVsIHJldHVybiwgdGhlIHBvc3Nlc3Npb24gYXR0cmlidXRlIGlzIHNldCBvbiB0aGUKKyAqIHJldHVybmVkIGtleSByZWZlcmVuY2UuCiAgKi8KIGtleV9yZWZfdCBsb29rdXBfdXNlcl9rZXkoa2V5X3NlcmlhbF90IGlkLCB1bnNpZ25lZCBsb25nIGxmbGFncywKIAkJCSAga2V5X3Blcm1fdCBwZXJtKQpAQCAtNzExLDE1ICs3MzMsMTggQEAKIHJlZ2V0X2NyZWRzOgogCXB1dF9jcmVkKGNyZWQpOwogCWdvdG8gdHJ5X2FnYWluOworfQogCi19IC8qIGVuZCBsb29rdXBfdXNlcl9rZXkoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogam9pbiB0aGUgbmFtZWQga2V5cmluZyBhcyB0aGUgc2Vzc2lvbiBrZXlyaW5nIGlmIHBvc3NpYmxlLCBvciBhdHRlbXB0IHRvCi0gKiBjcmVhdGUgYSBuZXcgb25lIG9mIHRoYXQgbmFtZSBpZiBub3QKLSAqIC0gaWYgdGhlIG5hbWUgaXMgTlVMTCwgYW4gZW1wdHkgYW5vbnltb3VzIGtleXJpbmcgaXMgaW5zdGFsbGVkIGluc3RlYWQKLSAqIC0gbmFtZWQgc2Vzc2lvbiBrZXlyaW5nIGpvaW5pbmcgaXMgZG9uZSB3aXRoIGEgc2VtYXBob3JlIGhlbGQKKyAqIEpvaW4gdGhlIG5hbWVkIGtleXJpbmcgYXMgdGhlIHNlc3Npb24ga2V5cmluZyBpZiBwb3NzaWJsZSBlbHNlIGF0dGVtcHQgdG8KKyAqIGNyZWF0ZSBhIG5ldyBvbmUgb2YgdGhhdCBuYW1lIGFuZCBqb2luIHRoYXQuCisgKgorICogSWYgdGhlIG5hbWUgaXMgTlVMTCwgYW4gZW1wdHkgYW5vbnltb3VzIGtleXJpbmcgd2lsbCBiZSBpbnN0YWxsZWQgYXMgdGhlCisgKiBzZXNzaW9uIGtleXJpbmcuCisgKgorICogTmFtZWQgc2Vzc2lvbiBrZXlyaW5ncyBhcmUgam9pbmVkIHdpdGggYSBzZW1hcGhvcmUgaGVsZCB0byBwcmV2ZW50IHRoZQorICoga2V5cmluZ3MgZnJvbSBnb2luZyBhd2F5IHdoaWxzdCB0aGUgYXR0ZW1wdCBpcyBtYWRlIHRvIGdvaW5nIHRoZW0gYW5kIGFsc28KKyAqIHRvIHByZXZlbnQgYSByYWNlIGluIGNyZWF0aW5nIGNvbXBhdGlibGUgc2Vzc2lvbiBrZXlyaW5ncy4KICAqLwogbG9uZyBqb2luX3Nlc3Npb25fa2V5cmluZyhjb25zdCBjaGFyICpuYW1lKQogewpAQCAtNzkxLDggKzgxNiw4IEBACiB9CiAKIC8qCi0gKiBSZXBsYWNlIGEgcHJvY2VzcydzIHNlc3Npb24ga2V5cmluZyB3aGVuIHRoYXQgcHJvY2VzcyByZXN1bWVzIHVzZXJzcGFjZSBvbgotICogYmVoYWxmIG9mIG9uZSBvZiBpdHMgY2hpbGRyZW4KKyAqIFJlcGxhY2UgYSBwcm9jZXNzJ3Mgc2Vzc2lvbiBrZXlyaW5nIG9uIGJlaGFsZiBvZiBvbmUgb2YgaXRzIGNoaWxkcmVuIHdoZW4KKyAqIHRoZSB0YXJnZXQgIHByb2Nlc3MgaXMgYWJvdXQgdG8gcmVzdW1lIHVzZXJzcGFjZSBleGVjdXRpb24uCiAgKi8KIHZvaWQga2V5X3JlcGxhY2Vfc2Vzc2lvbl9rZXlyaW5nKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMgYi9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMKaW5kZXggMGVhNTJkMi4uYTNkYzBkNCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jCisrKyBiL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYwpAQCAtMzksOCArMzksMTQgQEAKIAlyZXR1cm4gc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgPyAtRVJFU1RBUlRTWVMgOiAwOwogfQogCi0vKgotICogY2FsbCB0byBjb21wbGV0ZSB0aGUgY29uc3RydWN0aW9uIG9mIGEga2V5CisvKioKKyAqIGNvbXBsZXRlX3JlcXVlc3Rfa2V5IC0gQ29tcGxldGUgdGhlIGNvbnN0cnVjdGlvbiBvZiBhIGtleS4KKyAqIEBjb25zOiBUaGUga2V5IGNvbnN0cnVjdGlvbiByZWNvcmQuCisgKiBAZXJyb3I6IFRoZSBzdWNjZXNzIG9yIGZhaWx1dGUgb2YgdGhlIGNvbnN0cnVjdGlvbi4KKyAqCisgKiBDb21wbGV0ZSB0aGUgYXR0ZW1wdCB0byBjb25zdHJ1Y3QgYSBrZXkuICBUaGUga2V5IHdpbGwgYmUgbmVnYXRlZAorICogaWYgYW4gZXJyb3IgaXMgaW5kaWNhdGVkLiAgVGhlIGF1dGhvcmlzYXRpb24ga2V5IHdpbGwgYmUgcmV2b2tlZAorICogdW5jb25kaXRpb25hbGx5LgogICovCiB2b2lkIGNvbXBsZXRlX3JlcXVlc3Rfa2V5KHN0cnVjdCBrZXlfY29uc3RydWN0aW9uICpjb25zLCBpbnQgZXJyb3IpCiB7CkBAIC01OCwyMyArNjQsMzMgQEAKIH0KIEVYUE9SVF9TWU1CT0woY29tcGxldGVfcmVxdWVzdF9rZXkpOwogCisvKgorICogSW5pdGlhbGlzZSBhIHVzZXJtb2RlIGhlbHBlciB0aGF0IGlzIGdvaW5nIHRvIGhhdmUgYSBzcGVjaWZpYyBzZXNzaW9uCisgKiBrZXlyaW5nLgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGluIGNvbnRleHQgb2YgZnJlc2hseSBmb3JrZWQga3RocmVhZCBiZWZvcmUga2VybmVsX2V4ZWN2ZSgpLAorICogc28gd2UgY2FuIHNpbXBseSBpbnN0YWxsIHRoZSBkZXNpcmVkIHNlc3Npb25fa2V5cmluZyBhdCB0aGlzIHBvaW50LgorICovCiBzdGF0aWMgaW50IHVtaF9rZXlzX2luaXQoc3RydWN0IHN1YnByb2Nlc3NfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgY3JlZCAqY3JlZCA9IChzdHJ1Y3QgY3JlZCopY3VycmVudF9jcmVkKCk7CiAJc3RydWN0IGtleSAqa2V5cmluZyA9IGluZm8tPmRhdGE7Ci0JLyoKLQkgKiBUaGlzIGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZyZXNobHkgZm9ya2VkIGt0aHJlYWQgYmVmb3JlCi0JICoga2VybmVsX2V4ZWN2ZSgpLCB3ZSBjYW4ganVzdCBjaGFuZ2Ugb3VyIC0+c2Vzc2lvbl9rZXlyaW5nLgotCSAqLworCiAJcmV0dXJuIGluc3RhbGxfc2Vzc2lvbl9rZXlyaW5nX3RvX2NyZWQoY3JlZCwga2V5cmluZyk7CiB9CiAKKy8qCisgKiBDbGVhbiB1cCBhIHVzZXJtb2RlIGhlbHBlciB3aXRoIHNlc3Npb24ga2V5cmluZy4KKyAqLwogc3RhdGljIHZvaWQgdW1oX2tleXNfY2xlYW51cChzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvICppbmZvKQogewogCXN0cnVjdCBrZXkgKmtleXJpbmcgPSBpbmZvLT5kYXRhOwogCWtleV9wdXQoa2V5cmluZyk7CiB9CiAKKy8qCisgKiBDYWxsIGEgdXNlcm1vZGUgaGVscGVyIHdpdGggYSBzcGVjaWZpYyBzZXNzaW9uIGtleXJpbmcuCisgKi8KIHN0YXRpYyBpbnQgY2FsbF91c2VybW9kZWhlbHBlcl9rZXlzKGNoYXIgKnBhdGgsIGNoYXIgKiphcmd2LCBjaGFyICoqZW52cCwKIAkJCSBzdHJ1Y3Qga2V5ICpzZXNzaW9uX2tleXJpbmcsIGVudW0gdW1oX3dhaXQgd2FpdCkKIHsKQEAgLTkxLDcgKzEwNyw3IEBACiB9CiAKIC8qCi0gKiByZXF1ZXN0IHVzZXJzcGFjZSBmaW5pc2ggdGhlIGNvbnN0cnVjdGlvbiBvZiBhIGtleQorICogUmVxdWVzdCB1c2Vyc3BhY2UgZmluaXNoIHRoZSBjb25zdHJ1Y3Rpb24gb2YgYSBrZXkKICAqIC0gZXhlY3V0ZSAiL3NiaW4vcmVxdWVzdC1rZXkgPG9wPiA8a2V5PiA8dWlkPiA8Z2lkPiA8a2V5cmluZz4gPGtleXJpbmc+IDxrZXlyaW5nPiIKICAqLwogc3RhdGljIGludCBjYWxsX3NiaW5fcmVxdWVzdF9rZXkoc3RydWN0IGtleV9jb25zdHJ1Y3Rpb24gKmNvbnMsCkBAIC0xOTgsOCArMjE0LDkgQEAKIH0KIAogLyoKLSAqIGNhbGwgb3V0IHRvIHVzZXJzcGFjZSBmb3Iga2V5IGNvbnN0cnVjdGlvbgotICogLSB3ZSBpZ25vcmUgcHJvZ3JhbSBmYWlsdXJlIGFuZCBnbyBvbiBrZXkgc3RhdHVzIGluc3RlYWQKKyAqIENhbGwgb3V0IHRvIHVzZXJzcGFjZSBmb3Iga2V5IGNvbnN0cnVjdGlvbi4KKyAqCisgKiBQcm9ncmFtIGZhaWx1cmUgaXMgaWdub3JlZCBpbiBmYXZvdXIgb2Yga2V5IHN0YXR1cy4KICAqLwogc3RhdGljIGludCBjb25zdHJ1Y3Rfa2V5KHN0cnVjdCBrZXkgKmtleSwgY29uc3Qgdm9pZCAqY2FsbG91dF9pbmZvLAogCQkJIHNpemVfdCBjYWxsb3V0X2xlbiwgdm9pZCAqYXV4LApAQCAtMjQ2LDkgKzI2MywxMCBAQAogfQogCiAvKgotICogZ2V0IHRoZSBhcHByb3ByaWF0ZSBkZXN0aW5hdGlvbiBrZXlyaW5nIGZvciB0aGUgcmVxdWVzdAotICogLSB3ZSByZXR1cm4gd2hhdGV2ZXIga2V5cmluZyB3ZSBzZWxlY3Qgd2l0aCBhbiBleHRyYSByZWZlcmVuY2UgdXBvbiBpdCB3aGljaAotICogICB0aGUgY2FsbGVyIG11c3QgcmVsZWFzZQorICogR2V0IHRoZSBhcHByb3ByaWF0ZSBkZXN0aW5hdGlvbiBrZXlyaW5nIGZvciB0aGUgcmVxdWVzdC4KKyAqCisgKiBUaGUga2V5cmluZyBzZWxlY3RlZCBpcyByZXR1cm5lZCB3aXRoIGFuIGV4dHJhIHJlZmVyZW5jZSB1cG9uIGl0IHdoaWNoIHRoZQorICogY2FsbGVyIG11c3QgcmVsZWFzZS4KICAqLwogc3RhdGljIHZvaWQgY29uc3RydWN0X2dldF9kZXN0X2tleXJpbmcoc3RydWN0IGtleSAqKl9kZXN0X2tleXJpbmcpCiB7CkBAIC0zMjEsOSArMzM5LDExIEBACiB9CiAKIC8qCi0gKiBhbGxvY2F0ZSBhIG5ldyBrZXkgaW4gdW5kZXItY29uc3RydWN0aW9uIHN0YXRlIGFuZCBhdHRlbXB0IHRvIGxpbmsgaXQgaW4gdG8KLSAqIHRoZSByZXF1ZXN0ZWQgcGxhY2UKLSAqIC0gbWF5IHJldHVybiBhIGtleSB0aGF0J3MgYWxyZWFkeSB1bmRlciBjb25zdHJ1Y3Rpb24gaW5zdGVhZAorICogQWxsb2NhdGUgYSBuZXcga2V5IGluIHVuZGVyLWNvbnN0cnVjdGlvbiBzdGF0ZSBhbmQgYXR0ZW1wdCB0byBsaW5rIGl0IGluIHRvCisgKiB0aGUgcmVxdWVzdGVkIGtleXJpbmcuCisgKgorICogTWF5IHJldHVybiBhIGtleSB0aGF0J3MgYWxyZWFkeSB1bmRlciBjb25zdHJ1Y3Rpb24gaW5zdGVhZCBpZiB0aGVyZSB3YXMgYQorICogcmFjZSBiZXR3ZWVuIHR3byB0aHJlYWQgY2FsbGluZyByZXF1ZXN0X2tleSgpLgogICovCiBzdGF0aWMgaW50IGNvbnN0cnVjdF9hbGxvY19rZXkoc3RydWN0IGtleV90eXBlICp0eXBlLAogCQkJICAgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLApAQCAtMzMyLDggKzM1Miw4IEBACiAJCQkgICAgICAgc3RydWN0IGtleV91c2VyICp1c2VyLAogCQkJICAgICAgIHN0cnVjdCBrZXkgKipfa2V5KQogewotCXN0cnVjdCBrZXlyaW5nX2xpc3QgKnByZWFsbG9jOwogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CisJdW5zaWduZWQgbG9uZyBwcmVhbGxvYzsKIAlzdHJ1Y3Qga2V5ICprZXk7CiAJa2V5X3JlZl90IGtleV9yZWY7CiAJaW50IHJldDsKQEAgLTQxNCw3ICs0MzQsNyBAQAogfQogCiAvKgotICogY29tbWVuY2Uga2V5IGNvbnN0cnVjdGlvbgorICogQ29tbWVuY2Uga2V5IGNvbnN0cnVjdGlvbi4KICAqLwogc3RhdGljIHN0cnVjdCBrZXkgKmNvbnN0cnVjdF9rZXlfYW5kX2xpbmsoc3RydWN0IGtleV90eXBlICp0eXBlLAogCQkJCQkgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLApAQCAtNDY1LDEyICs0ODUsMzIgQEAKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCi0vKgotICogcmVxdWVzdCBhIGtleQotICogLSBzZWFyY2ggdGhlIHByb2Nlc3MncyBrZXlyaW5ncwotICogLSBjaGVjayB0aGUgbGlzdCBvZiBrZXlzIGJlaW5nIGNyZWF0ZWQgb3IgdXBkYXRlZAotICogLSBjYWxsIG91dCB0byB1c2Vyc3BhY2UgZm9yIGEga2V5IGlmIHN1cHBsZW1lbnRhcnkgaW5mbyB3YXMgcHJvdmlkZWQKLSAqIC0gY2FjaGUgdGhlIGtleSBpbiBhbiBhcHByb3ByaWF0ZSBrZXlyaW5nCisvKioKKyAqIHJlcXVlc3Rfa2V5X2FuZF9saW5rIC0gUmVxdWVzdCBhIGtleSBhbmQgY2FjaGUgaXQgaW4gYSBrZXlyaW5nLgorICogQHR5cGU6IFRoZSB0eXBlIG9mIGtleSB3ZSB3YW50LgorICogQGRlc2NyaXB0aW9uOiBUaGUgc2VhcmNoYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUga2V5LgorICogQGNhbGxvdXRfaW5mbzogVGhlIGRhdGEgdG8gcGFzcyB0byB0aGUgaW5zdGFudGlhdGlvbiB1cGNhbGwgKG9yIE5VTEwpLgorICogQGNhbGxvdXRfbGVuOiBUaGUgbGVuZ3RoIG9mIGNhbGxvdXRfaW5mby4KKyAqIEBhdXg6IEF1eGlsaWFyeSBkYXRhIGZvciB0aGUgdXBjYWxsLgorICogQGRlc3Rfa2V5cmluZzogV2hlcmUgdG8gY2FjaGUgdGhlIGtleS4KKyAqIEBmbGFnczogRmxhZ3MgdG8ga2V5X2FsbG9jKCkuCisgKgorICogQSBrZXkgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBpcyBzZWFyY2hlZCBmb3IgaW4gdGhlIHByb2Nlc3MncworICoga2V5cmluZ3MgYW5kIHJldHVybmVkIHdpdGggaXRzIHVzYWdlIGNvdW50IGluY3JlbWVudGVkIGlmIGZvdW5kLiAgT3RoZXJ3aXNlLAorICogaWYgY2FsbG91dF9pbmZvIGlzIG5vdCBOVUxMLCBhIGtleSB3aWxsIGJlIGFsbG9jYXRlZCBhbmQgc29tZSBzZXJ2aWNlCisgKiAocHJvYmFibHkgaW4gdXNlcnNwYWNlKSB3aWxsIGJlIGFza2VkIHRvIGluc3RhbnRpYXRlIGl0LgorICoKKyAqIElmIHN1Y2Nlc3NmdWxseSBmb3VuZCBvciBjcmVhdGVkLCB0aGUga2V5IHdpbGwgYmUgbGlua2VkIHRvIHRoZSBkZXN0aW5hdGlvbgorICoga2V5cmluZyBpZiBvbmUgaXMgcHJvdmlkZWQuCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGtleSBpZiBzdWNjZXNzZnVsOyAtRUFDQ0VTLCAtRU5PS0VZLCAtRUtFWVJFVk9LRUQKKyAqIG9yIC1FS0VZRVhQSVJFRCBpZiBhbiBpbmFjY2Vzc2libGUsIG5lZ2F0aXZlLCByZXZva2VkIG9yIGV4cGlyZWQga2V5IHdhcworICogZm91bmQ7IC1FTk9LRVkgaWYgbm8ga2V5IHdhcyBmb3VuZCBhbmQgbm8gQGNhbGxvdXRfaW5mbyB3YXMgZ2l2ZW47IC1FRFFVT1QKKyAqIGlmIGluc3VmZmljaWVudCBrZXkgcXVvdGEgd2FzIGF2YWlsYWJsZSB0byBjcmVhdGUgYSBuZXcga2V5OyBvciAtRU5PTUVNIGlmCisgKiBpbnN1ZmZpY2llbnQgbWVtb3J5IHdhcyBhdmFpbGFibGUuCisgKgorICogSWYgdGhlIHJldHVybmVkIGtleSB3YXMgY3JlYXRlZCwgdGhlbiBpdCBtYXkgc3RpbGwgYmUgdW5kZXIgY29uc3RydWN0aW9uLAorICogYW5kIHdhaXRfZm9yX2tleV9jb25zdHJ1Y3Rpb24oKSBzaG91bGQgYmUgdXNlZCB0byB3YWl0IGZvciB0aGF0IHRvIGNvbXBsZXRlLgogICovCiBzdHJ1Y3Qga2V5ICpyZXF1ZXN0X2tleV9hbmRfbGluayhzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCiAJCQkJIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLApAQCAtNTI0LDggKzU2NCwxNiBAQAogCXJldHVybiBrZXk7CiB9CiAKLS8qCi0gKiB3YWl0IGZvciBjb25zdHJ1Y3Rpb24gb2YgYSBrZXkgdG8gY29tcGxldGUKKy8qKgorICogd2FpdF9mb3Jfa2V5X2NvbnN0cnVjdGlvbiAtIFdhaXQgZm9yIGNvbnN0cnVjdGlvbiBvZiBhIGtleSB0byBjb21wbGV0ZQorICogQGtleTogVGhlIGtleSBiZWluZyB3YWl0ZWQgZm9yLgorICogQGludHI6IFdoZXRoZXIgdG8gd2FpdCBpbnRlcnJ1cHRpYmx5LgorICoKKyAqIFdhaXQgZm9yIGEga2V5IHRvIGZpbmlzaCBiZWluZyBjb25zdHJ1Y3RlZC4KKyAqCisgKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bDsgLUVSRVNUQVJUU1lTIGlmIHRoZSB3YWl0IHdhcyBpbnRlcnJ1cHRlZDsgLUVOT0tFWQorICogaWYgdGhlIGtleSB3YXMgbmVnYXRlZDsgb3IgLUVLRVlSRVZPS0VEIG9yIC1FS0VZRVhQSVJFRCBpZiB0aGUga2V5IHdhcworICogcmV2b2tlZCBvciBleHBpcmVkLgogICovCiBpbnQgd2FpdF9mb3Jfa2V5X2NvbnN0cnVjdGlvbihzdHJ1Y3Qga2V5ICprZXksIGJvb2wgaW50cikKIHsKQEAgLTU0MiwxMiArNTkwLDE5IEBACiB9CiBFWFBPUlRfU1lNQk9MKHdhaXRfZm9yX2tleV9jb25zdHJ1Y3Rpb24pOwogCi0vKgotICogcmVxdWVzdCBhIGtleQotICogLSBzZWFyY2ggdGhlIHByb2Nlc3MncyBrZXlyaW5ncwotICogLSBjaGVjayB0aGUgbGlzdCBvZiBrZXlzIGJlaW5nIGNyZWF0ZWQgb3IgdXBkYXRlZAotICogLSBjYWxsIG91dCB0byB1c2Vyc3BhY2UgZm9yIGEga2V5IGlmIHN1cHBsZW1lbnRhcnkgaW5mbyB3YXMgcHJvdmlkZWQKLSAqIC0gd2FpdHMgdW5pbnRlcnJ1cHRpYmxlIGZvciBjcmVhdGlvbiB0byBjb21wbGV0ZQorLyoqCisgKiByZXF1ZXN0X2tleSAtIFJlcXVlc3QgYSBrZXkgYW5kIHdhaXQgZm9yIGNvbnN0cnVjdGlvbgorICogQHR5cGU6IFR5cGUgb2Yga2V5LgorICogQGRlc2NyaXB0aW9uOiBUaGUgc2VhcmNoYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUga2V5LgorICogQGNhbGxvdXRfaW5mbzogVGhlIGRhdGEgdG8gcGFzcyB0byB0aGUgaW5zdGFudGlhdGlvbiB1cGNhbGwgKG9yIE5VTEwpLgorICoKKyAqIEFzIGZvciByZXF1ZXN0X2tleV9hbmRfbGluaygpIGV4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IGFkZCB0aGUgcmV0dXJuZWQga2V5CisgKiB0byBhIGtleXJpbmcgaWYgZm91bmQsIG5ldyBrZXlzIGFyZSBhbHdheXMgYWxsb2NhdGVkIGluIHRoZSB1c2VyJ3MgcXVvdGEsCisgKiB0aGUgY2FsbG91dF9pbmZvIG11c3QgYmUgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgYW5kIG5vIGF1eGlsaWFyeSBkYXRhIGNhbgorICogYmUgcGFzc2VkLgorICoKKyAqIEZ1cnRoZXJtb3JlLCBpdCB0aGVuIHdvcmtzIGFzIHdhaXRfZm9yX2tleV9jb25zdHJ1Y3Rpb24oKSB0byB3YWl0IGZvciB0aGUKKyAqIGNvbXBsZXRpb24gb2Yga2V5cyB1bmRlcmdvaW5nIGNvbnN0cnVjdGlvbiB3aXRoIGEgbm9uLWludGVycnVwdGlibGUgd2FpdC4KICAqLwogc3RydWN0IGtleSAqcmVxdWVzdF9rZXkoc3RydWN0IGtleV90eXBlICp0eXBlLAogCQkJY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCkBAIC01NzIsMTIgKzYyNywxOSBAQAogfQogRVhQT1JUX1NZTUJPTChyZXF1ZXN0X2tleSk7CiAKLS8qCi0gKiByZXF1ZXN0IGEga2V5IHdpdGggYXV4aWxpYXJ5IGRhdGEgZm9yIHRoZSB1cGNhbGxlcgotICogLSBzZWFyY2ggdGhlIHByb2Nlc3MncyBrZXlyaW5ncwotICogLSBjaGVjayB0aGUgbGlzdCBvZiBrZXlzIGJlaW5nIGNyZWF0ZWQgb3IgdXBkYXRlZAotICogLSBjYWxsIG91dCB0byB1c2Vyc3BhY2UgZm9yIGEga2V5IGlmIHN1cHBsZW1lbnRhcnkgaW5mbyB3YXMgcHJvdmlkZWQKLSAqIC0gd2FpdHMgdW5pbnRlcnJ1cHRpYmxlIGZvciBjcmVhdGlvbiB0byBjb21wbGV0ZQorLyoqCisgKiByZXF1ZXN0X2tleV93aXRoX2F1eGRhdGEgLSBSZXF1ZXN0IGEga2V5IHdpdGggYXV4aWxpYXJ5IGRhdGEgZm9yIHRoZSB1cGNhbGxlcgorICogQHR5cGU6IFRoZSB0eXBlIG9mIGtleSB3ZSB3YW50LgorICogQGRlc2NyaXB0aW9uOiBUaGUgc2VhcmNoYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUga2V5LgorICogQGNhbGxvdXRfaW5mbzogVGhlIGRhdGEgdG8gcGFzcyB0byB0aGUgaW5zdGFudGlhdGlvbiB1cGNhbGwgKG9yIE5VTEwpLgorICogQGNhbGxvdXRfbGVuOiBUaGUgbGVuZ3RoIG9mIGNhbGxvdXRfaW5mby4KKyAqIEBhdXg6IEF1eGlsaWFyeSBkYXRhIGZvciB0aGUgdXBjYWxsLgorICoKKyAqIEFzIGZvciByZXF1ZXN0X2tleV9hbmRfbGluaygpIGV4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IGFkZCB0aGUgcmV0dXJuZWQga2V5CisgKiB0byBhIGtleXJpbmcgaWYgZm91bmQgYW5kIG5ldyBrZXlzIGFyZSBhbHdheXMgYWxsb2NhdGVkIGluIHRoZSB1c2VyJ3MgcXVvdGEuCisgKgorICogRnVydGhlcm1vcmUsIGl0IHRoZW4gd29ya3MgYXMgd2FpdF9mb3Jfa2V5X2NvbnN0cnVjdGlvbigpIHRvIHdhaXQgZm9yIHRoZQorICogY29tcGxldGlvbiBvZiBrZXlzIHVuZGVyZ29pbmcgY29uc3RydWN0aW9uIHdpdGggYSBub24taW50ZXJydXB0aWJsZSB3YWl0LgogICovCiBzdHJ1Y3Qga2V5ICpyZXF1ZXN0X2tleV93aXRoX2F1eGRhdGEoc3RydWN0IGtleV90eXBlICp0eXBlLAogCQkJCSAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCkBAIC02MDIsMTAgKzY2NCwxOCBAQAogRVhQT1JUX1NZTUJPTChyZXF1ZXN0X2tleV93aXRoX2F1eGRhdGEpOwogCiAvKgotICogcmVxdWVzdCBhIGtleSAoYWxsb3cgYXN5bmMgY29uc3RydWN0aW9uKQotICogLSBzZWFyY2ggdGhlIHByb2Nlc3MncyBrZXlyaW5ncwotICogLSBjaGVjayB0aGUgbGlzdCBvZiBrZXlzIGJlaW5nIGNyZWF0ZWQgb3IgdXBkYXRlZAotICogLSBjYWxsIG91dCB0byB1c2Vyc3BhY2UgZm9yIGEga2V5IGlmIHN1cHBsZW1lbnRhcnkgaW5mbyB3YXMgcHJvdmlkZWQKKyAqIHJlcXVlc3Rfa2V5X2FzeW5jIC0gUmVxdWVzdCBhIGtleSAoYWxsb3cgYXN5bmMgY29uc3RydWN0aW9uKQorICogQHR5cGU6IFR5cGUgb2Yga2V5LgorICogQGRlc2NyaXB0aW9uOiBUaGUgc2VhcmNoYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUga2V5LgorICogQGNhbGxvdXRfaW5mbzogVGhlIGRhdGEgdG8gcGFzcyB0byB0aGUgaW5zdGFudGlhdGlvbiB1cGNhbGwgKG9yIE5VTEwpLgorICogQGNhbGxvdXRfbGVuOiBUaGUgbGVuZ3RoIG9mIGNhbGxvdXRfaW5mby4KKyAqCisgKiBBcyBmb3IgcmVxdWVzdF9rZXlfYW5kX2xpbmsoKSBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdCBhZGQgdGhlIHJldHVybmVkIGtleQorICogdG8gYSBrZXlyaW5nIGlmIGZvdW5kLCBuZXcga2V5cyBhcmUgYWx3YXlzIGFsbG9jYXRlZCBpbiB0aGUgdXNlcidzIHF1b3RhIGFuZAorICogbm8gYXV4aWxpYXJ5IGRhdGEgY2FuIGJlIHBhc3NlZC4KKyAqCisgKiBUaGUgY2FsbGVyIHNob3VsZCBjYWxsIHdhaXRfZm9yX2tleV9jb25zdHJ1Y3Rpb24oKSB0byB3YWl0IGZvciB0aGUKKyAqIGNvbXBsZXRpb24gb2YgdGhlIHJldHVybmVkIGtleSBpZiBpdCBpcyBzdGlsbCB1bmRlcmdvaW5nIGNvbnN0cnVjdGlvbi4KICAqLwogc3RydWN0IGtleSAqcmVxdWVzdF9rZXlfYXN5bmMoc3RydWN0IGtleV90eXBlICp0eXBlLAogCQkJICAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCkBAIC02MjAsOSArNjkwLDE3IEBACiAKIC8qCiAgKiByZXF1ZXN0IGEga2V5IHdpdGggYXV4aWxpYXJ5IGRhdGEgZm9yIHRoZSB1cGNhbGxlciAoYWxsb3cgYXN5bmMgY29uc3RydWN0aW9uKQotICogLSBzZWFyY2ggdGhlIHByb2Nlc3MncyBrZXlyaW5ncwotICogLSBjaGVjayB0aGUgbGlzdCBvZiBrZXlzIGJlaW5nIGNyZWF0ZWQgb3IgdXBkYXRlZAotICogLSBjYWxsIG91dCB0byB1c2Vyc3BhY2UgZm9yIGEga2V5IGlmIHN1cHBsZW1lbnRhcnkgaW5mbyB3YXMgcHJvdmlkZWQKKyAqIEB0eXBlOiBUeXBlIG9mIGtleS4KKyAqIEBkZXNjcmlwdGlvbjogVGhlIHNlYXJjaGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGtleS4KKyAqIEBjYWxsb3V0X2luZm86IFRoZSBkYXRhIHRvIHBhc3MgdG8gdGhlIGluc3RhbnRpYXRpb24gdXBjYWxsIChvciBOVUxMKS4KKyAqIEBjYWxsb3V0X2xlbjogVGhlIGxlbmd0aCBvZiBjYWxsb3V0X2luZm8uCisgKiBAYXV4OiBBdXhpbGlhcnkgZGF0YSBmb3IgdGhlIHVwY2FsbC4KKyAqCisgKiBBcyBmb3IgcmVxdWVzdF9rZXlfYW5kX2xpbmsoKSBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdCBhZGQgdGhlIHJldHVybmVkIGtleQorICogdG8gYSBrZXlyaW5nIGlmIGZvdW5kIGFuZCBuZXcga2V5cyBhcmUgYWx3YXlzIGFsbG9jYXRlZCBpbiB0aGUgdXNlcidzIHF1b3RhLgorICoKKyAqIFRoZSBjYWxsZXIgc2hvdWxkIGNhbGwgd2FpdF9mb3Jfa2V5X2NvbnN0cnVjdGlvbigpIHRvIHdhaXQgZm9yIHRoZQorICogY29tcGxldGlvbiBvZiB0aGUgcmV0dXJuZWQga2V5IGlmIGl0IGlzIHN0aWxsIHVuZGVyZ29pbmcgY29uc3RydWN0aW9uLgogICovCiBzdHJ1Y3Qga2V5ICpyZXF1ZXN0X2tleV9hc3luY193aXRoX2F1eGRhdGEoc3RydWN0IGtleV90eXBlICp0eXBlLAogCQkJCQkgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXlfYXV0aC5jIGIvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleV9hdXRoLmMKaW5kZXggODY3NDcxNS4uNjgxNjQwMyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleV9hdXRoLmMKKysrIGIvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleV9hdXRoLmMKQEAgLTEsNCArMSw0IEBACi0vKiByZXF1ZXN0X2tleV9hdXRoLmM6IHJlcXVlc3Qga2V5IGF1dGhvcmlzYXRpb24gY29udHJvbGxpbmcga2V5IGRlZgorLyogUmVxdWVzdCBrZXkgYXV0aG9yaXNhdGlvbiB0b2tlbiBrZXkgZGVmaW5pdGlvbi4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQpAQCAtMjYsNyArMjYsNyBAQAogc3RhdGljIGxvbmcgcmVxdWVzdF9rZXlfYXV0aF9yZWFkKGNvbnN0IHN0cnVjdCBrZXkgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90KTsKIAogLyoKLSAqIHRoZSByZXF1ZXN0LWtleSBhdXRob3Jpc2F0aW9uIGtleSB0eXBlIGRlZmluaXRpb24KKyAqIFRoZSByZXF1ZXN0LWtleSBhdXRob3Jpc2F0aW9uIGtleSB0eXBlIGRlZmluaXRpb24uCiAgKi8KIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9yZXF1ZXN0X2tleV9hdXRoID0gewogCS5uYW1lCQk9ICIucmVxdWVzdF9rZXlfYXV0aCIsCkBAIC0zOCw5ICszOCw4IEBACiAJLnJlYWQJCT0gcmVxdWVzdF9rZXlfYXV0aF9yZWFkLAogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIGluc3RhbnRpYXRlIGEgcmVxdWVzdC1rZXkgYXV0aG9yaXNhdGlvbiBrZXkKKyAqIEluc3RhbnRpYXRlIGEgcmVxdWVzdC1rZXkgYXV0aG9yaXNhdGlvbiBrZXkuCiAgKi8KIHN0YXRpYyBpbnQgcmVxdWVzdF9rZXlfYXV0aF9pbnN0YW50aWF0ZShzdHJ1Y3Qga2V5ICprZXksCiAJCQkJCWNvbnN0IHZvaWQgKmRhdGEsCkBAIC00OCwxMiArNDcsMTAgQEAKIHsKIAlrZXktPnBheWxvYWQuZGF0YSA9IChzdHJ1Y3QgcmVxdWVzdF9rZXlfYXV0aCAqKSBkYXRhOwogCXJldHVybiAwOworfQogCi19IC8qIGVuZCByZXF1ZXN0X2tleV9hdXRoX2luc3RhbnRpYXRlKCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIHJlYWRpbmcgYSByZXF1ZXN0LWtleSBhdXRob3Jpc2F0aW9uIGtleSByZXRyaWV2ZXMgdGhlIGNhbGxvdXQgaW5mb3JtYXRpb24KKyAqIERlc2NyaWJlIGFuIGF1dGhvcmlzYXRpb24gdG9rZW4uCiAgKi8KIHN0YXRpYyB2b2lkIHJlcXVlc3Rfa2V5X2F1dGhfZGVzY3JpYmUoY29uc3Qgc3RydWN0IGtleSAqa2V5LAogCQkJCSAgICAgIHN0cnVjdCBzZXFfZmlsZSAqbSkKQEAgLTYzLDEyICs2MCwxMCBAQAogCXNlcV9wdXRzKG0sICJrZXk6Iik7CiAJc2VxX3B1dHMobSwga2V5LT5kZXNjcmlwdGlvbik7CiAJc2VxX3ByaW50ZihtLCAiIHBpZDolZCBjaTolenUiLCBya2EtPnBpZCwgcmthLT5jYWxsb3V0X2xlbik7Cit9CiAKLX0gLyogZW5kIHJlcXVlc3Rfa2V5X2F1dGhfZGVzY3JpYmUoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogcmVhZCB0aGUgY2FsbG91dF9pbmZvIGRhdGEKKyAqIFJlYWQgdGhlIGNhbGxvdXRfaW5mbyBkYXRhIChyZXRyaWV2ZXMgdGhlIGNhbGxvdXQgaW5mb3JtYXRpb24pLgogICogLSB0aGUga2V5J3Mgc2VtYXBob3JlIGlzIHJlYWQtbG9ja2VkCiAgKi8KIHN0YXRpYyBsb25nIHJlcXVlc3Rfa2V5X2F1dGhfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksCkBAIC05MSwxMyArODYsMTIgQEAKIAl9CiAKIAlyZXR1cm4gcmV0OworfQogCi19IC8qIGVuZCByZXF1ZXN0X2tleV9hdXRoX3JlYWQoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogaGFuZGxlIHJldm9jYXRpb24gb2YgYW4gYXV0aG9yaXNhdGlvbiB0b2tlbiBrZXkKLSAqIC0gY2FsbGVkIHdpdGggdGhlIGtleSBzZW0gd3JpdGUtbG9ja2VkCisgKiBIYW5kbGUgcmV2b2NhdGlvbiBvZiBhbiBhdXRob3Jpc2F0aW9uIHRva2VuIGtleS4KKyAqCisgKiBDYWxsZWQgd2l0aCB0aGUga2V5IHNlbSB3cml0ZS1sb2NrZWQuCiAgKi8KIHN0YXRpYyB2b2lkIHJlcXVlc3Rfa2V5X2F1dGhfcmV2b2tlKHN0cnVjdCBrZXkgKmtleSkKIHsKQEAgLTEwOSwxMiArMTAzLDEwIEBACiAJCXB1dF9jcmVkKHJrYS0+Y3JlZCk7CiAJCXJrYS0+Y3JlZCA9IE5VTEw7CiAJfQorfQogCi19IC8qIGVuZCByZXF1ZXN0X2tleV9hdXRoX3Jldm9rZSgpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBkZXN0cm95IGFuIGluc3RhbnRpYXRpb24gYXV0aG9yaXNhdGlvbiB0b2tlbiBrZXkKKyAqIERlc3Ryb3kgYW4gaW5zdGFudGlhdGlvbiBhdXRob3Jpc2F0aW9uIHRva2VuIGtleS4KICAqLwogc3RhdGljIHZvaWQgcmVxdWVzdF9rZXlfYXV0aF9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSkKIHsKQEAgLTEzMSwxMyArMTIzLDExIEBACiAJa2V5X3B1dChya2EtPmRlc3Rfa2V5cmluZyk7CiAJa2ZyZWUocmthLT5jYWxsb3V0X2luZm8pOwogCWtmcmVlKHJrYSk7Cit9CiAKLX0gLyogZW5kIHJlcXVlc3Rfa2V5X2F1dGhfZGVzdHJveSgpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBjcmVhdGUgYW4gYXV0aG9yaXNhdGlvbiB0b2tlbiBmb3IgL3NiaW4vcmVxdWVzdC1rZXkgb3Igd2hvZXZlciB0byBnYWluCi0gKiBhY2Nlc3MgdG8gdGhlIGNhbGxlcidzIHNlY3VyaXR5IGRhdGEKKyAqIENyZWF0ZSBhbiBhdXRob3Jpc2F0aW9uIHRva2VuIGZvciAvc2Jpbi9yZXF1ZXN0LWtleSBvciB3aG9ldmVyIHRvIGdhaW4KKyAqIGFjY2VzcyB0byB0aGUgY2FsbGVyJ3Mgc2VjdXJpdHkgZGF0YS4KICAqLwogc3RydWN0IGtleSAqcmVxdWVzdF9rZXlfYXV0aF9uZXcoc3RydWN0IGtleSAqdGFyZ2V0LCBjb25zdCB2b2lkICpjYWxsb3V0X2luZm8sCiAJCQkJIHNpemVfdCBjYWxsb3V0X2xlbiwgc3RydWN0IGtleSAqZGVzdF9rZXlyaW5nKQpAQCAtMjI4LDEyICsyMTgsMTAgQEAKIAlrZnJlZShya2EpOwogCWtsZWF2ZSgiPSAlZCIsIHJldCk7CiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KIAotfSAvKiBlbmQgcmVxdWVzdF9rZXlfYXV0aF9uZXcoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogc2VlIGlmIGFuIGF1dGhvcmlzYXRpb24ga2V5IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIga2V5CisgKiBTZWUgaWYgYW4gYXV0aG9yaXNhdGlvbiBrZXkgaXMgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBrZXkuCiAgKi8KIHN0YXRpYyBpbnQga2V5X2dldF9pbnN0YW50aWF0aW9uX2F1dGhrZXlfbWF0Y2goY29uc3Qgc3RydWN0IGtleSAqa2V5LAogCQkJCQkgICAgICAgY29uc3Qgdm9pZCAqX2lkKQpAQCAtMjQyLDE2ICsyMzAsMTEgQEAKIAlrZXlfc2VyaWFsX3QgaWQgPSAoa2V5X3NlcmlhbF90KSh1bnNpZ25lZCBsb25nKSBfaWQ7CiAKIAlyZXR1cm4gcmthLT50YXJnZXRfa2V5LT5zZXJpYWwgPT0gaWQ7Cit9CiAKLX0gLyogZW5kIGtleV9nZXRfaW5zdGFudGlhdGlvbl9hdXRoa2V5X21hdGNoKCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIGdldCB0aGUgYXV0aG9yaXNhdGlvbiBrZXkgZm9yIGluc3RhbnRpYXRpb24gb2YgYSBzcGVjaWZpYyBrZXkgaWYgYXR0YWNoZWQgdG8KLSAqIHRoZSBjdXJyZW50IHByb2Nlc3MncyBrZXlyaW5ncwotICogLSB0aGlzIGtleSBpcyBpbnNlcnRlZCBpbnRvIGEga2V5cmluZyBhbmQgdGhhdCBpcyBzZXQgYXMgL3NiaW4vcmVxdWVzdC1rZXkncwotICogICBzZXNzaW9uIGtleXJpbmcKLSAqIC0gYSB0YXJnZXRfaWQgb2YgemVybyBzcGVjaWZpZXMgYW55IHZhbGlkIHRva2VuCisgKiBTZWFyY2ggdGhlIGN1cnJlbnQgcHJvY2VzcydzIGtleXJpbmdzIGZvciB0aGUgYXV0aG9yaXNhdGlvbiBrZXkgZm9yCisgKiBpbnN0YW50aWF0aW9uIG9mIGEga2V5LgogICovCiBzdHJ1Y3Qga2V5ICprZXlfZ2V0X2luc3RhbnRpYXRpb25fYXV0aGtleShrZXlfc2VyaWFsX3QgdGFyZ2V0X2lkKQogewpAQCAtMjc4LDUgKzI2MSw0IEBACiAKIGVycm9yOgogCXJldHVybiBhdXRoa2V5OwotCi19IC8qIGVuZCBrZXlfZ2V0X2luc3RhbnRpYXRpb25fYXV0aGtleSgpICovCit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3RydXN0ZWRfZGVmaW5lZC5jIGIvc2VjdXJpdHkva2V5cy90cnVzdGVkLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gc2VjdXJpdHkva2V5cy90cnVzdGVkX2RlZmluZWQuYwpyZW5hbWUgdG8gc2VjdXJpdHkva2V5cy90cnVzdGVkLmMKaW5kZXggOTc1ZTlmMi4uODNmYzkyZSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy90cnVzdGVkX2RlZmluZWQuYworKysgYi9zZWN1cml0eS9rZXlzL3RydXN0ZWQuYwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RwbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RwbV9jb21tYW5kLmg+CiAKLSNpbmNsdWRlICJ0cnVzdGVkX2RlZmluZWQuaCIKKyNpbmNsdWRlICJ0cnVzdGVkLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIGhtYWNfYWxnW10gPSAiaG1hYyhzaGExKSI7CiBzdGF0aWMgY29uc3QgY2hhciBoYXNoX2FsZ1tdID0gInNoYTEiOwpAQCAtMTAxLDExICsxMDEsMTMgQEAKIAkJaWYgKGRsZW4gPT0gMCkKIAkJCWJyZWFrOwogCQlkYXRhID0gdmFfYXJnKGFyZ3AsIHVuc2lnbmVkIGNoYXIgKik7Ci0JCWlmIChkYXRhID09IE5VTEwpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGRhdGEgPT0gTlVMTCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CiAJCXJldCA9IGNyeXB0b19zaGFzaF91cGRhdGUoJnNkZXNjLT5zaGFzaCwgZGF0YSwgZGxlbik7CiAJCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7CisJCQlicmVhazsKIAl9CiAJdmFfZW5kKGFyZ3ApOwogCWlmICghcmV0KQpAQCAtMTQ2LDE0ICsxNDgsMTcgQEAKIAkJaWYgKGRsZW4gPT0gMCkKIAkJCWJyZWFrOwogCQlkYXRhID0gdmFfYXJnKGFyZ3AsIHVuc2lnbmVkIGNoYXIgKik7Ci0JCXJldCA9IGNyeXB0b19zaGFzaF91cGRhdGUoJnNkZXNjLT5zaGFzaCwgZGF0YSwgZGxlbik7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQl2YV9lbmQoYXJncCk7Ci0JCQlnb3RvIG91dDsKKwkJaWYgKCFkYXRhKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CiAJCX0KKwkJcmV0ID0gY3J5cHRvX3NoYXNoX3VwZGF0ZSgmc2Rlc2MtPnNoYXNoLCBkYXRhLCBkbGVuKTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKIAl9CiAJdmFfZW5kKGFyZ3ApOwotCXJldCA9IGNyeXB0b19zaGFzaF9maW5hbCgmc2Rlc2MtPnNoYXNoLCBwYXJhbWRpZ2VzdCk7CisJaWYgKCFyZXQpCisJCXJldCA9IGNyeXB0b19zaGFzaF9maW5hbCgmc2Rlc2MtPnNoYXNoLCBwYXJhbWRpZ2VzdCk7CiAJaWYgKCFyZXQpCiAJCXJldCA9IFRTU19yYXdobWFjKGRpZ2VzdCwga2V5LCBrZXlsZW4sIFNIQTFfRElHRVNUX1NJWkUsCiAJCQkJICBwYXJhbWRpZ2VzdCwgVFBNX05PTkNFX1NJWkUsIGgxLApAQCAtMjIyLDEzICsyMjcsMTIgQEAKIAkJCWJyZWFrOwogCQlkcG9zID0gdmFfYXJnKGFyZ3AsIHVuc2lnbmVkIGludCk7CiAJCXJldCA9IGNyeXB0b19zaGFzaF91cGRhdGUoJnNkZXNjLT5zaGFzaCwgYnVmZmVyICsgZHBvcywgZGxlbik7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQl2YV9lbmQoYXJncCk7Ci0JCQlnb3RvIG91dDsKLQkJfQorCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOwogCX0KIAl2YV9lbmQoYXJncCk7Ci0JcmV0ID0gY3J5cHRvX3NoYXNoX2ZpbmFsKCZzZGVzYy0+c2hhc2gsIHBhcmFtZGlnZXN0KTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gY3J5cHRvX3NoYXNoX2ZpbmFsKCZzZGVzYy0+c2hhc2gsIHBhcmFtZGlnZXN0KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKQEAgLTMxNiwxMyArMzIwLDEyIEBACiAJCQlicmVhazsKIAkJZHBvcyA9IHZhX2FyZyhhcmdwLCB1bnNpZ25lZCBpbnQpOwogCQlyZXQgPSBjcnlwdG9fc2hhc2hfdXBkYXRlKCZzZGVzYy0+c2hhc2gsIGJ1ZmZlciArIGRwb3MsIGRsZW4pOwotCQlpZiAocmV0IDwgMCkgewotCQkJdmFfZW5kKGFyZ3ApOwotCQkJZ290byBvdXQ7Ci0JCX0KKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKIAl9CiAJdmFfZW5kKGFyZ3ApOwotCXJldCA9IGNyeXB0b19zaGFzaF9maW5hbCgmc2Rlc2MtPnNoYXNoLCBwYXJhbWRpZ2VzdCk7CisJaWYgKCFyZXQpCisJCXJldCA9IGNyeXB0b19zaGFzaF9maW5hbCgmc2Rlc2MtPnNoYXNoLCBwYXJhbWRpZ2VzdCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCkBAIC01MTEsNyArNTE0LDcgQEAKIAkvKiBnZXQgc2Vzc2lvbiBmb3Igc2VhbGluZyBrZXkgKi8KIAlyZXQgPSBvc2FwKHRiLCAmc2Vzcywga2V5YXV0aCwga2V5dHlwZSwga2V5aGFuZGxlKTsKIAlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBvdXQ7CiAJZHVtcF9zZXNzKCZzZXNzKTsKIAogCS8qIGNhbGN1bGF0ZSBlbmNyeXB0ZWQgYXV0aG9yaXphdGlvbiB2YWx1ZSAqLwpAQCAtNTE5LDExICs1MjIsMTEgQEAKIAltZW1jcHkodGQtPnhvcndvcmsgKyBTSEExX0RJR0VTVF9TSVpFLCBzZXNzLmVub25jZSwgU0hBMV9ESUdFU1RfU0laRSk7CiAJcmV0ID0gVFNTX3NoYTEodGQtPnhvcndvcmssIFNIQTFfRElHRVNUX1NJWkUgKiAyLCB0ZC0+eG9yaGFzaCk7CiAJaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0OwogCiAJcmV0ID0gdHBtX2dldF9yYW5kb20odGIsIHRkLT5ub25jZW9kZCwgVFBNX05PTkNFX1NJWkUpOwogCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCQlnb3RvIG91dDsKIAlvcmRpbmFsID0gaHRvbmwoVFBNX09SRF9TRUFMKTsKIAlkYXRzaXplID0gaHRvbmwoZGF0YWxlbik7CiAJcGNyc2l6ZSA9IGh0b25sKHBjcmluZm9zaXplKTsKQEAgLTU1Miw3ICs1NTUsNyBAQAogCQkJCSAgICZkYXRzaXplLCBkYXRhbGVuLCBkYXRhLCAwLCAwKTsKIAl9CiAJaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0OwogCiAJLyogYnVpbGQgYW5kIHNlbmQgdGhlIFRQTSByZXF1ZXN0IHBhY2tldCAqLwogCUlOSVRfQlVGKHRiKTsKQEAgLTU3Miw3ICs1NzUsNyBAQAogCiAJcmV0ID0gdHJ1c3RlZF90cG1fc2VuZChUUE1fQU5ZX05VTSwgdGItPmRhdGEsIE1BWF9CVUZfU0laRSk7CiAJaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0OwogCiAJLyogY2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSByZXR1cm5lZCBCbG9iICovCiAJc2VhbGluZm9zaXplID0gTE9BRDMyKHRiLT5kYXRhLCBUUE1fREFUQV9PRkZTRVQgKyBzaXplb2YodWludDMyX3QpKTsKQEAgLTU5MSw2ICs1OTQsOCBAQAogCQltZW1jcHkoYmxvYiwgdGItPmRhdGEgKyBUUE1fREFUQV9PRkZTRVQsIHN0b3JlZHNpemUpOwogCQkqYmxvYmxlbiA9IHN0b3JlZHNpemU7CiAJfQorb3V0OgorCWtmcmVlKHRkKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMDI3LDYgKzEwMzIsNyBAQAogCXJldCA9IGRhdGFibG9iX3BhcnNlKGRhdGFibG9iLCBuZXdfcCwgbmV3X28pOwogCWlmIChyZXQgIT0gT3B0X3VwZGF0ZSkgewogCQlyZXQgPSAtRUlOVkFMOworCQlrZnJlZShuZXdfcCk7CiAJCWdvdG8gb3V0OwogCX0KIAkvKiBjb3B5IG9sZCBrZXkgdmFsdWVzLCBhbmQgcmVzZWFsIHdpdGggbmV3IHBjcnMgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvdHJ1c3RlZF9kZWZpbmVkLmggYi9zZWN1cml0eS9rZXlzL3RydXN0ZWQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2VjdXJpdHkva2V5cy90cnVzdGVkX2RlZmluZWQuaApyZW5hbWUgdG8gc2VjdXJpdHkva2V5cy90cnVzdGVkLmgKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jCmluZGV4IGU5YWEwNzkuLjAyODA3ZmIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMKKysrIGIvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYwpAQCAtMzUsNyArMzUsNiBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChrZXlfdHlwZV91c2VyKTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKICAqIGluc3RhbnRpYXRlIGEgdXNlciBkZWZpbmVkIGtleQogICovCkBAIC02NSwxMiArNjQsMTAgQEAKIAogZXJyb3I6CiAJcmV0dXJuIHJldDsKLQotfSAvKiBlbmQgdXNlcl9pbnN0YW50aWF0ZSgpICovCit9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKHVzZXJfaW5zdGFudGlhdGUpOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgogICogZGlzcG9zZSBvZiB0aGUgb2xkIGRhdGEgZnJvbSBhbiB1cGRhdGVkIHVzZXIgZGVmaW5lZCBrZXkKICAqLwpAQCAtODEsMTAgKzc4LDggQEAKIAl1cGF5bG9hZCA9IGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkLCByY3UpOwogCiAJa2ZyZWUodXBheWxvYWQpOworfQogCi19IC8qIGVuZCB1c2VyX3VwZGF0ZV9yY3VfZGlzcG9zYWwoKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgogICogdXBkYXRlIGEgdXNlciBkZWZpbmVkIGtleQogICogLSB0aGUga2V5J3Mgc2VtYXBob3JlIGlzIHdyaXRlLWxvY2tlZApAQCAtMTIzLDI0ICsxMTgsMjAgQEAKIAogZXJyb3I6CiAJcmV0dXJuIHJldDsKLQotfSAvKiBlbmQgdXNlcl91cGRhdGUoKSAqLworfQogCiBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX3VwZGF0ZSk7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiBtYXRjaCB1c2VycyBvbiB0aGVpciBuYW1lCiAgKi8KIGludCB1c2VyX21hdGNoKGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgY29uc3Qgdm9pZCAqZGVzY3JpcHRpb24pCiB7CiAJcmV0dXJuIHN0cmNtcChrZXktPmRlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbikgPT0gMDsKLQotfSAvKiBlbmQgdXNlcl9tYXRjaCgpICovCit9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKHVzZXJfbWF0Y2gpOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgogICogZGlzcG9zZSBvZiB0aGUgbGlua3MgZnJvbSBhIHJldm9rZWQga2V5cmluZwogICogLSBjYWxsZWQgd2l0aCB0aGUga2V5IHNlbSB3cml0ZS1sb2NrZWQKQEAgLTE1NiwxMiArMTQ3LDEwIEBACiAJCXJjdV9hc3NpZ25fcG9pbnRlcihrZXktPnBheWxvYWQuZGF0YSwgTlVMTCk7CiAJCWNhbGxfcmN1KCZ1cGF5bG9hZC0+cmN1LCB1c2VyX3VwZGF0ZV9yY3VfZGlzcG9zYWwpOwogCX0KLQotfSAvKiBlbmQgdXNlcl9yZXZva2UoKSAqLworfQogCiBFWFBPUlRfU1lNQk9MKHVzZXJfcmV2b2tlKTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKICAqIGRpc3Bvc2Ugb2YgdGhlIGRhdGEgZGFuZ2xpbmcgZnJvbSB0aGUgY29ycHNlIG9mIGEgdXNlciBrZXkKICAqLwpAQCAtMTcwLDEyICsxNTksMTAgQEAKIAlzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQgPSBrZXktPnBheWxvYWQuZGF0YTsKIAogCWtmcmVlKHVwYXlsb2FkKTsKLQotfSAvKiBlbmQgdXNlcl9kZXN0cm95KCkgKi8KK30KIAogRVhQT1JUX1NZTUJPTF9HUEwodXNlcl9kZXN0cm95KTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKICAqIGRlc2NyaWJlIHRoZSB1c2VyIGtleQogICovCkBAIC0xODQsMTIgKzE3MSwxMCBAQAogCXNlcV9wdXRzKG0sIGtleS0+ZGVzY3JpcHRpb24pOwogCiAJc2VxX3ByaW50ZihtLCAiOiAldSIsIGtleS0+ZGF0YWxlbik7Ci0KLX0gLyogZW5kIHVzZXJfZGVzY3JpYmUoKSAqLworfQogCiBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2Rlc2NyaWJlKTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKICAqIHJlYWQgdGhlIGtleSBkYXRhCiAgKiAtIHRoZSBrZXkncyBzZW1hcGhvcmUgaXMgcmVhZC1sb2NrZWQKQEAgLTIxMyw3ICsxOTgsNiBAQAogCX0KIAogCXJldHVybiByZXQ7Ci0KLX0gLyogZW5kIHVzZXJfcmVhZCgpICovCit9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKHVzZXJfcmVhZCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCA3MzllNDAzLi43YjczMDhhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTE1NCwxMCArMTU0LDkgQEAKIAkJCQkgICAgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKIH0KIAotaW50IHNlY3VyaXR5X2NhcGFibGUoaW50IGNhcCkKK2ludCBzZWN1cml0eV9jYXBhYmxlKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBpbnQgY2FwKQogewotCXJldHVybiBzZWN1cml0eV9vcHMtPmNhcGFibGUoY3VycmVudCwgY3VycmVudF9jcmVkKCksIGNhcCwKLQkJCQkgICAgIFNFQ1VSSVRZX0NBUF9BVURJVCk7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+Y2FwYWJsZShjdXJyZW50LCBjcmVkLCBjYXAsIFNFQ1VSSVRZX0NBUF9BVURJVCk7CiB9CiAKIGludCBzZWN1cml0eV9yZWFsX2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjYXApCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggZTI3NmViNC4uYzhkNjk5MiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMzE5OCw3ICszMTk4LDExIEBACiB7CiAJc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjID0gY3JlZC0+c2VjdXJpdHk7CiAKLQlCVUdfT04oKHVuc2lnbmVkIGxvbmcpIGNyZWQtPnNlY3VyaXR5IDwgUEFHRV9TSVpFKTsKKwkvKgorCSAqIGNyZWQtPnNlY3VyaXR5ID09IE5VTEwgaWYgc2VjdXJpdHlfY3JlZF9hbGxvY19ibGFuaygpIG9yCisJICogc2VjdXJpdHlfcHJlcGFyZV9jcmVkcygpIHJldHVybmVkIGFuIGVycm9yLgorCSAqLworCUJVR19PTihjcmVkLT5zZWN1cml0eSAmJiAodW5zaWduZWQgbG9uZykgY3JlZC0+c2VjdXJpdHkgPCBQQUdFX1NJWkUpOwogCWNyZWQtPnNlY3VyaXR5ID0gKHZvaWQgKikgMHg3VUw7CiAJa2ZyZWUodHNlYyk7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbmRpdGlvbmFsLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbmRpdGlvbmFsLmMKaW5kZXggYzNmODQ1Yy4uYTUzMzczMiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9jb25kaXRpb25hbC5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvY29uZGl0aW9uYWwuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAJcC0+Ym9vbF92YWxfdG9fc3RydWN0ID0gKHN0cnVjdCBjb25kX2Jvb2xfZGF0dW0gKiopCiAJCWttYWxsb2MocC0+cF9ib29scy5ucHJpbSAqIHNpemVvZihzdHJ1Y3QgY29uZF9ib29sX2RhdHVtICopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXAtPmJvb2xfdmFsX3RvX3N0cnVjdCkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVOT01FTTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCmluZGV4IGJlOWRlMzguLjU3MzYzNTYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKQEAgLTUwMSw4ICs1MDEsOCBAQAogCWlmIChyYykKIAkJZ290byBvdXQ7CiAKLQlyYyA9IC1FTk9NRU07Ci0JaWYgKGNvbmRfaW5pdF9ib29sX2luZGV4ZXMocCkpCisJcmMgPSBjb25kX2luaXRfYm9vbF9pbmRleGVzKHApOworCWlmIChyYykKIAkJZ290byBvdXQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgU1lNX05VTTsgaSsrKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vYWFjaS5jIGIvc291bmQvYXJtL2FhY2kuYwppbmRleCA5MWFjYzlhLi43YzFmYzY0IDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vYWFjaS5jCisrKyBiL3NvdW5kL2FybS9hYWNpLmMKQEAgLTMwLDYgKzMwLDggQEAKIAogI2RlZmluZSBEUklWRVJfTkFNRQkiYWFjaS1wbDA0MSIKIAorI2RlZmluZSBGUkFNRV9QRVJJT0RfVVMJMjEKKwogLyoKICAqIFBNIHN1cHBvcnQgaXMgbm90IGNvbXBsZXRlLiAgVHVybiBpdCBvZmYuCiAgKi8KQEAgLTQ4LDcgKzUwLDExIEBACiAJaWYgKHYgJiBTTEZSXzFSWFYpCiAJCXJlYWRsKGFhY2ktPmJhc2UgKyBBQUNJX1NMMVJYKTsKIAotCXdyaXRlbChtYWluY3IsIGFhY2ktPmJhc2UgKyBBQUNJX01BSU5DUik7CisJaWYgKG1haW5jciAhPSByZWFkbChhYWNpLT5iYXNlICsgQUFDSV9NQUlOQ1IpKSB7CisJCXdyaXRlbChtYWluY3IsIGFhY2ktPmJhc2UgKyBBQUNJX01BSU5DUik7CisJCXJlYWRsKGFhY2ktPmJhc2UgKyBBQUNJX01BSU5DUik7CisJCXVkZWxheSgxKTsKKwl9CiB9CiAKIC8qCkBAIC02NCw4ICs3MCw4IEBACiAJCQkgICAgdW5zaWduZWQgc2hvcnQgdmFsKQogewogCXN0cnVjdCBhYWNpICphYWNpID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOworCWludCB0aW1lb3V0OwogCXUzMiB2OwotCWludCB0aW1lb3V0ID0gNTAwMDsKIAogCWlmIChhYzk3LT5udW0gPj0gNCkKIAkJcmV0dXJuOwpAQCAtODEsMTQgKzg3LDE3IEBACiAJd3JpdGVsKHZhbCA8PCA0LCBhYWNpLT5iYXNlICsgQUFDSV9TTDJUWCk7CiAJd3JpdGVsKHJlZyA8PCAxMiwgYWFjaS0+YmFzZSArIEFBQ0lfU0wxVFgpOwogCi0JLyoKLQkgKiBXYWl0IGZvciB0aGUgdHJhbnNtaXNzaW9uIG9mIGJvdGggc2xvdHMgdG8gY29tcGxldGUuCi0JICovCisJLyogSW5pdGlhbGx5LCB3YWl0IG9uZSBmcmFtZSBwZXJpb2QgKi8KKwl1ZGVsYXkoRlJBTUVfUEVSSU9EX1VTKTsKKworCS8qIEFuZCB0aGVuIHdhaXQgYW4gYWRkaXRpb25hbCBlaWdodCBmcmFtZSBwZXJpb2RzIGZvciBpdCB0byBiZSBzZW50ICovCisJdGltZW91dCA9IEZSQU1FX1BFUklPRF9VUyAqIDg7CiAJZG8geworCQl1ZGVsYXkoMSk7CiAJCXYgPSByZWFkbChhYWNpLT5iYXNlICsgQUFDSV9TTEZSKTsKIAl9IHdoaWxlICgodiAmIChTTEZSXzFUWEJ8U0xGUl8yVFhCKSkgJiYgLS10aW1lb3V0KTsKIAotCWlmICghdGltZW91dCkKKwlpZiAodiAmIChTTEZSXzFUWEJ8U0xGUl8yVFhCKSkKIAkJZGV2X2VycigmYWFjaS0+ZGV2LT5kZXYsCiAJCQkidGltZW91dCB3YWl0aW5nIGZvciB3cml0ZSB0byBjb21wbGV0ZVxuIik7CiAKQEAgLTEwMSw5ICsxMTAsOCBAQAogc3RhdGljIHVuc2lnbmVkIHNob3J0IGFhY2lfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnKQogewogCXN0cnVjdCBhYWNpICphYWNpID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOworCWludCB0aW1lb3V0LCByZXRyaWVzID0gMTA7CiAJdTMyIHY7Ci0JaW50IHRpbWVvdXQgPSA1MDAwOwotCWludCByZXRyaWVzID0gMTA7CiAKIAlpZiAoYWM5Ny0+bnVtID49IDQpCiAJCXJldHVybiB+MDsKQEAgLTExNywzNSArMTI1LDM0IEBACiAJICovCiAJd3JpdGVsKChyZWcgPDwgMTIpIHwgKDEgPDwgMTkpLCBhYWNpLT5iYXNlICsgQUFDSV9TTDFUWCk7CiAKLQkvKgotCSAqIFdhaXQgZm9yIHRoZSB0cmFuc21pc3Npb24gdG8gY29tcGxldGUuCi0JICovCisJLyogSW5pdGlhbGx5LCB3YWl0IG9uZSBmcmFtZSBwZXJpb2QgKi8KKwl1ZGVsYXkoRlJBTUVfUEVSSU9EX1VTKTsKKworCS8qIEFuZCB0aGVuIHdhaXQgYW4gYWRkaXRpb25hbCBlaWdodCBmcmFtZSBwZXJpb2RzIGZvciBpdCB0byBiZSBzZW50ICovCisJdGltZW91dCA9IEZSQU1FX1BFUklPRF9VUyAqIDg7CiAJZG8geworCQl1ZGVsYXkoMSk7CiAJCXYgPSByZWFkbChhYWNpLT5iYXNlICsgQUFDSV9TTEZSKTsKIAl9IHdoaWxlICgodiAmIFNMRlJfMVRYQikgJiYgLS10aW1lb3V0KTsKIAotCWlmICghdGltZW91dCkgeworCWlmICh2ICYgU0xGUl8xVFhCKSB7CiAJCWRldl9lcnIoJmFhY2ktPmRldi0+ZGV2LCAidGltZW91dCBvbiBzbG90IDEgVFggYnVzeVxuIik7CiAJCXYgPSB+MDsKIAkJZ290byBvdXQ7CiAJfQogCi0JLyoKLQkgKiBHaXZlIHRoZSBBQyc5NyBjb2RlYyBtb3JlIHRoYW4gZW5vdWdoIHRpbWUKLQkgKiB0byByZXNwb25kLiAoNDJ1cyA9IH4yIGZyYW1lcyBhdCA0OGtIei4pCi0JICovCi0JdWRlbGF5KDQyKTsKKwkvKiBOb3cgd2FpdCBmb3IgdGhlIHJlc3BvbnNlIGZyYW1lICovCisJdWRlbGF5KEZSQU1FX1BFUklPRF9VUyk7CiAKLQkvKgotCSAqIFdhaXQgZm9yIHNsb3QgMiB0byBpbmRpY2F0ZSBkYXRhLgotCSAqLwotCXRpbWVvdXQgPSA1MDAwOworCS8qIEFuZCB0aGVuIHdhaXQgYW4gYWRkaXRpb25hbCBlaWdodCBmcmFtZSBwZXJpb2RzIGZvciBkYXRhICovCisJdGltZW91dCA9IEZSQU1FX1BFUklPRF9VUyAqIDg7CiAJZG8geworCQl1ZGVsYXkoMSk7CiAJCWNvbmRfcmVzY2hlZCgpOwogCQl2ID0gcmVhZGwoYWFjaS0+YmFzZSArIEFBQ0lfU0xGUikgJiAoU0xGUl8xUlhWfFNMRlJfMlJYVik7CiAJfSB3aGlsZSAoKHYgIT0gKFNMRlJfMVJYVnxTTEZSXzJSWFYpKSAmJiAtLXRpbWVvdXQpOwogCi0JaWYgKCF0aW1lb3V0KSB7CisJaWYgKHYgIT0gKFNMRlJfMVJYVnxTTEZSXzJSWFYpKSB7CiAJCWRldl9lcnIoJmFhY2ktPmRldi0+ZGV2LCAidGltZW91dCBvbiBSWCB2YWxpZFxuIik7CiAJCXYgPSB+MDsKIAkJZ290byBvdXQ7CkBAIC0xNzksNiArMTg2LDcgQEAKIAlpbnQgdGltZW91dCA9IDUwMDA7CiAKIAlkbyB7CisJCXVkZWxheSgxKTsKIAkJdmFsID0gcmVhZGwoYWFjaXJ1bi0+YmFzZSArIEFBQ0lfU1IpOwogCX0gd2hpbGUgKHZhbCAmIG1hc2sgJiYgdGltZW91dC0tKTsKIH0KQEAgLTg3NCw3ICs4ODIsNyBAQAogCSAqIEdpdmUgdGhlIEFDJzk3IGNvZGVjIG1vcmUgdGhhbiBlbm91Z2ggdGltZQogCSAqIHRvIHdha2UgdXAuICg0MnVzID0gfjIgZnJhbWVzIGF0IDQ4a0h6LikKIAkgKi8KLQl1ZGVsYXkoNDIpOworCXVkZWxheShGUkFNRV9QRVJJT0RfVVMgKiAyKTsKIAogCXJldCA9IHNuZF9hYzk3X2J1cyhhYWNpLT5jYXJkLCAwLCAmYWFjaV9idXNfb3BzLCBhYWNpLCAmYWM5N19idXMpOwogCWlmIChyZXQpCkBAIC05ODksNiArOTk3LDggQEAKIAkgKiBkaXNhYmxpbmcgdGhlIGNoYW5uZWwgZG9lc24ndCBjbGVhciB0aGUgRklGTy4KIAkgKi8KIAl3cml0ZWwoYWFjaS0+bWFpbmNyICYgfk1BSU5DUl9JRSwgYWFjaS0+YmFzZSArIEFBQ0lfTUFJTkNSKTsKKwlyZWFkbChhYWNpLT5iYXNlICsgQUFDSV9NQUlOQ1IpOworCXVkZWxheSgxKTsKIAl3cml0ZWwoYWFjaS0+bWFpbmNyLCBhYWNpLT5iYXNlICsgQUFDSV9NQUlOQ1IpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUgYi90b29scy9wZXJmL01ha2VmaWxlCmluZGV4IDJiNTM4N2QuLjcxNDFjNDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUKKysrIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQpAQCAtMjA0LDEzICsyMDQsMTEgQEAKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XaW5pdC1zZWxmCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3BhY2tlZAogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdyZWR1bmRhbnQtZGVjbHMKLUVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xc3RhY2stcHJvdGVjdG9yCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3N0cmljdC1hbGlhc2luZz0zCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3N3aXRjaC1kZWZhdWx0CiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3N3aXRjaC1lbnVtCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV25vLXN5c3RlbS1oZWFkZXJzCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3VuZGVmCi1FWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3ZvbGF0aWxlLXJlZ2lzdGVyLXZhcgogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVd3cml0ZS1zdHJpbmdzCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV2JhZC1mdW5jdGlvbi1jYXN0CiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV21pc3NpbmctZGVjbGFyYXRpb25zCkBAIC0yOTQsNiArMjkyLDEzIEBACiAJQ0ZMQUdTIDo9ICQoQ0ZMQUdTKSAtZnN0YWNrLXByb3RlY3Rvci1hbGwKIGVuZGlmCiAKK2lmZXEgKCQoY2FsbCB0cnktY2MsJChTT1VSQ0VfSEVMTE8pLC1XZXJyb3IgLVdzdGFjay1wcm90ZWN0b3IpLHkpCisgICAgICAgQ0ZMQUdTIDo9ICQoQ0ZMQUdTKSAtV3N0YWNrLXByb3RlY3RvcgorZW5kaWYKKworaWZlcSAoJChjYWxsIHRyeS1jYywkKFNPVVJDRV9IRUxMTyksLVdlcnJvciAtV3ZvbGF0aWxlLXJlZ2lzdGVyLXZhcikseSkKKyAgICAgICBDRkxBR1MgOj0gJChDRkxBR1MpIC1Xdm9sYXRpbGUtcmVnaXN0ZXItdmFyCitlbmRpZgogCiAjIyMgLS0tIEVORCBDT05GSUdVUkFUSU9OIFNFQ1RJT04gLS0tCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMKaW5kZXggYzA1NmNkYy4uODg3OTQ2MyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMKQEAgLTIxMiw3ICsyMTIsNyBAQAogCQkJY29udGludWU7CiAKIAkJb2Zmc2V0ID0gc3RhcnQgKyBpOwotCQlzcHJpbnRmKGNtZCwgImFkZHIybGluZSAtZSAlcyAlMDE2bGx4IiwgZmlsZW5hbWUsIG9mZnNldCk7CisJCXNwcmludGYoY21kLCAiYWRkcjJsaW5lIC1lICVzICUwMTYiIFBSSXg2NCwgZmlsZW5hbWUsIG9mZnNldCk7CiAJCWZwID0gcG9wZW4oY21kLCAiciIpOwogCQlpZiAoIWZwKQogCQkJY29udGludWU7CkBAIC0yNzAsOSArMjcwLDkgQEAKIAogCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgbGVuOyArK29mZnNldCkKIAkJaWYgKGgtPmlwW29mZnNldF0gIT0gMCkKLQkJCXByaW50ZigiJSpMeDogJUx1XG4iLCBCSVRTX1BFUl9MT05HIC8gMiwKKwkJCXByaW50ZigiJSoiIFBSSXg2NCAiOiAlIiBQUkl1NjQgIlxuIiwgQklUU19QRVJfTE9ORyAvIDIsCiAJCQkgICAgICAgc3ltLT5zdGFydCArIG9mZnNldCwgaC0+aXBbb2Zmc2V0XSk7Ci0JcHJpbnRmKCIlKnM6ICVMdVxuIiwgQklUU19QRVJfTE9ORyAvIDIsICJoLT5zdW0iLCBoLT5zdW0pOworCXByaW50ZigiJSpzOiAlIiBQUkl1NjQgIlxuIiwgQklUU19QRVJfTE9ORyAvIDIsICJoLT5zdW0iLCBoLT5zdW0pOwogfQogCiBzdGF0aWMgaW50IGhpc3RfZW50cnlfX3R0eV9hbm5vdGF0ZShzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYwppbmRleCBkZWY3ZGRjLi5kOTcyNTZkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKQEAgLTM3MSwxMCArMzcxLDEwIEBACiAJCQlhZGRyID0gZGF0YS0+cHRyOwogCiAJCWlmIChzeW0gIT0gTlVMTCkKLQkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyslTHgiLCBzeW0tPm5hbWUsCisJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMrJSIgUFJJeDY0ICIiLCBzeW0tPm5hbWUsCiAJCQkJIGFkZHIgLSBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5zdGFydCkpOwogCQllbHNlCi0JCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJSNMeCIsIGFkZHIpOworCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUjIiBQUkl4NjQgIiIsIGFkZHIpOwogCQlwcmludGYoIiAlLTM0cyB8IiwgYnVmKTsKIAogCQlwcmludGYoIiAlOWxsdS8lLTVsdSB8ICU5bGx1LyUtNWx1IHwgJThsdSB8ICU4bHUgfCAlNi4zZiUlXG4iLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWxvY2suYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMKaW5kZXggYjljNmU1NC4uMmIzNmRlZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWxvY2suYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tbG9jay5jCkBAIC03ODIsOSArNzgyLDkgQEAKIAkJcHJfaW5mbygiJTEwdSAiLCBzdC0+bnJfYWNxdWlyZWQpOwogCQlwcl9pbmZvKCIlMTB1ICIsIHN0LT5ucl9jb250ZW5kZWQpOwogCi0JCXByX2luZm8oIiUxNWxsdSAiLCBzdC0+d2FpdF90aW1lX3RvdGFsKTsKLQkJcHJfaW5mbygiJTE1bGx1ICIsIHN0LT53YWl0X3RpbWVfbWF4KTsKLQkJcHJfaW5mbygiJTE1bGx1ICIsIHN0LT53YWl0X3RpbWVfbWluID09IFVMTE9OR19NQVggPworCQlwcl9pbmZvKCIlMTUiIFBSSXU2NCAiICIsIHN0LT53YWl0X3RpbWVfdG90YWwpOworCQlwcl9pbmZvKCIlMTUiIFBSSXU2NCAiICIsIHN0LT53YWl0X3RpbWVfbWF4KTsKKwkJcHJfaW5mbygiJTE1IiBQUkl1NjQgIiAiLCBzdC0+d2FpdF90aW1lX21pbiA9PSBVTExPTkdfTUFYID8KIAkJICAgICAgIDAgOiBzdC0+d2FpdF90aW1lX21pbik7CiAJCXByX2luZm8oIlxuIik7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCmluZGV4IGZjZDI5ZTguLjYwY2FjNmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKQEAgLTc1OSw4ICs3NTksOCBAQAogCQlwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfbWFjaGluZXMoc2Vzc2lvbiwgZXZlbnRfX3N5bnRoZXNpemVfZ3Vlc3Rfb3MpOwogCiAJaWYgKCFzeXN0ZW1fd2lkZSkKLQkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHRhcmdldF90aWQsIHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQsCi0JCQkJCSBzZXNzaW9uKTsKKwkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkX21hcCh0aHJlYWRzLCBwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50LAorCQkJCQkgICAgIHNlc3Npb24pOwogCWVsc2UKIAkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50LCBzZXNzaW9uKTsKIApAQCAtODE3LDcgKzgxNyw3IEBACiAJICogQXBwcm94aW1hdGUgUklQIGV2ZW50IHNpemU6IDI0IGJ5dGVzLgogCSAqLwogCWZwcmludGYoc3RkZXJyLAotCQkiWyBwZXJmIHJlY29yZDogQ2FwdHVyZWQgYW5kIHdyb3RlICUuM2YgTUIgJXMgKH4lbGxkIHNhbXBsZXMpIF1cbiIsCisJCSJbIHBlcmYgcmVjb3JkOiBDYXB0dXJlZCBhbmQgd3JvdGUgJS4zZiBNQiAlcyAofiUiIFBSSXU2NCAiIHNhbXBsZXMpIF1cbiIsCiAJCShkb3VibGUpYnl0ZXNfd3JpdHRlbiAvIDEwMjQuMCAvIDEwMjQuMCwKIAkJb3V0cHV0X25hbWUsCiAJCWJ5dGVzX3dyaXR0ZW4gLyAyNCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKaW5kZXggNzUxODNhNC4uYzI3ZTMxZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJCQkJCSAgIGV2ZW50LT5yZWFkLnZhbHVlKTsKIAl9CiAKLQlkdW1wX3ByaW50ZigiOiAlZCAlZCAlcyAlTHVcbiIsIGV2ZW50LT5yZWFkLnBpZCwgZXZlbnQtPnJlYWQudGlkLAorCWR1bXBfcHJpbnRmKCI6ICVkICVkICVzICUiIFBSSXU2NCAiXG4iLCBldmVudC0+cmVhZC5waWQsIGV2ZW50LT5yZWFkLnRpZCwKIAkJICAgIGF0dHIgPyBfX2V2ZW50X25hbWUoYXR0ci0+dHlwZSwgYXR0ci0+Y29uZmlnKSA6ICJGQUlMIiwKIAkJICAgIGV2ZW50LT5yZWFkLnZhbHVlKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwppbmRleCAyOWU3ZmZkLi4yOWFjYjg5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJfQogCXJ1bl9tZWFzdXJlbWVudF9vdmVyaGVhZCA9IG1pbl9kZWx0YTsKIAotCXByaW50ZigicnVuIG1lYXN1cmVtZW50IG92ZXJoZWFkOiAlTGQgbnNlY3NcbiIsIG1pbl9kZWx0YSk7CisJcHJpbnRmKCJydW4gbWVhc3VyZW1lbnQgb3ZlcmhlYWQ6ICUiIFBSSXU2NCAiIG5zZWNzXG4iLCBtaW5fZGVsdGEpOwogfQogCiBzdGF0aWMgdm9pZCBjYWxpYnJhdGVfc2xlZXBfbWVhc3VyZW1lbnRfb3ZlcmhlYWQodm9pZCkKQEAgLTIxMSw3ICsyMTEsNyBAQAogCW1pbl9kZWx0YSAtPSAxMDAwMDsKIAlzbGVlcF9tZWFzdXJlbWVudF9vdmVyaGVhZCA9IG1pbl9kZWx0YTsKIAotCXByaW50Zigic2xlZXAgbWVhc3VyZW1lbnQgb3ZlcmhlYWQ6ICVMZCBuc2Vjc1xuIiwgbWluX2RlbHRhKTsKKwlwcmludGYoInNsZWVwIG1lYXN1cmVtZW50IG92ZXJoZWFkOiAlIiBQUkl1NjQgIiBuc2Vjc1xuIiwgbWluX2RlbHRhKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzY2hlZF9hdG9tICoKQEAgLTYxNywxMyArNjE3LDEzIEBACiAJYnVybl9uc2VjcygxZTYpOwogCVQxID0gZ2V0X25zZWNzKCk7CiAKLQlwcmludGYoInRoZSBydW4gdGVzdCB0b29rICVMZCBuc2Vjc1xuIiwgVDEtVDApOworCXByaW50ZigidGhlIHJ1biB0ZXN0IHRvb2sgJSIgUFJJdTY0ICIgbnNlY3NcbiIsIFQxIC0gVDApOwogCiAJVDAgPSBnZXRfbnNlY3MoKTsKIAlzbGVlcF9uc2VjcygxZTYpOwogCVQxID0gZ2V0X25zZWNzKCk7CiAKLQlwcmludGYoInRoZSBzbGVlcCB0ZXN0IHRvb2sgJUxkIG5zZWNzXG4iLCBUMS1UMCk7CisJcHJpbnRmKCJ0aGUgc2xlZXAgdGVzdCB0b29rICUiIFBSSXU2NCAiIG5zZWNzXG4iLCBUMSAtIFQwKTsKIH0KIAogI2RlZmluZSBGSUxMX0ZJRUxEKHB0ciwgZmllbGQsIGV2ZW50LCBkYXRhKQlcCkBAIC04MTYsMTAgKzgxNiwxMCBAQAogCQlkZWx0YSA9IDA7CiAKIAlpZiAoZGVsdGEgPCAwKQotCQlkaWUoImhtLCBkZWx0YTogJUxkIDwgMCA/XG4iLCBkZWx0YSk7CisJCWRpZSgiaG0sIGRlbHRhOiAlIiBQUkl1NjQgIiA8IDAgP1xuIiwgZGVsdGEpOwogCiAJaWYgKHZlcmJvc2UpIHsKLQkJcHJpbnRmKCIgLi4uIHN3aXRjaCBmcm9tICVzLyVkIHRvICVzLyVkIFtyYW4gJUxkIG5zZWNzXVxuIiwKKwkJcHJpbnRmKCIgLi4uIHN3aXRjaCBmcm9tICVzLyVkIHRvICVzLyVkIFtyYW4gJSIgUFJJdTY0ICIgbnNlY3NdXG4iLAogCQkJc3dpdGNoX2V2ZW50LT5wcmV2X2NvbW0sIHN3aXRjaF9ldmVudC0+cHJldl9waWQsCiAJCQlzd2l0Y2hfZXZlbnQtPm5leHRfY29tbSwgc3dpdGNoX2V2ZW50LT5uZXh0X3BpZCwKIAkJCWRlbHRhKTsKQEAgLTEwNDgsNyArMTA0OCw3IEBACiAJCWRlbHRhID0gMDsKIAogCWlmIChkZWx0YSA8IDApCi0JCWRpZSgiaG0sIGRlbHRhOiAlTGQgPCAwID9cbiIsIGRlbHRhKTsKKwkJZGllKCJobSwgZGVsdGE6ICUiIFBSSXU2NCAiIDwgMCA/XG4iLCBkZWx0YSk7CiAKIAogCXNjaGVkX291dCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBzd2l0Y2hfZXZlbnQtPnByZXZfcGlkKTsKQEAgLTEyMjEsNyArMTIyMSw3IEBACiAKIAlhdmcgPSB3b3JrX2xpc3QtPnRvdGFsX2xhdCAvIHdvcmtfbGlzdC0+bmJfYXRvbXM7CiAKLQlwcmludGYoInwlMTEuM2YgbXMgfCU5bGx1IHwgYXZnOiU5LjNmIG1zIHwgbWF4OiU5LjNmIG1zIHwgbWF4IGF0OiAlOS42ZiBzXG4iLAorCXByaW50ZigifCUxMS4zZiBtcyB8JTkiIFBSSXU2NCAiIHwgYXZnOiU5LjNmIG1zIHwgbWF4OiU5LjNmIG1zIHwgbWF4IGF0OiAlOS42ZiBzXG4iLAogCSAgICAgIChkb3VibGUpd29ya19saXN0LT50b3RhbF9ydW50aW1lIC8gMWU2LAogCQkgd29ya19saXN0LT5uYl9hdG9tcywgKGRvdWJsZSlhdmcgLyAxZTYsCiAJCSAoZG91YmxlKXdvcmtfbGlzdC0+bWF4X2xhdCAvIDFlNiwKQEAgLTE0MjMsNyArMTQyMyw3IEBACiAJCWRlbHRhID0gMDsKIAogCWlmIChkZWx0YSA8IDApCi0JCWRpZSgiaG0sIGRlbHRhOiAlTGQgPCAwID9cbiIsIGRlbHRhKTsKKwkJZGllKCJobSwgZGVsdGE6ICUiIFBSSXU2NCAiIDwgMCA/XG4iLCBkZWx0YSk7CiAKIAogCXNjaGVkX291dCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBzd2l0Y2hfZXZlbnQtPnByZXZfcGlkKTsKQEAgLTE3MTMsNyArMTcxMyw3IEBACiAJfQogCiAJcHJpbnRmKCIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCXByaW50ZigiICBUT1RBTDogICAgICAgICAgICAgICAgfCUxMS4zZiBtcyB8JTlMZCB8XG4iLAorCXByaW50ZigiICBUT1RBTDogICAgICAgICAgICAgICAgfCUxMS4zZiBtcyB8JTkiIFBSSXU2NCAiIHxcbiIsCiAJCShkb3VibGUpYWxsX3J1bnRpbWUvMWU2LCBhbGxfY291bnQpOwogCiAJcHJpbnRmKCIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY3JpcHQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY3JpcHQuYwppbmRleCAxNTBhNjA2Li5iNzY2YzJhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc2NyaXB0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjcmlwdC5jCkBAIC03Nyw4ICs3Nyw4IEBACiAJaWYgKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSB7CiAJCWlmIChkZWJ1Z19tb2RlKSB7CiAJCQlpZiAoc2FtcGxlLT50aW1lIDwgbGFzdF90aW1lc3RhbXApIHsKLQkJCQlwcl9lcnIoIlNhbXBsZXMgbWlzb3JkZXJlZCwgcHJldmlvdXM6ICVsbHUgIgotCQkJCQkidGhpczogJWxsdVxuIiwgbGFzdF90aW1lc3RhbXAsCisJCQkJcHJfZXJyKCJTYW1wbGVzIG1pc29yZGVyZWQsIHByZXZpb3VzOiAlIiBQUkl1NjQKKwkJCQkJIiB0aGlzOiAlIiBQUkl1NjQgIlxuIiwgbGFzdF90aW1lc3RhbXAsCiAJCQkJCXNhbXBsZS0+dGltZSk7CiAJCQkJbnJfdW5vcmRlcmVkKys7CiAJCQl9CkBAIC0xMjYsNyArMTI2LDcgQEAKIAlyZXQgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOwogCiAJaWYgKGRlYnVnX21vZGUpCi0JCXByX2VycigiTWlzb3JkZXJlZCB0aW1lc3RhbXBzOiAlbGx1XG4iLCBucl91bm9yZGVyZWQpOworCQlwcl9lcnIoIk1pc29yZGVyZWQgdGltZXN0YW1wczogJSIgUFJJdTY0ICJcbiIsIG5yX3Vub3JkZXJlZCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKaW5kZXggMGZmMTFkOS4uYTQ4MmExOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCkBAIC0yMDYsOCArMjA2LDggQEAKIAkJdXBkYXRlX3N0YXRzKCZwcy0+cmVzX3N0YXRzW2ldLCBjb3VudFtpXSk7CiAKIAlpZiAodmVyYm9zZSkgewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlTGQgJUxkICVMZFxuIiwgZXZlbnRfbmFtZShjb3VudGVyKSwKLQkJCQljb3VudFswXSwgY291bnRbMV0sIGNvdW50WzJdKTsKKwkJZnByaW50ZihzdGRlcnIsICIlczogJSIgUFJJdTY0ICIgJSIgUFJJdTY0ICIgJSIgUFJJdTY0ICJcbiIsCisJCQlldmVudF9uYW1lKGNvdW50ZXIpLCBjb3VudFswXSwgY291bnRbMV0sIGNvdW50WzJdKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMKaW5kZXggZWQ1Njk2MS4uNWRjZGJhNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAkJCQlpZiAobGxhYnMoc2tldykgPCBwYWdlX3NpemUpCiAJCQkJCWNvbnRpbnVlOwogCi0JCQkJcHJfZGVidWcoIiUjTHg6IGRpZmYgZW5kIGFkZHIgZm9yICVzIHY6ICUjTHggazogJSNMeFxuIiwKKwkJCQlwcl9kZWJ1ZygiJSMiIFBSSXg2NCAiOiBkaWZmIGVuZCBhZGRyIGZvciAlcyB2OiAlIyIgUFJJeDY0ICIgazogJSMiIFBSSXg2NCAiXG4iLAogCQkJCQkgc3ltLT5zdGFydCwgc3ltLT5uYW1lLCBzeW0tPmVuZCwgcGFpci0+ZW5kKTsKIAkJCX0gZWxzZSB7CiAJCQkJc3RydWN0IHJiX25vZGUgKm5uZDsKQEAgLTE2OCwxMSArMTY4LDExIEBACiAJCQkJCWdvdG8gZGV0b3VyOwogCQkJCX0KIAotCQkJCXByX2RlYnVnKCIlI0x4OiBkaWZmIG5hbWUgdjogJXMgazogJXNcbiIsCisJCQkJcHJfZGVidWcoIiUjIiBQUkl4NjQgIjogZGlmZiBuYW1lIHY6ICVzIGs6ICVzXG4iLAogCQkJCQkgc3ltLT5zdGFydCwgc3ltLT5uYW1lLCBwYWlyLT5uYW1lKTsKIAkJCX0KIAkJfSBlbHNlCi0JCQlwcl9kZWJ1ZygiJSNMeDogJXMgbm90IG9uIGthbGxzeW1zXG4iLCBzeW0tPnN0YXJ0LCBzeW0tPm5hbWUpOworCQkJcHJfZGVidWcoIiUjIiBQUkl4NjQgIjogJXMgbm90IG9uIGthbGxzeW1zXG4iLCBzeW0tPnN0YXJ0LCBzeW0tPm5hbWUpOwogCiAJCWVyciA9IC0xOwogCX0KQEAgLTIxMSwxMCArMjExLDEwIEBACiAKIAkJaWYgKHBhaXItPnN0YXJ0ID09IHBvcy0+c3RhcnQpIHsKIAkJCXBhaXItPnByaXYgPSAxOwotCQkJcHJfaW5mbygiICVMeC0lTHggJUx4ICVzIGluIGthbGxzeW1zIGFzIiwKKwkJCXByX2luZm8oIiAlIiBQUkl4NjQgIi0lIiBQUkl4NjQgIiAlIiBQUkl4NjQgIiAlcyBpbiBrYWxsc3ltcyBhcyIsCiAJCQkJcG9zLT5zdGFydCwgcG9zLT5lbmQsIHBvcy0+cGdvZmYsIHBvcy0+ZHNvLT5uYW1lKTsKIAkJCWlmIChwb3MtPnBnb2ZmICE9IHBhaXItPnBnb2ZmIHx8IHBvcy0+ZW5kICE9IHBhaXItPmVuZCkKLQkJCQlwcl9pbmZvKCI6IFxuKiVMeC0lTHggJUx4IiwKKwkJCQlwcl9pbmZvKCI6IFxuKiUiIFBSSXg2NCAiLSUiIFBSSXg2NCAiICUiIFBSSXg2NCAiIiwKIAkJCQkJcGFpci0+c3RhcnQsIHBhaXItPmVuZCwgcGFpci0+cGdvZmYpOwogCQkJcHJfaW5mbygiICVzXG4iLCBwYWlyLT5kc28tPm5hbWUpOwogCQkJcGFpci0+cHJpdiA9IDE7CkBAIC0zMDcsNyArMzA3LDcgQEAKIAl9CiAKIAlpZiAoZXZzZWwtPmNvdW50cy0+Y3B1WzBdLnZhbCAhPSBucl9vcGVuX2NhbGxzKSB7Ci0JCXByX2RlYnVnKCJwZXJmX2V2c2VsX19yZWFkX29uX2NwdTogZXhwZWN0ZWQgdG8gaW50ZXJjZXB0ICVkIGNhbGxzLCBnb3QgJUxkXG4iLAorCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fcmVhZF9vbl9jcHU6IGV4cGVjdGVkIHRvIGludGVyY2VwdCAlZCBjYWxscywgZ290ICUiIFBSSXU2NCAiXG4iLAogCQkJIG5yX29wZW5fY2FsbHMsIGV2c2VsLT5jb3VudHMtPmNwdVswXS52YWwpOwogCQlnb3RvIG91dF9jbG9zZV9mZDsKIAl9CkBAIC0zMzIsOCArMzMyLDcgQEAKIAlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWw7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOwogCXVuc2lnbmVkIGludCBucl9vcGVuX2NhbGxzID0gMTExLCBpOwotCWNwdV9zZXRfdCAqY3B1X3NldDsKLQlzaXplX3QgY3B1X3NldF9zaXplOworCWNwdV9zZXRfdCBjcHVfc2V0OwogCWludCBpZCA9IHRyYWNlX2V2ZW50X19pZCgic3lzX2VudGVyX29wZW4iKTsKIAogCWlmIChpZCA8IDApIHsKQEAgLTM1MywxMyArMzUyLDggQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWNwdV9zZXQgPSBDUFVfQUxMT0MoY3B1cy0+bnIpOwogCi0JaWYgKGNwdV9zZXQgPT0gTlVMTCkKLQkJZ290byBvdXRfdGhyZWFkX21hcF9kZWxldGU7Ci0KLQljcHVfc2V0X3NpemUgPSBDUFVfQUxMT0NfU0laRShjcHVzLT5ucik7Ci0JQ1BVX1pFUk9fUyhjcHVfc2V0X3NpemUsIGNwdV9zZXQpOworCUNQVV9aRVJPKCZjcHVfc2V0KTsKIAogCW1lbXNldCgmYXR0ciwgMCwgc2l6ZW9mKGF0dHIpKTsKIAlhdHRyLnR5cGUgPSBQRVJGX1RZUEVfVFJBQ0VQT0lOVDsKQEAgLTM2Nyw3ICszNjEsNyBAQAogCWV2c2VsID0gcGVyZl9ldnNlbF9fbmV3KCZhdHRyLCAwKTsKIAlpZiAoZXZzZWwgPT0gTlVMTCkgewogCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fbmV3XG4iKTsKLQkJZ290byBvdXRfY3B1X2ZyZWU7CisJCWdvdG8gb3V0X3RocmVhZF9tYXBfZGVsZXRlOwogCX0KIAogCWlmIChwZXJmX2V2c2VsX19vcGVuKGV2c2VsLCBjcHVzLCB0aHJlYWRzKSA8IDApIHsKQEAgLTM3OSwxNCArMzczLDI5IEBACiAKIAlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdXMtPm5yOyArK2NwdSkgewogCQl1bnNpZ25lZCBpbnQgbmNhbGxzID0gbnJfb3Blbl9jYWxscyArIGNwdTsKKwkJLyoKKwkJICogWFhYIGV2ZW50dWFsbHkgbGlmdCB0aGlzIHJlc3RyaWN0aW9uIGluIGEgd2F5IHRoYXQKKwkJICoga2VlcHMgcGVyZiBidWlsZGluZyBvbiBvbGRlciBnbGliYyBpbnN0YWxsYXRpb25zCisJCSAqIHdpdGhvdXQgQ1BVX0FMTE9DLiAxMDI0IGNwdXMgaW4gMjAxMCBzdGlsbCBzZWVtcworCQkgKiBhIHJlYXNvbmFibGUgdXBwZXIgbGltaXQgdGhvIDotKQorCQkgKi8KKwkJaWYgKGNwdXMtPm1hcFtjcHVdID49IENQVV9TRVRTSVpFKSB7CisJCQlwcl9kZWJ1ZygiSWdub3JpbmcgQ1BVICVkXG4iLCBjcHVzLT5tYXBbY3B1XSk7CisJCQljb250aW51ZTsKKwkJfQogCi0JCUNQVV9TRVQoY3B1LCBjcHVfc2V0KTsKLQkJc2NoZWRfc2V0YWZmaW5pdHkoMCwgY3B1X3NldF9zaXplLCBjcHVfc2V0KTsKKwkJQ1BVX1NFVChjcHVzLT5tYXBbY3B1XSwgJmNwdV9zZXQpOworCQlpZiAoc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGNwdV9zZXQpLCAmY3B1X3NldCkgPCAwKSB7CisJCQlwcl9kZWJ1Zygic2NoZWRfc2V0YWZmaW5pdHkoKSBmYWlsZWQgb24gQ1BVICVkOiAlcyAiLAorCQkJCSBjcHVzLT5tYXBbY3B1XSwKKwkJCQkgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWdvdG8gb3V0X2Nsb3NlX2ZkOworCQl9CiAJCWZvciAoaSA9IDA7IGkgPCBuY2FsbHM7ICsraSkgewogCQkJZmQgPSBvcGVuKCIvZXRjL3Bhc3N3ZCIsIE9fUkRPTkxZKTsKIAkJCWNsb3NlKGZkKTsKIAkJfQotCQlDUFVfQ0xSKGNwdSwgY3B1X3NldCk7CisJCUNQVV9DTFIoY3B1cy0+bWFwW2NwdV0sICZjcHVfc2V0KTsKIAl9CiAKIAkvKgpAQCAtNDAyLDYgKzQxMSw5IEBACiAJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVzLT5ucjsgKytjcHUpIHsKIAkJdW5zaWduZWQgaW50IGV4cGVjdGVkOwogCisJCWlmIChjcHVzLT5tYXBbY3B1XSA+PSBDUFVfU0VUU0laRSkKKwkJCWNvbnRpbnVlOworCiAJCWlmIChwZXJmX2V2c2VsX19yZWFkX29uX2NwdShldnNlbCwgY3B1LCAwKSA8IDApIHsKIAkJCXByX2RlYnVnKCJwZXJmX2V2c2VsX19vcGVuX3JlYWRfb25fY3B1XG4iKTsKIAkJCWdvdG8gb3V0X2Nsb3NlX2ZkOwpAQCAtNDA5LDggKzQyMSw4IEBACiAKIAkJZXhwZWN0ZWQgPSBucl9vcGVuX2NhbGxzICsgY3B1OwogCQlpZiAoZXZzZWwtPmNvdW50cy0+Y3B1W2NwdV0udmFsICE9IGV4cGVjdGVkKSB7Ci0JCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fcmVhZF9vbl9jcHU6IGV4cGVjdGVkIHRvIGludGVyY2VwdCAlZCBjYWxscyBvbiBjcHUgJWQsIGdvdCAlTGRcbiIsCi0JCQkJIGV4cGVjdGVkLCBjcHUsIGV2c2VsLT5jb3VudHMtPmNwdVtjcHVdLnZhbCk7CisJCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fcmVhZF9vbl9jcHU6IGV4cGVjdGVkIHRvIGludGVyY2VwdCAlZCBjYWxscyBvbiBjcHUgJWQsIGdvdCAlIiBQUkl1NjQgIlxuIiwKKwkJCQkgZXhwZWN0ZWQsIGNwdXMtPm1hcFtjcHVdLCBldnNlbC0+Y291bnRzLT5jcHVbY3B1XS52YWwpOwogCQkJZ290byBvdXRfY2xvc2VfZmQ7CiAJCX0KIAl9CkBAIC00MjAsOCArNDMyLDYgQEAKIAlwZXJmX2V2c2VsX19jbG9zZV9mZChldnNlbCwgMSwgdGhyZWFkcy0+bnIpOwogb3V0X2V2c2VsX2RlbGV0ZToKIAlwZXJmX2V2c2VsX19kZWxldGUoZXZzZWwpOwotb3V0X2NwdV9mcmVlOgotCUNQVV9GUkVFKGNwdV9zZXQpOwogb3V0X3RocmVhZF9tYXBfZGVsZXRlOgogCXRocmVhZF9tYXBfX2RlbGV0ZSh0aHJlYWRzKTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCmluZGV4IDA1MzQ0YzYuLjVhMjlkOWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHRlcm1pb3MuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDx0aW1lLmg+CkBAIC0yMTQsNyArMjE1LDcgQEAKIAlsZW4gPSBzeW0tPmVuZCAtIHN5bS0+c3RhcnQ7CiAKIAlzcHJpbnRmKGNvbW1hbmQsCi0JCSJvYmpkdW1wIC0tc3RhcnQtYWRkcmVzcz0lIzAqTHggLS1zdG9wLWFkZHJlc3M9JSMwKkx4IC1kUyAlcyIsCisJCSJvYmpkdW1wIC0tc3RhcnQtYWRkcmVzcz0lIzAqIiBQUkl4NjQgIiAtLXN0b3AtYWRkcmVzcz0lIzAqIiBQUkl4NjQgIiAtZFMgJXMiLAogCQlCSVRTX1BFUl9MT05HIC8gNCwgbWFwX19yaXBfMm9iamR1bXAobWFwLCBzeW0tPnN0YXJ0KSwKIAkJQklUU19QRVJfTE9ORyAvIDQsIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5lbmQpLCBwYXRoKTsKIApAQCAtMzA4LDcgKzMwOSw3IEBACiAJc3RydWN0IHNvdXJjZV9saW5lICpsaW5lOwogCWNoYXIgcGF0dGVybltQQVRURVJOX0xFTiArIDFdOwogCi0Jc3ByaW50ZihwYXR0ZXJuLCAiJTAqTHggPCIsIEJJVFNfUEVSX0xPTkcgLyA0LAorCXNwcmludGYocGF0dGVybiwgIiUwKiIgUFJJeDY0ICIgPCIsIEJJVFNfUEVSX0xPTkcgLyA0LAogCQltYXBfX3JpcF8yb2JqZHVtcChzeW1lLT5tYXAsIHN5bWJvbC0+c3RhcnQpKTsKIAogCXB0aHJlYWRfbXV0ZXhfbG9jaygmc3ltZS0+c3JjLT5sb2NrKTsKQEAgLTUzNyw3ICs1MzgsNyBAQAogCWlmIChucl9jb3VudGVycyA9PSAxIHx8ICFkaXNwbGF5X3dlaWdodGVkKSB7CiAJCXN0cnVjdCBwZXJmX2V2c2VsICpmaXJzdDsKIAkJZmlyc3QgPSBsaXN0X2VudHJ5KGV2c2VsX2xpc3QubmV4dCwgc3RydWN0IHBlcmZfZXZzZWwsIG5vZGUpOwotCQlwcmludGYoIiVMZCIsIGZpcnN0LT5hdHRyLnNhbXBsZV9wZXJpb2QpOworCQlwcmludGYoIiUiIFBSSXU2NCwgKHVpbnQ2NF90KWZpcnN0LT5hdHRyLnNhbXBsZV9wZXJpb2QpOwogCQlpZiAoZnJlcSkKIAkJCXByaW50ZigiSHogIik7CiAJCWVsc2UKQEAgLTY0MCw3ICs2NDEsNyBAQAogCiAJCXBlcmNlbnRfY29sb3JfZnByaW50ZihzdGRvdXQsICIlNC4xZiUlIiwgcGNudCk7CiAJCWlmICh2ZXJib3NlKQotCQkJcHJpbnRmKCIgJTAxNmxseCIsIHN5bS0+c3RhcnQpOworCQkJcHJpbnRmKCIgJTAxNiIgUFJJeDY0LCBzeW0tPnN0YXJ0KTsKIAkJcHJpbnRmKCIgJS0qLipzIiwgc3ltX3dpZHRoLCBzeW1fd2lkdGgsIHN5bS0+bmFtZSk7CiAJCXByaW50ZigiICUtKi4qc1xuIiwgZHNvX3dpZHRoLCBkc29fd2lkdGgsCiAJCSAgICAgICBkc29fd2lkdGggPj0gc3ltZS0+bWFwLT5kc28tPmxvbmdfbmFtZV9sZW4gPwpAQCAtMTMwNSw3ICsxMzA2LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAodGFyZ2V0X3RpZCAhPSAtMSkKLQkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHRhcmdldF90aWQsIGV2ZW50X19wcm9jZXNzLCBzZXNzaW9uKTsKKwkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkX21hcCh0aHJlYWRzLCBldmVudF9fcHJvY2Vzcywgc2Vzc2lvbik7CiAJZWxzZQogCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWRzKGV2ZW50X19wcm9jZXNzLCBzZXNzaW9uKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwppbmRleCAyMzAyZWMwLi41MGQwYTkzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwpAQCAtMjYzLDExICsyNjMsMTIgQEAKIAkJCQkJICAgICBwcm9jZXNzLCBzZXNzaW9uKTsKIH0KIAotaW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZChwaWRfdCBwaWQsIGV2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKLQkJCSAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK2ludCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWRfbWFwKHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzLAorCQkJCSBldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7CiAJZXZlbnRfdCAqY29tbV9ldmVudCwgKm1tYXBfZXZlbnQ7Ci0JaW50IGVyciA9IC0xOworCWludCBlcnIgPSAtMSwgdGhyZWFkOwogCiAJY29tbV9ldmVudCA9IG1hbGxvYyhzaXplb2YoY29tbV9ldmVudC0+Y29tbSkgKyBzZXNzaW9uLT5pZF9oZHJfc2l6ZSk7CiAJaWYgKGNvbW1fZXZlbnQgPT0gTlVMTCkKQEAgLTI3Nyw4ICsyNzgsMTUgQEAKIAlpZiAobW1hcF9ldmVudCA9PSBOVUxMKQogCQlnb3RvIG91dF9mcmVlX2NvbW07CiAKLQllcnIgPSBfX2V2ZW50X19zeW50aGVzaXplX3RocmVhZChjb21tX2V2ZW50LCBtbWFwX2V2ZW50LCBwaWQsCi0JCQkJCSBwcm9jZXNzLCBzZXNzaW9uKTsKKwllcnIgPSAwOworCWZvciAodGhyZWFkID0gMDsgdGhyZWFkIDwgdGhyZWFkcy0+bnI7ICsrdGhyZWFkKSB7CisJCWlmIChfX2V2ZW50X19zeW50aGVzaXplX3RocmVhZChjb21tX2V2ZW50LCBtbWFwX2V2ZW50LAorCQkJCQkgICAgICAgdGhyZWFkcy0+bWFwW3RocmVhZF0sCisJCQkJCSAgICAgICBwcm9jZXNzLCBzZXNzaW9uKSkgeworCQkJZXJyID0gLTE7CisJCQlicmVhazsKKwkJfQorCX0KIAlmcmVlKG1tYXBfZXZlbnQpOwogb3V0X2ZyZWVfY29tbToKIAlmcmVlKGNvbW1fZXZlbnQpOwpAQCAtNDU5LDcgKzQ2Nyw4IEBACiBpbnQgZXZlbnRfX3Byb2Nlc3NfbG9zdChldmVudF90ICpzZWxmLCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSBfX3VzZWQsCiAJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewotCWR1bXBfcHJpbnRmKCI6IGlkOiVMZDogbG9zdDolTGRcbiIsIHNlbGYtPmxvc3QuaWQsIHNlbGYtPmxvc3QubG9zdCk7CisJZHVtcF9wcmludGYoIjogaWQ6JSIgUFJJdTY0ICI6IGxvc3Q6JSIgUFJJdTY0ICJcbiIsCisJCSAgICBzZWxmLT5sb3N0LmlkLCBzZWxmLT5sb3N0Lmxvc3QpOwogCXNlc3Npb24tPmhpc3RzLnN0YXRzLnRvdGFsX2xvc3QgKz0gc2VsZi0+bG9zdC5sb3N0OwogCXJldHVybiAwOwogfQpAQCAtNTc1LDcgKzU4NCw3IEBACiAJdTggY3B1bW9kZSA9IHNlbGYtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7CiAJaW50IHJldCA9IDA7CiAKLQlkdW1wX3ByaW50ZigiICVkLyVkOiBbJSNMeCglI0x4KSBAICUjTHhdOiAlc1xuIiwKKwlkdW1wX3ByaW50ZigiICVkLyVkOiBbJSMiIFBSSXg2NCAiKCUjIiBQUkl4NjQgIikgQCAlIyIgUFJJeDY0ICJdOiAlc1xuIiwKIAkJCXNlbGYtPm1tYXAucGlkLCBzZWxmLT5tbWFwLnRpZCwgc2VsZi0+bW1hcC5zdGFydCwKIAkJCXNlbGYtPm1tYXAubGVuLCBzZWxmLT5tbWFwLnBnb2ZmLCBzZWxmLT5tbWFwLmZpbGVuYW1lKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmggYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaAppbmRleCAyYjdlOTE5Li5jYzdiNTJmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaApAQCAtMTM1LDE0ICsxMzUsMTYgQEAKIHZvaWQgZXZlbnRfX3ByaW50X3RvdGFscyh2b2lkKTsKIAogc3RydWN0IHBlcmZfc2Vzc2lvbjsKK3N0cnVjdCB0aHJlYWRfbWFwOwogCiB0eXBlZGVmIGludCAoKmV2ZW50X19oYW5kbGVyX3N5bnRoX3QpKGV2ZW50X3QgKmV2ZW50LCAKIAkJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIHR5cGVkZWYgaW50ICgqZXZlbnRfX2hhbmRsZXJfdCkoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBzYW1wbGVfZGF0YSAqc2FtcGxlLAogCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogCi1pbnQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZF90IHBpZCwgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAotCQkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKK2ludCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWRfbWFwKHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzLAorCQkJCSBldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogaW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZHMoZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiBpbnQgZXZlbnRfX3N5bnRoZXNpemVfa2VybmVsX21tYXAoZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwppbmRleCBmNWNmZWQ2Li5kODU3NWQzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZzZWwuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwpAQCAtOTAsNyArOTAsNyBAQAogCWludCBjcHUsIHRocmVhZDsKIAlzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzICphZ2dyID0gJmV2c2VsLT5jb3VudHMtPmFnZ3IsIGNvdW50OwogCi0JYWdnci0+dmFsID0gMDsKKwlhZ2dyLT52YWwgPSBhZ2dyLT5lbmEgPSBhZ2dyLT5ydW4gPSAwOwogCiAJZm9yIChjcHUgPSAwOyBjcHUgPCBuY3B1czsgY3B1KyspIHsKIAkJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCBudGhyZWFkczsgdGhyZWFkKyspIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwppbmRleCA5ODlmYTJkLi5mNmE5MjllIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCkBAIC03OTgsOCArNzk4LDggQEAKIAkJCQkgICAgICBpbnQgZmVhdCwgaW50IGZkKQogewogCWlmIChsc2VlayhmZCwgc2VsZi0+b2Zmc2V0LCBTRUVLX1NFVCkgPT0gKG9mZl90KS0xKSB7Ci0JCXByX2RlYnVnKCJGYWlsZWQgdG8gbHNlZWsgdG8gJUxkIG9mZnNldCBmb3IgZmVhdHVyZSAlZCwgIgotCQkJICJjb250aW51aW5nLi4uXG4iLCBzZWxmLT5vZmZzZXQsIGZlYXQpOworCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIGxzZWVrIHRvICUiIFBSSXU2NCAiIG9mZnNldCBmb3IgZmVhdHVyZSAiCisJCQkgICIlZCwgY29udGludWluZy4uLlxuIiwgc2VsZi0+b2Zmc2V0LCBmZWF0KTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGlzdC5jIGIvdG9vbHMvcGVyZi91dGlsL2hpc3QuYwppbmRleCBjNzQ5YmE2Li4zMmY0ZjFmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGlzdC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMKQEAgLTYzNiwxMyArNjM2LDEzIEBACiAJCQl9CiAJCX0KIAl9IGVsc2UKLQkJcmV0ID0gc25wcmludGYocywgc2l6ZSwgc2VwID8gIiVsbGQiIDogIiUxMmxsZCAiLCBwZXJpb2QpOworCQlyZXQgPSBzbnByaW50ZihzLCBzaXplLCBzZXAgPyAiJSIgUFJJdTY0IDogIiUxMiIgUFJJdTY0ICIgIiwgcGVyaW9kKTsKIAogCWlmIChzeW1ib2xfY29uZi5zaG93X25yX3NhbXBsZXMpIHsKIAkJaWYgKHNlcCkKLQkJCXJldCArPSBzbnByaW50ZihzICsgcmV0LCBzaXplIC0gcmV0LCAiJWMlbGxkIiwgKnNlcCwgcGVyaW9kKTsKKwkJCXJldCArPSBzbnByaW50ZihzICsgcmV0LCBzaXplIC0gcmV0LCAiJWMlIiBQUkl1NjQsICpzZXAsIHBlcmlvZCk7CiAJCWVsc2UKLQkJCXJldCArPSBzbnByaW50ZihzICsgcmV0LCBzaXplIC0gcmV0LCAiJTExbGxkIiwgcGVyaW9kKTsKKwkJCXJldCArPSBzbnByaW50ZihzICsgcmV0LCBzaXplIC0gcmV0LCAiJTExIiBQUkl1NjQsIHBlcmlvZCk7CiAJfQogCiAJaWYgKHBhaXJfaGlzdHMpIHsKQEAgLTk3MSw3ICs5NzEsNyBAQAogCXN5bV9zaXplID0gc3ltLT5lbmQgLSBzeW0tPnN0YXJ0OwogCW9mZnNldCA9IGlwIC0gc3ltLT5zdGFydDsKIAotCXByX2RlYnVnMygiJXM6IGlwPSUjTHhcbiIsIF9fZnVuY19fLCBzZWxmLT5tcy5tYXAtPnVubWFwX2lwKHNlbGYtPm1zLm1hcCwgaXApKTsKKwlwcl9kZWJ1ZzMoIiVzOiBpcD0lIyIgUFJJeDY0ICJcbiIsIF9fZnVuY19fLCBzZWxmLT5tcy5tYXAtPnVubWFwX2lwKHNlbGYtPm1zLm1hcCwgaXApKTsKIAogCWlmIChvZmZzZXQgPj0gc3ltX3NpemUpCiAJCXJldHVybiAwOwpAQCAtOTgwLDggKzk4MCw5IEBACiAJaC0+c3VtKys7CiAJaC0+aXBbb2Zmc2V0XSsrOwogCi0JcHJfZGVidWczKCIlI0x4ICVzOiBwZXJpb2QrKyBbaXA6ICUjTHgsICUjTHhdID0+ICVMZFxuIiwgc2VsZi0+bXMuc3ltLT5zdGFydCwKLQkJICBzZWxmLT5tcy5zeW0tPm5hbWUsIGlwLCBpcCAtIHNlbGYtPm1zLnN5bS0+c3RhcnQsIGgtPmlwW29mZnNldF0pOworCXByX2RlYnVnMygiJSMiIFBSSXg2NCAiICVzOiBwZXJpb2QrKyBbaXA6ICUjIiBQUkl4NjQgIiwgJSMiIFBSSXg2NAorCQkgICJdID0+ICUiIFBSSXU2NCAiXG4iLCBzZWxmLT5tcy5zeW0tPnN0YXJ0LCBzZWxmLT5tcy5zeW0tPm5hbWUsCisJCSAgaXAsIGlwIC0gc2VsZi0+bXMuc3ltLT5zdGFydCwgaC0+aXBbb2Zmc2V0XSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMzIsNyArMTEzMyw3IEBACiAJCWdvdG8gb3V0X2ZyZWVfZmlsZW5hbWU7CiAJfQogCi0JcHJfZGVidWcoIiVzOiBmaWxlbmFtZT0lcywgc3ltPSVzLCBzdGFydD0lI0x4LCBlbmQ9JSNMeFxuIiwgX19mdW5jX18sCisJcHJfZGVidWcoIiVzOiBmaWxlbmFtZT0lcywgc3ltPSVzLCBzdGFydD0lIyIgUFJJeDY0ICIsIGVuZD0lIyIgUFJJeDY0ICJcbiIsIF9fZnVuY19fLAogCQkgZmlsZW5hbWUsIHN5bS0+bmFtZSwgbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQpLAogCQkgbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+ZW5kKSk7CiAKQEAgLTExNDIsNyArMTE0Myw3IEBACiAJCSBkc28sIGRzby0+bG9uZ19uYW1lLCBzeW0sIHN5bS0+bmFtZSk7CiAKIAlzbnByaW50Zihjb21tYW5kLCBzaXplb2YoY29tbWFuZCksCi0JCSAib2JqZHVtcCAtLXN0YXJ0LWFkZHJlc3M9MHglMDE2THggLS1zdG9wLWFkZHJlc3M9MHglMDE2THggLWRTIC1DICVzfGdyZXAgLXYgJXN8ZXhwYW5kIiwKKwkJICJvYmpkdW1wIC0tc3RhcnQtYWRkcmVzcz0weCUwMTYiIFBSSXg2NCAiIC0tc3RvcC1hZGRyZXNzPTB4JTAxNiIgUFJJeDY0ICIgLWRTIC1DICVzfGdyZXAgLXYgJXN8ZXhwYW5kIiwKIAkJIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5zdGFydCksCiAJCSBtYXBfX3JpcF8yb2JqZHVtcChtYXAsIHN5bS0+ZW5kKSwKIAkJIHN5bWZzX2ZpbGVuYW1lLCBmaWxlbmFtZSk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9iaXRvcHMuaCBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCmluZGV4IDhiZTBiOTYuLjMwNWM4NDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfUEVSRl9MSU5VWF9CSVRPUFNfSF8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2h3ZWlnaHQuaD4KIAogI2RlZmluZSBCSVRTX1BFUl9MT05HIF9fV09SRFNJWkUKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYyBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYwppbmRleCAzYTdlYjZlLi5hMTZlY2FiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvbWFwLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL21hcC5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgInN5bWJvbC5oIgogI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTE5NSw3ICsxOTYsNyBAQAogCiBzaXplX3QgbWFwX19mcHJpbnRmKHN0cnVjdCBtYXAgKnNlbGYsIEZJTEUgKmZwKQogewotCXJldHVybiBmcHJpbnRmKGZwLCAiICVMeC0lTHggJUx4ICVzXG4iLAorCXJldHVybiBmcHJpbnRmKGZwLCAiICUiIFBSSXg2NCAiLSUiIFBSSXg2NCAiICUiIFBSSXg2NCAiICVzXG4iLAogCQkgICAgICAgc2VsZi0+c3RhcnQsIHNlbGYtPmVuZCwgc2VsZi0+cGdvZmYsIHNlbGYtPmRzby0+bmFtZSk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYwppbmRleCBiYzI3MzJlLi4xMzVmNjliIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCkBAIC0yNzksNyArMjc5LDcgQEAKIAlzdGF0aWMgY2hhciBidWZbMzJdOwogCiAJaWYgKHR5cGUgPT0gUEVSRl9UWVBFX1JBVykgewotCQlzcHJpbnRmKGJ1ZiwgInJhdyAweCVsbHgiLCBjb25maWcpOworCQlzcHJpbnRmKGJ1ZiwgInJhdyAweCUiIFBSSXg2NCwgY29uZmlnKTsKIAkJcmV0dXJuIGJ1ZjsKIAl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuaAppbmRleCBiODJjYWZiLi40NThlM2VjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oCkBAIC0yMyw3ICsyMyw3IEBACiB9OwogCiBleHRlcm4gc3RydWN0IHRyYWNlcG9pbnRfcGF0aCAqdHJhY2Vwb2ludF9pZF90b19wYXRoKHU2NCBjb25maWcpOwotZXh0ZXJuIGJvb2wgaGF2ZV90cmFjZXBvaW50cyhzdHJ1Y3QgbGlzdF9oZWFkICpldnNlbF9saXN0KTsKK2V4dGVybiBib29sIGhhdmVfdHJhY2Vwb2ludHMoc3RydWN0IGxpc3RfaGVhZCAqZXZsaXN0KTsKIAogZXh0ZXJuIGludAkJCW5yX2NvdW50ZXJzOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCmluZGV4IDEyOGFhYWIuLjZlMjlkOWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAlzeW0gPSBfX2ZpbmRfa2VybmVsX2Z1bmN0aW9uX2J5X25hbWUodHAtPnN5bWJvbCwgJm1hcCk7CiAJaWYgKHN5bSkgewogCQlhZGRyID0gbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQgKyB0cC0+b2Zmc2V0KTsKLQkJcHJfZGVidWcoInRyeSB0byBmaW5kICVzKyVsZEAlbGx4XG4iLCB0cC0+c3ltYm9sLAorCQlwcl9kZWJ1ZygidHJ5IHRvIGZpbmQgJXMrJWxkQCUiIFBSSXg2NCAiXG4iLCB0cC0+c3ltYm9sLAogCQkJIHRwLT5vZmZzZXQsIGFkZHIpOwogCQlyZXQgPSBmaW5kX3BlcmZfcHJvYmVfcG9pbnQoKHVuc2lnbmVkIGxvbmcpYWRkciwgcHApOwogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCmluZGV4IDMxM2RhYzIuLjEwNWYwMGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYwpAQCAtNjUyLDEwICs2NTIsMTEgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCXByaW50ZigiLi4uIGNoYWluOiBucjolTHVcbiIsIHNhbXBsZS0+Y2FsbGNoYWluLT5ucik7CisJcHJpbnRmKCIuLi4gY2hhaW46IG5yOiUiIFBSSXU2NCAiXG4iLCBzYW1wbGUtPmNhbGxjaGFpbi0+bnIpOwogCiAJZm9yIChpID0gMDsgaSA8IHNhbXBsZS0+Y2FsbGNoYWluLT5ucjsgaSsrKQotCQlwcmludGYoIi4uLi4uICUyZDogJTAxNkx4XG4iLCBpLCBzYW1wbGUtPmNhbGxjaGFpbi0+aXBzW2ldKTsKKwkJcHJpbnRmKCIuLi4uLiAlMmQ6ICUwMTYiIFBSSXg2NCAiXG4iLAorCQkgICAgICAgaSwgc2FtcGxlLT5jYWxsY2hhaW4tPmlwc1tpXSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZfc2Vzc2lvbl9fcHJpbnRfdHN0YW1wKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCkBAIC02NzIsNyArNjczLDcgQEAKIAkJcHJpbnRmKCIldSAiLCBzYW1wbGUtPmNwdSk7CiAKIAlpZiAoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USU1FKQotCQlwcmludGYoIiVMdSAiLCBzYW1wbGUtPnRpbWUpOworCQlwcmludGYoIiUiIFBSSXU2NCAiICIsIHNhbXBsZS0+dGltZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGR1bXBfZXZlbnQoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgZXZlbnRfdCAqZXZlbnQsCkBAIC02ODEsMTYgKzY4MiwxNiBAQAogCWlmICghZHVtcF90cmFjZSkKIAkJcmV0dXJuOwogCi0JcHJpbnRmKCJcbiUjTHggWyUjeF06IGV2ZW50OiAlZFxuIiwgZmlsZV9vZmZzZXQsIGV2ZW50LT5oZWFkZXIuc2l6ZSwKLQkgICAgICAgZXZlbnQtPmhlYWRlci50eXBlKTsKKwlwcmludGYoIlxuJSMiIFBSSXg2NCAiIFslI3hdOiBldmVudDogJWRcbiIsCisJICAgICAgIGZpbGVfb2Zmc2V0LCBldmVudC0+aGVhZGVyLnNpemUsIGV2ZW50LT5oZWFkZXIudHlwZSk7CiAKIAl0cmFjZV9ldmVudChldmVudCk7CiAKIAlpZiAoc2FtcGxlKQogCQlwZXJmX3Nlc3Npb25fX3ByaW50X3RzdGFtcChzZXNzaW9uLCBldmVudCwgc2FtcGxlKTsKIAotCXByaW50ZigiJSNMeCBbJSN4XTogUEVSRl9SRUNPUkRfJXMiLCBmaWxlX29mZnNldCwgZXZlbnQtPmhlYWRlci5zaXplLAotCSAgICAgICBldmVudF9fZ2V0X2V2ZW50X25hbWUoZXZlbnQtPmhlYWRlci50eXBlKSk7CisJcHJpbnRmKCIlIyIgUFJJeDY0ICIgWyUjeF06IFBFUkZfUkVDT1JEXyVzIiwgZmlsZV9vZmZzZXQsCisJICAgICAgIGV2ZW50LT5oZWFkZXIuc2l6ZSwgZXZlbnRfX2dldF9ldmVudF9uYW1lKGV2ZW50LT5oZWFkZXIudHlwZSkpOwogfQogCiBzdGF0aWMgdm9pZCBkdW1wX3NhbXBsZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBldmVudF90ICpldmVudCwKQEAgLTY5OSw4ICs3MDAsOSBAQAogCWlmICghZHVtcF90cmFjZSkKIAkJcmV0dXJuOwogCi0JcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICUjTHggcGVyaW9kOiAlTGRcbiIsIGV2ZW50LT5oZWFkZXIubWlzYywKLQkgICAgICAgc2FtcGxlLT5waWQsIHNhbXBsZS0+dGlkLCBzYW1wbGUtPmlwLCBzYW1wbGUtPnBlcmlvZCk7CisJcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICUjIiBQUkl4NjQgIiBwZXJpb2Q6ICUiIFBSSXU2NCAiXG4iLAorCSAgICAgICBldmVudC0+aGVhZGVyLm1pc2MsIHNhbXBsZS0+cGlkLCBzYW1wbGUtPnRpZCwgc2FtcGxlLT5pcCwKKwkgICAgICAgc2FtcGxlLT5wZXJpb2QpOwogCiAJaWYgKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKQogCQljYWxsY2hhaW5fX3ByaW50ZihzYW1wbGUpOwpAQCAtODQzLDggKzg0NSw4IEBACiB7CiAJaWYgKG9wcy0+bG9zdCA9PSBldmVudF9fcHJvY2Vzc19sb3N0ICYmCiAJICAgIHNlc3Npb24tPmhpc3RzLnN0YXRzLnRvdGFsX2xvc3QgIT0gMCkgewotCQl1aV9fd2FybmluZygiUHJvY2Vzc2VkICVMdSBldmVudHMgYW5kIExPU1QgJUx1IVxuXG4iCi0JCQkgICAgIkNoZWNrIElPL0NQVSBvdmVybG9hZCFcblxuIiwKKwkJdWlfX3dhcm5pbmcoIlByb2Nlc3NlZCAlIiBQUkl1NjQgIiBldmVudHMgYW5kIExPU1QgJSIgUFJJdTY0CisJCQkgICAgIiFcblxuQ2hlY2sgSU8vQ1BVIG92ZXJsb2FkIVxuXG4iLAogCQkJICAgIHNlc3Npb24tPmhpc3RzLnN0YXRzLnRvdGFsX3BlcmlvZCwKIAkJCSAgICBzZXNzaW9uLT5oaXN0cy5zdGF0cy50b3RhbF9sb3N0KTsKIAl9CkBAIC05MTgsNyArOTIwLDcgQEAKIAogCWlmIChzaXplID09IDAgfHwKIAkgICAgKHNraXAgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnQoc2VsZiwgJmV2ZW50LCBvcHMsIGhlYWQpKSA8IDApIHsKLQkJZHVtcF9wcmludGYoIiUjTHggWyUjeF06IHNraXBwaW5nIHVua25vd24gaGVhZGVyIHR5cGU6ICVkXG4iLAorCQlkdW1wX3ByaW50ZigiJSMiIFBSSXg2NCAiIFslI3hdOiBza2lwcGluZyB1bmtub3duIGhlYWRlciB0eXBlOiAlZFxuIiwKIAkJCSAgICBoZWFkLCBldmVudC5oZWFkZXIuc2l6ZSwgZXZlbnQuaGVhZGVyLnR5cGUpOwogCQkvKgogCQkgKiBhc3N1bWUgd2UgbG9zdCB0cmFjayBvZiB0aGUgc3RyZWFtLCBjaGVjayBhbGlnbm1lbnQsIGFuZApAQCAtMTAyMyw3ICsxMDI1LDcgQEAKIAogCWlmIChzaXplID09IDAgfHwKIAkgICAgcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50KHNlc3Npb24sIGV2ZW50LCBvcHMsIGZpbGVfcG9zKSA8IDApIHsKLQkJZHVtcF9wcmludGYoIiUjTHggWyUjeF06IHNraXBwaW5nIHVua25vd24gaGVhZGVyIHR5cGU6ICVkXG4iLAorCQlkdW1wX3ByaW50ZigiJSMiIFBSSXg2NCAiIFslI3hdOiBza2lwcGluZyB1bmtub3duIGhlYWRlciB0eXBlOiAlZFxuIiwKIAkJCSAgICBmaWxlX29mZnNldCArIGhlYWQsIGV2ZW50LT5oZWFkZXIuc2l6ZSwKIAkJCSAgICBldmVudC0+aGVhZGVyLnR5cGUpOwogCQkvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jIGIvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jCmluZGV4IGIzNjM3ZGIuLmZiNzM3ZmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMKQEAgLTEyLDYgKzEyLDcgQEAKICAqIG9mIHRoZSBMaWNlbnNlLgogICovCiAKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC00MywxMSArNDQsMTEgQEAKIAlyZXR1cm4gY3B1MnNsb3QoY3B1KSAqIFNMT1RfTVVMVDsKIH0KIAotc3RhdGljIGRvdWJsZSB0aW1lMnBpeGVscyh1NjQgdGltZSkKK3N0YXRpYyBkb3VibGUgdGltZTJwaXhlbHModTY0IF9fdGltZSkKIHsKIAlkb3VibGUgWDsKIAotCVggPSAxLjAgKiBzdmdfcGFnZV93aWR0aCAqICh0aW1lIC0gZmlyc3RfdGltZSkgLyAobGFzdF90aW1lIC0gZmlyc3RfdGltZSk7CisJWCA9IDEuMCAqIHN2Z19wYWdlX3dpZHRoICogKF9fdGltZSAtIGZpcnN0X3RpbWUpIC8gKGxhc3RfdGltZSAtIGZpcnN0X3RpbWUpOwogCXJldHVybiBYOwogfQogCkBAIC05NCw3ICs5NSw3IEBACiAKIAl0b3RhbF9oZWlnaHQgPSAoMSArIHJvd3MgKyBjcHUyc2xvdChjcHVzKSkgKiBTTE9UX01VTFQ7CiAJZnByaW50ZihzdmdmaWxlLCAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIHN0YW5kYWxvbmU9XCJub1wiPz4gXG4iKTsKLQlmcHJpbnRmKHN2Z2ZpbGUsICI8c3ZnIHdpZHRoPVwiJWlcIiBoZWlnaHQ9XCIlbGx1XCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiIsIHN2Z19wYWdlX3dpZHRoLCB0b3RhbF9oZWlnaHQpOworCWZwcmludGYoc3ZnZmlsZSwgIjxzdmcgd2lkdGg9XCIlaVwiIGhlaWdodD1cIiUiIFBSSXU2NCAiXCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiIsIHN2Z19wYWdlX3dpZHRoLCB0b3RhbF9oZWlnaHQpOwogCiAJZnByaW50ZihzdmdmaWxlLCAiPGRlZnM+XG4gIDxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj5cbiAgICA8IVtDREFUQVtcbiIpOwogCkBAIC00ODMsNyArNDg0LDcgQEAKIAkJCWNvbG9yID0gMTI4OwogCQl9CiAKLQkJZnByaW50ZihzdmdmaWxlLCAiPGxpbmUgeDE9XCIlNC44ZlwiIHkxPVwiJTQuMmZcIiB4Mj1cIiU0LjhmXCIgeTI9XCIlbGx1XCIgc3R5bGU9XCJzdHJva2U6cmdiKCVpLCVpLCVpKTtzdHJva2Utd2lkdGg6JTEuM2ZcIi8+XG4iLAorCQlmcHJpbnRmKHN2Z2ZpbGUsICI8bGluZSB4MT1cIiU0LjhmXCIgeTE9XCIlNC4yZlwiIHgyPVwiJTQuOGZcIiB5Mj1cIiUiIFBSSXU2NCAiXCIgc3R5bGU9XCJzdHJva2U6cmdiKCVpLCVpLCVpKTtzdHJva2Utd2lkdGg6JTEuM2ZcIi8+XG4iLAogCQkJdGltZTJwaXhlbHMoaSksIFNMT1RfTVVMVC8yLCB0aW1lMnBpeGVscyhpKSwgdG90YWxfaGVpZ2h0LCBjb2xvciwgY29sb3IsIGNvbG9yLCB0aGlja25lc3MpOwogCiAJCWkgKz0gMTAwMDAwMDA7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKaW5kZXggMTVjY2ZiYS4uNzgyMWQwZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KICNpbmNsdWRlICJidWlsZC1pZC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAic3ltYm9sLmgiCkBAIC0xNTMsNyArMTU0LDcgQEAKIAlzZWxmLT5iaW5kaW5nID0gYmluZGluZzsKIAlzZWxmLT5uYW1lbGVuID0gbmFtZWxlbiAtIDE7CiAKLQlwcl9kZWJ1ZzQoIiVzOiAlcyAlI0x4LSUjTHhcbiIsIF9fZnVuY19fLCBuYW1lLCBzdGFydCwgc2VsZi0+ZW5kKTsKKwlwcl9kZWJ1ZzQoIiVzOiAlcyAlIyIgUFJJeDY0ICItJSMiIFBSSXg2NCAiXG4iLCBfX2Z1bmNfXywgbmFtZSwgc3RhcnQsIHNlbGYtPmVuZCk7CiAKIAltZW1jcHkoc2VsZi0+bmFtZSwgbmFtZSwgbmFtZWxlbik7CiAKQEAgLTE2Nyw3ICsxNjgsNyBAQAogCiBzdGF0aWMgc2l6ZV90IHN5bWJvbF9fZnByaW50ZihzdHJ1Y3Qgc3ltYm9sICpzZWxmLCBGSUxFICpmcCkKIHsKLQlyZXR1cm4gZnByaW50ZihmcCwgIiAlbGx4LSVsbHggJWMgJXNcbiIsCisJcmV0dXJuIGZwcmludGYoZnAsICIgJSIgUFJJeDY0ICItJSIgUFJJeDY0ICIgJWMgJXNcbiIsCiAJCSAgICAgICBzZWxmLT5zdGFydCwgc2VsZi0+ZW5kLAogCQkgICAgICAgc2VsZi0+YmluZGluZyA9PSBTVEJfR0xPQkFMID8gJ2cnIDoKIAkJICAgICAgIHNlbGYtPmJpbmRpbmcgPT0gU1RCX0xPQ0FMICA/ICdsJyA6ICd3JywKQEAgLTExNjEsNiArMTE2MiwxMyBAQAogCiAJCXNlY3Rpb25fbmFtZSA9IGVsZl9zZWNfX25hbWUoJnNoZHIsIHNlY3N0cnMpOwogCisJCS8qIE9uIEFSTSwgc3ltYm9scyBmb3IgdGh1bWIgZnVuY3Rpb25zIGhhdmUgMSBhZGRlZCB0bworCQkgKiB0aGUgc3ltYm9sIGFkZHJlc3MgYXMgYSBmbGFnIC0gcmVtb3ZlIGl0ICovCisJCWlmICgoZWhkci5lX21hY2hpbmUgPT0gRU1fQVJNKSAmJgorCQkgICAgKG1hcC0+dHlwZSA9PSBNQVBfX0ZVTkNUSU9OKSAmJgorCQkgICAgKHN5bS5zdF92YWx1ZSAmIDEpKQorCQkJLS1zeW0uc3RfdmFsdWU7CisKIAkJaWYgKHNlbGYtPmtlcm5lbCAhPSBEU09fVFlQRV9VU0VSIHx8IGttb2R1bGUpIHsKIAkJCWNoYXIgZHNvX25hbWVbUEFUSF9NQVhdOwogCkBAIC0xMjA4LDggKzEyMTYsOCBAQAogCQl9CiAKIAkJaWYgKGN1cnJfZHNvLT5hZGp1c3Rfc3ltYm9scykgewotCQkJcHJfZGVidWc0KCIlczogYWRqdXN0aW5nIHN5bWJvbDogc3RfdmFsdWU6ICUjTHggIgotCQkJCSAgInNoX2FkZHI6ICUjTHggc2hfb2Zmc2V0OiAlI0x4XG4iLCBfX2Z1bmNfXywKKwkJCXByX2RlYnVnNCgiJXM6IGFkanVzdGluZyBzeW1ib2w6IHN0X3ZhbHVlOiAlIyIgUFJJeDY0ICIgIgorCQkJCSAgInNoX2FkZHI6ICUjIiBQUkl4NjQgIiBzaF9vZmZzZXQ6ICUjIiBQUkl4NjQgIlxuIiwgX19mdW5jX18sCiAJCQkJICAodTY0KXN5bS5zdF92YWx1ZSwgKHU2NClzaGRyLnNoX2FkZHIsCiAJCQkJICAodTY0KXNoZHIuc2hfb2Zmc2V0KTsKIAkJCXN5bS5zdF92YWx1ZSAtPSBzaGRyLnNoX2FkZHIgLSBzaGRyLnNoX29mZnNldDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90eXBlcy5oIGIvdG9vbHMvcGVyZi91dGlsL3R5cGVzLmgKaW5kZXggN2Q2YjgzMy4uNWYzNjg5YSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3R5cGVzLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3R5cGVzLmgKQEAgLTEsMTIgKzEsMTQgQEAKICNpZm5kZWYgX19QRVJGX1RZUEVTX0gKICNkZWZpbmUgX19QRVJGX1RZUEVTX0gKIAorI2luY2x1ZGUgPHN0ZGludC5oPgorCiAvKgotICogV2UgZGVmaW5lIHU2NCBhcyB1bnNpZ25lZCBsb25nIGxvbmcgZm9yIGV2ZXJ5IGFyY2hpdGVjdHVyZQotICogc28gdGhhdCB3ZSBjYW4gcHJpbnQgaXQgd2l0aCAlTHggd2l0aG91dCBnZXR0aW5nIHdhcm5pbmdzLgorICogV2UgZGVmaW5lIHU2NCBhcyB1aW50NjRfdCBmb3IgZXZlcnkgYXJjaGl0ZWN0dXJlCisgKiBzbyB0aGF0IHdlIGNhbiBwcmludCBpdCB3aXRoICIlIlBSSXg2NCB3aXRob3V0IGdldHRpbmcgd2FybmluZ3MuCiAgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHU2NDsKLXR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyAgIHM2NDsKK3R5cGVkZWYgdWludDY0X3QJICAgdTY0OwordHlwZWRlZiBpbnQ2NF90CQkgICBzNjQ7CiB0eXBlZGVmIHVuc2lnbmVkIGludAkgICB1MzI7CiB0eXBlZGVmIHNpZ25lZCBpbnQJICAgczMyOwogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkgICB1MTY7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdWkvYnJvd3NlcnMvaGlzdHMuYyBiL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9oaXN0cy5jCmluZGV4IGViZGE4YzMuLjYwYzQ2M2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9oaXN0cy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9oaXN0cy5jCkBAIC0zNTAsNyArMzUwLDcgQEAKIAlpZiAoc2VsZi0+bXMuc3ltKQogCQlyZXR1cm4gc2VsZi0+bXMuc3ltLT5uYW1lOwogCi0Jc25wcmludGYoYmYsIGJmc2l6ZSwgIiUjTHgiLCBzZWxmLT5pcCk7CisJc25wcmludGYoYmYsIGJmc2l6ZSwgIiUjIiBQUkl4NjQsIHNlbGYtPmlwKTsKIAlyZXR1cm4gYmY7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9tYXAuYyBiL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9tYXAuYwppbmRleCBlMzU0MzdkLi5lNTE1ODM2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdWkvYnJvd3NlcnMvbWFwLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL21hcC5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgIi4uL2xpYnNsYW5nLmgiCiAjaW5jbHVkZSA8ZWxmLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvdHR5ZGVmYXVsdHMuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtNTcsNyArNTgsNyBAQAogCWludCB3aWR0aDsKIAogCXVpX2Jyb3dzZXJfX3NldF9wZXJjZW50X2NvbG9yKHNlbGYsIDAsIGN1cnJlbnRfZW50cnkpOwotCXNsc21nX3ByaW50ZigiJSpsbHggJSpsbHggJWMgIiwKKwlzbHNtZ19wcmludGYoIiUqIiBQUkl4NjQgIiAlKiIgUFJJeDY0ICIgJWMgIiwKIAkJICAgICBtYi0+YWRkcmxlbiwgc3ltLT5zdGFydCwgbWItPmFkZHJsZW4sIHN5bS0+ZW5kLAogCQkgICAgIHN5bS0+YmluZGluZyA9PSBTVEJfR0xPQkFMID8gJ2cnIDoKIAkJICAgICBzeW0tPmJpbmRpbmcgPT0gU1RCX0xPQ0FMICA/ICdsJyA6ICd3Jyk7CkBAIC0xNTAsNiArMTUxLDYgQEAKIAkJKyttYi5iLm5yX2VudHJpZXM7CiAJfQogCi0JbWIuYWRkcmxlbiA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIlbGx4IiwgbWF4YWRkcik7CisJbWIuYWRkcmxlbiA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIlIiBQUkl4NjQsIG1heGFkZHIpOwogCXJldHVybiBtYXBfYnJvd3Nlcl9fcnVuKCZtYik7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdmFsdWVzLmMgYi90b29scy9wZXJmL3V0aWwvdmFsdWVzLmMKaW5kZXggY2ZhNTVkNi4uYmRkMzM0NyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3ZhbHVlcy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAJCWlmICh3aWR0aCA+IHRpZHdpZHRoKQogCQkJdGlkd2lkdGggPSB3aWR0aDsKIAkJZm9yIChqID0gMDsgaiA8IHZhbHVlcy0+Y291bnRlcnM7IGorKykgewotCQkJd2lkdGggPSBzbnByaW50ZihOVUxMLCAwLCAiJUx1IiwgdmFsdWVzLT52YWx1ZVtpXVtqXSk7CisJCQl3aWR0aCA9IHNucHJpbnRmKE5VTEwsIDAsICIlIiBQUkl1NjQsIHZhbHVlcy0+dmFsdWVbaV1bal0pOwogCQkJaWYgKHdpZHRoID4gY291bnRlcndpZHRoW2pdKQogCQkJCWNvdW50ZXJ3aWR0aFtqXSA9IHdpZHRoOwogCQl9CkBAIC0xNjUsNyArMTY1LDcgQEAKIAkJZnByaW50ZihmcCwgIiAgJSpkICAlKmQiLCBwaWR3aWR0aCwgdmFsdWVzLT5waWRbaV0sCiAJCQl0aWR3aWR0aCwgdmFsdWVzLT50aWRbaV0pOwogCQlmb3IgKGogPSAwOyBqIDwgdmFsdWVzLT5jb3VudGVyczsgaisrKQotCQkJZnByaW50ZihmcCwgIiAgJSpMdSIsCisJCQlmcHJpbnRmKGZwLCAiICAlKiIgUFJJdTY0LAogCQkJCWNvdW50ZXJ3aWR0aFtqXSwgdmFsdWVzLT52YWx1ZVtpXVtqXSk7CiAJCWZwcmludGYoZnAsICJcbiIpOwogCX0KQEAgLTE5NiwxMyArMTk2LDEzIEBACiAJCXdpZHRoID0gc3RybGVuKHZhbHVlcy0+Y291bnRlcm5hbWVbal0pOwogCQlpZiAod2lkdGggPiBuYW1ld2lkdGgpCiAJCQluYW1ld2lkdGggPSB3aWR0aDsKLQkJd2lkdGggPSBzbnByaW50ZihOVUxMLCAwLCAiJWxseCIsIHZhbHVlcy0+Y291bnRlcnJhd2lkW2pdKTsKKwkJd2lkdGggPSBzbnByaW50ZihOVUxMLCAwLCAiJSIgUFJJeDY0LCB2YWx1ZXMtPmNvdW50ZXJyYXdpZFtqXSk7CiAJCWlmICh3aWR0aCA+IHJhd3dpZHRoKQogCQkJcmF3d2lkdGggPSB3aWR0aDsKIAl9CiAJZm9yIChpID0gMDsgaSA8IHZhbHVlcy0+dGhyZWFkczsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCB2YWx1ZXMtPmNvdW50ZXJzOyBqKyspIHsKLQkJCXdpZHRoID0gc25wcmludGYoTlVMTCwgMCwgIiVMdSIsIHZhbHVlcy0+dmFsdWVbaV1bal0pOworCQkJd2lkdGggPSBzbnByaW50ZihOVUxMLCAwLCAiJSIgUFJJdTY0LCB2YWx1ZXMtPnZhbHVlW2ldW2pdKTsKIAkJCWlmICh3aWR0aCA+IGNvdW50d2lkdGgpCiAJCQkJY291bnR3aWR0aCA9IHdpZHRoOwogCQl9CkBAIC0yMTQsNyArMjE0LDcgQEAKIAkJY291bnR3aWR0aCwgIkNvdW50Iik7CiAJZm9yIChpID0gMDsgaSA8IHZhbHVlcy0+dGhyZWFkczsgaSsrKQogCQlmb3IgKGogPSAwOyBqIDwgdmFsdWVzLT5jb3VudGVyczsgaisrKQotCQkJZnByaW50ZihmcCwgIiAgJSpkICAlKmQgICUqcyAgJSpsbHggICUqTHVcbiIsCisJCQlmcHJpbnRmKGZwLCAiICAlKmQgICUqZCAgJSpzICAlKiIgUFJJeDY0ICIgICUqIiBQUkl1NjQsCiAJCQkJcGlkd2lkdGgsIHZhbHVlcy0+cGlkW2ldLAogCQkJCXRpZHdpZHRoLCB2YWx1ZXMtPnRpZFtpXSwKIAkJCQluYW1ld2lkdGgsIHZhbHVlcy0+Y291bnRlcm5hbWVbal0sCmRpZmYgLS1naXQgYS90b29scy9wb3dlci94ODYvdHVyYm9zdGF0L3R1cmJvc3RhdC5jIGIvdG9vbHMvcG93ZXIveDg2L3R1cmJvc3RhdC90dXJib3N0YXQuYwppbmRleCA0YzY5ODNkLi4zNjJhMGNiIDEwMDY0NAotLS0gYS90b29scy9wb3dlci94ODYvdHVyYm9zdGF0L3R1cmJvc3RhdC5jCisrKyBiL3Rvb2xzL3Bvd2VyL3g4Ni90dXJib3N0YXQvdHVyYm9zdGF0LmMKQEAgLTcyLDcgKzcyLDcgQEAKIAogaW50IG51bV9jcHVzOwogCi10eXBlZGVmIHN0cnVjdCBwZXJfY3B1X2NvdW50ZXJzIHsKK3N0cnVjdCBjb3VudGVycyB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHRzYzsJCS8qIHBlciB0aHJlYWQgKi8KIAl1bnNpZ25lZCBsb25nIGxvbmcgYXBlcmY7CS8qIHBlciB0aHJlYWQgKi8KIAl1bnNpZ25lZCBsb25nIGxvbmcgbXBlcmY7CS8qIHBlciB0aHJlYWQgKi8KQEAgLTg4LDEzICs4OCwxMyBAQAogCWludCBwa2c7CiAJaW50IGNvcmU7CiAJaW50IGNwdTsKLQlzdHJ1Y3QgcGVyX2NwdV9jb3VudGVycyAqbmV4dDsKLX0gUENDOworCXN0cnVjdCBjb3VudGVycyAqbmV4dDsKK307CiAKLVBDQyAqcGNjX2V2ZW47Ci1QQ0MgKnBjY19vZGQ7Ci1QQ0MgKnBjY19kZWx0YTsKLVBDQyAqcGNjX2F2ZXJhZ2U7CitzdHJ1Y3QgY291bnRlcnMgKmNudF9ldmVuOworc3RydWN0IGNvdW50ZXJzICpjbnRfb2RkOworc3RydWN0IGNvdW50ZXJzICpjbnRfZGVsdGE7CitzdHJ1Y3QgY291bnRlcnMgKmNudF9hdmVyYWdlOwogc3RydWN0IHRpbWV2YWwgdHZfZXZlbjsKIHN0cnVjdCB0aW1ldmFsIHR2X29kZDsKIHN0cnVjdCB0aW1ldmFsIHR2X2RlbHRhOwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJcmV0dXJuIG1zcjsKIH0KIAotdm9pZCBwcmludF9oZWFkZXIoKQordm9pZCBwcmludF9oZWFkZXIodm9pZCkKIHsKIAlpZiAoc2hvd19wa2cpCiAJCWZwcmludGYoc3RkZXJyLCAicGtnICIpOwpAQCAtMTYwLDM5ICsxNjAsMzkgQEAKIAlwdXRjKCdcbicsIHN0ZGVycik7CiB9CiAKLXZvaWQgZHVtcF9wY2MoUENDICpwY2MpCit2b2lkIGR1bXBfY250KHN0cnVjdCBjb3VudGVycyAqY250KQogewotCWZwcmludGYoc3RkZXJyLCAicGFja2FnZTogJWQgIiwgcGNjLT5wa2cpOwotCWZwcmludGYoc3RkZXJyLCAiY29yZTo6ICVkICIsIHBjYy0+Y29yZSk7Ci0JZnByaW50ZihzdGRlcnIsICJDUFU6ICVkICIsIHBjYy0+Y3B1KTsKLQlmcHJpbnRmKHN0ZGVyciwgIlRTQzogJTAxNmxsWFxuIiwgcGNjLT50c2MpOwotCWZwcmludGYoc3RkZXJyLCAiYzM6ICUwMTZsbFhcbiIsIHBjYy0+YzMpOwotCWZwcmludGYoc3RkZXJyLCAiYzY6ICUwMTZsbFhcbiIsIHBjYy0+YzYpOwotCWZwcmludGYoc3RkZXJyLCAiYzc6ICUwMTZsbFhcbiIsIHBjYy0+YzcpOwotCWZwcmludGYoc3RkZXJyLCAiYXBlcmY6ICUwMTZsbFhcbiIsIHBjYy0+YXBlcmYpOwotCWZwcmludGYoc3RkZXJyLCAicGMyOiAlMDE2bGxYXG4iLCBwY2MtPnBjMik7Ci0JZnByaW50ZihzdGRlcnIsICJwYzM6ICUwMTZsbFhcbiIsIHBjYy0+cGMzKTsKLQlmcHJpbnRmKHN0ZGVyciwgInBjNjogJTAxNmxsWFxuIiwgcGNjLT5wYzYpOwotCWZwcmludGYoc3RkZXJyLCAicGM3OiAlMDE2bGxYXG4iLCBwY2MtPnBjNyk7Ci0JZnByaW50ZihzdGRlcnIsICJtc3IweCV4OiAlMDE2bGxYXG4iLCBleHRyYV9tc3Jfb2Zmc2V0LCBwY2MtPmV4dHJhX21zcik7CisJZnByaW50ZihzdGRlcnIsICJwYWNrYWdlOiAlZCAiLCBjbnQtPnBrZyk7CisJZnByaW50ZihzdGRlcnIsICJjb3JlOjogJWQgIiwgY250LT5jb3JlKTsKKwlmcHJpbnRmKHN0ZGVyciwgIkNQVTogJWQgIiwgY250LT5jcHUpOworCWZwcmludGYoc3RkZXJyLCAiVFNDOiAlMDE2bGxYXG4iLCBjbnQtPnRzYyk7CisJZnByaW50ZihzdGRlcnIsICJjMzogJTAxNmxsWFxuIiwgY250LT5jMyk7CisJZnByaW50ZihzdGRlcnIsICJjNjogJTAxNmxsWFxuIiwgY250LT5jNik7CisJZnByaW50ZihzdGRlcnIsICJjNzogJTAxNmxsWFxuIiwgY250LT5jNyk7CisJZnByaW50ZihzdGRlcnIsICJhcGVyZjogJTAxNmxsWFxuIiwgY250LT5hcGVyZik7CisJZnByaW50ZihzdGRlcnIsICJwYzI6ICUwMTZsbFhcbiIsIGNudC0+cGMyKTsKKwlmcHJpbnRmKHN0ZGVyciwgInBjMzogJTAxNmxsWFxuIiwgY250LT5wYzMpOworCWZwcmludGYoc3RkZXJyLCAicGM2OiAlMDE2bGxYXG4iLCBjbnQtPnBjNik7CisJZnByaW50ZihzdGRlcnIsICJwYzc6ICUwMTZsbFhcbiIsIGNudC0+cGM3KTsKKwlmcHJpbnRmKHN0ZGVyciwgIm1zcjB4JXg6ICUwMTZsbFhcbiIsIGV4dHJhX21zcl9vZmZzZXQsIGNudC0+ZXh0cmFfbXNyKTsKIH0KIAotdm9pZCBkdW1wX2xpc3QoUENDICpwY2MpCit2b2lkIGR1bXBfbGlzdChzdHJ1Y3QgY291bnRlcnMgKmNudCkKIHsKLQlwcmludGYoImR1bXBfbGlzdCAweCVwXG4iLCBwY2MpOworCXByaW50ZigiZHVtcF9saXN0IDB4JXBcbiIsIGNudCk7CiAKLQlmb3IgKDsgcGNjOyBwY2MgPSBwY2MtPm5leHQpCi0JCWR1bXBfcGNjKHBjYyk7CisJZm9yICg7IGNudDsgY250ID0gY250LT5uZXh0KQorCQlkdW1wX2NudChjbnQpOwogfQogCi12b2lkIHByaW50X3BjYyhQQ0MgKnApCit2b2lkIHByaW50X2NudChzdHJ1Y3QgY291bnRlcnMgKnApCiB7CiAJZG91YmxlIGludGVydmFsX2Zsb2F0OwogCiAJaW50ZXJ2YWxfZmxvYXQgPSB0dl9kZWx0YS50dl9zZWMgKyB0dl9kZWx0YS50dl91c2VjLzEwMDAwMDAuMDsKIAogCS8qIHRvcG9sb2d5IGNvbHVtbnMsIHByaW50IGJsYW5rcyBvbiAxc3QgKGF2ZXJhZ2UpIGxpbmUgKi8KLQlpZiAocCA9PSBwY2NfYXZlcmFnZSkgeworCWlmIChwID09IGNudF9hdmVyYWdlKSB7CiAJCWlmIChzaG93X3BrZykKIAkJCWZwcmludGYoc3RkZXJyLCAiICAgICIpOwogCQlpZiAoc2hvd19jb3JlKQpAQCAtMjYyLDI0ICsyNjIsMjQgQEAKIAlwdXRjKCdcbicsIHN0ZGVycik7CiB9CiAKLXZvaWQgcHJpbnRfY291bnRlcnMoUENDICpjbnQpCit2b2lkIHByaW50X2NvdW50ZXJzKHN0cnVjdCBjb3VudGVycyAqY291bnRlcnMpCiB7Ci0JUENDICpwY2M7CisJc3RydWN0IGNvdW50ZXJzICpjbnQ7CiAKIAlwcmludF9oZWFkZXIoKTsKIAogCWlmIChudW1fY3B1cyA+IDEpCi0JCXByaW50X3BjYyhwY2NfYXZlcmFnZSk7CisJCXByaW50X2NudChjbnRfYXZlcmFnZSk7CiAKLQlmb3IgKHBjYyA9IGNudDsgcGNjICE9IE5VTEw7IHBjYyA9IHBjYy0+bmV4dCkKLQkJcHJpbnRfcGNjKHBjYyk7CisJZm9yIChjbnQgPSBjb3VudGVyczsgY250ICE9IE5VTEw7IGNudCA9IGNudC0+bmV4dCkKKwkJcHJpbnRfY250KGNudCk7CiAKIH0KIAogI2RlZmluZSBTVUJUUkFDVF9DT1VOVEVSKGFmdGVyLCBiZWZvcmUsIGRlbHRhKSAoZGVsdGEgPSAoYWZ0ZXIgLSBiZWZvcmUpLCAoYmVmb3JlID4gYWZ0ZXIpKQogCi0KLWludCBjb21wdXRlX2RlbHRhKFBDQyAqYWZ0ZXIsIFBDQyAqYmVmb3JlLCBQQ0MgKmRlbHRhKQoraW50IGNvbXB1dGVfZGVsdGEoc3RydWN0IGNvdW50ZXJzICphZnRlciwKKwlzdHJ1Y3QgY291bnRlcnMgKmJlZm9yZSwgc3RydWN0IGNvdW50ZXJzICpkZWx0YSkKIHsKIAlpbnQgZXJyb3JzID0gMDsKIAlpbnQgcGVyZl9lcnIgPSAwOwpAQCAtMzkxLDIwICszOTEsMjAgQEAKIAkJZGVsdGEtPmV4dHJhX21zciA9IGFmdGVyLT5leHRyYV9tc3I7CiAJCWlmIChlcnJvcnMpIHsKIAkJCWZwcmludGYoc3RkZXJyLCAiRVJST1IgY3B1JWQgYmVmb3JlOlxuIiwgYmVmb3JlLT5jcHUpOwotCQkJZHVtcF9wY2MoYmVmb3JlKTsKKwkJCWR1bXBfY250KGJlZm9yZSk7CiAJCQlmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGNwdSVkIGFmdGVyOlxuIiwgYmVmb3JlLT5jcHUpOwotCQkJZHVtcF9wY2MoYWZ0ZXIpOworCQkJZHVtcF9jbnQoYWZ0ZXIpOwogCQkJZXJyb3JzID0gMDsKIAkJfQogCX0KIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBjb21wdXRlX2F2ZXJhZ2UoUENDICpkZWx0YSwgUENDICphdmcpCit2b2lkIGNvbXB1dGVfYXZlcmFnZShzdHJ1Y3QgY291bnRlcnMgKmRlbHRhLCBzdHJ1Y3QgY291bnRlcnMgKmF2ZykKIHsKLQlQQ0MgKnN1bTsKKwlzdHJ1Y3QgY291bnRlcnMgKnN1bTsKIAotCXN1bSA9IGNhbGxvYygxLCBzaXplb2YoUENDKSk7CisJc3VtID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgY291bnRlcnMpKTsKIAlpZiAoc3VtID09IE5VTEwpIHsKIAkJcGVycm9yKCJjYWxsb2Mgc3VtIik7CiAJCWV4aXQoMSk7CkBAIC00MzgsMzUgKzQzOCwzNCBAQAogCWZyZWUoc3VtKTsKIH0KIAotdm9pZCBnZXRfY291bnRlcnMoUENDICpwY2MpCit2b2lkIGdldF9jb3VudGVycyhzdHJ1Y3QgY291bnRlcnMgKmNudCkKIHsKLQlmb3IgKCA7IHBjYzsgcGNjID0gcGNjLT5uZXh0KSB7Ci0JCXBjYy0+dHNjID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX1RTQyk7CisJZm9yICggOyBjbnQ7IGNudCA9IGNudC0+bmV4dCkgeworCQljbnQtPnRzYyA9IGdldF9tc3IoY250LT5jcHUsIE1TUl9UU0MpOwogCQlpZiAoZG9fbmhtX2NzdGF0ZXMpCi0JCQlwY2MtPmMzID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX0NPUkVfQzNfUkVTSURFTkNZKTsKKwkJCWNudC0+YzMgPSBnZXRfbXNyKGNudC0+Y3B1LCBNU1JfQ09SRV9DM19SRVNJREVOQ1kpOwogCQlpZiAoZG9fbmhtX2NzdGF0ZXMpCi0JCQlwY2MtPmM2ID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX0NPUkVfQzZfUkVTSURFTkNZKTsKKwkJCWNudC0+YzYgPSBnZXRfbXNyKGNudC0+Y3B1LCBNU1JfQ09SRV9DNl9SRVNJREVOQ1kpOwogCQlpZiAoZG9fc25iX2NzdGF0ZXMpCi0JCQlwY2MtPmM3ID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX0NPUkVfQzdfUkVTSURFTkNZKTsKKwkJCWNudC0+YzcgPSBnZXRfbXNyKGNudC0+Y3B1LCBNU1JfQ09SRV9DN19SRVNJREVOQ1kpOwogCQlpZiAoaGFzX2FwZXJmKQotCQkJcGNjLT5hcGVyZiA9IGdldF9tc3IocGNjLT5jcHUsIE1TUl9BUEVSRik7CisJCQljbnQtPmFwZXJmID0gZ2V0X21zcihjbnQtPmNwdSwgTVNSX0FQRVJGKTsKIAkJaWYgKGhhc19hcGVyZikKLQkJCXBjYy0+bXBlcmYgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfTVBFUkYpOworCQkJY250LT5tcGVyZiA9IGdldF9tc3IoY250LT5jcHUsIE1TUl9NUEVSRik7CiAJCWlmIChkb19zbmJfY3N0YXRlcykKLQkJCXBjYy0+cGMyID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX1BLR19DMl9SRVNJREVOQ1kpOworCQkJY250LT5wYzIgPSBnZXRfbXNyKGNudC0+Y3B1LCBNU1JfUEtHX0MyX1JFU0lERU5DWSk7CiAJCWlmIChkb19uaG1fY3N0YXRlcykKLQkJCXBjYy0+cGMzID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX1BLR19DM19SRVNJREVOQ1kpOworCQkJY250LT5wYzMgPSBnZXRfbXNyKGNudC0+Y3B1LCBNU1JfUEtHX0MzX1JFU0lERU5DWSk7CiAJCWlmIChkb19uaG1fY3N0YXRlcykKLQkJCXBjYy0+cGM2ID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX1BLR19DNl9SRVNJREVOQ1kpOworCQkJY250LT5wYzYgPSBnZXRfbXNyKGNudC0+Y3B1LCBNU1JfUEtHX0M2X1JFU0lERU5DWSk7CiAJCWlmIChkb19zbmJfY3N0YXRlcykKLQkJCXBjYy0+cGM3ID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX1BLR19DN19SRVNJREVOQ1kpOworCQkJY250LT5wYzcgPSBnZXRfbXNyKGNudC0+Y3B1LCBNU1JfUEtHX0M3X1JFU0lERU5DWSk7CiAJCWlmIChleHRyYV9tc3Jfb2Zmc2V0KQotCQkJcGNjLT5leHRyYV9tc3IgPSBnZXRfbXNyKHBjYy0+Y3B1LCBleHRyYV9tc3Jfb2Zmc2V0KTsKKwkJCWNudC0+ZXh0cmFfbXNyID0gZ2V0X21zcihjbnQtPmNwdSwgZXh0cmFfbXNyX29mZnNldCk7CiAJfQogfQogCi0KLXZvaWQgcHJpbnRfbmVoYWxlbV9pbmZvKCkKK3ZvaWQgcHJpbnRfbmVoYWxlbV9pbmZvKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIG1zcjsKIAl1bnNpZ25lZCBpbnQgcmF0aW87CkBAIC01MTQsMzggKzUxMywzOCBAQAogCiB9CiAKLXZvaWQgZnJlZV9jb3VudGVyX2xpc3QoUENDICpsaXN0KQordm9pZCBmcmVlX2NvdW50ZXJfbGlzdChzdHJ1Y3QgY291bnRlcnMgKmxpc3QpCiB7Ci0JUENDICpwOworCXN0cnVjdCBjb3VudGVycyAqcDsKIAogCWZvciAocCA9IGxpc3Q7IHA7ICkgewotCQlQQ0MgKmZyZWVfbWU7CisJCXN0cnVjdCBjb3VudGVycyAqZnJlZV9tZTsKIAogCQlmcmVlX21lID0gcDsKIAkJcCA9IHAtPm5leHQ7CiAJCWZyZWUoZnJlZV9tZSk7CiAJfQotCXJldHVybjsKIH0KIAogdm9pZCBmcmVlX2FsbF9jb3VudGVycyh2b2lkKQogewotCWZyZWVfY291bnRlcl9saXN0KHBjY19ldmVuKTsKLQlwY2NfZXZlbiA9IE5VTEw7CisJZnJlZV9jb3VudGVyX2xpc3QoY250X2V2ZW4pOworCWNudF9ldmVuID0gTlVMTDsKIAotCWZyZWVfY291bnRlcl9saXN0KHBjY19vZGQpOwotCXBjY19vZGQgPSBOVUxMOworCWZyZWVfY291bnRlcl9saXN0KGNudF9vZGQpOworCWNudF9vZGQgPSBOVUxMOwogCi0JZnJlZV9jb3VudGVyX2xpc3QocGNjX2RlbHRhKTsKLQlwY2NfZGVsdGEgPSBOVUxMOworCWZyZWVfY291bnRlcl9saXN0KGNudF9kZWx0YSk7CisJY250X2RlbHRhID0gTlVMTDsKIAotCWZyZWVfY291bnRlcl9saXN0KHBjY19hdmVyYWdlKTsKLQlwY2NfYXZlcmFnZSA9IE5VTEw7CisJZnJlZV9jb3VudGVyX2xpc3QoY250X2F2ZXJhZ2UpOworCWNudF9hdmVyYWdlID0gTlVMTDsKIH0KIAotdm9pZCBpbnNlcnRfY3B1X2NvdW50ZXJzKFBDQyAqKmxpc3QsIFBDQyAqbmV3KQordm9pZCBpbnNlcnRfY291bnRlcnMoc3RydWN0IGNvdW50ZXJzICoqbGlzdCwKKwlzdHJ1Y3QgY291bnRlcnMgKm5ldykKIHsKLQlQQ0MgKnByZXY7CisJc3RydWN0IGNvdW50ZXJzICpwcmV2OwogCiAJLyoKIAkgKiBsaXN0IHdhcyBlbXB0eQpAQCAtNTk0LDE4ICs1OTMsMTYgQEAKIAkgKi8KIAluZXctPm5leHQgPSBwcmV2LT5uZXh0OwogCXByZXYtPm5leHQgPSBuZXc7Ci0KLQlyZXR1cm47CiB9CiAKLXZvaWQgYWxsb2NfbmV3X2NwdV9jb3VudGVycyhpbnQgcGtnLCBpbnQgY29yZSwgaW50IGNwdSkKK3ZvaWQgYWxsb2NfbmV3X2NvdW50ZXJzKGludCBwa2csIGludCBjb3JlLCBpbnQgY3B1KQogewotCVBDQyAqbmV3OworCXN0cnVjdCBjb3VudGVycyAqbmV3OwogCiAJaWYgKHZlcmJvc2UgPiAxKQogCQlwcmludGYoInBrZyVkIGNvcmUlZCwgY3B1JWRcbiIsIHBrZywgY29yZSwgY3B1KTsKIAotCW5ldyA9IChQQ0MgKiljYWxsb2MoMSwgc2l6ZW9mKFBDQykpOworCW5ldyA9IChzdHJ1Y3QgY291bnRlcnMgKiljYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBjb3VudGVycykpOwogCWlmIChuZXcgPT0gTlVMTCkgewogCQlwZXJyb3IoImNhbGxvYyIpOwogCQlleGl0KDEpOwpAQCAtNjEzLDkgKzYxMCwxMCBAQAogCW5ldy0+cGtnID0gcGtnOwogCW5ldy0+Y29yZSA9IGNvcmU7CiAJbmV3LT5jcHUgPSBjcHU7Ci0JaW5zZXJ0X2NwdV9jb3VudGVycygmcGNjX29kZCwgbmV3KTsKKwlpbnNlcnRfY291bnRlcnMoJmNudF9vZGQsIG5ldyk7CiAKLQluZXcgPSAoUENDICopY2FsbG9jKDEsIHNpemVvZihQQ0MpKTsKKwluZXcgPSAoc3RydWN0IGNvdW50ZXJzICopY2FsbG9jKDEsCisJCXNpemVvZihzdHJ1Y3QgY291bnRlcnMpKTsKIAlpZiAobmV3ID09IE5VTEwpIHsKIAkJcGVycm9yKCJjYWxsb2MiKTsKIAkJZXhpdCgxKTsKQEAgLTYyMyw5ICs2MjEsOSBAQAogCW5ldy0+cGtnID0gcGtnOwogCW5ldy0+Y29yZSA9IGNvcmU7CiAJbmV3LT5jcHUgPSBjcHU7Ci0JaW5zZXJ0X2NwdV9jb3VudGVycygmcGNjX2V2ZW4sIG5ldyk7CisJaW5zZXJ0X2NvdW50ZXJzKCZjbnRfZXZlbiwgbmV3KTsKIAotCW5ldyA9IChQQ0MgKiljYWxsb2MoMSwgc2l6ZW9mKFBDQykpOworCW5ldyA9IChzdHJ1Y3QgY291bnRlcnMgKiljYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBjb3VudGVycykpOwogCWlmIChuZXcgPT0gTlVMTCkgewogCQlwZXJyb3IoImNhbGxvYyIpOwogCQlleGl0KDEpOwpAQCAtNjMzLDkgKzYzMSw5IEBACiAJbmV3LT5wa2cgPSBwa2c7CiAJbmV3LT5jb3JlID0gY29yZTsKIAluZXctPmNwdSA9IGNwdTsKLQlpbnNlcnRfY3B1X2NvdW50ZXJzKCZwY2NfZGVsdGEsIG5ldyk7CisJaW5zZXJ0X2NvdW50ZXJzKCZjbnRfZGVsdGEsIG5ldyk7CiAKLQluZXcgPSAoUENDICopY2FsbG9jKDEsIHNpemVvZihQQ0MpKTsKKwluZXcgPSAoc3RydWN0IGNvdW50ZXJzICopY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgY291bnRlcnMpKTsKIAlpZiAobmV3ID09IE5VTEwpIHsKIAkJcGVycm9yKCJjYWxsb2MiKTsKIAkJZXhpdCgxKTsKQEAgLTY0Myw3ICs2NDEsNyBAQAogCW5ldy0+cGtnID0gcGtnOwogCW5ldy0+Y29yZSA9IGNvcmU7CiAJbmV3LT5jcHUgPSBjcHU7Ci0JcGNjX2F2ZXJhZ2UgPSBuZXc7CisJY250X2F2ZXJhZ2UgPSBuZXc7CiB9CiAKIGludCBnZXRfcGh5c2ljYWxfcGFja2FnZV9pZChpbnQgY3B1KQpAQCAtNzE5LDcgKzcxNyw3IEBACiB7CiAJcHJpbnRmKCJ0dXJib3N0YXQ6IHRvcG9sb2d5IGNoYW5nZWQsIHJlLWluaXRpYWxpemluZy5cbiIpOwogCWZyZWVfYWxsX2NvdW50ZXJzKCk7Ci0JbnVtX2NwdXMgPSBmb3JfYWxsX2NwdXMoYWxsb2NfbmV3X2NwdV9jb3VudGVycyk7CisJbnVtX2NwdXMgPSBmb3JfYWxsX2NwdXMoYWxsb2NfbmV3X2NvdW50ZXJzKTsKIAluZWVkX3JlaW5pdGlhbGl6ZSA9IDA7CiAJcHJpbnRmKCJudW1fY3B1cyBpcyBub3cgJWRcbiIsIG51bV9jcHVzKTsKIH0KQEAgLTcyOCw3ICs3MjYsNyBAQAogLyoKICAqIGNoZWNrIHRvIHNlZSBpZiBhIGNwdSBjYW1lIG9uLWxpbmUKICAqLwotdm9pZCB2ZXJpZnlfbnVtX2NwdXMoKQordm9pZCB2ZXJpZnlfbnVtX2NwdXModm9pZCkKIHsKIAlpbnQgbmV3X251bV9jcHVzOwogCkBAIC03NDAsMTQgKzczOCwxMiBAQAogCQkJCW51bV9jcHVzLCBuZXdfbnVtX2NwdXMpOwogCQluZWVkX3JlaW5pdGlhbGl6ZSA9IDE7CiAJfQotCi0JcmV0dXJuOwogfQogCiB2b2lkIHR1cmJvc3RhdF9sb29wKCkKIHsKIHJlc3RhcnQ6Ci0JZ2V0X2NvdW50ZXJzKHBjY19ldmVuKTsKKwlnZXRfY291bnRlcnMoY250X2V2ZW4pOwogCWdldHRpbWVvZmRheSgmdHZfZXZlbiwgKHN0cnVjdCB0aW1lem9uZSAqKU5VTEwpOwogCiAJd2hpbGUgKDEpIHsKQEAgLTc1NywyNCArNzUzLDI0IEBACiAJCQlnb3RvIHJlc3RhcnQ7CiAJCX0KIAkJc2xlZXAoaW50ZXJ2YWxfc2VjKTsKLQkJZ2V0X2NvdW50ZXJzKHBjY19vZGQpOworCQlnZXRfY291bnRlcnMoY250X29kZCk7CiAJCWdldHRpbWVvZmRheSgmdHZfb2RkLCAoc3RydWN0IHRpbWV6b25lICopTlVMTCk7CiAKLQkJY29tcHV0ZV9kZWx0YShwY2Nfb2RkLCBwY2NfZXZlbiwgcGNjX2RlbHRhKTsKKwkJY29tcHV0ZV9kZWx0YShjbnRfb2RkLCBjbnRfZXZlbiwgY250X2RlbHRhKTsKIAkJdGltZXJzdWIoJnR2X29kZCwgJnR2X2V2ZW4sICZ0dl9kZWx0YSk7Ci0JCWNvbXB1dGVfYXZlcmFnZShwY2NfZGVsdGEsIHBjY19hdmVyYWdlKTsKLQkJcHJpbnRfY291bnRlcnMocGNjX2RlbHRhKTsKKwkJY29tcHV0ZV9hdmVyYWdlKGNudF9kZWx0YSwgY250X2F2ZXJhZ2UpOworCQlwcmludF9jb3VudGVycyhjbnRfZGVsdGEpOwogCQlpZiAobmVlZF9yZWluaXRpYWxpemUpIHsKIAkJCXJlX2luaXRpYWxpemUoKTsKIAkJCWdvdG8gcmVzdGFydDsKIAkJfQogCQlzbGVlcChpbnRlcnZhbF9zZWMpOwotCQlnZXRfY291bnRlcnMocGNjX2V2ZW4pOworCQlnZXRfY291bnRlcnMoY250X2V2ZW4pOwogCQlnZXR0aW1lb2ZkYXkoJnR2X2V2ZW4sIChzdHJ1Y3QgdGltZXpvbmUgKilOVUxMKTsKLQkJY29tcHV0ZV9kZWx0YShwY2NfZXZlbiwgcGNjX29kZCwgcGNjX2RlbHRhKTsKKwkJY29tcHV0ZV9kZWx0YShjbnRfZXZlbiwgY250X29kZCwgY250X2RlbHRhKTsKIAkJdGltZXJzdWIoJnR2X2V2ZW4sICZ0dl9vZGQsICZ0dl9kZWx0YSk7Ci0JCWNvbXB1dGVfYXZlcmFnZShwY2NfZGVsdGEsIHBjY19hdmVyYWdlKTsKLQkJcHJpbnRfY291bnRlcnMocGNjX2RlbHRhKTsKKwkJY29tcHV0ZV9hdmVyYWdlKGNudF9kZWx0YSwgY250X2F2ZXJhZ2UpOworCQlwcmludF9jb3VudGVycyhjbnRfZGVsdGEpOwogCX0KIH0KIApAQCAtODkyLDcgKzg4OCw3IEBACiAJICogdGhpcyBjaGVjayBpcyB2YWxpZCBmb3IgYm90aCBJbnRlbCBhbmQgQU1ECiAJICovCiAJYXNtKCJjcHVpZCIgOiAiPWEiIChlYXgpLCAiPWIiIChlYngpLCAiPWMiIChlY3gpLCAiPWQiIChlZHgpIDogImEiICgweDgwMDAwMDA3KSk7Ci0JaGFzX2ludmFyaWFudF90c2MgPSBlZHggJiYgKDEgPDwgOCk7CisJaGFzX2ludmFyaWFudF90c2MgPSBlZHggJiAoMSA8PCA4KTsKIAogCWlmICghaGFzX2ludmFyaWFudF90c2MpIHsKIAkJZnByaW50ZihzdGRlcnIsICJObyBpbnZhcmlhbnQgVFNDXG4iKTsKQEAgLTkwNSw3ICs5MDEsNyBAQAogCSAqLwogCiAJYXNtKCJjcHVpZCIgOiAiPWEiIChlYXgpLCAiPWIiIChlYngpLCAiPWMiIChlY3gpLCAiPWQiIChlZHgpIDogImEiICgweDYpKTsKLQloYXNfYXBlcmYgPSBlY3ggJiYgKDEgPDwgMCk7CisJaGFzX2FwZXJmID0gZWN4ICYgKDEgPDwgMCk7CiAJaWYgKCFoYXNfYXBlcmYpIHsKIAkJZnByaW50ZihzdGRlcnIsICJObyBBUEVSRiBNU1JcbiIpOwogCQlleGl0KDEpOwpAQCAtOTUyLDcgKzk0OCw3IEBACiAJY2hlY2tfZGV2X21zcigpOwogCWNoZWNrX3N1cGVyX3VzZXIoKTsKIAotCW51bV9jcHVzID0gZm9yX2FsbF9jcHVzKGFsbG9jX25ld19jcHVfY291bnRlcnMpOworCW51bV9jcHVzID0gZm9yX2FsbF9jcHVzKGFsbG9jX25ld19jb3VudGVycyk7CiAKIAlpZiAodmVyYm9zZSkKIAkJcHJpbnRfbmVoYWxlbV9pbmZvKCk7CkBAIC05NjIsNyArOTU4LDcgQEAKIHsKIAlpbnQgcmV0dmFsOwogCXBpZF90IGNoaWxkX3BpZDsKLQlnZXRfY291bnRlcnMocGNjX2V2ZW4pOworCWdldF9jb3VudGVycyhjbnRfZXZlbik7CiAJZ2V0dGltZW9mZGF5KCZ0dl9ldmVuLCAoc3RydWN0IHRpbWV6b25lICopTlVMTCk7CiAKIAljaGlsZF9waWQgPSBmb3JrKCk7CkBAIC05ODUsMTQgKzk4MSwxNCBAQAogCQkJZXhpdCgxKTsKIAkJfQogCX0KLQlnZXRfY291bnRlcnMocGNjX29kZCk7CisJZ2V0X2NvdW50ZXJzKGNudF9vZGQpOwogCWdldHRpbWVvZmRheSgmdHZfb2RkLCAoc3RydWN0IHRpbWV6b25lICopTlVMTCk7Ci0JcmV0dmFsID0gY29tcHV0ZV9kZWx0YShwY2Nfb2RkLCBwY2NfZXZlbiwgcGNjX2RlbHRhKTsKKwlyZXR2YWwgPSBjb21wdXRlX2RlbHRhKGNudF9vZGQsIGNudF9ldmVuLCBjbnRfZGVsdGEpOwogCiAJdGltZXJzdWIoJnR2X29kZCwgJnR2X2V2ZW4sICZ0dl9kZWx0YSk7Ci0JY29tcHV0ZV9hdmVyYWdlKHBjY19kZWx0YSwgcGNjX2F2ZXJhZ2UpOworCWNvbXB1dGVfYXZlcmFnZShjbnRfZGVsdGEsIGNudF9hdmVyYWdlKTsKIAlpZiAoIXJldHZhbCkKLQkJcHJpbnRfY291bnRlcnMocGNjX2RlbHRhKTsKKwkJcHJpbnRfY291bnRlcnMoY250X2RlbHRhKTsKIAogCWZwcmludGYoc3RkZXJyLCAiJS42ZiBzZWNcbiIsIHR2X2RlbHRhLnR2X3NlYyArIHR2X2RlbHRhLnR2X3VzZWMvMTAwMDAwMC4wKTs7CiAKZGlmZiAtLWdpdCBhL3Vzci9LY29uZmlnIGIvdXNyL0tjb25maWcKaW5kZXggNDc4MGRlYS4uNjViODQ1YmQgMTAwNjQ0Ci0tLSBhL3Vzci9LY29uZmlnCisrKyBiL3Vzci9LY29uZmlnCkBAIC00Niw3ICs0Niw3IEBACiAJICBJZiB5b3UgYXJlIG5vdCBzdXJlLCBsZWF2ZSBpdCBzZXQgdG8gIjAiLgogCiBjb25maWcgUkRfR1pJUAotCWJvb2wgIlN1cHBvcnQgaW5pdGlhbCByYW1kaXNrcyBjb21wcmVzc2VkIHVzaW5nIGd6aXAiIGlmIEVNQkVEREVECisJYm9vbCAiU3VwcG9ydCBpbml0aWFsIHJhbWRpc2tzIGNvbXByZXNzZWQgdXNpbmcgZ3ppcCIgaWYgRVhQRVJUCiAJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiBCTEtfREVWX0lOSVRSRAogCXNlbGVjdCBERUNPTVBSRVNTX0daSVAKQEAgLTU1LDggKzU1LDggQEAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBSRF9CWklQMgotCWJvb2wgIlN1cHBvcnQgaW5pdGlhbCByYW1kaXNrcyBjb21wcmVzc2VkIHVzaW5nIGJ6aXAyIiBpZiBFTUJFRERFRAotCWRlZmF1bHQgIUVNQkVEREVECisJYm9vbCAiU3VwcG9ydCBpbml0aWFsIHJhbWRpc2tzIGNvbXByZXNzZWQgdXNpbmcgYnppcDIiIGlmIEVYUEVSVAorCWRlZmF1bHQgIUVYUEVSVAogCWRlcGVuZHMgb24gQkxLX0RFVl9JTklUUkQKIAlzZWxlY3QgREVDT01QUkVTU19CWklQMgogCWhlbHAKQEAgLTY0LDggKzY0LDggQEAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBSRF9MWk1BCi0JYm9vbCAiU3VwcG9ydCBpbml0aWFsIHJhbWRpc2tzIGNvbXByZXNzZWQgdXNpbmcgTFpNQSIgaWYgRU1CRURERUQKLQlkZWZhdWx0ICFFTUJFRERFRAorCWJvb2wgIlN1cHBvcnQgaW5pdGlhbCByYW1kaXNrcyBjb21wcmVzc2VkIHVzaW5nIExaTUEiIGlmIEVYUEVSVAorCWRlZmF1bHQgIUVYUEVSVAogCWRlcGVuZHMgb24gQkxLX0RFVl9JTklUUkQKIAlzZWxlY3QgREVDT01QUkVTU19MWk1BCiAJaGVscApAQCAtNzMsOCArNzMsOCBAQAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIFJEX1haCi0JYm9vbCAiU3VwcG9ydCBpbml0aWFsIHJhbWRpc2tzIGNvbXByZXNzZWQgdXNpbmcgWFoiIGlmIEVNQkVEREVECi0JZGVmYXVsdCAhRU1CRURERUQKKwlib29sICJTdXBwb3J0IGluaXRpYWwgcmFtZGlza3MgY29tcHJlc3NlZCB1c2luZyBYWiIgaWYgRVhQRVJUCisJZGVmYXVsdCAhRVhQRVJUCiAJZGVwZW5kcyBvbiBCTEtfREVWX0lOSVRSRAogCXNlbGVjdCBERUNPTVBSRVNTX1haCiAJaGVscApAQCAtODIsOCArODIsOCBAQAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIFJEX0xaTwotCWJvb2wgIlN1cHBvcnQgaW5pdGlhbCByYW1kaXNrcyBjb21wcmVzc2VkIHVzaW5nIExaTyIgaWYgRU1CRURERUQKLQlkZWZhdWx0ICFFTUJFRERFRAorCWJvb2wgIlN1cHBvcnQgaW5pdGlhbCByYW1kaXNrcyBjb21wcmVzc2VkIHVzaW5nIExaTyIgaWYgRVhQRVJUCisJZGVmYXVsdCAhRVhQRVJUCiAJZGVwZW5kcyBvbiBCTEtfREVWX0lOSVRSRAogCXNlbGVjdCBERUNPTVBSRVNTX0xaTwogCWhlbHAK